Compare commits

...

29 Commits

Author SHA1 Message Date
semantic-release-bot
79d73dea2e chore(release): 1.1.0 [CI SKIP] 2022-07-09 14:34:48 +00:00
hulkrelax
602f93ae6a feat(Router.tsx): adds more methods to router (#9)
Adds the ability to get the main running app and to navigate to the running app
2022-07-09 10:34:09 -04:00
semantic-release-bot
d86c86cd80 chore(release): 1.0.2 [CI SKIP] 2022-07-07 04:03:42 +00:00
AAGaming
51c418d560 fix(Plugin): support non-ui plugins 2022-07-07 00:00:40 -04:00
semantic-release-bot
95de7346df chore(release): 1.0.1 [CI SKIP] 2022-06-29 15:53:25 +00:00
AAGaming
58933f827c fix(package): enable tree shaking 2022-06-29 11:50:20 -04:00
hulkrelax
0ff3476987 bugfix: Fix issue with incorrect typing on fetchNoCors (#7)
* make fetchNoCors have similar typing to fetch

* request param should be optional
2022-06-28 21:12:44 -04:00
semantic-release-bot
2c7d266c81 chore(release): 1.0.0 [CI SKIP] 2022-06-23 02:58:38 +00:00
AAGaming
9bd96227a0 refactor(components): rename Field components
BREAKING CHANGE: Toggle -> ToggleField Slider -> SliderField & add Toggle component
2022-06-22 22:57:51 -04:00
semantic-release-bot
ddafa5666d chore(release): 0.12.3 [CI SKIP] 2022-06-23 02:45:11 +00:00
AAGaming
46977496fd fix(Field): description is a string you idiot 2022-06-22 22:44:13 -04:00
semantic-release-bot
71a6c79384 chore(release): 0.12.2 [CI SKIP] 2022-06-23 01:53:07 +00:00
AAGaming
da4c79b5ae fix(Field): title -> label 2022-06-22 21:52:17 -04:00
semantic-release-bot
7b04bf5827 chore(release): 0.12.1 [CI SKIP] 2022-06-23 01:47:38 +00:00
AAGaming
a87e1bb46f fix(components): export FIeld 2022-06-22 21:46:50 -04:00
semantic-release-bot
b6e2e7e4dc chore(release): 0.12.0 [CI SKIP] 2022-06-23 01:45:47 +00:00
AAGaming
7d82a82e9c feat(components): add Field 2022-06-22 21:44:46 -04:00
semantic-release-bot
0cee60d122 chore(release): 0.11.1 [CI SKIP] 2022-06-23 00:42:16 +00:00
AAGaming
7efc0347f7 fix(Router): make specifying quick access tab not required 2022-06-22 20:41:22 -04:00
semantic-release-bot
d227858e62 chore(release): 0.11.0 [CI SKIP] 2022-06-20 21:37:03 +00:00
AAGaming
db64f34725 feat(utils): add sleep util 2022-06-20 17:35:56 -04:00
semantic-release-bot
b08aadb810 chore(release): 0.10.5 [CI SKIP] 2022-06-20 03:15:39 +00:00
AAGaming
2afb7f16bb fix(patcher): why the hell did i do it that way 2022-06-19 23:14:52 -04:00
semantic-release-bot
32d1303191 chore(release): 0.10.4 [CI SKIP] 2022-06-19 15:40:15 +00:00
AAGaming
1ce15d261f fix(plugin): correct return type on injectCssIntoTab 2022-06-19 11:39:35 -04:00
semantic-release-bot
bf52e0761c chore(release): 0.10.3 [CI SKIP] 2022-06-18 15:16:51 +00:00
AAGaming
823a2745f9 fix(ServerAPI): add injectCssIntoTab to serverAPI typings 2022-06-18 11:10:35 -04:00
semantic-release-bot
21f7874cab chore(release): 0.10.2 [CI SKIP] 2022-06-16 21:33:44 +00:00
AAGaming
077334e376 fix(Router): add NavigateBackOrOpenMenu() 2022-06-16 17:32:58 -04:00
11 changed files with 213 additions and 17 deletions

View File

@@ -1,3 +1,106 @@
# [1.1.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v1.0.2...v1.1.0) (2022-07-09)
### Features
* **Router.tsx:** adds more methods to router ([#9](https://github.com/SteamDeckHomebrew/decky-frontend-lib/issues/9)) ([602f93a](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/602f93ae6a5ceca5383b888cd4803638799558c5))
## [1.0.2](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v1.0.1...v1.0.2) (2022-07-07)
### Bug Fixes
* **Plugin:** support non-ui plugins ([51c418d](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/51c418d560247c917125cd5534a978256724e5f3))
## [1.0.1](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v1.0.0...v1.0.1) (2022-06-29)
### Bug Fixes
* **package:** enable tree shaking ([58933f8](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/58933f827ce2e2ae9b162da4e0061a7591c5759d))
# [1.0.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.12.3...v1.0.0) (2022-06-23)
### Code Refactoring
* **components:** rename Field components ([9bd9622](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/9bd96227a0bb295dcc29abca71e37983307f0505))
### BREAKING CHANGES
* **components:** Toggle -> ToggleField Slider -> SliderField & add Toggle component
## [0.12.3](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.12.2...v0.12.3) (2022-06-23)
### Bug Fixes
* **Field:** description is a string you idiot ([4697749](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/46977496fd4cbe266c370fcffe59a9d9b7543a92))
## [0.12.2](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.12.1...v0.12.2) (2022-06-23)
### Bug Fixes
* **Field:** title -> label ([da4c79b](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/da4c79b5aeb3c589527e17ad29610a8e3f929b79))
## [0.12.1](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.12.0...v0.12.1) (2022-06-23)
### Bug Fixes
* **components:** export FIeld ([a87e1bb](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/a87e1bb46f749e10ea2b94a011df48f162834c25))
# [0.12.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.11.1...v0.12.0) (2022-06-23)
### Features
* **components:** add Field ([7d82a82](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/7d82a82e9c4db59832593cb6f0f78775b252dc69))
## [0.11.1](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.11.0...v0.11.1) (2022-06-23)
### Bug Fixes
* **Router:** make specifying quick access tab not required ([7efc034](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/7efc0347f7aa22773feccb0763280c4fd1c4a231))
# [0.11.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.10.5...v0.11.0) (2022-06-20)
### Features
* **utils:** add sleep util ([db64f34](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/db64f3472542b080b1d470c6b8d7aa441db0bfe6))
## [0.10.5](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.10.4...v0.10.5) (2022-06-20)
### Bug Fixes
* **patcher:** why the hell did i do it that way ([2afb7f1](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/2afb7f16bb219013d338bc4e002605d32235385c))
## [0.10.4](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.10.3...v0.10.4) (2022-06-19)
### Bug Fixes
* **plugin:** correct return type on injectCssIntoTab ([1ce15d2](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/1ce15d261f4726a2f8bdaff7c8a98497f2622969))
## [0.10.3](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.10.2...v0.10.3) (2022-06-18)
### Bug Fixes
* **ServerAPI:** add injectCssIntoTab to serverAPI typings ([823a274](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/823a2745f9717ed2d2a5d95e2ef25739bffc18c9))
## [0.10.2](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.10.1...v0.10.2) (2022-06-16)
### Bug Fixes
* **Router:** add NavigateBackOrOpenMenu() ([077334e](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/077334e376fb42283e094f0b57c818c580c6f7ba))
## [0.10.1](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v0.10.0...v0.10.1) (2022-06-16)

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "decky-frontend-lib",
"version": "0.10.1",
"version": "1.1.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "decky-frontend-lib",
"version": "0.10.1",
"version": "1.1.0",
"hasInstallScript": true,
"license": "GPL-2.0-or-later",
"devDependencies": {

View File

@@ -1,10 +1,11 @@
{
"name": "decky-frontend-lib",
"version": "0.10.1",
"version": "1.1.0",
"description": "A library for building decky plugins",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"module": "dist/index.js",
"sideEffects": false,
"scripts": {
"build": "shx rm -rf dist && tsc -b",
"dev": "tsc -b -w",

View File

@@ -0,0 +1,22 @@
import { FC, HTMLAttributes, ReactNode, RefAttributes } from 'react';
import { findModuleChild } from '../webpack';
export interface FieldProps extends HTMLAttributes<HTMLDivElement> {
label?: string | ReactNode;
description?: string | ReactNode;
disabled?: boolean;
icon?: ReactNode;
childrenLayout?: string;
childrenContainerWidth?: string;
padding?: string;
highlightOnFocus?: boolean;
indentLevel?: number;
verticalAlignment?: string;
}
export const Field = findModuleChild((m) => {
if (typeof m !== "object") return undefined;
for (let prop in m) {
if (m[prop]?.render?.toString().includes('"shift-children-below"')) return m[prop]
}
}) as FC<FieldProps & RefAttributes<HTMLDivElement>>;

View File

@@ -17,18 +17,67 @@ export enum QuickAccessTab {
Decky,
}
export enum DisplayStatus {
Invalid = 0,
Launching = 1,
Uninstalling = 2,
Installing = 3,
Running = 4,
Validating = 5,
Updating = 6,
Downloading = 7,
Synchronizing = 8,
ReadyToInstall = 9,
ReadyToPreload = 10,
ReadyToLaunch = 11,
RegionRestricted = 12,
PresaleOnly = 13,
InvalidPlatform = 14,
PreloadComplete = 16,
BorrowerLocked = 17,
UpdatePaused = 18,
UpdateQueued = 19,
UpdateRequired = 20,
UpdateDisabled = 21,
DownloadPaused = 22,
DownloadQueued = 23,
DownloadRequired = 24,
DownloadDisabled = 25,
LicensePending = 26,
LicenseExpired = 27,
AvailForFree = 28,
AvailToBorrow = 29,
AvailGuestPass = 30,
Purchase = 31,
Unavailable = 32,
NotLaunchable = 33,
CloudError = 34,
CloudOutOfDate = 35,
Terminating = 36,
}
export type AppOverview = {
appid: string
display_name: string
display_status: DisplayStatus
sort_as: string
}
export interface Router {
CloseSideMenus(): void;
OpenQuickAccessMenu(quickAccessTab: QuickAccessTab): void;
OpenQuickAccessMenu(quickAccessTab?: QuickAccessTab): void;
GetQuickAccessTab(): QuickAccessTab;
Navigate(path: string): void;
NavigateBackOrOpenMenu(): void;
NavigateToExternalWeb(url: string): void;
NavigateToRunningApp(replace?: boolean): void;
NavigateToStore(): void;
ToggleSideMenu(sideMenu: SideMenu): void;
CloseSideMenus(): void;
OpenSideMenu(sideMenu: SideMenu): void;
OpenPowerMenu(unknown?: any): void;
get RunningApps(): any;
get MainRunningApp(): AppOverview | undefined;
}
export const Router = findModuleChild((m: Module) => {

View File

@@ -9,7 +9,7 @@ export interface NotchLabel {
value?: number;
}
export interface SliderProps extends ItemProps {
export interface SliderFieldProps extends ItemProps {
value: number;
min?: number;
max?: number;
@@ -27,6 +27,6 @@ export interface SliderProps extends ItemProps {
onChange?(value: number): void;
}
export const Slider = Object.values(CommonUIModule).find((mod: any) =>
export const SliderField = Object.values(CommonUIModule).find((mod: any) =>
mod?.toString()?.includes('SliderField,fallback'),
) as FC<SliderProps>;
) as FC<SliderFieldProps>;

View File

@@ -1,14 +1,14 @@
import { FC } from 'react';
import { CommonUIModule } from '../webpack';
import { ItemProps } from './Item';
export interface ToggleProps extends ItemProps {
checked: boolean;
export interface ToggleProps {
value: boolean;
disabled?: boolean;
onChange?(checked: boolean): void;
navRef?: any; // TODO figure out what this is
}
export const Toggle = Object.values(CommonUIModule).find((mod: any) =>
mod?.render?.toString()?.includes('ToggleField,fallback'),
mod?.render?.toString()?.includes('.ToggleOff)'),
) as FC<ToggleProps>;

View File

@@ -0,0 +1,14 @@
import { FC } from 'react';
import { CommonUIModule } from '../webpack';
import { ItemProps } from './Item';
export interface ToggleFieldProps extends ItemProps {
checked: boolean;
disabled?: boolean;
onChange?(checked: boolean): void;
}
export const ToggleField = Object.values(CommonUIModule).find((mod: any) =>
mod?.render?.toString()?.includes('ToggleField,fallback'),
) as FC<ToggleFieldProps>;

View File

@@ -1,6 +1,7 @@
export * from './Button';
export * from './ButtonItem';
export * from './Dropdown';
export * from './Field';
export * from './Focusable';
export * from './Menu';
export * from './Modal';
@@ -8,9 +9,10 @@ export * from './Panel';
export * from './ProgressBar';
export * from './Router';
export * from './SidebarNavigation';
export * from './Slider';
export * from './SliderField';
export * from './Spinner';
export * from './static-classes';
export * from './SteamSpinner';
export * from './TextField';
export * from './Toggle';
export * from './ToggleField';

View File

@@ -4,7 +4,7 @@ import { RouteProps } from 'react-router';
export interface Plugin {
title: JSX.Element;
icon: JSX.Element;
content: JSX.Element;
content?: JSX.Element;
onDismount?(): void;
}
@@ -29,8 +29,9 @@ export interface ServerAPI {
routerHook: RouterHook;
callPluginMethod<TArgs = {}, TRes = {}>(methodName: string, args: TArgs): Promise<ServerResponse<TRes>>;
callServerMethod<TArgs = {}, TRes = {}>(methodName: string, args: TArgs): Promise<ServerResponse<TRes>>;
fetchNoCors<TRes = {}>(url: string, request: RequestInfo): Promise<ServerResponse<TRes>>;
fetchNoCors<TRes = {}>(url: RequestInfo, request?: RequestInit): Promise<ServerResponse<TRes>>;
executeInTab(tab: string, runAsync: boolean, code: string): Promise<unknown>;
injectCssIntoTab<TRes = string>(tab: string, style: string): Promise<ServerResponse<TRes>>;
removeCssFromTab(tab: string, cssId: string): Promise<unknown>;
}

View File

@@ -42,7 +42,7 @@ export function fakeRenderComponent(fun: Function): any {
return res;
}
export function beforePatch(obj: any, name: string, fnc: Function): void {
export function beforePatch(obj: any, name: string, fnc: (args: any[]) => any): void {
const orig = obj[name];
obj[name] = function (...args: any[]) {
fnc.call(this, args);
@@ -53,7 +53,7 @@ export function beforePatch(obj: any, name: string, fnc: Function): void {
obj[name].__deckyOrig = orig;
}
export function afterPatch(obj: any, name: string, fnc: Function): void {
export function afterPatch(obj: any, name: string, fnc: (args: any[], ret: any) => any): void {
const orig = obj[name];
obj[name] = function (...args: any[]) {
let ret = orig.call(this, ...args);
@@ -65,7 +65,7 @@ export function afterPatch(obj: any, name: string, fnc: Function): void {
obj[name].__deckyOrig = orig;
}
export function replacePatch(obj: any, name: string, fnc: Function): void {
export function replacePatch(obj: any, name: string, fnc: (args: any[]) => any): void {
const orig = obj[name];
obj[name] = function (...args: any[]) {
const ret = fnc.call(this, args);
@@ -88,4 +88,8 @@ export function getReactInstance(o: HTMLElement | Element | Node) {
export function joinClassNames(...classes: string[]): string {
return classes.join(" ");
}
export function sleep(ms: number) {
return new Promise(res => setTimeout(res, ms));
}