mirror of
https://github.com/Equicord/Equicord.git
synced 2025-06-13 08:33:01 -04:00
SpotifyControls plugin (#190)
This commit is contained in:
parent
7d5ade21fc
commit
6a8564089b
9 changed files with 852 additions and 64 deletions
|
@ -22,10 +22,13 @@ import type Other from "discord-types/other";
|
|||
import type Stores from "discord-types/stores";
|
||||
|
||||
import { LazyComponent, lazyWebpack } from "../utils/misc";
|
||||
import { _resolveReady, filters, findByCode, mapMangledModuleLazy, waitFor } from "./webpack";
|
||||
import { proxyLazy } from "../utils/proxyLazy";
|
||||
import { _resolveReady, filters, findByCode, mapMangledModule, mapMangledModuleLazy, waitFor } from "./webpack";
|
||||
|
||||
export const Margins = lazyWebpack(filters.byProps("marginTop20"));
|
||||
|
||||
export let FluxDispatcher: Other.FluxDispatcher;
|
||||
export const Flux = lazyWebpack(filters.byProps("connectStores"));
|
||||
export let React: typeof import("react");
|
||||
export const ReactDOM: typeof import("react-dom") = lazyWebpack(filters.byProps("createPortal", "render"));
|
||||
|
||||
|
@ -175,3 +178,78 @@ export type TextProps = React.PropsWithChildren & {
|
|||
};
|
||||
|
||||
export type TextVariant = "heading-sm/normal" | "heading-sm/medium" | "heading-sm/bold" | "heading-md/normal" | "heading-md/medium" | "heading-md/bold" | "heading-lg/normal" | "heading-lg/medium" | "heading-lg/bold" | "heading-xl/normal" | "heading-xl/medium" | "heading-xl/bold" | "heading-xxl/normal" | "heading-xxl/medium" | "heading-xxl/bold" | "eyebrow" | "heading-deprecated-14/normal" | "heading-deprecated-14/medium" | "heading-deprecated-14/bold" | "text-xxs/normal" | "text-xxs/medium" | "text-xxs/semibold" | "text-xxs/bold" | "text-xs/normal" | "text-xs/medium" | "text-xs/semibold" | "text-xs/bold" | "text-sm/normal" | "text-sm/medium" | "text-sm/semibold" | "text-sm/bold" | "text-md/normal" | "text-md/medium" | "text-md/semibold" | "text-md/bold" | "text-lg/normal" | "text-lg/medium" | "text-lg/semibold" | "text-lg/bold" | "display-md" | "display-lg" | "code";
|
||||
|
||||
type RC<C> = React.ComponentType<React.PropsWithChildren<C & Record<string, any>>>;
|
||||
interface Menu {
|
||||
ContextMenu: RC<{
|
||||
navId: string;
|
||||
onClose(): void;
|
||||
className?: string;
|
||||
style?: React.CSSProperties;
|
||||
hideScroller?: boolean;
|
||||
onSelect?(): void;
|
||||
}>;
|
||||
MenuSeparator: React.ComponentType;
|
||||
MenuGroup: RC<any>;
|
||||
MenuItem: RC<{
|
||||
id: string;
|
||||
label: string;
|
||||
render?: React.ComponentType;
|
||||
onChildrenScroll?: Function;
|
||||
childRowHeight?: number;
|
||||
listClassName?: string;
|
||||
}>;
|
||||
MenuCheckboxItem: RC<{
|
||||
id: string;
|
||||
}>;
|
||||
MenuRadioItem: RC<{
|
||||
id: string;
|
||||
}>;
|
||||
MenuControlItem: RC<{
|
||||
id: string;
|
||||
interactive?: boolean;
|
||||
}>;
|
||||
}
|
||||
|
||||
/**
|
||||
* Discord's Context menu items.
|
||||
* To use anything but Menu.ContextMenu, your plugin HAS TO
|
||||
* depend on MenuItemDeobfuscatorApi. Otherwise they will throw
|
||||
*/
|
||||
export const Menu = proxyLazy(() => {
|
||||
const hasDeobfuscator = Vencord.Settings.plugins.MenuItemDeobfuscatorApi.enabled;
|
||||
const menuItems = ["MenuSeparator", "MenuGroup", "MenuItem", "MenuCheckboxItem", "MenuRadioItem", "MenuControlItem"];
|
||||
|
||||
const map = mapMangledModule("♫ ⊂(。◕‿‿◕。⊂) ♪", {
|
||||
ContextMenu: filters.byCode("getContainerProps"),
|
||||
...Object.fromEntries((hasDeobfuscator ? menuItems : []).map(s => [s, (m: any) => m.name === s]))
|
||||
}) as Menu;
|
||||
|
||||
if (!hasDeobfuscator) {
|
||||
for (const m of menuItems)
|
||||
map[m] = () => {
|
||||
throw new Error(`Your plugin needs to depend on MenuItemDeobfuscatorApi to use ${m}`);
|
||||
};
|
||||
}
|
||||
|
||||
return map;
|
||||
});
|
||||
|
||||
export const ContextMenu = mapMangledModuleLazy('type:"CONTEXT_MENU_OPEN"', {
|
||||
open: filters.byCode("stopPropagation"),
|
||||
openLazy: m => m.toString().length < 50,
|
||||
close: filters.byCode("CONTEXT_MENU_CLOSE")
|
||||
}) as {
|
||||
close(): void;
|
||||
open(
|
||||
event: React.UIEvent,
|
||||
render?: Menu["ContextMenu"],
|
||||
options?: { enableSpellCheck?: boolean; },
|
||||
renderLazy?: () => Promise<Menu["ContextMenu"]>
|
||||
): void;
|
||||
openLazy(
|
||||
event: React.UIEvent,
|
||||
renderLazy?: () => Promise<Menu["ContextMenu"]>,
|
||||
options?: { enableSpellCheck?: boolean; }
|
||||
): void;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue