resolving conflicts

This commit is contained in:
programminglaboratorys 2024-06-08 12:38:38 +03:00
parent 65970618d8
commit 24202b0b2f
4 changed files with 211 additions and 109 deletions

View file

@ -0,0 +1,61 @@
/*
* Vencord, a Discord client mod
* Copyright (c) 2024 Vendicated and contributors
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import ErrorBoundary from "@components/ErrorBoundary";
import { Channel } from "discord-types/general";
export interface ExpressionPickerButtonProps {
id?: string;
"aria-controls": string;
"aria-selected": boolean;
isActive: boolean;
viewType: string;
children: string | JSX.Element;
autoFocus?: boolean;
[key: string]: any;
}
export interface ExpressionPickerPanelProps {
selectedTab: string;
channel: Channel;
}
export type ExpressionPickerButtonComponent = (props: ExpressionPickerButtonProps) => JSX.Element | null;
export type ExpressionPickerPanelComponent = (props: ExpressionPickerPanelProps) => JSX.Element | null;
export interface ExpressionPickerTabItem {
tab: string,
Component: ExpressionPickerPanelComponent;
autoFocus?: boolean;
}
const ExpressionPickerComponents = new Map<string, ExpressionPickerTabItem>();
export const addExpressionPickerTabButton = (id: string, tab: string, PanelComponent: ExpressionPickerPanelComponent, autoFocus?: boolean) => ExpressionPickerComponents.set(id, { tab: tab, Component: PanelComponent, autoFocus: autoFocus });
export const removeExpressionPickerTabButton = (id: string) => ExpressionPickerComponents.delete(id);
export function* RenderTabButtons(ExpressionPickerButtonComponent: ExpressionPickerButtonComponent, selectedTab: string) {
for (const [id, { tab }] of ExpressionPickerComponents) {
yield (<ErrorBoundary><ExpressionPickerButtonComponent
id={id + "-picker-tab"}
aria-controls={id + "-picker-tab-panel"}
aria-selected={id === selectedTab}
viewType={id}
isActive={id === selectedTab}
>{tab}</ExpressionPickerButtonComponent></ErrorBoundary>);
}
}
export function* TabPanels(selectedTab: string, channel: Channel) {
for (const [id, { Component }] of ExpressionPickerComponents) {
if (id !== selectedTab) { continue; }
const PanelComponent: ExpressionPickerPanelComponent = Component;
yield (<ErrorBoundary><PanelComponent selectedTab={selectedTab} channel={channel} /></ErrorBoundary>);
}
}

View file

@ -14,13 +14,14 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
*/
import * as $Badges from "./Badges";
import * as $ChatButtons from "./ChatButtons";
import * as $Commands from "./Commands";
import * as $ContextMenu from "./ContextMenu";
import * as $DataStore from "./DataStore";
import * as $ExpressionPickerTabs from "./ExpressionPickerTabs";
import * as $MemberListDecorators from "./MemberListDecorators";
import * as $MessageAccessories from "./MessageAccessories";
import * as $MessageDecorations from "./MessageDecorations";
@ -116,3 +117,8 @@ export const ChatButtons = $ChatButtons;
* An API allowing you to update and re-render messages
*/
export const MessageUpdater = $MessageUpdater;
/**
* An API allowing you to add panels to the expression picker
*/
export const ExpressionPickerTabs = $ExpressionPickerTabs;

View file

