Merge branch 'main' into main

This commit is contained in:
Seth Burkart
2025-06-04 16:12:05 +10:00
committed by GitHub
16 changed files with 355 additions and 52 deletions
+5 -3
View File
@@ -7,6 +7,7 @@ import type {
StringSetting,
ButtonSetting,
HotkeySetting,
ComponentSetting,
} from "./types";
import { createPluginAPI } from "./createAPI";
import browser from "webextension-polyfill";
@@ -299,7 +300,8 @@ export class PluginManager {
options: Array<{ value: string; label: string }>;
})
| (Omit<ButtonSetting, "type"> & { type: "button"; id: string; trigger?: () => void | Promise<void> })
| (Omit<HotkeySetting, "type"> & { type: "hotkey"; id: string });
| (Omit<HotkeySetting, "type"> & { type: "hotkey"; id: string })
| (Omit<ComponentSetting, "type"> & { type: "component"; id: string; component: any });
};
// Actual type is more complex, see original code, but this gives the gist for the JSDoc.
// Array<{ pluginId: string; name: string; description: string; beta?: boolean; settings: Record<string, ProcessedSetting>; disableToggle?: boolean; }>
@@ -309,8 +311,8 @@ export class PluginManager {
([key, setting]) => {
const settingObj = setting as any;
let result: any;
if (settingObj.type === "button") {
// For button, keep the trigger function
if (settingObj.type === "button" || settingObj.type === "component") {
// For button or component, keep the functions
result = { ...settingObj };
} else {
// For others, strip functions
+11
View File
@@ -6,6 +6,7 @@ import type {
StringSetting,
HotkeySetting,
PluginSettings,
ComponentSetting,
} from "./types";
/**
@@ -114,6 +115,16 @@ export function buttonSetting(
* excluding the `type` property (e.g., `title`, `default` hotkey string).
* @returns {HotkeySetting} A complete hotkey setting object with `type: "hotkey"`.
*/
export function componentSetting(
options: Omit<ComponentSetting, "type">,
): ComponentSetting {
return {
type: "component",
...options,
};
}
export function hotkeySetting(
options: Omit<HotkeySetting, "type">,
): HotkeySetting {
+12 -2
View File
@@ -48,13 +48,21 @@ export interface HotkeySetting {
description?: string;
}
export interface ComponentSetting {
type: "component";
title: string;
description?: string;
component: any;
}
export type PluginSetting =
| BooleanSetting
| StringSetting
| NumberSetting
| SelectSetting<string>
| ButtonSetting
| HotkeySetting;
| HotkeySetting
| ComponentSetting;
export type PluginSettings = {
[key: string]: PluginSetting;
@@ -71,7 +79,9 @@ export type SettingValue<T extends PluginSetting> = T extends BooleanSetting
? O
: T extends HotkeySetting
? string
: never;
: T extends ComponentSetting
? never
: never;
export type SettingsAPI<T extends PluginSettings> = {
[K in keyof T]: SettingValue<T[K]>;