mirror of
https://github.com/SteamDeckHomebrew/decky-frontend-lib.git
synced 2026-05-21 10:29:00 +02:00
Compare commits
105 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18ce1ad790 | ||
|
|
5a074b5bb6 | ||
|
|
d3b87b26c5 | ||
|
|
b64dd9f723 | ||
|
|
82214fef4c | ||
|
|
e559a43af9 | ||
|
|
c53d7f8448 | ||
|
|
68a46263a4 | ||
|
|
56e7b2c492 | ||
|
|
1282636b0b | ||
|
|
2343274a5b | ||
|
|
f965c05c27 | ||
|
|
f8c8ae7c29 | ||
|
|
3085efd439 | ||
|
|
db8d91a7ff | ||
|
|
2091daaeac | ||
|
|
edcc43a6ee | ||
|
|
9723854ddc | ||
|
|
7501817b76 | ||
|
|
4affd4aaec | ||
|
|
6b3db72a14 | ||
|
|
58b69f0d6c | ||
|
|
c62102e993 | ||
|
|
2e66e5a555 | ||
|
|
ce525318d8 | ||
|
|
aac2d520a6 | ||
|
|
a656f4e57f | ||
|
|
0b50f2cf0b | ||
|
|
e48c7bbadd | ||
|
|
727fcc8186 | ||
|
|
dc196d53f5 | ||
|
|
f0379e5d19 | ||
|
|
fd94842647 | ||
|
|
ef6be8c6ec | ||
|
|
767dc2fcee | ||
|
|
52305987c5 | ||
|
|
6f14da152a | ||
|
|
bb291b211c | ||
|
|
88f245d476 | ||
|
|
5bc78df918 | ||
|
|
c586afb97d | ||
|
|
d9150c2556 | ||
|
|
cd0635e94f | ||
|
|
443c7850d7 | ||
|
|
d24136ecb6 | ||
|
|
55507446cc | ||
|
|
925ea8c3ce | ||
|
|
14c5210931 | ||
|
|
cc29ddaf57 | ||
|
|
1e8979b641 | ||
|
|
7ba1229a4e | ||
|
|
4c2a715324 | ||
|
|
678ba216f1 | ||
|
|
07d15f5dca | ||
|
|
c84a091469 | ||
|
|
47fd13692f | ||
|
|
2ec9519b7d | ||
|
|
24606190e0 | ||
|
|
ed98d14b37 | ||
|
|
b882612dfa | ||
|
|
32291620b4 | ||
|
|
9b368c5f11 | ||
|
|
e167ef5a13 | ||
|
|
2f3df00967 | ||
|
|
215156d316 | ||
|
|
47d75db690 | ||
|
|
82768e0415 | ||
|
|
e44187fe4b | ||
|
|
72af32436e | ||
|
|
e1f64a38de | ||
|
|
82ed48761d | ||
|
|
a81c342d2a | ||
|
|
68d630262d | ||
|
|
0bb8c67cfa | ||
|
|
edd29e6c5a | ||
|
|
0ed054fae9 | ||
|
|
0d912eac88 | ||
|
|
789e16380f | ||
|
|
88b50bbc1e | ||
|
|
75f35882f2 | ||
|
|
23af4c0bb4 | ||
|
|
a074277bb5 | ||
|
|
9c72a55aff | ||
|
|
92ffc76075 | ||
|
|
fb49d64fd3 | ||
|
|
cfef1dc320 | ||
|
|
f6b4d6b254 | ||
|
|
0010a1fcee | ||
|
|
28cbc1cfe1 | ||
|
|
fe75dfb5f4 | ||
|
|
91c386a6cc | ||
|
|
bedb6b8bb9 | ||
|
|
ce3860f73b | ||
|
|
d8b10a2133 | ||
|
|
1581304dcb | ||
|
|
60ddf474e0 | ||
|
|
52ae328e2e | ||
|
|
aa0fad2ecf | ||
|
|
dab9071d1e | ||
|
|
189a90ba31 | ||
|
|
8509ae8f9a | ||
|
|
a6ebfdcd7d | ||
|
|
5f7655baaf | ||
|
|
bca2dcc9bd | ||
|
|
546a4da043 |
4
.github/workflows/release.yaml
vendored
4
.github/workflows/release.yaml
vendored
@@ -1,6 +1,7 @@
|
|||||||
name: Release
|
name: Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
pull_request:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
@@ -20,9 +21,12 @@ jobs:
|
|||||||
node-version: 16
|
node-version: 16
|
||||||
- name: Setup | Dependencies
|
- name: Setup | Dependencies
|
||||||
run: npm i -g pnpm && pnpm i --frozen-lockfile
|
run: npm i -g pnpm && pnpm i --frozen-lockfile
|
||||||
|
- name: Build
|
||||||
|
run: pnpm run build
|
||||||
- name: Test
|
- name: Test
|
||||||
run: pnpm run test
|
run: pnpm run test
|
||||||
- name: Release
|
- name: Release
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
|
|||||||
254
CHANGELOG.md
254
CHANGELOG.md
@@ -1,3 +1,257 @@
|
|||||||
|
# [3.19.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.11...v3.19.0) (2023-02-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* added reorderable list and updated fieldProps ([#57](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/57)) ([5a074b5](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/5a074b5bb68c675c484a7b693f67a67488be9bcf))
|
||||||
|
|
||||||
|
## [3.18.11](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.10...v3.18.11) (2023-02-18)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Navigation:** fix NavigateToExternalWeb ([82214fe](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/82214fef4c0a383776631fbb754550fe69f9000d))
|
||||||
|
* **Navigation:** fix NavigateToExternalWeb ([c53d7f8](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/c53d7f8448d8aad76dc699f1f309bdd547ee14df))
|
||||||
|
|
||||||
|
## [3.18.10](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.9...v3.18.10) (2023-01-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **SuspensefulImage:** fix changing src ([9723854](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/9723854ddca53d7708e1effbddec9e5ead22d5de))
|
||||||
|
|
||||||
|
## [3.18.9](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.8...v3.18.9) (2023-01-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Navigation:** fix on stable ([4affd4a](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/4affd4aaec088f01d0f30af48cb4daa34acf26b1))
|
||||||
|
|
||||||
|
## [3.18.8](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.7...v3.18.8) (2023-01-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Navigation:** fix timing issue in decky-loader ([58b69f0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/58b69f0d6c43356c4f0ed183802d5bf7fb80e978))
|
||||||
|
|
||||||
|
## [3.18.7](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.6...v3.18.7) (2023-01-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* un-break navigation on stable ([2e66e5a](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/2e66e5a555f44009d24e332eca82453ba930baf7))
|
||||||
|
|
||||||
|
## [3.18.6](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.5...v3.18.6) (2023-01-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Router:** fix Navigation for the millionth time ([aac2d52](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/aac2d520a68b1074ba1ae988d6c92f7881a296d7))
|
||||||
|
|
||||||
|
## [3.18.5](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.4...v3.18.5) (2022-12-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* fixed prop interfaces ([#70](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/70)) ([0b50f2c](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/0b50f2cf0baa76fc00aa0a41a8435d7a512bff19))
|
||||||
|
|
||||||
|
## [3.18.4](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.3...v3.18.4) (2022-12-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **modals:** fix ModalRoot again ([fd94842](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/fd94842647e51dd9a104e170e0c5ee2bebce12d6))
|
||||||
|
|
||||||
|
## [3.18.3](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.2...v3.18.3) (2022-12-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Router:** update Router interface to SteamOS3.4 and add Navigation ([#52](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/52)) ([f0379e5](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/f0379e5d19279863b571e66918bc9107efedb612))
|
||||||
|
|
||||||
|
## [3.18.2](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.1...v3.18.2) (2022-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **useQuickAccessVisible:** remove invalid prop access ([#66](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/66)) ([767dc2f](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/767dc2fcee97d8b6c2d331ae29704d9b469de51a))
|
||||||
|
|
||||||
|
## [3.18.1](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.0...v3.18.1) (2022-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **findSP:** fallback to last active context ([#53](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/53)) ([6f14da1](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/6f14da152acc4757b814844f1b77bf83dd98d77e))
|
||||||
|
|
||||||
|
# [3.18.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.17.0...v3.18.0) (2022-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **DialogCheckbox:** Add DialogCheckbox component ([#58](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/58)) ([88f245d](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/88f245d476a6477e9fc0cd35e9b675961ecbc26c))
|
||||||
|
|
||||||
|
# [3.17.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.16.2...v3.17.0) (2022-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **ControlsList:** Add ControlsList component ([#61](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/61)) ([c586afb](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/c586afb97d59928ecb703b5a254ed1b9405e2c7e))
|
||||||
|
|
||||||
|
## [3.16.2](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.16.1...v3.16.2) (2022-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Marquee:** replace default export with named export ([cd0635e](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/cd0635e94f98499f9f5fc24a7fd4b93efe7dfc38))
|
||||||
|
|
||||||
|
## [3.16.1](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.16.0...v3.16.1) (2022-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **FooterLegend:** change description types to ReactNode ([#62](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/62)) ([d24136e](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/d24136ecb6b0c5239b68723e8f92a4822aa7b590))
|
||||||
|
|
||||||
|
# [3.16.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.15.0...v3.16.0) (2022-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Marquee:** Add Marquee component ([#63](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/63)) ([925ea8c](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/925ea8c3ceaaf6ff2f79b8808908a9b144a4fcff))
|
||||||
|
|
||||||
|
# [3.15.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.14.0...v3.15.0) (2022-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Focusable:** add noFocusRing prop type ([#65](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/65)) ([cc29dda](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/cc29ddaf578e21ab2abe1cd266f1d15debee0637))
|
||||||
|
|
||||||
|
# [3.14.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.13.0...v3.14.0) (2022-12-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **toast:** add showToast/playSound to ToastData ([#64](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/64)) ([7ba1229](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/7ba1229a4e24fea587b96dc8b078200faf45ddee))
|
||||||
|
|
||||||
|
# [3.13.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.12.0...v3.13.0) (2022-11-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Menu:** add more missing props ([#60](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/60)) [CI SKIP] ([678ba21](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/678ba216f1e194986b0c391398e6f73536cd0102))
|
||||||
|
|
||||||
|
# [3.12.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.11.1...v3.12.0) (2022-11-28)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **MenuItem:** add missing props ([#59](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/59)) ([c84a091](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/c84a09146935f0942265b7a1e4aadc40e8cf22dc))
|
||||||
|
|
||||||
|
## [3.11.1](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.11.0...v3.11.1) (2022-11-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Footer:** add types for ActionDescriptionMap ([2ec9519](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/2ec9519b7d6d1cc0d232853ce05a773953b37c5a))
|
||||||
|
|
||||||
|
# [3.11.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.10.0...v3.11.0) (2022-11-18)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **classes:** add "appDetailsClasses" ([#55](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/55)) ([ed98d14](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/ed98d14b37cf09500afd88e7c8e9c03749119b38))
|
||||||
|
|
||||||
|
# [3.10.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.9.0...v3.10.0) (2022-11-18)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **classes:** add appDetailsHeaderClasses ([#54](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/54)) ([3229162](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/32291620b403f8b65cf378343454a3f2668fb6ee))
|
||||||
|
|
||||||
|
# [3.9.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.8.0...v3.9.0) (2022-11-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Dialog:** add "focusable" button prop ([#51](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/51)) ([e167ef5](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/e167ef5a138a3edc004db2365334f8455c177132))
|
||||||
|
|
||||||
|
# [3.8.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.14...v3.8.0) (2022-11-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **routerhook:** add global components support ([215156d](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/215156d31688faac9028627379e5a3ac4d64ec46))
|
||||||
|
|
||||||
|
## [3.7.14](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.13...v3.7.14) (2022-11-05)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Menu:** fix on Steam beta ([82768e0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/82768e0415d084deb2af39beb3f9273a83e819de))
|
||||||
|
* **Modal:** fix on Steam beta ([e44187f](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/e44187fe4b9d3e3c9e94490669591599dc5246ba))
|
||||||
|
|
||||||
|
## [3.7.13](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.12...v3.7.13) (2022-11-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **useQuickAccessVisible:** make it work in beta ([#49](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/49)) ([e1f64a3](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/e1f64a38de85073e5cea74ecea4b9cde9a783ecc))
|
||||||
|
|
||||||
|
## [3.7.12](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.11...v3.7.12) (2022-10-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Item:** change title and description types to ReactNode ([0ed054f](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/0ed054fae972ffd36299b142bd693f80388480a6))
|
||||||
|
|
||||||
|
## [3.7.11](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.10...v3.7.11) (2022-10-28)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **package.json:** train wtf ([789e163](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/789e16380fd01a6b46188c7a1174a55c18c8dead))
|
||||||
|
|
||||||
|
## [3.7.10](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.9...v3.7.10) (2022-10-28)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **tabs:** shut up typescript ([75f3588](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/75f35882f27252e1255208953a6e801c68d5dcec))
|
||||||
|
|
||||||
|
## [3.7.9](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.8...v3.7.9) (2022-10-28)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **tabs:** fix on stable for real this time i think ([a074277](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/a074277bb58428a64295154ebf96aceb96e654a7))
|
||||||
|
|
||||||
|
## [3.7.8](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.7...v3.7.8) (2022-10-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Field:** fix this time for real ([#44](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/44)) ([cfef1dc](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/cfef1dc320a5f649d66c3af365cd6aa2d88e46ea))
|
||||||
|
|
||||||
|
## [3.7.7](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.6...v3.7.7) (2022-10-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Field:** remove incompatible properties ([#42](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/42)) ([0010a1f](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/0010a1fceedc417aa25b709d066341da97d42444))
|
||||||
|
|
||||||
|
## [3.7.6](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.5...v3.7.6) (2022-10-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Field:** add override for onClick type ([#43](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/43)) ([fe75dfb](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/fe75dfb5f4fb1ec9417cc07dc714c71820945748))
|
||||||
|
|
||||||
|
## [3.7.5](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.4...v3.7.5) (2022-10-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Field:** add types for focusing field ([#41](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/41)) ([bedb6b8](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/bedb6b8bb90e021a60e47a93709d6f48e0bd75c6))
|
||||||
|
|
||||||
## [3.7.4](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.3...v3.7.4) (2022-10-26)
|
## [3.7.4](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.7.3...v3.7.4) (2022-10-26)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
15
package.json
15
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "decky-frontend-lib",
|
"name": "decky-frontend-lib",
|
||||||
"version": "3.7.4",
|
"version": "3.19.0",
|
||||||
"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",
|
||||||
@@ -9,8 +9,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "shx rm -rf dist && tsc -b",
|
"build": "shx rm -rf dist && tsc -b",
|
||||||
"dev": "tsc -b -w",
|
"dev": "tsc -b -w",
|
||||||
"docs": "typedoc --tsconfig ./tsconfig.json src/**/*",
|
"docs": "typedoc --theme wiki-js --tsconfig ./tsconfig.json src/**/*",
|
||||||
"prepack": "npm run build",
|
|
||||||
"test": "echo 'No tests for now!'",
|
"test": "echo 'No tests for now!'",
|
||||||
"prepare": "husky install",
|
"prepare": "husky install",
|
||||||
"commit": "git-cz"
|
"commit": "git-cz"
|
||||||
@@ -54,16 +53,17 @@
|
|||||||
"husky": "^8.0.1",
|
"husky": "^8.0.1",
|
||||||
"import-sort-style-module": "^6.0.0",
|
"import-sort-style-module": "^6.0.0",
|
||||||
"jest": "^27.5.1",
|
"jest": "^27.5.1",
|
||||||
|
"minimist": "^1.2.6",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
"prettier-plugin-import-sort": "^0.0.7",
|
"prettier-plugin-import-sort": "^0.0.7",
|
||||||
"semantic-release": "^19.0.3",
|
"semantic-release": "^19.0.3",
|
||||||
"shx": "^0.3.4",
|
"shx": "^0.3.4",
|
||||||
"ts-jest": "^27.1.4",
|
"ts-jest": "^27.1.4",
|
||||||
"typedoc": "^0.23.15",
|
"typedoc": "^0.23.24",
|
||||||
"typedoc-plugin-markdown": "^3.13.6",
|
|
||||||
"typedoc-plugin-mdn-links": "^2.0.0",
|
"typedoc-plugin-mdn-links": "^2.0.0",
|
||||||
"typedoc-plugin-missing-exports": "^1.0.0",
|
"typedoc-plugin-missing-exports": "^1.0.0",
|
||||||
"typescript": "^4.6.3"
|
"typedoc-wikijs-theme": "^1.0.5",
|
||||||
|
"typescript": "^4.9.5"
|
||||||
},
|
},
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
"peerDependencyRules": {
|
"peerDependencyRules": {
|
||||||
@@ -78,8 +78,5 @@
|
|||||||
"style": "module",
|
"style": "module",
|
||||||
"parser": "typescript"
|
"parser": "typescript"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"minimist": "^1.2.6"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
312
pnpm-lock.yaml
generated
312
pnpm-lock.yaml
generated
@@ -19,14 +19,11 @@ specifiers:
|
|||||||
semantic-release: ^19.0.3
|
semantic-release: ^19.0.3
|
||||||
shx: ^0.3.4
|
shx: ^0.3.4
|
||||||
ts-jest: ^27.1.4
|
ts-jest: ^27.1.4
|
||||||
typedoc: ^0.23.15
|
typedoc: ^0.23.24
|
||||||
typedoc-plugin-markdown: ^3.13.6
|
|
||||||
typedoc-plugin-mdn-links: ^2.0.0
|
typedoc-plugin-mdn-links: ^2.0.0
|
||||||
typedoc-plugin-missing-exports: ^1.0.0
|
typedoc-plugin-missing-exports: ^1.0.0
|
||||||
typescript: ^4.6.3
|
typedoc-wikijs-theme: ^1.0.5
|
||||||
|
typescript: ^4.9.5
|
||||||
dependencies:
|
|
||||||
minimist: 1.2.6
|
|
||||||
|
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@commitlint/cli': 17.0.2
|
'@commitlint/cli': 17.0.2
|
||||||
@@ -41,16 +38,17 @@ devDependencies:
|
|||||||
husky: 8.0.1
|
husky: 8.0.1
|
||||||
import-sort-style-module: 6.0.0
|
import-sort-style-module: 6.0.0
|
||||||
jest: 27.5.1
|
jest: 27.5.1
|
||||||
|
minimist: 1.2.6
|
||||||
prettier: 2.7.1
|
prettier: 2.7.1
|
||||||
prettier-plugin-import-sort: 0.0.7_prettier@2.7.1
|
prettier-plugin-import-sort: 0.0.7_prettier@2.7.1
|
||||||
semantic-release: 19.0.3
|
semantic-release: 19.0.3
|
||||||
shx: 0.3.4
|
shx: 0.3.4
|
||||||
ts-jest: 27.1.4_ibhx3ehxrt2kgmkik4bkzmyeei
|
ts-jest: 27.1.4_nrlewyunxfyvapgcwhbeszaybu
|
||||||
typedoc: 0.23.15_typescript@4.6.4
|
typedoc: 0.23.24_typescript@4.9.5
|
||||||
typedoc-plugin-markdown: 3.13.6_typedoc@0.23.15
|
typedoc-plugin-mdn-links: 2.0.0_typedoc@0.23.24
|
||||||
typedoc-plugin-mdn-links: 2.0.0_typedoc@0.23.15
|
typedoc-plugin-missing-exports: 1.0.0_typedoc@0.23.24
|
||||||
typedoc-plugin-missing-exports: 1.0.0_typedoc@0.23.15
|
typedoc-wikijs-theme: 1.0.5_typedoc@0.23.24
|
||||||
typescript: 4.6.4
|
typescript: 4.9.5
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
@@ -421,6 +419,15 @@ packages:
|
|||||||
ajv: 6.12.6
|
ajv: 6.12.6
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@commitlint/config-validator/17.4.0:
|
||||||
|
resolution: {integrity: sha512-Sa/+8KNpDXz4zT4bVbz2fpFjvgkPO6u2V2fP4TKgt6FjmOw2z3eEX859vtfeaTav/ukBw0/0jr+5ZTZp9zCBhA==}
|
||||||
|
engines: {node: '>=v14'}
|
||||||
|
dependencies:
|
||||||
|
'@commitlint/types': 17.4.0
|
||||||
|
ajv: 8.12.0
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/@commitlint/cz-commitlint/17.0.0_commitizen@4.2.4:
|
/@commitlint/cz-commitlint/17.0.0_commitizen@4.2.4:
|
||||||
resolution: {integrity: sha512-Cq5rb3pUJRIp8M17/w8iUmDup/7KOZVt3OSDa3LKym9y9Y7/7MhiOHfWvTYcMJIOYT7TRbxVycbVvx5hPPjZ/A==}
|
resolution: {integrity: sha512-Cq5rb3pUJRIp8M17/w8iUmDup/7KOZVt3OSDa3LKym9y9Y7/7MhiOHfWvTYcMJIOYT7TRbxVycbVvx5hPPjZ/A==}
|
||||||
engines: {node: '>=v14'}
|
engines: {node: '>=v14'}
|
||||||
@@ -453,6 +460,12 @@ packages:
|
|||||||
engines: {node: '>=v14'}
|
engines: {node: '>=v14'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@commitlint/execute-rule/17.4.0:
|
||||||
|
resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==}
|
||||||
|
engines: {node: '>=v14'}
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/@commitlint/format/17.0.0:
|
/@commitlint/format/17.0.0:
|
||||||
resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==}
|
resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==}
|
||||||
engines: {node: '>=v14'}
|
engines: {node: '>=v14'}
|
||||||
@@ -490,15 +503,39 @@ packages:
|
|||||||
'@types/node': 17.0.33
|
'@types/node': 17.0.33
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
cosmiconfig: 7.0.1
|
cosmiconfig: 7.0.1
|
||||||
cosmiconfig-typescript-loader: 2.0.1_2e3zkt3gzqz6r43dj4x46rot3i
|
cosmiconfig-typescript-loader: 2.0.1_2pb7oj3w6ri7fljxteglruehxe
|
||||||
lodash: 4.17.21
|
lodash: 4.17.21
|
||||||
resolve-from: 5.0.0
|
resolve-from: 5.0.0
|
||||||
typescript: 4.6.4
|
typescript: 4.9.5
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@swc/core'
|
- '@swc/core'
|
||||||
- '@swc/wasm'
|
- '@swc/wasm'
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@commitlint/load/17.4.2:
|
||||||
|
resolution: {integrity: sha512-Si++F85rJ9t4hw6JcOw1i2h0fdpdFQt0YKwjuK4bk9KhFjyFkRxvR3SB2dPaMs+EwWlDrDBGL+ygip1QD6gmPw==}
|
||||||
|
engines: {node: '>=v14'}
|
||||||
|
dependencies:
|
||||||
|
'@commitlint/config-validator': 17.4.0
|
||||||
|
'@commitlint/execute-rule': 17.4.0
|
||||||
|
'@commitlint/resolve-extends': 17.4.0
|
||||||
|
'@commitlint/types': 17.4.0
|
||||||
|
'@types/node': 17.0.33
|
||||||
|
chalk: 4.1.2
|
||||||
|
cosmiconfig: 8.0.0
|
||||||
|
cosmiconfig-typescript-loader: 4.3.0_fbkf72l7lgqvhdmgtmwxouknwy
|
||||||
|
lodash.isplainobject: 4.0.6
|
||||||
|
lodash.merge: 4.6.2
|
||||||
|
lodash.uniq: 4.5.0
|
||||||
|
resolve-from: 5.0.0
|
||||||
|
ts-node: 10.9.1_2pb7oj3w6ri7fljxteglruehxe
|
||||||
|
typescript: 4.9.5
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@swc/core'
|
||||||
|
- '@swc/wasm'
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/@commitlint/message/17.0.0:
|
/@commitlint/message/17.0.0:
|
||||||
resolution: {integrity: sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==}
|
resolution: {integrity: sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==}
|
||||||
engines: {node: '>=v14'}
|
engines: {node: '>=v14'}
|
||||||
@@ -535,6 +572,19 @@ packages:
|
|||||||
resolve-global: 1.0.0
|
resolve-global: 1.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@commitlint/resolve-extends/17.4.0:
|
||||||
|
resolution: {integrity: sha512-3JsmwkrCzoK8sO22AzLBvNEvC1Pmdn/65RKXzEtQMy6oYMl0Snrq97a5bQQEFETF0VsvbtUuKttLqqgn99OXRQ==}
|
||||||
|
engines: {node: '>=v14'}
|
||||||
|
dependencies:
|
||||||
|
'@commitlint/config-validator': 17.4.0
|
||||||
|
'@commitlint/types': 17.4.0
|
||||||
|
import-fresh: 3.3.0
|
||||||
|
lodash.mergewith: 4.6.2
|
||||||
|
resolve-from: 5.0.0
|
||||||
|
resolve-global: 1.0.0
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/@commitlint/rules/17.0.0:
|
/@commitlint/rules/17.0.0:
|
||||||
resolution: {integrity: sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==}
|
resolution: {integrity: sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==}
|
||||||
engines: {node: '>=v14'}
|
engines: {node: '>=v14'}
|
||||||
@@ -565,6 +615,14 @@ packages:
|
|||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@commitlint/types/17.4.0:
|
||||||
|
resolution: {integrity: sha512-2NjAnq5IcxY9kXtUeO2Ac0aPpvkuOmwbH/BxIm36XXK5LtWFObWJWjXOA+kcaABMrthjWu6la+FUpyYFMHRvbA==}
|
||||||
|
engines: {node: '>=v14'}
|
||||||
|
dependencies:
|
||||||
|
chalk: 4.1.2
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/@cspotcode/source-map-support/0.8.1:
|
/@cspotcode/source-map-support/0.8.1:
|
||||||
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
|
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
@@ -1099,6 +1157,16 @@ packages:
|
|||||||
resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==}
|
resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@tsconfig/node10/1.0.9:
|
||||||
|
resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/@tsconfig/node12/1.0.11:
|
||||||
|
resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/@tsconfig/node12/1.0.9:
|
/@tsconfig/node12/1.0.9:
|
||||||
resolution: {integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==}
|
resolution: {integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -1107,10 +1175,20 @@ packages:
|
|||||||
resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==}
|
resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@tsconfig/node14/1.0.3:
|
||||||
|
resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/@tsconfig/node16/1.0.2:
|
/@tsconfig/node16/1.0.2:
|
||||||
resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==}
|
resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@tsconfig/node16/1.0.3:
|
||||||
|
resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==}
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/@types/babel__core/7.1.19:
|
/@types/babel__core/7.1.19:
|
||||||
resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==}
|
resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -1270,6 +1348,13 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/acorn/8.8.2:
|
||||||
|
resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
|
||||||
|
engines: {node: '>=0.4.0'}
|
||||||
|
hasBin: true
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/agent-base/6.0.2:
|
/agent-base/6.0.2:
|
||||||
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
|
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
|
||||||
engines: {node: '>= 6.0.0'}
|
engines: {node: '>= 6.0.0'}
|
||||||
@@ -1296,6 +1381,16 @@ packages:
|
|||||||
uri-js: 4.4.1
|
uri-js: 4.4.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/ajv/8.12.0:
|
||||||
|
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
|
||||||
|
dependencies:
|
||||||
|
fast-deep-equal: 3.1.3
|
||||||
|
json-schema-traverse: 1.0.0
|
||||||
|
require-from-string: 2.0.2
|
||||||
|
uri-js: 4.4.1
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/ansi-escapes/3.2.0:
|
/ansi-escapes/3.2.0:
|
||||||
resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==}
|
resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
@@ -1371,6 +1466,11 @@ packages:
|
|||||||
sprintf-js: 1.0.3
|
sprintf-js: 1.0.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/argparse/2.0.1:
|
||||||
|
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/argv-formatter/1.0.0:
|
/argv-formatter/1.0.0:
|
||||||
resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==}
|
resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -1795,8 +1895,8 @@ packages:
|
|||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dependencies:
|
dependencies:
|
||||||
is-text-path: 1.0.1
|
|
||||||
JSONStream: 1.3.5
|
JSONStream: 1.3.5
|
||||||
|
is-text-path: 1.0.1
|
||||||
lodash: 4.17.21
|
lodash: 4.17.21
|
||||||
meow: 8.1.2
|
meow: 8.1.2
|
||||||
split2: 3.2.2
|
split2: 3.2.2
|
||||||
@@ -1813,7 +1913,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
|
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/cosmiconfig-typescript-loader/2.0.1_2e3zkt3gzqz6r43dj4x46rot3i:
|
/cosmiconfig-typescript-loader/2.0.1_2pb7oj3w6ri7fljxteglruehxe:
|
||||||
resolution: {integrity: sha512-B9s6sX/omXq7I6gC6+YgLmrBFMJhPWew7ty/X5Tuwtd2zOSgWaUdXjkuVwbe3qqcdETo60+1nSVMekq//LIXVA==}
|
resolution: {integrity: sha512-B9s6sX/omXq7I6gC6+YgLmrBFMJhPWew7ty/X5Tuwtd2zOSgWaUdXjkuVwbe3qqcdETo60+1nSVMekq//LIXVA==}
|
||||||
engines: {node: '>=12', npm: '>=6'}
|
engines: {node: '>=12', npm: '>=6'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -1822,13 +1922,29 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 17.0.33
|
'@types/node': 17.0.33
|
||||||
cosmiconfig: 7.0.1
|
cosmiconfig: 7.0.1
|
||||||
ts-node: 10.8.1_2e3zkt3gzqz6r43dj4x46rot3i
|
ts-node: 10.8.1_2pb7oj3w6ri7fljxteglruehxe
|
||||||
typescript: 4.6.4
|
typescript: 4.9.5
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@swc/core'
|
- '@swc/core'
|
||||||
- '@swc/wasm'
|
- '@swc/wasm'
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/cosmiconfig-typescript-loader/4.3.0_fbkf72l7lgqvhdmgtmwxouknwy:
|
||||||
|
resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==}
|
||||||
|
engines: {node: '>=12', npm: '>=6'}
|
||||||
|
peerDependencies:
|
||||||
|
'@types/node': '*'
|
||||||
|
cosmiconfig: '>=7'
|
||||||
|
ts-node: '>=10'
|
||||||
|
typescript: '>=3'
|
||||||
|
dependencies:
|
||||||
|
'@types/node': 17.0.33
|
||||||
|
cosmiconfig: 8.0.0
|
||||||
|
ts-node: 10.9.1_2pb7oj3w6ri7fljxteglruehxe
|
||||||
|
typescript: 4.9.5
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/cosmiconfig/5.2.1:
|
/cosmiconfig/5.2.1:
|
||||||
resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==}
|
resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
@@ -1850,6 +1966,17 @@ packages:
|
|||||||
yaml: 1.10.2
|
yaml: 1.10.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/cosmiconfig/8.0.0:
|
||||||
|
resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==}
|
||||||
|
engines: {node: '>=14'}
|
||||||
|
dependencies:
|
||||||
|
import-fresh: 3.3.0
|
||||||
|
js-yaml: 4.1.0
|
||||||
|
parse-json: 5.2.0
|
||||||
|
path-type: 4.0.0
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/create-require/1.1.1:
|
/create-require/1.1.1:
|
||||||
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
|
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -1898,7 +2025,7 @@ packages:
|
|||||||
longest: 2.0.1
|
longest: 2.0.1
|
||||||
word-wrap: 1.2.3
|
word-wrap: 1.2.3
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@commitlint/load': 17.0.0
|
'@commitlint/load': 17.4.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@swc/core'
|
- '@swc/core'
|
||||||
- '@swc/wasm'
|
- '@swc/wasm'
|
||||||
@@ -2472,7 +2599,7 @@ packages:
|
|||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
wordwrap: 1.0.0
|
wordwrap: 1.0.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
uglify-js: 3.16.0
|
uglify-js: 3.17.4
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/hard-rejection/2.1.0:
|
/hard-rejection/2.1.0:
|
||||||
@@ -3378,6 +3505,14 @@ packages:
|
|||||||
esprima: 4.0.1
|
esprima: 4.0.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/js-yaml/4.1.0:
|
||||||
|
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
|
||||||
|
hasBin: true
|
||||||
|
dependencies:
|
||||||
|
argparse: 2.0.1
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/jsdom/16.7.0:
|
/jsdom/16.7.0:
|
||||||
resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==}
|
resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
@@ -3438,6 +3573,11 @@ packages:
|
|||||||
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
|
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/json-schema-traverse/1.0.0:
|
||||||
|
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/json-stringify-safe/5.0.1:
|
/json-stringify-safe/5.0.1:
|
||||||
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
|
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -3558,6 +3698,21 @@ packages:
|
|||||||
resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=}
|
resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/lodash.merge/4.6.2:
|
||||||
|
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/lodash.mergewith/4.6.2:
|
||||||
|
resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
/lodash.uniq/4.5.0:
|
||||||
|
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/lodash.uniqby/4.7.0:
|
/lodash.uniqby/4.7.0:
|
||||||
resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==}
|
resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -3630,8 +3785,8 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/marked/4.1.1:
|
/marked/4.2.12:
|
||||||
resolution: {integrity: sha512-0cNMnTcUJPxbA6uWmCmjWz4NJRe/0Xfk2NhXCUHjew9qJzFN20krFnsUe7QynwqOwa5m1fZ4UDg0ycKFVC0ccw==}
|
resolution: {integrity: sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==}
|
||||||
engines: {node: '>= 12'}
|
engines: {node: '>= 12'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
@@ -3713,8 +3868,8 @@ packages:
|
|||||||
brace-expansion: 1.1.11
|
brace-expansion: 1.1.11
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/minimatch/5.1.0:
|
/minimatch/5.1.6:
|
||||||
resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}
|
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
dependencies:
|
dependencies:
|
||||||
brace-expansion: 2.0.1
|
brace-expansion: 2.0.1
|
||||||
@@ -3735,6 +3890,7 @@ packages:
|
|||||||
|
|
||||||
/minimist/1.2.6:
|
/minimist/1.2.6:
|
||||||
resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==}
|
resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/modify-values/1.0.1:
|
/modify-values/1.0.1:
|
||||||
resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==}
|
resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==}
|
||||||
@@ -4288,6 +4444,12 @@ packages:
|
|||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/require-from-string/2.0.2:
|
||||||
|
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
|
||||||
|
engines: {node: '>=0.10.0'}
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/resolve-cwd/3.0.0:
|
/resolve-cwd/3.0.0:
|
||||||
resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
|
resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -4491,12 +4653,12 @@ packages:
|
|||||||
rechoir: 0.6.2
|
rechoir: 0.6.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/shiki/0.11.1:
|
/shiki/0.12.1:
|
||||||
resolution: {integrity: sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==}
|
resolution: {integrity: sha512-aieaV1m349rZINEBkjxh2QbBvFFQOlgqYTNtCal82hHj4dDZ76oMlQIX+C7ryerBTDiga3e5NfH6smjdJ02BbQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
jsonc-parser: 3.2.0
|
jsonc-parser: 3.2.0
|
||||||
vscode-oniguruma: 1.6.2
|
vscode-oniguruma: 1.7.0
|
||||||
vscode-textmate: 6.0.0
|
vscode-textmate: 8.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/shx/0.3.4:
|
/shx/0.3.4:
|
||||||
@@ -4853,7 +5015,7 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/ts-jest/27.1.4_ibhx3ehxrt2kgmkik4bkzmyeei:
|
/ts-jest/27.1.4_nrlewyunxfyvapgcwhbeszaybu:
|
||||||
resolution: {integrity: sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==}
|
resolution: {integrity: sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==}
|
||||||
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
|
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@@ -4883,11 +5045,11 @@ packages:
|
|||||||
lodash.memoize: 4.1.2
|
lodash.memoize: 4.1.2
|
||||||
make-error: 1.3.6
|
make-error: 1.3.6
|
||||||
semver: 7.3.7
|
semver: 7.3.7
|
||||||
typescript: 4.6.4
|
typescript: 4.9.5
|
||||||
yargs-parser: 20.2.9
|
yargs-parser: 20.2.9
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/ts-node/10.8.1_2e3zkt3gzqz6r43dj4x46rot3i:
|
/ts-node/10.8.1_2pb7oj3w6ri7fljxteglruehxe:
|
||||||
resolution: {integrity: sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==}
|
resolution: {integrity: sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -4913,11 +5075,43 @@ packages:
|
|||||||
create-require: 1.1.1
|
create-require: 1.1.1
|
||||||
diff: 4.0.2
|
diff: 4.0.2
|
||||||
make-error: 1.3.6
|
make-error: 1.3.6
|
||||||
typescript: 4.6.4
|
typescript: 4.9.5
|
||||||
v8-compile-cache-lib: 3.0.1
|
v8-compile-cache-lib: 3.0.1
|
||||||
yn: 3.1.1
|
yn: 3.1.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/ts-node/10.9.1_2pb7oj3w6ri7fljxteglruehxe:
|
||||||
|
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
|
||||||
|
hasBin: true
|
||||||
|
peerDependencies:
|
||||||
|
'@swc/core': '>=1.2.50'
|
||||||
|
'@swc/wasm': '>=1.2.50'
|
||||||
|
'@types/node': '*'
|
||||||
|
typescript: '>=2.7'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
'@swc/core':
|
||||||
|
optional: true
|
||||||
|
'@swc/wasm':
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
'@cspotcode/source-map-support': 0.8.1
|
||||||
|
'@tsconfig/node10': 1.0.9
|
||||||
|
'@tsconfig/node12': 1.0.11
|
||||||
|
'@tsconfig/node14': 1.0.3
|
||||||
|
'@tsconfig/node16': 1.0.3
|
||||||
|
'@types/node': 17.0.33
|
||||||
|
acorn: 8.8.2
|
||||||
|
acorn-walk: 8.2.0
|
||||||
|
arg: 4.1.3
|
||||||
|
create-require: 1.1.1
|
||||||
|
diff: 4.0.2
|
||||||
|
make-error: 1.3.6
|
||||||
|
typescript: 4.9.5
|
||||||
|
v8-compile-cache-lib: 3.0.1
|
||||||
|
yn: 3.1.1
|
||||||
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/tslib/1.14.1:
|
/tslib/1.14.1:
|
||||||
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
|
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -4970,43 +5164,51 @@ packages:
|
|||||||
is-typedarray: 1.0.0
|
is-typedarray: 1.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/typedoc-plugin-markdown/3.13.6_typedoc@0.23.15:
|
/typedoc-plugin-markdown/4.0.0-next.3_typedoc@0.23.24:
|
||||||
resolution: {integrity: sha512-ISSc9v3BK7HkokxSBuJPttXox4tJ6hP0N9wfSIk0fmLN67+eqtAxbk97gs2nDiuha+RTO5eW9gdeAb+RPP0mgg==}
|
resolution: {integrity: sha512-Koim98xkXOoY8KPlMNH/cKTfqTEocVEYMa3XZgoPX/DkGp7ioB6nl38p6Snl7rEmhcbHkFktcUoOQLn04Kk3sg==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
typedoc: '>=0.23.0'
|
typedoc: '>=0.23.0'
|
||||||
dependencies:
|
dependencies:
|
||||||
handlebars: 4.7.7
|
typedoc: 0.23.24_typescript@4.9.5
|
||||||
typedoc: 0.23.15_typescript@4.6.4
|
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/typedoc-plugin-mdn-links/2.0.0_typedoc@0.23.15:
|
/typedoc-plugin-mdn-links/2.0.0_typedoc@0.23.24:
|
||||||
resolution: {integrity: sha512-IGLuelXPOenGdmklr5DHgPPf/MfZj7aEYCxCMtPN8C1D0lA7w0YLahd0jhDDcOMU7zL1EPcM5pPnhZHltDhqGQ==}
|
resolution: {integrity: sha512-IGLuelXPOenGdmklr5DHgPPf/MfZj7aEYCxCMtPN8C1D0lA7w0YLahd0jhDDcOMU7zL1EPcM5pPnhZHltDhqGQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
typedoc: 0.22.x || 0.23.x
|
typedoc: 0.22.x || 0.23.x
|
||||||
dependencies:
|
dependencies:
|
||||||
typedoc: 0.23.15_typescript@4.6.4
|
typedoc: 0.23.24_typescript@4.9.5
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/typedoc-plugin-missing-exports/1.0.0_typedoc@0.23.15:
|
/typedoc-plugin-missing-exports/1.0.0_typedoc@0.23.24:
|
||||||
resolution: {integrity: sha512-7s6znXnuAj1eD9KYPyzVzR1lBF5nwAY8IKccP5sdoO9crG4lpd16RoFpLsh2PccJM+I2NASpr0+/NMka6ThwVA==}
|
resolution: {integrity: sha512-7s6znXnuAj1eD9KYPyzVzR1lBF5nwAY8IKccP5sdoO9crG4lpd16RoFpLsh2PccJM+I2NASpr0+/NMka6ThwVA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
typedoc: 0.22.x || 0.23.x
|
typedoc: 0.22.x || 0.23.x
|
||||||
dependencies:
|
dependencies:
|
||||||
typedoc: 0.23.15_typescript@4.6.4
|
typedoc: 0.23.24_typescript@4.9.5
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/typedoc/0.23.15_typescript@4.6.4:
|
/typedoc-wikijs-theme/1.0.5_typedoc@0.23.24:
|
||||||
resolution: {integrity: sha512-x9Zu+tTnwxb9YdVr+zvX7LYzyBl1nieOr6lrSHbHsA22/RJK2m4Y525WIg5Mj4jWCmfL47v6f4hUzY7EIuwS5w==}
|
resolution: {integrity: sha512-nMHOcaER9EHh6XACq5wb+CBT26Xi3Coj7/0AAG1OdrNDzRirnxZVpqVNlFEcd7MOdTKauKgY6yAqfSjaJ6fapQ==}
|
||||||
|
peerDependencies:
|
||||||
|
typedoc: '>=0.23.0'
|
||||||
|
dependencies:
|
||||||
|
typedoc: 0.23.24_typescript@4.9.5
|
||||||
|
typedoc-plugin-markdown: 4.0.0-next.3_typedoc@0.23.24
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/typedoc/0.23.24_typescript@4.9.5:
|
||||||
|
resolution: {integrity: sha512-bfmy8lNQh+WrPYcJbtjQ6JEEsVl/ce1ZIXyXhyW+a1vFrjO39t6J8sL/d6FfAGrJTc7McCXgk9AanYBSNvLdIA==}
|
||||||
engines: {node: '>= 14.14'}
|
engines: {node: '>= 14.14'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
typescript: 4.6.x || 4.7.x || 4.8.x
|
typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x
|
||||||
dependencies:
|
dependencies:
|
||||||
lunr: 2.3.9
|
lunr: 2.3.9
|
||||||
marked: 4.1.1
|
marked: 4.2.12
|
||||||
minimatch: 5.1.0
|
minimatch: 5.1.6
|
||||||
shiki: 0.11.1
|
shiki: 0.12.1
|
||||||
typescript: 4.6.4
|
typescript: 4.9.5
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/typescript/3.9.10:
|
/typescript/3.9.10:
|
||||||
@@ -5015,14 +5217,14 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/typescript/4.6.4:
|
/typescript/4.9.5:
|
||||||
resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==}
|
resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
|
||||||
engines: {node: '>=4.2.0'}
|
engines: {node: '>=4.2.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/uglify-js/3.16.0:
|
/uglify-js/3.17.4:
|
||||||
resolution: {integrity: sha512-FEikl6bR30n0T3amyBh3LoiBdqHRy/f4H80+My34HOesOKyHfOsxAPAxOoqC0JUnC1amnO0IwkYC3sko51caSw==}
|
resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
|
||||||
engines: {node: '>=0.8.0'}
|
engines: {node: '>=0.8.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
@@ -5084,12 +5286,12 @@ packages:
|
|||||||
spdx-expression-parse: 3.0.1
|
spdx-expression-parse: 3.0.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/vscode-oniguruma/1.6.2:
|
/vscode-oniguruma/1.7.0:
|
||||||
resolution: {integrity: sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==}
|
resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/vscode-textmate/6.0.0:
|
/vscode-textmate/8.0.0:
|
||||||
resolution: {integrity: sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==}
|
resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/w3c-hr-time/1.0.2:
|
/w3c-hr-time/1.0.2:
|
||||||
|
|||||||
174
src/custom-components/ReorderableList.tsx
Normal file
174
src/custom-components/ReorderableList.tsx
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
import { Fragment, JSXElementConstructor, ReactElement, useEffect, useState } from 'react';
|
||||||
|
|
||||||
|
import { Field, FieldProps, Focusable, GamepadButton } from '../deck-components';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A ReorderableList entry of type <T>.
|
||||||
|
* @param label The name of this entry in the list.
|
||||||
|
* @param data Optional data to connect to this entry.
|
||||||
|
* @param position The position of this entry in the list.
|
||||||
|
*/
|
||||||
|
export type ReorderableEntry<T> = {
|
||||||
|
label: string;
|
||||||
|
data?: T;
|
||||||
|
position: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Properties for a ReorderableList component of type <T>.
|
||||||
|
*
|
||||||
|
* @param animate If the list should animate. @default true
|
||||||
|
*/
|
||||||
|
export type ReorderableListProps<T> = {
|
||||||
|
entries: ReorderableEntry<T>[];
|
||||||
|
onSave: (entries: ReorderableEntry<T>[]) => void;
|
||||||
|
interactables?: JSXElementConstructor<{ entry: ReorderableEntry<T> }>;
|
||||||
|
fieldProps?: FieldProps;
|
||||||
|
animate?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A component for creating reorderable lists.
|
||||||
|
*
|
||||||
|
* See an example implementation {@linkplain https://github.com/Tormak9970/Component-Testing-Plugin/blob/main/src/testing-window/ReorderableListTest.tsx here}.
|
||||||
|
*/
|
||||||
|
export function ReorderableList<T>(props: ReorderableListProps<T>) {
|
||||||
|
if (props.animate === undefined) props.animate = true;
|
||||||
|
const [entryList, setEntryList] = useState<ReorderableEntry<T>[]>(
|
||||||
|
props.entries.sort((a: ReorderableEntry<T>, b: ReorderableEntry<T>) => a.position - b.position),
|
||||||
|
);
|
||||||
|
const [reorderEnabled, setReorderEnabled] = useState<boolean>(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setEntryList(props.entries.sort((a: ReorderableEntry<T>, b: ReorderableEntry<T>) => a.position - b.position));
|
||||||
|
}, [props.entries]);
|
||||||
|
|
||||||
|
function toggleReorderEnabled(): void {
|
||||||
|
let newReorderValue = !reorderEnabled;
|
||||||
|
setReorderEnabled(newReorderValue);
|
||||||
|
|
||||||
|
if (!newReorderValue) {
|
||||||
|
props.onSave(entryList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Fragment>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
width: 'inherit',
|
||||||
|
height: 'inherit',
|
||||||
|
flex: '1 1 1px',
|
||||||
|
scrollPadding: '48px 0px',
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'column',
|
||||||
|
justifyContent: 'flex-start',
|
||||||
|
alignContent: 'stretch',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Focusable
|
||||||
|
onSecondaryButton={toggleReorderEnabled}
|
||||||
|
onSecondaryActionDescription={reorderEnabled ? 'Save Order' : 'Reorder'}
|
||||||
|
onClick={toggleReorderEnabled}
|
||||||
|
>
|
||||||
|
{entryList.map((entry: ReorderableEntry<T>) => (
|
||||||
|
<ReorderableItem
|
||||||
|
animate={props.animate!}
|
||||||
|
listData={entryList}
|
||||||
|
entryData={entry}
|
||||||
|
reorderEntryFunc={setEntryList}
|
||||||
|
reorderEnabled={reorderEnabled}
|
||||||
|
fieldProps={props.fieldProps}
|
||||||
|
>
|
||||||
|
{props.interactables ? <props.interactables entry={entry} /> : null}
|
||||||
|
</ReorderableItem>
|
||||||
|
))}
|
||||||
|
</Focusable>
|
||||||
|
</div>
|
||||||
|
</Fragment>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Properties for a ReorderableItem component of type <T>
|
||||||
|
*/
|
||||||
|
export type ReorderableListEntryProps<T> = {
|
||||||
|
fieldProps?: FieldProps;
|
||||||
|
listData: ReorderableEntry<T>[];
|
||||||
|
entryData: ReorderableEntry<T>;
|
||||||
|
reorderEntryFunc: CallableFunction;
|
||||||
|
reorderEnabled: boolean;
|
||||||
|
animate: boolean;
|
||||||
|
children: ReactElement | null;
|
||||||
|
};
|
||||||
|
|
||||||
|
function ReorderableItem<T>(props: ReorderableListEntryProps<T>) {
|
||||||
|
const [isSelected, _setIsSelected] = useState<boolean>(false);
|
||||||
|
const [isSelectedLastFrame, setIsSelectedLastFrame] = useState<boolean>(false);
|
||||||
|
const listEntries = props.listData;
|
||||||
|
|
||||||
|
function onReorder(e: Event): void {
|
||||||
|
if (!props.reorderEnabled) return;
|
||||||
|
|
||||||
|
const event = e as CustomEvent;
|
||||||
|
const currentIdx = listEntries.findIndex((entryData: ReorderableEntry<T>) => entryData === props.entryData);
|
||||||
|
const currentIdxValue = listEntries[currentIdx];
|
||||||
|
if (currentIdx < 0) return;
|
||||||
|
|
||||||
|
let targetPosition: number = -1;
|
||||||
|
if (event.detail.button == GamepadButton.DIR_DOWN) {
|
||||||
|
targetPosition = currentIdxValue.position + 1;
|
||||||
|
} else if (event.detail.button == GamepadButton.DIR_UP) {
|
||||||
|
targetPosition = currentIdxValue.position - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetPosition >= listEntries.length || targetPosition < 0) return;
|
||||||
|
|
||||||
|
let otherToUpdate = listEntries.find((entryData: ReorderableEntry<T>) => entryData.position === targetPosition);
|
||||||
|
if (!otherToUpdate) return;
|
||||||
|
|
||||||
|
let currentPosition = currentIdxValue.position;
|
||||||
|
|
||||||
|
currentIdxValue.position = otherToUpdate.position;
|
||||||
|
otherToUpdate.position = currentPosition;
|
||||||
|
|
||||||
|
props.reorderEntryFunc(
|
||||||
|
[...listEntries].sort((a: ReorderableEntry<T>, b: ReorderableEntry<T>) => a.position - b.position),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function setIsSelected(val: boolean) {
|
||||||
|
_setIsSelected(val);
|
||||||
|
// Wait 3 frames, then set. I have no idea why, but if you dont wait long enough it doesn't work.
|
||||||
|
for (let i = 0; i < 3; i++) await new Promise((res) => requestAnimationFrame(res));
|
||||||
|
setIsSelectedLastFrame(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
style={
|
||||||
|
props.animate
|
||||||
|
? {
|
||||||
|
transition:
|
||||||
|
isSelected || isSelectedLastFrame
|
||||||
|
? ''
|
||||||
|
: 'transform 0.3s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.3s cubic-bezier(0.25, 1, 0.5, 1)', // easeOutQuart https://easings.net/#easeOutQuart
|
||||||
|
transform: !props.reorderEnabled || isSelected ? 'scale(1)' : 'scale(0.9)',
|
||||||
|
opacity: !props.reorderEnabled || isSelected ? 1 : 0.7,
|
||||||
|
}
|
||||||
|
: {}
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<Field
|
||||||
|
label={props.entryData.label}
|
||||||
|
{...props.fieldProps}
|
||||||
|
focusable={!props.children}
|
||||||
|
onButtonDown={onReorder}
|
||||||
|
onGamepadBlur={() => setIsSelected(false)}
|
||||||
|
onGamepadFocus={() => setIsSelected(true)}
|
||||||
|
>
|
||||||
|
<Focusable style={{ display: 'flex', width: '100%', position: 'relative' }}>{props.children}</Focusable>
|
||||||
|
</Field>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -13,6 +13,8 @@ export const SuspensefulImage: FC<SuspensefulImageProps> = (props) => {
|
|||||||
const [error, setError] = useState(false);
|
const [error, setError] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
setLoading(true);
|
||||||
|
setError(false);
|
||||||
const img = new Image();
|
const img = new Image();
|
||||||
img.src = props.src || '';
|
img.src = props.src || '';
|
||||||
img.addEventListener('load', () => {
|
img.addEventListener('load', () => {
|
||||||
@@ -21,7 +23,7 @@ export const SuspensefulImage: FC<SuspensefulImageProps> = (props) => {
|
|||||||
img.addEventListener('error', () => {
|
img.addEventListener('error', () => {
|
||||||
setError(true);
|
setError(true);
|
||||||
});
|
});
|
||||||
}, []);
|
}, [props.src]);
|
||||||
|
|
||||||
return loading ? (
|
return loading ? (
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
export * from './SuspensefulImage';
|
export * from './SuspensefulImage';
|
||||||
export * from './ColorPickerModal';
|
export * from './ColorPickerModal';
|
||||||
|
export * from './ReorderableList';
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
export * from './usequickaccessvisible';
|
export * from './useQuickAccessVisible';
|
||||||
|
|||||||
@@ -4,6 +4,17 @@ declare global {
|
|||||||
var FocusNavController: any;
|
var FocusNavController: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getQuickAccessWindow(): Window | null {
|
||||||
|
try {
|
||||||
|
const context = FocusNavController?.m_ActiveContext || FocusNavController?.m_LastActiveContext;
|
||||||
|
const navTrees = context?.m_rgGamepadNavigationTrees || FocusNavController?.m_rgGamepadNavigationTrees;
|
||||||
|
return navTrees?.find((tree: any) => tree?.id === "QuickAccess-NA")?.m_Root?.m_element?.ownerDocument.defaultView ?? null;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns state indicating the visibility of quick access menu.
|
* Returns state indicating the visibility of quick access menu.
|
||||||
*
|
*
|
||||||
@@ -42,12 +53,10 @@ declare global {
|
|||||||
* };
|
* };
|
||||||
*/
|
*/
|
||||||
export function useQuickAccessVisible(): boolean {
|
export function useQuickAccessVisible(): boolean {
|
||||||
// Assuming that the component is rendered in QAM already, so true by default...
|
const [isVisible, setIsVisible] = useState(getQuickAccessWindow()?.document.hasFocus() ?? true);
|
||||||
const [isVisible, setIsVisible] = useState(true);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const quickAccessWindow: Window | null =
|
const quickAccessWindow = getQuickAccessWindow();
|
||||||
FocusNavController?.GetGamepadNavTreeByID('QuickAccess-NA')?.m_Root?.m_element?.ownerDocument.defaultView ?? null;
|
|
||||||
if (quickAccessWindow === null) {
|
if (quickAccessWindow === null) {
|
||||||
console.error('Could not get window of QuickAccess menu!');
|
console.error('Could not get window of QuickAccess menu!');
|
||||||
return;
|
return;
|
||||||
17
src/deck-components/ControlsList.tsx
Normal file
17
src/deck-components/ControlsList.tsx
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { findModuleChild } from '../webpack';
|
||||||
|
import { FC } from 'react';
|
||||||
|
|
||||||
|
export interface ControlsListProps {
|
||||||
|
alignItems?: 'left' | 'right' | 'center';
|
||||||
|
spacing?: 'standard' | 'extra';
|
||||||
|
}
|
||||||
|
|
||||||
|
export const ControlsList: FC<ControlsListProps> = findModuleChild((m) => {
|
||||||
|
if (typeof m !== 'object') return;
|
||||||
|
for (const prop in m) {
|
||||||
|
if (m[prop]?.toString && m[prop].toString().includes('().ControlsListChild') && m[prop].toString().includes('().ControlsListOuterPanel')) {
|
||||||
|
return m[prop];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
});
|
||||||
@@ -9,8 +9,35 @@ export interface DialogCommonProps extends RefAttributes<HTMLDivElement> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface DialogButtonProps extends DialogCommonProps, FooterLegendProps {
|
export interface DialogButtonProps extends DialogCommonProps, FooterLegendProps {
|
||||||
|
/**
|
||||||
|
* Enables/disables the focus around the button.
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Default value depends on context, so setting it to `false` will enable it.
|
||||||
|
*/
|
||||||
noFocusRing?: boolean;
|
noFocusRing?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disables the button - assigned `on*` methods will not be invoked if clicked.
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Depending on where it is, it might still get focus. In such case it can be
|
||||||
|
* partially disabled separately.
|
||||||
|
*
|
||||||
|
* @see focusable.
|
||||||
|
*/
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables/disables the navigation based focus on button - you won't be able to navigate to
|
||||||
|
* it via the gamepad or keyboard.
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* If set to `false`, it still can be clicked and **WILL** become focused until navigated away.
|
||||||
|
* Depending on the context of where the button is, even a disabled button can focused.
|
||||||
|
*/
|
||||||
|
focusable?: boolean;
|
||||||
|
|
||||||
onClick?(e: MouseEvent): void;
|
onClick?(e: MouseEvent): void;
|
||||||
onPointerDown?(e: PointerEvent): void;
|
onPointerDown?(e: PointerEvent): void;
|
||||||
onPointerUp?(e: PointerEvent): void;
|
onPointerUp?(e: PointerEvent): void;
|
||||||
|
|||||||
33
src/deck-components/DialogCheckbox.tsx
Normal file
33
src/deck-components/DialogCheckbox.tsx
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import { FC, ReactNode } from 'react';
|
||||||
|
|
||||||
|
import { findModule } from '../webpack';
|
||||||
|
import { DialogCommonProps } from './Dialog';
|
||||||
|
import { FooterLegendProps } from './FooterLegend';
|
||||||
|
|
||||||
|
export interface DialogCheckboxProps extends DialogCommonProps, FooterLegendProps {
|
||||||
|
onChange?(checked: boolean): void;
|
||||||
|
label?: ReactNode;
|
||||||
|
description?: ReactNode;
|
||||||
|
disabled?: boolean;
|
||||||
|
tooltip?: string;
|
||||||
|
color?: string;
|
||||||
|
highlightColor?: string;
|
||||||
|
bottomSeparator?: 'standard' | 'thick' | 'none';
|
||||||
|
controlled?: boolean;
|
||||||
|
checked?: boolean;
|
||||||
|
onClick?(evt: Event): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const DialogCheckbox = Object.values(findModule((m: any) => {
|
||||||
|
if (typeof m !== 'object') return false;
|
||||||
|
for (const prop in m) {
|
||||||
|
if (m[prop]?.prototype?.GetPanelElementProps) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
})).find((m: any) =>
|
||||||
|
m.contextType &&
|
||||||
|
m.prototype?.render.toString().includes('fallback:') &&
|
||||||
|
m?.prototype?.SetChecked &&
|
||||||
|
m?.prototype?.Toggle &&
|
||||||
|
m?.prototype?.GetPanelElementProps
|
||||||
|
) as FC<DialogCheckboxProps>;
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import { FC, HTMLAttributes, ReactNode, RefAttributes } from 'react';
|
import { FC, ReactNode, RefAttributes } from 'react';
|
||||||
|
|
||||||
import { findModuleChild } from '../webpack';
|
import { findModuleChild } from '../webpack';
|
||||||
import { FooterLegendProps } from './FooterLegend';
|
import { FooterLegendProps } from './FooterLegend';
|
||||||
|
|
||||||
export interface FieldProps extends HTMLAttributes<HTMLDivElement>, FooterLegendProps {
|
export interface FieldProps extends FooterLegendProps {
|
||||||
label?: ReactNode;
|
label?: ReactNode;
|
||||||
bottomSeparator?: 'standard' | 'thick' | 'none';
|
bottomSeparator?: 'standard' | 'thick' | 'none';
|
||||||
description?: ReactNode;
|
description?: ReactNode;
|
||||||
@@ -18,6 +18,9 @@ export interface FieldProps extends HTMLAttributes<HTMLDivElement>, FooterLegend
|
|||||||
highlightOnFocus?: boolean;
|
highlightOnFocus?: boolean;
|
||||||
indentLevel?: number;
|
indentLevel?: number;
|
||||||
verticalAlignment?: 'center' | 'none'; // Alligns inline label with children
|
verticalAlignment?: 'center' | 'none'; // Alligns inline label with children
|
||||||
|
focusable?: boolean; // Allows to get focus without any focusable children or on* callbacks
|
||||||
|
onActivate?: (e: CustomEvent | MouseEvent) => void;
|
||||||
|
onClick?: (e: CustomEvent | MouseEvent) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Field = findModuleChild((m) => {
|
export const Field = findModuleChild((m) => {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ export interface FocusableProps extends HTMLAttributes<HTMLDivElement>, FooterLe
|
|||||||
'flow-children'?: string;
|
'flow-children'?: string;
|
||||||
focusClassName?: string;
|
focusClassName?: string;
|
||||||
focusWithinClassName?: string;
|
focusWithinClassName?: string;
|
||||||
|
noFocusRing?: boolean;
|
||||||
onActivate?: (e: CustomEvent) => void;
|
onActivate?: (e: CustomEvent) => void;
|
||||||
onCancel?: (e: CustomEvent) => void;
|
onCancel?: (e: CustomEvent) => void;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { ReactNode } from 'react';
|
||||||
|
|
||||||
export enum GamepadButton {
|
export enum GamepadButton {
|
||||||
INVALID,
|
INVALID,
|
||||||
OK,
|
OK,
|
||||||
@@ -29,30 +31,29 @@ export enum GamepadButton {
|
|||||||
STEAM_GUIDE,
|
STEAM_GUIDE,
|
||||||
STEAM_QUICK_MENU,
|
STEAM_QUICK_MENU,
|
||||||
}
|
}
|
||||||
|
export declare enum NavEntryPositionPreferences {
|
||||||
export enum NavEntryPositionPreferences {
|
|
||||||
FIRST,
|
FIRST,
|
||||||
LAST,
|
LAST,
|
||||||
MAINTAIN_X,
|
MAINTAIN_X,
|
||||||
MAINTAIN_Y,
|
MAINTAIN_Y,
|
||||||
PREFERRED_CHILD,
|
PREFERRED_CHILD
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GamepadEventDetail {
|
export interface GamepadEventDetail {
|
||||||
button: number;
|
button: number;
|
||||||
is_repeat?: boolean;
|
is_repeat?: boolean;
|
||||||
source: number;
|
source: number;
|
||||||
}
|
}
|
||||||
|
export declare type ActionDescriptionMap = {
|
||||||
export type GamepadEvent = CustomEvent<GamepadEventDetail>;
|
[key in GamepadButton]?: ReactNode
|
||||||
|
}
|
||||||
|
export declare type GamepadEvent = CustomEvent<GamepadEventDetail>;
|
||||||
export interface FooterLegendProps {
|
export interface FooterLegendProps {
|
||||||
actionDescriptionMap?: unknown;
|
actionDescriptionMap?: ActionDescriptionMap;
|
||||||
onOKActionDescription?: string;
|
onOKActionDescription?: ReactNode;
|
||||||
onCancelActionDescription?: string;
|
onCancelActionDescription?: ReactNode;
|
||||||
onSecondaryActionDescription?: string;
|
onSecondaryActionDescription?: ReactNode;
|
||||||
onOptionsActionDescription?: string;
|
onOptionsActionDescription?: ReactNode;
|
||||||
onMenuActionDescription?: string;
|
onMenuActionDescription?: ReactNode;
|
||||||
onButtonDown?: (evt: GamepadEvent) => void;
|
onButtonDown?: (evt: GamepadEvent) => void;
|
||||||
onButtonUp?: (evt: GamepadEvent) => void;
|
onButtonUp?: (evt: GamepadEvent) => void;
|
||||||
onOKButton?: (evt: GamepadEvent) => void;
|
onOKButton?: (evt: GamepadEvent) => void;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { ReactNode } from 'react';
|
import { ReactNode } from 'react';
|
||||||
|
|
||||||
export interface ItemProps {
|
export interface ItemProps {
|
||||||
label?: string;
|
label?: ReactNode;
|
||||||
description?: string;
|
description?: ReactNode;
|
||||||
layout?: 'below' | 'inline';
|
layout?: 'below' | 'inline';
|
||||||
icon?: ReactNode;
|
icon?: ReactNode;
|
||||||
bottomSeparator?: 'standard' | 'thick' | 'none';
|
bottomSeparator?: 'standard' | 'thick' | 'none';
|
||||||
|
|||||||
26
src/deck-components/Marquee.tsx
Normal file
26
src/deck-components/Marquee.tsx
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { CSSProperties, FC } from 'react';
|
||||||
|
|
||||||
|
import { findModuleChild } from '../webpack';
|
||||||
|
|
||||||
|
export interface MarqueeProps {
|
||||||
|
play?: boolean;
|
||||||
|
direction?: 'left' | 'right';
|
||||||
|
speed?: number;
|
||||||
|
delay?: number;
|
||||||
|
fadeLength?: number;
|
||||||
|
center?: boolean;
|
||||||
|
resetOnPause?: boolean;
|
||||||
|
style?: CSSProperties;
|
||||||
|
className?: string;
|
||||||
|
children: React.ReactNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const Marquee: FC<MarqueeProps> = findModuleChild((m) => {
|
||||||
|
if (typeof m !== 'object') return;
|
||||||
|
for (const prop in m) {
|
||||||
|
if (m[prop]?.toString && m[prop].toString().includes('.Marquee') && m[prop].toString().includes('--fade-length')) {
|
||||||
|
return m[prop];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
});
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
import { FC, ReactNode } from 'react';
|
import { FC, ReactNode } from 'react';
|
||||||
|
|
||||||
|
import { fakeRenderComponent } from '../utils';
|
||||||
import { findModuleChild } from '../webpack';
|
import { findModuleChild } from '../webpack';
|
||||||
|
import { FooterLegendProps } from './FooterLegend';
|
||||||
|
|
||||||
export const showContextMenu: (children: ReactNode, parent?: EventTarget) => void = findModuleChild((m) => {
|
export const showContextMenu: (children: ReactNode, parent?: EventTarget) => void = findModuleChild((m) => {
|
||||||
if (typeof m !== 'object') return undefined;
|
if (typeof m !== 'object') return undefined;
|
||||||
@@ -11,7 +13,7 @@ export const showContextMenu: (children: ReactNode, parent?: EventTarget) => voi
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export interface MenuProps {
|
export interface MenuProps extends FooterLegendProps {
|
||||||
label: string;
|
label: string;
|
||||||
onCancel?(): void;
|
onCancel?(): void;
|
||||||
cancelText?: string;
|
cancelText?: string;
|
||||||
@@ -38,15 +40,26 @@ export const MenuGroup: FC<MenuGroupProps> = findModuleChild((m) => {
|
|||||||
if (typeof m !== 'object') return undefined;
|
if (typeof m !== 'object') return undefined;
|
||||||
|
|
||||||
for (let prop in m) {
|
for (let prop in m) {
|
||||||
if (m[prop]?.prototype?.RenderSubMenu && m[prop]?.prototype?.ShowSubMenu) {
|
if (
|
||||||
|
(m[prop]?.toString()?.includes('bInGamepadUI:') &&
|
||||||
|
fakeRenderComponent(() => m[prop]())?.type?.prototype?.RenderSubMenu) ||
|
||||||
|
(m[prop]?.prototype?.RenderSubMenu && m[prop]?.prototype?.ShowSubMenu)
|
||||||
|
) {
|
||||||
return m[prop];
|
return m[prop];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export interface MenuItemProps {
|
export interface MenuItemProps extends FooterLegendProps {
|
||||||
onSelected?(): void;
|
bInteractableItem?: boolean;
|
||||||
|
onClick?(evt: Event): void;
|
||||||
|
onSelected?(evt: Event): void;
|
||||||
|
onMouseEnter?(evt: MouseEvent): void;
|
||||||
|
onMoveRight?(): void;
|
||||||
|
selected?: boolean;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
|
bPlayAudio?: boolean;
|
||||||
|
tone?: 'positive' | 'emphasis' | 'destructive';
|
||||||
children?: ReactNode;
|
children?: ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,7 +67,10 @@ export const MenuItem: FC<MenuItemProps> = findModuleChild((m) => {
|
|||||||
if (typeof m !== 'object') return undefined;
|
if (typeof m !== 'object') return undefined;
|
||||||
|
|
||||||
for (let prop in m) {
|
for (let prop in m) {
|
||||||
if (m[prop]?.prototype?.OnOKButton && m[prop]?.prototype?.OnMouseEnter) {
|
if (
|
||||||
|
m[prop]?.render?.toString()?.includes('bPlayAudio:') ||
|
||||||
|
(m[prop]?.prototype?.OnOKButton && m[prop]?.prototype?.OnMouseEnter)
|
||||||
|
) {
|
||||||
return m[prop];
|
return m[prop];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { FC, ReactNode } from 'react';
|
import { FC, ReactNode } from 'react';
|
||||||
|
|
||||||
import { findSP } from '../utils';
|
import { findSP } from '../utils';
|
||||||
import { findModuleChild } from '../webpack';
|
import { findModule, findModuleChild } from '../webpack';
|
||||||
|
|
||||||
// All of the popout options + strTitle are related. Proper usage is not yet known...
|
// All of the popout options + strTitle are related. Proper usage is not yet known...
|
||||||
export interface ShowModalProps {
|
export interface ShowModalProps {
|
||||||
@@ -29,7 +29,30 @@ export interface ShowModalResult {
|
|||||||
Update: (modal: ReactNode) => void;
|
Update: (modal: ReactNode) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const showModalRaw: (modal: ReactNode, parent?: EventTarget, props?: ShowModalProps) => Promise<ShowModalResult> =
|
const showModalRaw:
|
||||||
|
| ((
|
||||||
|
modal: ReactNode,
|
||||||
|
parent?: EventTarget,
|
||||||
|
title?: string,
|
||||||
|
props?: ShowModalProps,
|
||||||
|
unknown1?: unknown,
|
||||||
|
hideActions?: { bHideActions?: boolean },
|
||||||
|
modalManager?: unknown,
|
||||||
|
) => ShowModalResult)
|
||||||
|
| void = findModuleChild((m) => {
|
||||||
|
if (typeof m !== 'object') return undefined;
|
||||||
|
for (let prop in m) {
|
||||||
|
if (
|
||||||
|
typeof m[prop] === 'function' &&
|
||||||
|
m[prop].toString().includes('props.bDisableBackgroundDismiss') &&
|
||||||
|
!m[prop]?.prototype?.Cancel
|
||||||
|
) {
|
||||||
|
return m[prop];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const oldShowModalRaw: ((modal: ReactNode, parent?: EventTarget, props?: ShowModalProps) => ShowModalResult) | void =
|
||||||
findModuleChild((m) => {
|
findModuleChild((m) => {
|
||||||
if (typeof m !== 'object') return undefined;
|
if (typeof m !== 'object') return undefined;
|
||||||
for (let prop in m) {
|
for (let prop in m) {
|
||||||
@@ -39,8 +62,23 @@ const showModalRaw: (modal: ReactNode, parent?: EventTarget, props?: ShowModalPr
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export const showModal = (modal: ReactNode, parent?: EventTarget, props?: ShowModalProps): Promise<ShowModalResult> => {
|
export const showModal = (
|
||||||
return showModalRaw(modal, parent || findSP(), props);
|
modal: ReactNode,
|
||||||
|
parent?: EventTarget,
|
||||||
|
props: ShowModalProps = {
|
||||||
|
strTitle: 'Decky Dialog',
|
||||||
|
bHideMainWindowForPopouts: false,
|
||||||
|
},
|
||||||
|
): ShowModalResult => {
|
||||||
|
if (showModalRaw) {
|
||||||
|
return showModalRaw(modal, parent || findSP(), props.strTitle, props, undefined, {
|
||||||
|
bHideActions: props.bHideActionIcons,
|
||||||
|
});
|
||||||
|
} else if (oldShowModalRaw) {
|
||||||
|
return oldShowModalRaw(modal, parent || findSP(), props);
|
||||||
|
} else {
|
||||||
|
throw new Error('[DFL:Modals]: Cannot find showModal function');
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface ModalRootProps {
|
export interface ModalRootProps {
|
||||||
@@ -79,11 +117,40 @@ export const ConfirmModal = findModuleChild((m) => {
|
|||||||
}
|
}
|
||||||
}) as FC<ConfirmModalProps>;
|
}) as FC<ConfirmModalProps>;
|
||||||
|
|
||||||
export const ModalRoot = findModuleChild((m) => {
|
// new as of december 2022 on beta
|
||||||
if (typeof m !== 'object') return undefined;
|
export const ModalRoot = (Object.values(
|
||||||
for (let prop in m) {
|
findModule((m: any) => {
|
||||||
if (m[prop]?.prototype?.OK && m[prop]?.prototype?.Cancel && m[prop]?.prototype?.render) {
|
if (typeof m !== 'object') return false;
|
||||||
return m[prop];
|
|
||||||
|
for (let prop in m) {
|
||||||
|
if (m[prop]?.m_mapModalManager && Object.values(m)?.find((x: any) => x?.type)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}) as FC<ModalRootProps>;
|
return false;
|
||||||
|
}) || {},
|
||||||
|
)?.find((x: any) => x?.type?.toString()?.includes('((function(){')) ||
|
||||||
|
// before december 2022 beta
|
||||||
|
Object.values(
|
||||||
|
findModule((m: any) => {
|
||||||
|
if (typeof m !== 'object') return false;
|
||||||
|
|
||||||
|
for (let prop in m) {
|
||||||
|
if (m[prop]?.toString()?.includes('"ModalManager","DialogWrapper"')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}) || {},
|
||||||
|
)?.find((x: any) => x?.type?.toString()?.includes('((function(){')) ||
|
||||||
|
// old
|
||||||
|
findModuleChild((m) => {
|
||||||
|
if (typeof m !== 'object') return undefined;
|
||||||
|
for (let prop in m) {
|
||||||
|
if (m[prop]?.prototype?.OK && m[prop]?.prototype?.Cancel && m[prop]?.prototype?.render) {
|
||||||
|
return m[prop];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})) as FC<ModalRootProps>;
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import { FC } from 'react';
|
import { FC, ReactNode } from 'react';
|
||||||
|
|
||||||
import { findModuleChild } from '../webpack';
|
import { findModuleChild } from '../webpack';
|
||||||
|
|
||||||
export interface PanelSectionProps {
|
export interface PanelSectionProps {
|
||||||
title?: string;
|
title?: string;
|
||||||
spinner?: boolean;
|
spinner?: boolean;
|
||||||
|
children?: ReactNode
|
||||||
}
|
}
|
||||||
|
|
||||||
const [panelSection, mod] = findModuleChild((mod: any) => {
|
const [panelSection, mod] = findModuleChild((mod: any) => {
|
||||||
@@ -18,6 +19,10 @@ const [panelSection, mod] = findModuleChild((mod: any) => {
|
|||||||
|
|
||||||
export const PanelSection = panelSection as FC<PanelSectionProps>;
|
export const PanelSection = panelSection as FC<PanelSectionProps>;
|
||||||
|
|
||||||
|
export interface PanelSectionRowProps {
|
||||||
|
children?: ReactNode
|
||||||
|
}
|
||||||
|
|
||||||
export const PanelSectionRow = Object.values(mod).filter(
|
export const PanelSectionRow = Object.values(mod).filter(
|
||||||
(exp: any) => !exp?.toString()?.includes('.PanelSection'),
|
(exp: any) => !exp?.toString()?.includes('.PanelSection'),
|
||||||
)[0] as FC;
|
)[0] as FC<PanelSectionRowProps>;
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { sleep } from '../utils';
|
||||||
import { Module, findModuleChild } from '../webpack';
|
import { Module, findModuleChild } from '../webpack';
|
||||||
|
|
||||||
export enum SideMenu {
|
export enum SideMenu {
|
||||||
@@ -63,28 +64,38 @@ export type AppOverview = {
|
|||||||
sort_as: string;
|
sort_as: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface Router {
|
export interface MenuStore {
|
||||||
CloseSideMenus(): void;
|
|
||||||
OpenQuickAccessMenu(quickAccessTab?: QuickAccessTab): void;
|
|
||||||
GetQuickAccessTab(): QuickAccessTab;
|
|
||||||
Navigate(path: string): void;
|
|
||||||
NavigateBackOrOpenMenu(): void;
|
|
||||||
NavigateToAppProperties(): void;
|
|
||||||
NavigateToBugForum(): void;
|
|
||||||
NavigateToExternalWeb(url: string): void;
|
|
||||||
NavigateToHelp(): void;
|
|
||||||
NavigateToInvites(): void;
|
|
||||||
NavigateToRunningApp(replace?: boolean): void;
|
|
||||||
NavigateToStorage(): void;
|
|
||||||
NavigateToStore(): void;
|
|
||||||
NavigateToStoreApp(appId: number | string): void;
|
|
||||||
NavigateToStoreFreeToPlay(): void;
|
|
||||||
NavigateToStoreManual(): void;
|
|
||||||
NavigateToStoreNewReleases(): void;
|
|
||||||
NavigateToStoreOnSale(): void;
|
|
||||||
ToggleSideMenu(sideMenu: SideMenu): void;
|
|
||||||
CloseSideMenus(): void;
|
|
||||||
OpenSideMenu(sideMenu: SideMenu): void;
|
OpenSideMenu(sideMenu: SideMenu): void;
|
||||||
|
OpenQuickAccessMenu(quickAccessTab?: QuickAccessTab): void;
|
||||||
|
OpenMainMenu(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface WindowRouter {
|
||||||
|
BrowserWindow: Window;
|
||||||
|
MenuStore: MenuStore;
|
||||||
|
Navigate(path: string): void;
|
||||||
|
NavigateToChat(): void;
|
||||||
|
NavigateToSteamWeb(url: string): void;
|
||||||
|
NavigateBack(): void;
|
||||||
|
NavigateToWebRoute(unknown?: any, unknown2?: any): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface WindowStore {
|
||||||
|
GamepadUIMainWindowInstance?: WindowRouter; // Current
|
||||||
|
SteamUIWindows: WindowRouter[];
|
||||||
|
OverlayWindows: WindowRouter[]; // Used by desktop GamepadUI
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Router {
|
||||||
|
WindowStore?: WindowStore;
|
||||||
|
CloseSideMenus(): void;
|
||||||
|
Navigate(path: string): void;
|
||||||
|
NavigateToAppProperties(): void;
|
||||||
|
NavigateToExternalWeb(url: string): void;
|
||||||
|
NavigateToInvites(): void;
|
||||||
|
NavigateToChat(): void;
|
||||||
|
NavigateToLibraryTab(): void;
|
||||||
|
NavigateToLayoutPreview(e: unknown): void;
|
||||||
OpenPowerMenu(unknown?: any): void;
|
OpenPowerMenu(unknown?: any): void;
|
||||||
get RunningApps(): AppOverview[];
|
get RunningApps(): AppOverview[];
|
||||||
get MainRunningApp(): AppOverview | undefined;
|
get MainRunningApp(): AppOverview | undefined;
|
||||||
@@ -96,3 +107,84 @@ export const Router = findModuleChild((m: Module) => {
|
|||||||
if (m[prop]?.Navigate && m[prop]?.NavigationManager) return m[prop];
|
if (m[prop]?.Navigate && m[prop]?.NavigationManager) return m[prop];
|
||||||
}
|
}
|
||||||
}) as Router;
|
}) as Router;
|
||||||
|
|
||||||
|
export interface Navigation {
|
||||||
|
Navigate(path: string): void;
|
||||||
|
NavigateBack(): void;
|
||||||
|
NavigateToAppProperties(): void;
|
||||||
|
NavigateToExternalWeb(url: string): void;
|
||||||
|
NavigateToInvites(): void;
|
||||||
|
NavigateToChat(): void;
|
||||||
|
NavigateToLibraryTab(): void;
|
||||||
|
NavigateToLayoutPreview(e: unknown): void;
|
||||||
|
NavigateToSteamWeb(url: string): void;
|
||||||
|
NavigateToWebRoute(unknown?: any, unknown2?: any): void;
|
||||||
|
OpenSideMenu(sideMenu: SideMenu): void;
|
||||||
|
OpenQuickAccessMenu(quickAccessTab?: QuickAccessTab): void;
|
||||||
|
OpenMainMenu(): void;
|
||||||
|
OpenPowerMenu(unknown?: any): void;
|
||||||
|
CloseSideMenus(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export let Navigation = {} as Navigation;
|
||||||
|
|
||||||
|
try {
|
||||||
|
(async () => {
|
||||||
|
let InternalNavigators: any = {};
|
||||||
|
if (!Router.NavigateToAppProperties || (Router as unknown as any).deckyShim) {
|
||||||
|
function initInternalNavigators() {
|
||||||
|
try {
|
||||||
|
InternalNavigators = findModuleChild((m: any) => {
|
||||||
|
if (typeof m !== 'object') return undefined;
|
||||||
|
for (let prop in m) {
|
||||||
|
if (m[prop]?.GetNavigator) {
|
||||||
|
return m[prop];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})?.GetNavigator();
|
||||||
|
} catch (e) {
|
||||||
|
console.error('[DFL:Router]: Failed to init internal navigators, trying again');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
initInternalNavigators();
|
||||||
|
while (!InternalNavigators?.AppProperties) {
|
||||||
|
console.log('[DFL:Router]: Trying to init internal navigators again');
|
||||||
|
await sleep(100);
|
||||||
|
initInternalNavigators();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const newNavigation = {
|
||||||
|
Navigate: Router.Navigate.bind(Router),
|
||||||
|
NavigateBack: Router.WindowStore?.GamepadUIMainWindowInstance?.NavigateBack.bind(
|
||||||
|
Router.WindowStore.GamepadUIMainWindowInstance,
|
||||||
|
),
|
||||||
|
NavigateToAppProperties: InternalNavigators?.AppProperties || Router.NavigateToAppProperties.bind(Router),
|
||||||
|
NavigateToExternalWeb: InternalNavigators?.ExternalWeb || Router.NavigateToExternalWeb.bind(Router),
|
||||||
|
NavigateToInvites: InternalNavigators?.Invites || Router.NavigateToInvites.bind(Router),
|
||||||
|
NavigateToChat: Router.NavigateToChat.bind(Router),
|
||||||
|
NavigateToLibraryTab: InternalNavigators?.LibraryTab || Router.NavigateToLibraryTab.bind(Router),
|
||||||
|
NavigateToLayoutPreview: Router.NavigateToLayoutPreview.bind(Router),
|
||||||
|
NavigateToSteamWeb: Router.WindowStore?.GamepadUIMainWindowInstance?.NavigateToSteamWeb.bind(
|
||||||
|
Router.WindowStore.GamepadUIMainWindowInstance,
|
||||||
|
),
|
||||||
|
NavigateToWebRoute: Router.WindowStore?.GamepadUIMainWindowInstance?.NavigateToWebRoute.bind(
|
||||||
|
Router.WindowStore.GamepadUIMainWindowInstance,
|
||||||
|
),
|
||||||
|
OpenSideMenu: Router.WindowStore?.GamepadUIMainWindowInstance?.MenuStore.OpenSideMenu.bind(
|
||||||
|
Router.WindowStore.GamepadUIMainWindowInstance.MenuStore,
|
||||||
|
),
|
||||||
|
OpenQuickAccessMenu: Router.WindowStore?.GamepadUIMainWindowInstance?.MenuStore.OpenQuickAccessMenu.bind(
|
||||||
|
Router.WindowStore.GamepadUIMainWindowInstance.MenuStore,
|
||||||
|
),
|
||||||
|
OpenMainMenu: Router.WindowStore?.GamepadUIMainWindowInstance?.MenuStore.OpenMainMenu.bind(
|
||||||
|
Router.WindowStore.GamepadUIMainWindowInstance.MenuStore,
|
||||||
|
),
|
||||||
|
CloseSideMenus: Router.CloseSideMenus.bind(Router),
|
||||||
|
OpenPowerMenu: Router.OpenPowerMenu.bind(Router),
|
||||||
|
} as Navigation;
|
||||||
|
|
||||||
|
Object.assign(Navigation, newNavigation);
|
||||||
|
})();
|
||||||
|
} catch (e) {
|
||||||
|
console.error('[DFL:Router]: Error initializing Navigation interface', e);
|
||||||
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export interface SliderFieldProps extends ItemProps {
|
|||||||
valueSuffix?: string;
|
valueSuffix?: string;
|
||||||
minimumDpadGranularity?: number;
|
minimumDpadGranularity?: number;
|
||||||
onChange?(value: number): void;
|
onChange?(value: number): void;
|
||||||
|
className?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const SliderField = Object.values(CommonUIModule).find((mod: any) =>
|
export const SliderField = Object.values(CommonUIModule).find((mod: any) =>
|
||||||
|
|||||||
317
src/deck-components/SteamClient.ts
Normal file
317
src/deck-components/SteamClient.ts
Normal file
@@ -0,0 +1,317 @@
|
|||||||
|
export interface Apps {
|
||||||
|
RegisterForAppOverviewChanges: any;
|
||||||
|
RegisterForAppDetails: any;
|
||||||
|
RegisterForLocalizationChanges: any;
|
||||||
|
RegisterForWorkshopChanges: any;
|
||||||
|
RegisterForWorkshopItemDownloads: any;
|
||||||
|
GetLibraryBootstrapData: any;
|
||||||
|
RegisterForAchievementChanges: any;
|
||||||
|
GetFriendAchievementsForApp: any;
|
||||||
|
GetMyAchievementsForApp: any;
|
||||||
|
AddUserTagToApps: any;
|
||||||
|
RemoveUserTagFromApps: any;
|
||||||
|
ClearUserTagsOnApps: any;
|
||||||
|
ClearAndSetUserTagsOnApp: any;
|
||||||
|
SetAppHidden: any;
|
||||||
|
ResetHiddenState: any;
|
||||||
|
SetAppLaunchOptions: any;
|
||||||
|
SetAppResolutionOverride: any;
|
||||||
|
SetAppCurrentLanguage: any;
|
||||||
|
SetAppAutoUpdateBehavior: any;
|
||||||
|
SetAppBackgroundDownloadsBehavior: any;
|
||||||
|
ToggleAppFamilyBlockedState: any;
|
||||||
|
ToggleAppSteamCloudEnabled: any;
|
||||||
|
ToggleAppSteamCloudSyncOnSuspendEnabled: any;
|
||||||
|
ToggleOverrideResolutionForInternalDisplay: any;
|
||||||
|
ToggleEnableSteamOverlayForApp: any;
|
||||||
|
ToggleEnableDesktopTheatreForApp: any;
|
||||||
|
BrowseLocalFilesForApp: any;
|
||||||
|
BrowseScreenshotsForApp: any;
|
||||||
|
BrowseScreenshotForApp: any;
|
||||||
|
BackupFilesForApp: any;
|
||||||
|
VerifyFilesForApp: any;
|
||||||
|
CreateDesktopShortcutForApp: any;
|
||||||
|
JoinAppContentBeta: any;
|
||||||
|
JoinAppContentBetaByPassword: any;
|
||||||
|
GetAchievementsInTimeRange: any;
|
||||||
|
GetSubscribedWorkshopItems: any;
|
||||||
|
SubscribeWorkshopItem: any;
|
||||||
|
GetDownloadedWorkshopItems: any;
|
||||||
|
DownloadWorkshopItem: any;
|
||||||
|
SetLocalScreenshotCaption: any;
|
||||||
|
SetLocalScreenshotSpoiler: any;
|
||||||
|
GetDetailsForScreenshotUpload: any;
|
||||||
|
UploadLocalScreenshot: any;
|
||||||
|
DeleteLocalScreenshot: any;
|
||||||
|
GetScreenshotsInTimeRange: any;
|
||||||
|
GetFriendsWhoPlay: any;
|
||||||
|
RequestLegacyCDKeysForApp: any;
|
||||||
|
GetSoundtrackDetails: any;
|
||||||
|
GetStoreTagLocalization: any;
|
||||||
|
GetLaunchOptionsForApp: any;
|
||||||
|
GetResolutionOverrideForApp: any;
|
||||||
|
ScanForShortcuts: any;
|
||||||
|
GetAllShortcuts: any;
|
||||||
|
GetShortcutData: any;
|
||||||
|
AddShortcut: any;
|
||||||
|
RemoveShortcut: any;
|
||||||
|
InstallFlatpakAppAndCreateShortcut: any;
|
||||||
|
ListFlatpakApps: any;
|
||||||
|
UninstallFlatpakApp: any;
|
||||||
|
ShowControllerConfigurator: any;
|
||||||
|
SetThirdPartyControllerConfiguration: any;
|
||||||
|
ToggleAllowDesktopConfiguration: any;
|
||||||
|
SetControllerRumblePreference: any;
|
||||||
|
GetCachedAppDetails: any;
|
||||||
|
SetCachedAppDetails: any;
|
||||||
|
ReportLibraryAssetCacheMiss: any;
|
||||||
|
SaveAchievementProgressCache: any;
|
||||||
|
SetStreamingClientForApp: any;
|
||||||
|
SetCustomArtworkForApp: any;
|
||||||
|
ClearCustomArtworkForApp: any;
|
||||||
|
SetCustomLogoPositionForApp: any;
|
||||||
|
ClearCustomLogoPositionForApp: any;
|
||||||
|
RequestIconDataForApp: any;
|
||||||
|
SpecifyCompatTool: any;
|
||||||
|
GetAvailableCompatTools: any;
|
||||||
|
SetShortcutName: any;
|
||||||
|
SetShortcutExe: any;
|
||||||
|
SetShortcutStartDir: any;
|
||||||
|
SetShortcutLaunchOptions: any;
|
||||||
|
SetShortcutIsVR: any;
|
||||||
|
PromptToChangeShortcut: any;
|
||||||
|
PromptToSelectShortcutIcon: any;
|
||||||
|
InstallApp: any;
|
||||||
|
RunGame: any;
|
||||||
|
VerifyApp: any;
|
||||||
|
StreamGame: any;
|
||||||
|
CancelLaunch: any;
|
||||||
|
TerminateApp: any;
|
||||||
|
UninstallApps: any;
|
||||||
|
ShowStore: any;
|
||||||
|
SetDLCEnabled: any;
|
||||||
|
ContinueGameAction: any;
|
||||||
|
CancelGameAction: any;
|
||||||
|
GetActiveGameActions: any;
|
||||||
|
GetGameActionDetails: any;
|
||||||
|
GetGameActionForApp: any;
|
||||||
|
SkipShaderProcessing: any;
|
||||||
|
MarkEulaAccepted: any;
|
||||||
|
MarkEulaRejected: any;
|
||||||
|
LoadEula: any;
|
||||||
|
GetConflictingFileTimestamps: any;
|
||||||
|
GetCloudPendingRemoteOperations: any;
|
||||||
|
ClearProton: any;
|
||||||
|
RegisterForMarketingMessages: any;
|
||||||
|
FetchMarketingMessages: any;
|
||||||
|
MarkMarketingMessageSeen: any;
|
||||||
|
ReportMarketingMessageSeen: any;
|
||||||
|
RegisterForGameActionStart: any;
|
||||||
|
RegisterForGameActionEnd: any;
|
||||||
|
RegisterForGameActionTaskChange: any;
|
||||||
|
RegisterForGameActionUserRequest: any;
|
||||||
|
RegisterForGameActionShowError: any;
|
||||||
|
RegisterForGameActionShowUI: any;
|
||||||
|
OpenAppSettingsDialog: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Window {
|
||||||
|
RegisterForExternalDisplayChanged: any;
|
||||||
|
SetManualDisplayScaleFactor: any;
|
||||||
|
SetAutoDisplayScale: any;
|
||||||
|
Minimize: any;
|
||||||
|
ProcessShuttingDown: any;
|
||||||
|
ToggleMaximize: any;
|
||||||
|
MoveTo: any;
|
||||||
|
ResizeTo: any;
|
||||||
|
SetMinSize: any;
|
||||||
|
SetResizeGrip: any;
|
||||||
|
SetComposition: any;
|
||||||
|
GamescopeBlur: any;
|
||||||
|
BringToFront: any;
|
||||||
|
SetForegroundWindow: any;
|
||||||
|
SetKeyFocus: any;
|
||||||
|
FlashWindow: any;
|
||||||
|
StopFlashWindow: any;
|
||||||
|
ShowWindow: any;
|
||||||
|
HideWindow: any;
|
||||||
|
SetWindowIcon: any;
|
||||||
|
GetWindowDimensions: any;
|
||||||
|
GetWindowRestoreDetails: any;
|
||||||
|
PositionWindowRelative: any;
|
||||||
|
GetMousePositionDetails: any;
|
||||||
|
IsWindowMinimized: any;
|
||||||
|
GetBrowserID: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SteamClient {
|
||||||
|
Apps: Apps;
|
||||||
|
Browser: any;
|
||||||
|
BrowserView: any;
|
||||||
|
ClientNotifications: any;
|
||||||
|
Cloud: any;
|
||||||
|
Console: any;
|
||||||
|
Downloads: any;
|
||||||
|
FamilySharing: any;
|
||||||
|
FriendSettings: any;
|
||||||
|
Friends: any;
|
||||||
|
GameSessions: any;
|
||||||
|
Input: any;
|
||||||
|
InstallFolder: any;
|
||||||
|
Installs: any;
|
||||||
|
MachineStorage: any;
|
||||||
|
Messaging: any;
|
||||||
|
Notifications: any;
|
||||||
|
OpenVR: any;
|
||||||
|
Overlay: any;
|
||||||
|
Parental: any;
|
||||||
|
RegisterIFrameNavigatedCallback: any;
|
||||||
|
RemotePlay: any;
|
||||||
|
RoamingStorage: any;
|
||||||
|
Screenshots: any;
|
||||||
|
Settings: any;
|
||||||
|
SharedConnection: any;
|
||||||
|
Stats: any;
|
||||||
|
Storage: any;
|
||||||
|
Streaming: any;
|
||||||
|
System: any;
|
||||||
|
UI: any;
|
||||||
|
URL: any;
|
||||||
|
Updates: any;
|
||||||
|
User: any;
|
||||||
|
WebChat: any;
|
||||||
|
Window: Window;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SteamShortcut {
|
||||||
|
appid: number;
|
||||||
|
data: {
|
||||||
|
bIsApplication: boolean;
|
||||||
|
strAppName: string;
|
||||||
|
strExePath: string;
|
||||||
|
strArguments: string;
|
||||||
|
strShortcutPath: string;
|
||||||
|
strSortAs: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @prop unAppID is not properly set by Steam for non-steam game shortcuts, so it defaults to 0 for them
|
||||||
|
*/
|
||||||
|
export interface LifetimeNotification {
|
||||||
|
unAppID: number;
|
||||||
|
nInstanceID: number;
|
||||||
|
bRunning: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type AppAchievements = {
|
||||||
|
nAchieved: number;
|
||||||
|
nTotal: number;
|
||||||
|
vecAchievedHidden: any[];
|
||||||
|
vecHighlight: any[];
|
||||||
|
vecUnachieved: any[];
|
||||||
|
};
|
||||||
|
|
||||||
|
export type AppLanguages = {
|
||||||
|
strDisplayName: string;
|
||||||
|
strShortName: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type LogoPinPositions = 'BottomLeft' | 'UpperLeft' | 'CenterCenter' | 'UpperCenter' | 'BottomCenter';
|
||||||
|
|
||||||
|
export interface LogoPosition {
|
||||||
|
pinnedPosition: LogoPinPositions;
|
||||||
|
nWidthPct: number;
|
||||||
|
nHeightPct: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface AppDetails {
|
||||||
|
achievements: AppAchievements;
|
||||||
|
bCanMoveInstallFolder: boolean;
|
||||||
|
bCloudAvailable: boolean;
|
||||||
|
bCloudEnabledForAccount: boolean;
|
||||||
|
bCloudEnabledForApp: boolean;
|
||||||
|
bCloudSyncOnSuspendAvailable: boolean;
|
||||||
|
bCloudSyncOnSuspendEnabled: boolean;
|
||||||
|
bCommunityMarketPresence: boolean;
|
||||||
|
bEnableAllowDesktopConfiguration: boolean;
|
||||||
|
bFreeRemovableLicense: boolean;
|
||||||
|
bHasAllLegacyCDKeys: boolean;
|
||||||
|
bHasAnyLocalContent: boolean;
|
||||||
|
bHasLockedPrivateBetas: boolean;
|
||||||
|
bIsExcludedFromSharing: boolean;
|
||||||
|
bIsSubscribedTo: boolean;
|
||||||
|
bOverlayEnabled: boolean;
|
||||||
|
bOverrideInternalResolution: boolean;
|
||||||
|
bRequiresLegacyCDKey: boolean;
|
||||||
|
bShortcutIsVR: boolean;
|
||||||
|
bShowCDKeyInMenus: boolean;
|
||||||
|
bShowControllerConfig: boolean;
|
||||||
|
bSupportsCDKeyCopyToClipboard: boolean;
|
||||||
|
bVRGameTheatreEnabled: boolean;
|
||||||
|
bWorkshopVisible: boolean;
|
||||||
|
eAppOwnershipFlags: number;
|
||||||
|
eAutoUpdateValue: number;
|
||||||
|
eBackgroundDownloads: number;
|
||||||
|
eCloudSync: number;
|
||||||
|
eControllerRumblePreference: number;
|
||||||
|
eDisplayStatus: number;
|
||||||
|
eEnableThirdPartyControllerConfiguration: number;
|
||||||
|
eSteamInputControllerMask: number;
|
||||||
|
iInstallFolder: number;
|
||||||
|
lDiskUsageBytes: number;
|
||||||
|
lDlcUsageBytes: number;
|
||||||
|
nBuildID: number;
|
||||||
|
nCompatToolPriority: number;
|
||||||
|
nPlaytimeForever: number;
|
||||||
|
nScreenshots: number;
|
||||||
|
rtLastTimePlayed: number;
|
||||||
|
rtLastUpdated: number;
|
||||||
|
rtPurchased: number;
|
||||||
|
selectedLanguage: {
|
||||||
|
strDisplayName: string;
|
||||||
|
strShortName: string;
|
||||||
|
};
|
||||||
|
strCloudBytesAvailable: string;
|
||||||
|
strCloudBytesUsed: string;
|
||||||
|
strCompatToolDisplayName: string;
|
||||||
|
strCompatToolName: string;
|
||||||
|
strDeveloperName: string;
|
||||||
|
strDeveloperURL: string;
|
||||||
|
strDisplayName: string;
|
||||||
|
strExternalSubscriptionURL: string;
|
||||||
|
strFlatpakAppID: string;
|
||||||
|
strHomepageURL: string;
|
||||||
|
strLaunchOptions: string;
|
||||||
|
strManualURL: string;
|
||||||
|
strOwnerSteamID: string;
|
||||||
|
strResolutionOverride: string;
|
||||||
|
strSelectedBeta: string;
|
||||||
|
strShortcutExe: string;
|
||||||
|
strShortcutLaunchOptions: string;
|
||||||
|
strShortcutStartDir: string;
|
||||||
|
strSteamDeckBlogURL: string;
|
||||||
|
unAppID: number;
|
||||||
|
vecBetas: any[];
|
||||||
|
vecDLC: any[];
|
||||||
|
vecDeckCompatTestResults: any[];
|
||||||
|
vecLanguages: AppLanguages[];
|
||||||
|
vecLegacyCDKeys: any[];
|
||||||
|
vecMusicAlbums: any[];
|
||||||
|
vecPlatforms: string[];
|
||||||
|
vecScreenShots: any[];
|
||||||
|
libraryAssets?: {
|
||||||
|
logoPosition?: LogoPosition;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SteamAppOverview {
|
||||||
|
display_name: string;
|
||||||
|
gameid: string;
|
||||||
|
appid: number;
|
||||||
|
icon_hash: string;
|
||||||
|
third_party_mod?: boolean;
|
||||||
|
selected_clientid?: string;
|
||||||
|
BIsModOrShortcut: () => boolean;
|
||||||
|
BIsShortcut: () => boolean;
|
||||||
|
}
|
||||||
@@ -65,16 +65,11 @@ export interface TabsProps {
|
|||||||
autoFocusContents?: boolean;
|
autoFocusContents?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
declare global {
|
|
||||||
interface Window {
|
|
||||||
DeckyPluginLoader: any;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let tabsComponent: any;
|
let tabsComponent: any;
|
||||||
|
|
||||||
const getTabs = async () => {
|
const getTabs = async () => {
|
||||||
if (tabsComponent) return tabsComponent;
|
if (tabsComponent) return tabsComponent;
|
||||||
|
// @ts-ignore
|
||||||
while (!window?.DeckyPluginLoader?.routerHook?.routes) {
|
while (!window?.DeckyPluginLoader?.routerHook?.routes) {
|
||||||
console.debug('[DFL:Tabs]: Waiting for Decky router...');
|
console.debug('[DFL:Tabs]: Waiting for Decky router...');
|
||||||
await sleep(500);
|
await sleep(500);
|
||||||
@@ -83,6 +78,7 @@ const getTabs = async () => {
|
|||||||
() => {
|
() => {
|
||||||
return findInReactTree(
|
return findInReactTree(
|
||||||
findInReactTree(
|
findInReactTree(
|
||||||
|
// @ts-ignore
|
||||||
window.DeckyPluginLoader.routerHook.routes
|
window.DeckyPluginLoader.routerHook.routes
|
||||||
.find((x: any) => x.props.path == '/library/app/:appid/achievements')
|
.find((x: any) => x.props.path == '/library/app/:appid/achievements')
|
||||||
.props.children.type(),
|
.props.children.type(),
|
||||||
@@ -109,27 +105,30 @@ try {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
if (oldTabsModule) oldTabs = Object.values(oldTabsModule).find((x: any) => x?.type?.toString()?.includes("((function(") && x?.type?.toString()?.includes("[\"tabs\""));
|
if (oldTabsModule)
|
||||||
|
oldTabs = Object.values(oldTabsModule).find((x: any) => x?.type?.toString()?.includes('((function(){'));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("Error finding oldTabs:", e)
|
console.error('Error finding oldTabs:', e);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tabs component as used in the library and media tabs. See {@link TabsProps}
|
* Tabs component as used in the library and media tabs. See {@link TabsProps}
|
||||||
* Unlike other components in `decky-frontend-lib`, this requires Decky Loader to be running.
|
* Unlike other components in `decky-frontend-lib`, this requires Decky Loader to be running.
|
||||||
*/
|
*/
|
||||||
export const Tabs = oldTabs || ((props: TabsProps) => {
|
export const Tabs =
|
||||||
const found = tabsComponent;
|
oldTabs ||
|
||||||
const [tc, setTC] = useState<FC<TabsProps>>(found);
|
(((props: TabsProps) => {
|
||||||
useEffect(() => {
|
const found = tabsComponent;
|
||||||
if (found) return;
|
const [tc, setTC] = useState<FC<TabsProps>>(found);
|
||||||
(async () => {
|
useEffect(() => {
|
||||||
console.debug('[DFL:Tabs]: Finding component...');
|
if (found) return;
|
||||||
const t = await getTabs();
|
(async () => {
|
||||||
console.debug('[DFL:Tabs]: Found!');
|
console.debug('[DFL:Tabs]: Finding component...');
|
||||||
setTC(t);
|
const t = await getTabs();
|
||||||
})();
|
console.debug('[DFL:Tabs]: Found!');
|
||||||
}, []);
|
setTC(t);
|
||||||
console.log('tc', tc);
|
})();
|
||||||
return tc ? createElement(tc, props) : <SteamSpinner />;
|
}, []);
|
||||||
}) as FC<TabsProps>;
|
console.log('tc', tc);
|
||||||
|
return tc ? createElement(tc, props) : <SteamSpinner />;
|
||||||
|
}) as FC<TabsProps>);
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { CommonUIModule } from '../webpack';
|
|||||||
import { ItemProps } from './Item';
|
import { ItemProps } from './Item';
|
||||||
|
|
||||||
export interface ToggleFieldProps extends ItemProps {
|
export interface ToggleFieldProps extends ItemProps {
|
||||||
|
highlightOnFocus?: boolean;
|
||||||
checked: boolean;
|
checked: boolean;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
onChange?(checked: boolean): void;
|
onChange?(checked: boolean): void;
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
export * from './Button';
|
export * from './Button';
|
||||||
export * from './ButtonItem';
|
export * from './ButtonItem';
|
||||||
export * from './Carousel';
|
export * from './Carousel';
|
||||||
|
export * from './ControlsList';
|
||||||
export * from './Dialog';
|
export * from './Dialog';
|
||||||
|
export * from './DialogCheckbox';
|
||||||
export * from './Dropdown';
|
export * from './Dropdown';
|
||||||
export * from './Field';
|
export * from './Field';
|
||||||
export * from './Focusable';
|
export * from './Focusable';
|
||||||
export * from './FocusRing';
|
export * from './FocusRing';
|
||||||
export * from './FooterLegend';
|
export * from './FooterLegend';
|
||||||
|
export * from './Marquee';
|
||||||
export * from './Menu';
|
export * from './Menu';
|
||||||
export * from './Modal';
|
export * from './Modal';
|
||||||
export * from './Panel';
|
export * from './Panel';
|
||||||
@@ -21,3 +24,57 @@ export * from './Tabs';
|
|||||||
export * from './TextField';
|
export * from './TextField';
|
||||||
export * from './Toggle';
|
export * from './Toggle';
|
||||||
export * from './ToggleField';
|
export * from './ToggleField';
|
||||||
|
export * from './SteamClient';
|
||||||
|
|
||||||
|
import { SteamClient, SteamAppOverview, LogoPosition } from './SteamClient';
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
var SteamClient: SteamClient;
|
||||||
|
|
||||||
|
interface Window {
|
||||||
|
LocalizationManager: {
|
||||||
|
m_mapTokens: Map<string, string>;
|
||||||
|
m_mapFallbackTokens: Map<string, 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;
|
||||||
|
};
|
||||||
|
strAccountBalance: string;
|
||||||
|
strAccountName: string;
|
||||||
|
strSteamID: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -349,6 +349,98 @@ type GamepadSliderClasses = Record<
|
|||||||
string
|
string
|
||||||
>;
|
>;
|
||||||
|
|
||||||
|
type AppDetailsHeaderClasses = Record<
|
||||||
|
| 'AddBoxSizer'
|
||||||
|
| 'Background'
|
||||||
|
| 'Bottom'
|
||||||
|
| 'BottomCenter'
|
||||||
|
| 'BottomLeft'
|
||||||
|
| 'BottomRight'
|
||||||
|
| 'BoxSizer'
|
||||||
|
| 'BoxSizerButtonContainer'
|
||||||
|
| 'BoxSizerContainer'
|
||||||
|
| 'BoxSizerDelete'
|
||||||
|
| 'BoxSizerDragBox'
|
||||||
|
| 'BoxSizerEdge'
|
||||||
|
| 'BoxSizerGridBox'
|
||||||
|
| 'BoxSizerInfo'
|
||||||
|
| 'BoxSizerSettings'
|
||||||
|
| 'BoxSizerValidRegion'
|
||||||
|
| 'CenterCenter'
|
||||||
|
| 'DialogButton'
|
||||||
|
| 'EdgeDown'
|
||||||
|
| 'FallbackArt'
|
||||||
|
| 'Features'
|
||||||
|
| 'FullscreenEnterActive'
|
||||||
|
| 'FullscreenEnterDone'
|
||||||
|
| 'FullscreenEnterStart'
|
||||||
|
| 'FullscreenExitActive'
|
||||||
|
| 'FullscreenExitDone'
|
||||||
|
| 'FullscreenExitStart'
|
||||||
|
| 'HeaderBackgroundImage'
|
||||||
|
| 'ImgBlur'
|
||||||
|
| 'ImgBlurBackdrop'
|
||||||
|
| 'ImgContainer'
|
||||||
|
| 'ImgSrc'
|
||||||
|
| 'Left'
|
||||||
|
| 'Loaded'
|
||||||
|
| 'Middle'
|
||||||
|
| 'NoArt'
|
||||||
|
| 'PinBox'
|
||||||
|
| 'Right'
|
||||||
|
| 'SVGTitle'
|
||||||
|
| 'SaveBoxSizer'
|
||||||
|
| 'TextNameSpace'
|
||||||
|
| 'TitleImageContainer'
|
||||||
|
| 'TitleLogo'
|
||||||
|
| 'TitleSection'
|
||||||
|
| 'Top'
|
||||||
|
| 'TopCapsule'
|
||||||
|
| 'TopGradient'
|
||||||
|
| 'TopLeft'
|
||||||
|
| 'TopRight'
|
||||||
|
| 'UpperCenter'
|
||||||
|
| 'UpperLeft'
|
||||||
|
| 'duration-app-launch',
|
||||||
|
string
|
||||||
|
>;
|
||||||
|
|
||||||
|
type AppDetailsClasses = Record<
|
||||||
|
| 'BreakNarrow'
|
||||||
|
| 'BreakShort'
|
||||||
|
| 'BreakTall'
|
||||||
|
| 'BreakUltraWide'
|
||||||
|
| 'BreakWide'
|
||||||
|
| 'Container'
|
||||||
|
| 'GamepadUIBreakNarrow'
|
||||||
|
| 'GamepadUIBreakShort'
|
||||||
|
| 'GamepadUIBreakWide'
|
||||||
|
| 'Glassy'
|
||||||
|
| 'Header'
|
||||||
|
| 'HeaderLoaded'
|
||||||
|
| 'InnerContainer'
|
||||||
|
| 'ItemFocusAnim-darkGrey'
|
||||||
|
| 'ItemFocusAnim-darkerGrey'
|
||||||
|
| 'ItemFocusAnim-darkerGrey-nocolor'
|
||||||
|
| 'ItemFocusAnim-green'
|
||||||
|
| 'ItemFocusAnim-grey'
|
||||||
|
| 'ItemFocusAnimBorder-darkGrey'
|
||||||
|
| 'PlayBar'
|
||||||
|
| 'PreventScrolling'
|
||||||
|
| 'RightBreakNarrow'
|
||||||
|
| 'RightBreakUltraNarrow'
|
||||||
|
| 'RightBreakUltraWide'
|
||||||
|
| 'RightBreakWide'
|
||||||
|
| 'ScrollContainer'
|
||||||
|
| 'ShowPlayBar'
|
||||||
|
| 'Throbber'
|
||||||
|
| 'duration-app-launch'
|
||||||
|
| 'fadein'
|
||||||
|
| 'focusAnimation'
|
||||||
|
| 'hoverAnimation',
|
||||||
|
string
|
||||||
|
>;
|
||||||
|
|
||||||
export const quickAccessMenuClasses: QuickAccessMenuClasses = findModule(
|
export const quickAccessMenuClasses: QuickAccessMenuClasses = findModule(
|
||||||
(mod) => typeof mod === 'object' && mod?.Title?.includes('quickaccessmenu'),
|
(mod) => typeof mod === 'object' && mod?.Title?.includes('quickaccessmenu'),
|
||||||
);
|
);
|
||||||
@@ -378,3 +470,9 @@ export const playSectionClasses: PlaySectionClasses = findModule(
|
|||||||
export const gamepadSliderClasses: GamepadSliderClasses = findModule(
|
export const gamepadSliderClasses: GamepadSliderClasses = findModule(
|
||||||
(mod) => typeof mod === 'object' && mod?.SliderControlPanelGroup?.includes('gamepadslider'),
|
(mod) => typeof mod === 'object' && mod?.SliderControlPanelGroup?.includes('gamepadslider'),
|
||||||
);
|
);
|
||||||
|
export const appDetailsHeaderClasses: AppDetailsHeaderClasses = findModule(
|
||||||
|
(mod) => typeof mod === 'object' && mod?.TopCapsule?.includes('sharedappdetailsheader'),
|
||||||
|
);
|
||||||
|
export const appDetailsClasses: AppDetailsClasses = findModule(
|
||||||
|
(mod) => typeof mod === 'object' && mod?.HeaderLoaded?.includes('appdetails_'),
|
||||||
|
);
|
||||||
|
|||||||
@@ -26,8 +26,10 @@ export type RoutePatch = (route: RouteProps) => RouteProps;
|
|||||||
export interface RouterHook {
|
export interface RouterHook {
|
||||||
addRoute(path: string, component: ComponentType, props?: Omit<RouteProps, 'path' | 'children'>): void;
|
addRoute(path: string, component: ComponentType, props?: Omit<RouteProps, 'path' | 'children'>): void;
|
||||||
addPatch(path: string, patch: RoutePatch): RoutePatch;
|
addPatch(path: string, patch: RoutePatch): RoutePatch;
|
||||||
removePatch(path: string, patch: RoutePatch): void;
|
addGlobalComponent(name: string, component: ComponentType): void;
|
||||||
removeRoute(path: string): void;
|
removeRoute(path: string): void;
|
||||||
|
removePatch(path: string, patch: RoutePatch): void;
|
||||||
|
removeGlobalComponent(name: string): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ToastData {
|
export interface ToastData {
|
||||||
@@ -40,6 +42,10 @@ export interface ToastData {
|
|||||||
contentClassName?: string;
|
contentClassName?: string;
|
||||||
duration?: number;
|
duration?: number;
|
||||||
critical?: boolean;
|
critical?: boolean;
|
||||||
|
eType?: number;
|
||||||
|
sound?: number;
|
||||||
|
playSound?: boolean;
|
||||||
|
showToast?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Toaster {
|
export interface Toaster {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ 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)
|
||||||
return FocusNavController.m_ActiveContext.m_rgGamepadNavigationTrees.find((x: any) => x.m_ID == 'root_1_').Root
|
const context = FocusNavController.m_ActiveContext || FocusNavController.m_LastActiveContext;
|
||||||
|
return context.m_rgGamepadNavigationTrees.find((x: any) => x.m_ID == 'root_1_').Root
|
||||||
.Element.ownerDocument.defaultView;
|
.Element.ownerDocument.defaultView;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"githubPages": false,
|
|
||||||
"categorizeByGroup": false,
|
"categorizeByGroup": false,
|
||||||
"excludeExternals": true
|
"excludeExternals": true
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user