@ -0,0 +1,30 @@
/*
* Vencord, a Discord client mod
* Copyright (c) 2024 Vendicated and contributors
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import { Devs } from "@utils/constants";
import definePlugin from "@utils/types";
export default definePlugin({
name: "ExpressionPickerTabsAPI",
description: "an API to add panels to the expression picker",
authors: [Devs.iamme],
patches: [
{
find: ".EXPRESSION_PICKER_CATEGORIES_A11Y_LABEL",
replacement: [
{
match: /\.jsx\)\((\i),\{id:\i\.E\i,.+?,"aria-selected":(\i)===\i\.\i\.EMOJI.+?,viewType:(\i).+?\}\)/,
replace: "$&,...Vencord.Api.ExpressionPickerTabs.RenderTabButtons($1, $2)"
},
{
match: /null,(\i)===\i\.ExpressionPickerViewType\.EMOJI\?.{0,55}channel:(\i),.+?\):null/,
replace: "$&,...Vencord.Api.ExpressionPickerTabs.TabPanels($1, $2)"
}
]
}
]
});

View file

@ -14,7 +14,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
*/
export const WEBPACK_CHUNK = "webpackChunkdiscord_app";
export const REACT_GLOBAL = "Vencord.Webpack.Common.React";
@ -39,27 +39,27 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
Ven: {
name: "Vendicated",
id: 343383572805058560n
id: 343383572805058560n,
},
Arjix: {
name: "ArjixWasTaken",
id: 674710789138939916n
id: 674710789138939916n,
},
Cyn: {
name: "Cynosphere",
id: 150745989836308480n
id: 150745989836308480n,
},
Trwy: {
name: "trey",
id: 354427199023218689n
id: 354427199023218689n,
},
Megu: {
name: "Megumin",
id: 545581357812678656n
id: 545581357812678656n,
},
botato: {
name: "botato",
id: 440990343899643943n
id: 440990343899643943n,
},
fawn: {
name: "fawn",
@ -67,11 +67,11 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
rushii: {
name: "rushii",
id: 295190422244950017n
id: 295190422244950017n,
},
Glitch: {
name: "Glitchy",
id: 269567451199569920n
id: 269567451199569920n,
},
Samu: {
name: "Samu",
@ -79,19 +79,19 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
Nyako: {
name: "nyako",
id: 118437263754395652n
id: 118437263754395652n,
},
MaiKokain: {
name: "Mai",
id: 722647978577363026n
id: 722647978577363026n,
},
echo: {
name: "ECHO",
id: 712639419785412668n
id: 712639419785412668n,
},
katlyn: {
name: "katlyn",
id: 250322741406859265n
id: 250322741406859265n,
},
nea: {
name: "nea",
@ -99,87 +99,87 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
Nuckyz: {
name: "Nuckyz",
id: 235834946571337729n
id: 235834946571337729n,
},
D3SOX: {
name: "D3SOX",
id: 201052085641281538n
id: 201052085641281538n,
},
Nickyux: {
name: "Nickyux",
id: 427146305651998721n
id: 427146305651998721n,
},
mantikafasi: {
name: "mantikafasi",
id: 287555395151593473n
id: 287555395151593473n,
},
Xinto: {
name: "Xinto",
id: 423915768191647755n
id: 423915768191647755n,
},
JacobTm: {
name: "Jacob.Tm",
id: 302872992097107991n
id: 302872992097107991n,
},
DustyAngel47: {
name: "DustyAngel47",
id: 714583473804935238n
id: 714583473804935238n,
},
BanTheNons: {
name: "BanTheNons",
id: 460478012794863637n
id: 460478012794863637n,
},
BigDuck: {
name: "BigDuck",
id: 1024588272623681609n
id: 1024588272623681609n,
},
AverageReactEnjoyer: {
name: "Average React Enjoyer",
id: 1004904120056029256n
id: 1004904120056029256n,
},
adryd: {
name: "adryd",
id: 0n
id: 0n,
},
Tyman: {
name: "Tyman",
id: 487443883127472129n
id: 487443883127472129n,
},
afn: {
name: "afn",
id: 420043923822608384n
id: 420043923822608384n,
},
KraXen72: {
name: "KraXen72",
id: 379304073515499530n
id: 379304073515499530n,
},
kemo: {
name: "kemo",
id: 715746190813298788n
id: 715746190813298788n,
},
dzshn: {
name: "dzshn",
id: 310449948011528192n
id: 310449948011528192n,
},
Ducko: {
name: "Ducko",
id: 506482395269169153n
id: 506482395269169153n,
},
jewdev: {
name: "jewdev",
id: 222369866529636353n
id: 222369866529636353n,
},
Luna: {
name: "Luny",
id: 821472922140803112n
id: 821472922140803112n,
},
Vap: {
name: "Vap0r1ze",
id: 454072114492866560n
id: 454072114492866560n,
},
KingFish: {
name: "King Fish",
id: 499400512559382538n
id: 499400512559382538n,
},
Commandtechno: {
name: "Commandtechno",
@ -187,7 +187,7 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
TheSun: {
name: "sunnie",
id: 406028027768733696n
id: 406028027768733696n,
},
axyie: {
name: "'ax",
@ -195,44 +195,44 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
pointy: {
name: "pointy",
id: 99914384989519872n
id: 99914384989519872n,
},
SammCheese: {
name: "Samm-Cheese",
id: 372148345894076416n
id: 372148345894076416n,
},
zt: {
name: "zt",
id: 289556910426816513n
id: 289556910426816513n,
},
captain: {
name: "Captain",
id: 347366054806159360n
id: 347366054806159360n,
},
nick: {
name: "nick",
id: 347884694408265729n,
badge: false
badge: false,
},
whqwert: {
name: "whqwert",
id: 586239091520176128n
id: 586239091520176128n,
},
lewisakura: {
name: "lewisakura",
id: 96269247411400704n
id: 96269247411400704n,
},
RuiNtD: {
name: "RuiNtD",
id: 157917665162297344n
id: 157917665162297344n,
},
hunt: {
name: "hunt-g",
id: 222800179697287168n
id: 222800179697287168n,
},
cloudburst: {
name: "cloudburst",
id: 892128204150685769n
id: 892128204150685769n,
},
Aria: {
name: "Syncxv",
@ -240,51 +240,51 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
TheKodeToad: {
name: "TheKodeToad",
id: 706152404072267788n
id: 706152404072267788n,
},
LordElias: {
name: "LordElias",
id: 319460781567639554n
id: 319460781567639554n,
},
juby: {
name: "Juby210",
id: 324622488644616195n
id: 324622488644616195n,
},
Alyxia: {
name: "Alyxia Sother",
id: 952185386350829688n
id: 952185386350829688n,
},
Remty: {
name: "Remty",
id: 335055032204656642n
id: 335055032204656642n,
},
skyevg: {
name: "skyevg",
id: 1090310844283363348n
id: 1090310844283363348n,
},
Dziurwa: {
name: "Dziurwa",
id: 1001086404203389018n
id: 1001086404203389018n,
},
arHSM: {
name: "arHSM",
id: 841509053422632990n
id: 841509053422632990n,
},
F53: {
name: "F53",
id: 280411966126948353n
id: 280411966126948353n,
},
AutumnVN: {
name: "AutumnVN",
id: 393694671383166998n
id: 393694671383166998n,
},
pylix: {
name: "pylix",
id: 492949202121261067n
id: 492949202121261067n,
},
Tyler: {
name: "\\\\GGTyler\\\\",
id: 143117463788191746n
id: 143117463788191746n,
},
RyanCaoDev: {
name: "RyanCaoDev",
@ -292,27 +292,27 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
FieryFlames: {
name: "Fiery",
id: 890228870559698955n
id: 890228870559698955n,
},
KannaDev: {
name: "Kanna",
id: 317728561106518019n
id: 317728561106518019n,
},
carince: {
name: "carince",
id: 818323528755314698n
id: 818323528755314698n,
},
PandaNinjas: {
name: "PandaNinjas",
id: 455128749071925248n
id: 455128749071925248n,
},
CatNoir: {
name: "CatNoir",
id: 260371016348336128n
id: 260371016348336128n,
},
outfoxxed: {
name: "outfoxxed",
id: 837425748435796060n
id: 837425748435796060n,
},
UwUDev: {
name: "UwU",
@ -320,39 +320,39 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
amia: {
name: "amia",
id: 142007603549962240n
id: 142007603549962240n,
},
phil: {
name: "phil",
id: 305288513941667851n
id: 305288513941667851n,
},
ImLvna: {
name: "Luna <3",
id: 799319081723232267n
id: 799319081723232267n,
},
rad: {
name: "rad",
id: 610945092504780823n
id: 610945092504780823n,
},
AndrewDLO: {
name: "Andrew-DLO",
id: 434135504792059917n
id: 434135504792059917n,
},
HypedDomi: {
name: "HypedDomi",
id: 354191516979429376n
id: 354191516979429376n,
},
Rini: {
name: "Rini",
id: 1079479184478441643n
id: 1079479184478441643n,
},
castdrian: {
name: "castdrian",
id: 224617799434108928n
id: 224617799434108928n,
},
Arrow: {
name: "arrow",
id: 958158495302176778n
id: 958158495302176778n,
},
bb010g: {
name: "bb010g",
@ -372,19 +372,19 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
archeruwu: {
name: "archer_uwu",
id: 160068695383736320n
id: 160068695383736320n,
},
ProffDea: {
name: "ProffDea",
id: 609329952180928513n
id: 609329952180928513n,
},
UlyssesZhan: {
name: "UlyssesZhan",
id: 586808226058862623n
id: 586808226058862623n,
},
ant0n: {
name: "ant0n",
id: 145224646868860928n
id: 145224646868860928n,
},
Board: {
name: "BoardTM",
@ -392,11 +392,11 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
philipbry: {
name: "philipbry",
id: 554994003318276106n
id: 554994003318276106n,
},
Korbo: {
name: "Korbo",
id: 455856406420258827n
id: 455856406420258827n,
},
maisymoe: {
name: "maisy",
@ -404,11 +404,11 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
Lexi: {
name: "Lexi",
id: 506101469787717658n
id: 506101469787717658n,
},
Mopi: {
name: "Mopi",
id: 1022189106614243350n
id: 1022189106614243350n,
},
Grzesiek11: {
name: "Grzesiek11",
@ -436,7 +436,7 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
nin0dev: {
name: "nin0dev",
id: 886685857560539176n
id: 886685857560539176n,
},
Elvyra: {
name: "Elvyra",
@ -444,75 +444,79 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
HappyEnderman: {
name: "Happy enderman",
id: 1083437693347827764n
id: 1083437693347827764n,
},
Vishnya: {
name: "Vishnya",
id: 282541644484575233n
id: 282541644484575233n,
},
Inbestigator: {
name: "Inbestigator",
id: 761777382041714690n
id: 761777382041714690n,
},
newwares: {
name: "newwares",
id: 421405303951851520n
id: 421405303951851520n,
},
JohnyTheCarrot: {
name: "JohnyTheCarrot",
id: 132819036282159104n
id: 132819036282159104n,
},
puv: {
name: "puv",
id: 469441552251355137n
id: 469441552251355137n,
},
Kodarru: {
name: "Kodarru",
id: 785227396218748949n
id: 785227396218748949n,
},
nakoyasha: {
name: "nakoyasha",
id: 222069018507345921n
id: 222069018507345921n,
},
Sqaaakoi: {
name: "Sqaaakoi",
id: 259558259491340288n
id: 259558259491340288n,
},
iamme: {
name: "i am me",
id: 984392761929256980n,
},
Byron: {
name: "byeoon",
id: 1167275288036655133n
id: 1167275288036655133n,
},
Kaitlyn: {
name: "kaitlyn",
id: 306158896630988801n
id: 306158896630988801n,
},
PolisanTheEasyNick: {
name: "Oleh Polisan",
id: 242305263313485825n
id: 242305263313485825n,
},
HAHALOSAH: {
name: "HAHALOSAH",
id: 903418691268513883n
id: 903418691268513883n,
},
GabiRP: {
name: "GabiRP",
id: 507955112027750401n
id: 507955112027750401n,
},
ImBanana: {
name: "Im_Banana",
id: 635250116688871425n
id: 635250116688871425n,
},
xocherry: {
name: "xocherry",
id: 221288171013406720n
id: 221288171013406720n,
},
ScattrdBlade: {
name: "ScattrdBlade",
id: 678007540608532491n
id: 678007540608532491n,
},
goodbee: {
name: "goodbee",
id: 658968552606400512n
id: 658968552606400512n,
},
Moxxie: {
name: "Moxxie",
@ -524,19 +528,20 @@ export const Devs = /* #__PURE__*/ Object.freeze({
},
nyx: {
name: "verticalsync",
id: 328165170536775680n
id: 328165170536775680n,
},
nekohaxx: {
name: "nekohaxx",
id: 1176270221628153886n
}
id: 1176270221628153886n,
},
} satisfies Record<string, Dev>);
// iife so #__PURE__ works correctly
export const DevsById = /* #__PURE__*/ (() =>
Object.freeze(Object.fromEntries(
Object.entries(Devs)
.filter(d => d[1].id !== 0n)
.map(([_, v]) => [v.id, v] as const)
))
)() as Record<string, Dev>;
Object.freeze(
Object.fromEntries(
Object.entries(Devs)
.filter((d) => d[1].id !== 0n)
.map(([_, v]) => [v.id, v] as const)
)
))() as Record<string, Dev>;