From 0847f205b836a958864a17490c22d0702536f3d1 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Thu, 26 Oct 2023 18:10:32 -0300 Subject: [PATCH 01/45] Fix some hidden channels not collapsing --- src/plugins/showHiddenChannels/index.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index 9cdf30496..524942104 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -74,6 +74,10 @@ export default definePlugin({ match: /if\(!\i\.\i\.can\(\i\.\i\.VIEW_CHANNEL.+?{if\(this\.id===\i\).+?threadIds:\i}}/, replace: "" }, + { + match: /(?=!1===\i.\i\.hasRelevantUnread\(this\.record\))/, + replace: "$self.isHiddenChannel(this.record)||" + }, { match: /(?<=renderLevel:(\i\(this,\i\)\?\i\.Show:\i\.WouldShowIfUncollapsed).+?renderLevel:).+?(?=,)/, replace: (_, renderLevelExpression) => renderLevelExpression From 8692109bc5bd2ded817bbbfcef937a1d036cc2a8 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Thu, 26 Oct 2023 18:13:25 -0300 Subject: [PATCH 02/45] Add comments to some SHC patches --- src/plugins/showHiddenChannels/index.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index 524942104..9a7f1e63c 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -70,22 +70,27 @@ export default definePlugin({ // RenderLevel defines if a channel is hidden, collapsed in category, visible, etc find: ".CannotShow=", replacement: [ + // Remove the special logic for channels we don't have access to { match: /if\(!\i\.\i\.can\(\i\.\i\.VIEW_CHANNEL.+?{if\(this\.id===\i\).+?threadIds:\i}}/, replace: "" }, + // Do not check for unreads when selecting the render level if the channel is hidden { match: /(?=!1===\i.\i\.hasRelevantUnread\(this\.record\))/, replace: "$self.isHiddenChannel(this.record)||" }, + // Make channels we dont have access to be the same level as normal ones { match: /(?<=renderLevel:(\i\(this,\i\)\?\i\.Show:\i\.WouldShowIfUncollapsed).+?renderLevel:).+?(?=,)/, replace: (_, renderLevelExpression) => renderLevelExpression }, + // Make channels we dont have access to be the same level as normal ones { match: /(?<=activeJoinedRelevantThreads.+?renderLevel:.+?,threadIds:\i\(this.record.+?renderLevel:)(\i)\..+?(?=,)/, replace: (_, RenderLevels) => `${RenderLevels}.Show` }, + // Remove permission checking for getRenderLevel function { match: /(?<=getRenderLevel\(\i\){.+?return)!\i\.\i\.can\(\i\.\i\.VIEW_CHANNEL,this\.record\)\|\|/, replace: " " From 1676956f6113b74490d974e81a2f78f22f496cc9 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Thu, 26 Oct 2023 20:59:48 -0300 Subject: [PATCH 03/45] Fix hidden channels triggering the unread box --- src/plugins/showHiddenChannels/index.tsx | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index 9a7f1e63c..4d828acd2 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -195,13 +195,29 @@ export default definePlugin({ ] }, { - // Hide New unreads box for hidden channels + // Hide the new version of unreads box for hidden channels find: '.displayName="ChannelListUnreadsStore"', replacement: { match: /(?<=if\(null==(\i))(?=.{0,160}?hasRelevantUnread\(\i\))/g, // Global because Discord has multiple methods like that in the same module replace: (_, channel) => `||$self.isHiddenChannel(${channel})` } }, + { + // Make the old version of unreads box not visible for hidden channels + find: "renderBottomUnread(){", + replacement: { + match: /(?=&&\i\.\i\.hasRelevantUnread\((\i\.record)\))/, + replace: "&&!$self.isHiddenChannel($1)" + } + }, + { + // Make the state of the old version of unreads box not include hidden channels + find: ".useFlattenedChannelIdListWithThreads)", + replacement: { + match: /(?=&&\i\.\i\.hasRelevantUnread\((\i)\))/, + replace: "&&!$self.isHiddenChannel($1)" + } + }, // Only render the channel header and buttons that work when transitioning to a hidden channel { find: "Missing channel in Channel.renderHeaderToolbar", From a9e67e2955dfa07d734361c66ceabb0278ec5e34 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 27 Oct 2023 03:53:58 +0200 Subject: [PATCH 04/45] Bump to v1.6.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 61940d080..da8fc449a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "vencord", "private": "true", - "version": "1.6.0", + "version": "1.6.1", "description": "The cutest Discord client mod", "homepage": "https://github.com/Vendicated/Vencord#readme", "bugs": { From 0afe319141a261ee0a1f67bf13d9b5b4bfd6619c Mon Sep 17 00:00:00 2001 From: Susheel Thapa Date: Fri, 27 Oct 2023 07:51:05 +0545 Subject: [PATCH 05/45] fix typo in multiple files (#1911) --- scripts/generateReport.ts | 2 +- src/api/ContextMenu.ts | 4 ++-- src/components/VencordSettings/UpdaterTab.tsx | 2 +- src/plugins/customRPC/index.tsx | 2 +- src/plugins/spotifyControls/spotifyStyles.css | 4 ++-- src/utils/types.ts | 2 +- src/webpack/patchWebpack.ts | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/scripts/generateReport.ts b/scripts/generateReport.ts index c94adf9bf..4e044c94b 100644 --- a/scripts/generateReport.ts +++ b/scripts/generateReport.ts @@ -289,7 +289,7 @@ function runTime(token: string) { setTimeout(() => console.log("PUPPETEER_TEST_DONE_SIGNAL"), 1000); }, 1000)); } catch (e) { - console.error("[PUP_DEBUG]", "A fatal error occured"); + console.error("[PUP_DEBUG]", "A fatal error occurred"); console.error("[PUP_DEBUG]", e); process.exit(1); } diff --git a/src/api/ContextMenu.ts b/src/api/ContextMenu.ts index 156ae209a..d66d98c4f 100644 --- a/src/api/ContextMenu.ts +++ b/src/api/ContextMenu.ts @@ -69,7 +69,7 @@ export function addGlobalContextMenuPatch(patch: GlobalContextMenuPatchCallback) * Remove a context menu patch * @param navId The navId(s) for the context menu(s) to remove the patch * @param patch The patch to be removed - * @returns Wheter the patch was sucessfully removed from the context menu(s) + * @returns Whether the patch was successfully removed from the context menu(s) */ export function removeContextMenuPatch>(navId: T, patch: NavContextMenuPatchCallback): T extends string ? boolean : Array { const navIds = Array.isArray(navId) ? navId : [navId as string]; @@ -82,7 +82,7 @@ export function removeContextMenuPatch>(navId: /** * Remove a global context menu patch * @param patch The patch to be removed - * @returns Wheter the patch was sucessfully removed + * @returns Whether the patch was successfully removed */ export function removeGlobalContextMenuPatch(patch: GlobalContextMenuPatchCallback): boolean { return globalPatches.delete(patch); diff --git a/src/components/VencordSettings/UpdaterTab.tsx b/src/components/VencordSettings/UpdaterTab.tsx index 6766cf08a..81433960f 100644 --- a/src/components/VencordSettings/UpdaterTab.tsx +++ b/src/components/VencordSettings/UpdaterTab.tsx @@ -46,7 +46,7 @@ function withDispatcher(dispatcher: React.Dispatch if (code === "ENOENT") var err = `Command \`${path}\` not found.\nPlease install it and try again`; else { - var err = `An error occured while running \`${cmd}\`:\n`; + var err = `An error occurred while running \`${cmd}\`:\n`; err += stderr || `Code \`${code}\`. See the console for more info`; } diff --git a/src/plugins/customRPC/index.tsx b/src/plugins/customRPC/index.tsx index 25ad7b3e6..8ed741215 100644 --- a/src/plugins/customRPC/index.tsx +++ b/src/plugins/customRPC/index.tsx @@ -395,7 +395,7 @@ export default definePlugin({ return ( <> - Go to Discord Deverloper Portal to create an application and + Go to Discord Developer Portal to create an application and get the application ID. diff --git a/src/plugins/spotifyControls/spotifyStyles.css b/src/plugins/spotifyControls/spotifyStyles.css index a9b985161..9e585ebec 100644 --- a/src/plugins/spotifyControls/spotifyStyles.css +++ b/src/plugins/spotifyControls/spotifyStyles.css @@ -2,7 +2,7 @@ padding: 0.375rem 0.5rem; border-bottom: 1px solid var(--background-modifier-accent); - --vc-spotify-green: #1db954; /* so cusotm themes can easily change it */ + --vc-spotify-green: #1db954; /* so custom themes can easily change it */ } .theme-light #vc-spotify-player { @@ -167,7 +167,7 @@ } #vc-spotify-progress-bar > [class^="slider"] [class^="grabber"] { - /* these importants are neccessary, it applies a width and height through inline styles */ + /* these importants are necessary, it applies a width and height through inline styles */ height: 10px !important; width: 10px !important; background-color: var(--interactive-normal); diff --git a/src/utils/types.ts b/src/utils/types.ts index 7b682e9b9..ff2c79af3 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -269,7 +269,7 @@ export interface DefinedSettings< store: SettingsStore & PrivateSettings; /** * React hook for getting the settings for this plugin - * @param filter optional filter to avoid rerenders for irrelavent settings + * @param filter optional filter to avoid rerenders for irrelevent settings */ use>(filter?: F[]): Pick & PrivateSettings, F>; /** Definitions of each setting */ diff --git a/src/webpack/patchWebpack.ts b/src/webpack/patchWebpack.ts index 23ef99e24..b81415e61 100644 --- a/src/webpack/patchWebpack.ts +++ b/src/webpack/patchWebpack.ts @@ -29,7 +29,7 @@ let webpackChunk: any[]; const logger = new Logger("WebpackInterceptor", "#8caaee"); if (window[WEBPACK_CHUNK]) { - logger.info(`Patching ${WEBPACK_CHUNK}.push (was already existant, likely from cache!)`); + logger.info(`Patching ${WEBPACK_CHUNK}.push (was already existent, likely from cache!)`); _initWebpack(window[WEBPACK_CHUNK]); patchPush(window[WEBPACK_CHUNK]); } else { From 98d49af72899432657d24a7a82dd24ea13912576 Mon Sep 17 00:00:00 2001 From: Luna Date: Fri, 27 Oct 2023 09:07:50 -0400 Subject: [PATCH 06/45] Fix git updater for other branches (#1915) --- src/main/updater/git.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/updater/git.ts b/src/main/updater/git.ts index c6e5cc90a..7f7785940 100644 --- a/src/main/updater/git.ts +++ b/src/main/updater/git.ts @@ -49,7 +49,9 @@ async function getRepo() { async function calculateGitChanges() { await git("fetch"); - const res = await git("log", "HEAD...origin/main", "--pretty=format:%an/%h/%s"); + const branch = await git("branch", "--show-current"); + + const res = await git("log", `HEAD...origin/${branch}`, "--pretty=format:%an/%h/%s"); const commits = res.stdout.trim(); return commits ? commits.split("\n").map(line => { From 38834ef7acac78a3d0b77dddbcc98efca9076d91 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Fri, 27 Oct 2023 13:03:52 -0300 Subject: [PATCH 07/45] Fix git updater --- src/main/updater/git.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/updater/git.ts b/src/main/updater/git.ts index 7f7785940..e96026443 100644 --- a/src/main/updater/git.ts +++ b/src/main/updater/git.ts @@ -51,7 +51,7 @@ async function calculateGitChanges() { const branch = await git("branch", "--show-current"); - const res = await git("log", `HEAD...origin/${branch}`, "--pretty=format:%an/%h/%s"); + const res = await git("log", `HEAD...origin/${branch.stdout.trim()}`, "--pretty=format:%an/%h/%s"); const commits = res.stdout.trim(); return commits ? commits.split("\n").map(line => { From e05c630a5497e37701cfd707334512d888895259 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Fri, 27 Oct 2023 14:29:25 -0300 Subject: [PATCH 08/45] SHC: Make Chat Input Bar channel list include hidden channels --- src/plugins/showHiddenChannels/index.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index 4d828acd2..95b16d625 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -414,6 +414,22 @@ export default definePlugin({ } ] }, + { + // Make the chat input bar channel list contain hidden channels + find: ",queryStaticRouteChannels(", + replacement: [ + { + // Make the getChannels call to GuildChannelStore return hidden channels + match: /(?<=queryChannels\(\i\){.+?getChannels\(\i)(?=\))/, + replace: ",true" + }, + { + // Avoid filtering out hidden channels from the channel list + match: /(?<=queryChannels\(\i\){.+?isGuildChannelType\)\((\i)\.type\))(?=&&!\i\.\i\.can\()/, + replace: "&&!$self.isHiddenChannel($1)" + } + ] + }, { find: "\"^/guild-stages/(\\\\d+)(?:/)?(\\\\d+)?\"", replacement: { From 89672882b951649473c895138911f186e4b3b3ea Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Fri, 27 Oct 2023 14:33:18 -0300 Subject: [PATCH 09/45] PermViewer: Fix incorrectly displaying some role names as Unknown Role --- .../permissionsViewer/components/RolesAndUsersPermissions.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx b/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx index 8d4b15790..629880467 100644 --- a/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx +++ b/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx @@ -135,9 +135,9 @@ function RolesAndUsersPermissionsComponent({ permissions, guild, modalProps, hea { permission.type === PermissionType.Role - ? role?.name || "Unknown Role" + ? role?.name ?? "Unknown Role" : permission.type === PermissionType.User - ? (user && getUniqueUsername(user)) || "Unknown User" + ? (user && getUniqueUsername(user)) ?? "Unknown User" : ( @owner From 7845af0802de70700c5855ea687a67b6dd85b6cc Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Fri, 27 Oct 2023 19:55:39 -0300 Subject: [PATCH 10/45] Remove hacks to support no longer active versions of Discord --- src/webpack/common/stores.ts | 11 ++--------- src/webpack/common/utils.ts | 9 +-------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/src/webpack/common/stores.ts b/src/webpack/common/stores.ts index c4ebd4a95..d10b18664 100644 --- a/src/webpack/common/stores.ts +++ b/src/webpack/common/stores.ts @@ -20,7 +20,7 @@ import { proxyLazy } from "@utils/lazy"; import type * as Stores from "discord-types/stores"; // eslint-disable-next-line path-alias/no-relative -import { filters, findByCode, findByProps, findByPropsLazy, mapMangledModuleLazy } from "../webpack"; +import { filters, findByProps, findByPropsLazy, mapMangledModuleLazy } from "../webpack"; import { waitForStore } from "./internal"; import * as t from "./types/stores"; @@ -84,14 +84,7 @@ export const useStateFromStores: ( idk?: any, isEqual?: (old: T, newer: T) => boolean ) => T - // FIXME: hack to support old stable and new canary - = proxyLazy(() => { - try { - return findByProps("useStateFromStores").useStateFromStores; - } catch { - return findByCode('("useStateFromStores")'); - } - }); + = proxyLazy(() => findByProps("useStateFromStores").useStateFromStores); waitForStore("DraftStore", s => DraftStore = s); waitForStore("UserStore", s => UserStore = s); diff --git a/src/webpack/common/utils.ts b/src/webpack/common/utils.ts index 6de57c92d..04df3c07d 100644 --- a/src/webpack/common/utils.ts +++ b/src/webpack/common/utils.ts @@ -136,11 +136,4 @@ waitFor("parseTopic", m => Parser = m); export let SettingsRouter: any; waitFor(["open", "saveAccountChanges"], m => SettingsRouter = m); -// FIXME: hack to support old stable and new canary -export const PermissionsBits: t.PermissionsBits = proxyLazy(() => { - try { - return find(m => m.Permissions?.ADMINISTRATOR).Permissions; - } catch { - return find(m => typeof m.ADMINISTRATOR === "bigint"); - } -}); +export const PermissionsBits: t.PermissionsBits = proxyLazy(() => find(m => typeof m.Permissions?.ADMINISTRATOR === "bigint").Permissions); From 9ce923d4d7b598c955d774bf0c953661496eb278 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Fri, 27 Oct 2023 19:56:11 -0300 Subject: [PATCH 11/45] Fix BetterFolders --- src/plugins/betterFolders/FolderSideBar.tsx | 64 ++---- src/plugins/betterFolders/betterFolders.css | 17 -- src/plugins/betterFolders/index.ts | 177 --------------- src/plugins/betterFolders/index.tsx | 229 ++++++++++++++++++++ 4 files changed, 251 insertions(+), 236 deletions(-) delete mode 100644 src/plugins/betterFolders/betterFolders.css delete mode 100644 src/plugins/betterFolders/index.ts create mode 100644 src/plugins/betterFolders/index.tsx diff --git a/src/plugins/betterFolders/FolderSideBar.tsx b/src/plugins/betterFolders/FolderSideBar.tsx index 6353a9716..f3884701a 100644 --- a/src/plugins/betterFolders/FolderSideBar.tsx +++ b/src/plugins/betterFolders/FolderSideBar.tsx @@ -16,56 +16,34 @@ * along with this program. If not, see . */ -import { Settings } from "@api/Settings"; -import { classNameFactory } from "@api/Styles"; import ErrorBoundary from "@components/ErrorBoundary"; -import { findByPropsLazy, findStoreLazy } from "@webpack"; -import { i18n, React, useStateFromStores } from "@webpack/common"; +import { LazyComponent } from "@utils/react"; +import { find, findByPropsLazy } from "@webpack"; +import { React, useStateFromStores } from "@webpack/common"; -const cl = classNameFactory("vc-bf-"); -const classes = findByPropsLazy("sidebar", "guilds"); +import { ExpandedGuildFolderStore, settings } from "."; const Animations = findByPropsLazy("a", "animated", "useTransition"); -const ChannelRTCStore = findStoreLazy("ChannelRTCStore"); -const ExpandedGuildFolderStore = findStoreLazy("ExpandedGuildFolderStore"); +const GuildsBar = LazyComponent(() => find(m => m.type?.toString().includes('("guildsnav")'))); -function Guilds(props: { - className: string; - bfGuildFolders: any[]; -}) { - // @ts-expect-error - const res = Vencord.Plugins.plugins.BetterFolders.Guilds(props); - - // TODO: Make this better - const scrollerProps = res.props.children?.props?.children?.props?.children?.[1]?.props; - if (scrollerProps?.children) { - const servers = scrollerProps.children.find(c => c?.props?.["aria-label"] === i18n.Messages.SERVERS); - if (servers) scrollerProps.children = servers; - } - - return res; -} - -export default ErrorBoundary.wrap(() => { +export default ErrorBoundary.wrap(guildsBarProps => { const expandedFolders = useStateFromStores([ExpandedGuildFolderStore], () => ExpandedGuildFolderStore.getExpandedFolders()); - const fullscreen = useStateFromStores([ChannelRTCStore], () => ChannelRTCStore.isFullscreenInContext()); - - const guilds = document.querySelector(`.${classes.guilds}`); - - const visible = !!expandedFolders.size; - const className = cl("folder-sidebar", { fullscreen }); const Sidebar = ( - ); - if (!guilds || !Settings.plugins.BetterFolders.sidebarAnim) + const visible = !!expandedFolders.size; + const guilds = document.querySelector(guildsBarProps.className.split(" ").map(c => `.${c}`).join("")); + + if (!guilds || !settings.store.sidebarAnim) { return visible - ?
{Sidebar}
+ ?
{Sidebar}
: null; + } return ( { leave={{ width: 0 }} config={{ duration: 200 }} > - {(style, show) => show && ( - - {Sidebar} - - )} + {(style, show) => + show && ( + + {Sidebar} + + ) + } ); }, { noop: true }); diff --git a/src/plugins/betterFolders/betterFolders.css b/src/plugins/betterFolders/betterFolders.css deleted file mode 100644 index 5d8fc2188..000000000 --- a/src/plugins/betterFolders/betterFolders.css +++ /dev/null @@ -1,17 +0,0 @@ -.vc-bf-folder-sidebar [class*="wrapper-"] > [class*="listItem-"]:first-of-type, -.vc-bf-folder-sidebar [class*="unreadMentionsIndicator"] { - display: none; -} - -.vc-bf-folder-sidebar [class*="expandedFolderBackground-"] { - background-color: transparent; -} - -.vc-bf-folder-sidebar { - display: flex; -} - -.vc-bf-fullscreen { - width: 0 !important; - visibility: hidden; -} diff --git a/src/plugins/betterFolders/index.ts b/src/plugins/betterFolders/index.ts deleted file mode 100644 index d41ba75c7..000000000 --- a/src/plugins/betterFolders/index.ts +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Vencord, a modification for Discord's desktop app - * Copyright (c) 2023 Vendicated and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . -*/ - -import "./betterFolders.css"; - -import { definePluginSettings } from "@api/Settings"; -import { Devs } from "@utils/constants"; -import definePlugin, { OptionType } from "@utils/types"; -import { findByPropsLazy, findLazy, findStoreLazy } from "@webpack"; -import { FluxDispatcher } from "@webpack/common"; - -import FolderSideBar from "./FolderSideBar"; - -const GuildsTree = findLazy(m => m.prototype?.convertToFolder); -const GuildFolderStore = findStoreLazy("SortedGuildStore"); -const ExpandedFolderStore = findStoreLazy("ExpandedGuildFolderStore"); -const FolderUtils = findByPropsLazy("move", "toggleGuildFolderExpand"); - -const settings = definePluginSettings({ - sidebar: { - type: OptionType.BOOLEAN, - description: "Display servers from folder on dedicated sidebar", - default: true, - }, - sidebarAnim: { - type: OptionType.BOOLEAN, - description: "Animate opening the folder sidebar", - default: true, - }, - closeAllFolders: { - type: OptionType.BOOLEAN, - description: "Close all folders when selecting a server not in a folder", - default: false, - }, - closeAllHomeButton: { - type: OptionType.BOOLEAN, - description: "Close all folders when clicking on the home button", - default: false, - }, - closeOthers: { - type: OptionType.BOOLEAN, - description: "Close other folders when opening a folder", - default: false, - }, - forceOpen: { - type: OptionType.BOOLEAN, - description: "Force a folder to open when switching to a server of that folder", - default: false, - }, -}); - -export default definePlugin({ - name: "BetterFolders", - description: "Shows server folders on dedicated sidebar and adds folder related improvements", - authors: [Devs.juby, Devs.AutumnVN], - patches: [ - { - find: '("guildsnav")', - predicate: () => settings.store.sidebar, - replacement: [ - { - match: /(\i)\(\){return \i\(\(0,\i\.jsx\)\("div",{className:\i\(\)\.guildSeparator}\)\)}/, - replace: "$&$self.Separator=$1;" - }, - - // Folder component patch - { - match: /\i\(\(function\(\i,\i,\i\){var \i=\i\.key;return.+\(\i\)},\i\)}\)\)/, - replace: "arguments[0].bfHideServers?null:$&" - }, - - // BEGIN Guilds component patch - { - match: /(\i)\.themeOverride,(.{15,25}\(function\(\){var \i=)(\i\.\i\.getGuildsTree\(\))/, - replace: "$1.themeOverride,bfPatch=$1.bfGuildFolders,$2bfPatch?$self.getGuildsTree(bfPatch,$3):$3" - }, - { - match: /return(\(0,\i\.jsx\))(\(\i,{)(folderNode:\i,setNodeRef:\i\.setNodeRef,draggable:!0,.+},\i\.id\));case/, - replace: "var bfHideServers=typeof bfPatch==='undefined',folder=$1$2bfHideServers,$3;return !bfHideServers&&arguments[1]?[$1($self.Separator,{}),folder]:folder;case" - }, - // END - - { - match: /\("guildsnav"\);return\(0,\i\.jsx\)\(.{1,6},{navigator:\i,children:\(0,\i\.jsx\)\(/, - replace: "$&$self.Guilds=" - } - ] - }, - { - find: "APPLICATION_LIBRARY,render", - predicate: () => settings.store.sidebar, - replacement: { - match: /(\(0,\i\.jsx\))\(\i\..,{className:\i\(\)\.guilds,themeOverride:\i}\)/, - replace: "$&,$1($self.FolderSideBar,{})" - } - }, - { - find: '("guildsnav")', - predicate: () => settings.store.closeAllHomeButton, - replacement: { - match: ",onClick:function(){if(!__OVERLAY__){", - replace: "$&$self.closeFolders();" - } - } - ], - - settings, - - start() { - const getGuildFolder = (id: string) => GuildFolderStore.getGuildFolders().find(f => f.guildIds.includes(id)); - - FluxDispatcher.subscribe("CHANNEL_SELECT", this.onSwitch = data => { - if (!settings.store.closeAllFolders && !settings.store.forceOpen) - return; - - if (this.lastGuildId !== data.guildId) { - this.lastGuildId = data.guildId; - - const guildFolder = getGuildFolder(data.guildId); - if (guildFolder?.folderId) { - if (settings.store.forceOpen && !ExpandedFolderStore.isFolderExpanded(guildFolder.folderId)) - FolderUtils.toggleGuildFolderExpand(guildFolder.folderId); - } else if (settings.store.closeAllFolders) - this.closeFolders(); - } - }); - - FluxDispatcher.subscribe("TOGGLE_GUILD_FOLDER_EXPAND", this.onToggleFolder = e => { - if (settings.store.closeOthers && !this.dispatching) - FluxDispatcher.wait(() => { - const expandedFolders = ExpandedFolderStore.getExpandedFolders(); - if (expandedFolders.size > 1) { - this.dispatching = true; - - for (const id of expandedFolders) if (id !== e.folderId) - FolderUtils.toggleGuildFolderExpand(id); - - this.dispatching = false; - } - }); - }); - }, - - stop() { - FluxDispatcher.unsubscribe("CHANNEL_SELECT", this.onSwitch); - FluxDispatcher.unsubscribe("TOGGLE_GUILD_FOLDER_EXPAND", this.onToggleFolder); - }, - - FolderSideBar, - - getGuildsTree(folders, oldTree) { - const tree = new GuildsTree(); - tree.root.children = oldTree.root.children.filter(e => folders.includes(e.id)); - tree.nodes = folders.map(id => oldTree.nodes[id]); - return tree; - }, - - closeFolders() { - for (const id of ExpandedFolderStore.getExpandedFolders()) - FolderUtils.toggleGuildFolderExpand(id); - }, -}); diff --git a/src/plugins/betterFolders/index.tsx b/src/plugins/betterFolders/index.tsx new file mode 100644 index 000000000..e4bdc9800 --- /dev/null +++ b/src/plugins/betterFolders/index.tsx @@ -0,0 +1,229 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2023 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +import { definePluginSettings } from "@api/Settings"; +import { Devs } from "@utils/constants"; +import definePlugin, { OptionType } from "@utils/types"; +import { findByPropsLazy, findStoreLazy } from "@webpack"; +import { FluxDispatcher, i18n } from "@webpack/common"; + +import FolderSideBar from "./FolderSideBar"; + +const GuildFolderStore = findStoreLazy("SortedGuildStore"); +export const ExpandedGuildFolderStore = findStoreLazy("ExpandedGuildFolderStore"); +const FolderUtils = findByPropsLazy("move", "toggleGuildFolderExpand"); + +let lastGuildId = null as string | null; +let dispatchingFoldersClose = false; + +function getGuildFolder(id: string) { + return GuildFolderStore.getGuildFolders().find(folder => folder.guildIds.includes(id)); +} + +function closeFolders() { + for (const id of ExpandedGuildFolderStore.getExpandedFolders()) + FolderUtils.toggleGuildFolderExpand(id); +} + +export const settings = definePluginSettings({ + sidebar: { + type: OptionType.BOOLEAN, + description: "Display servers from folder on dedicated sidebar", + restartNeeded: true, + default: true + }, + sidebarAnim: { + type: OptionType.BOOLEAN, + description: "Animate opening the folder sidebar", + restartNeeded: true, + default: true + }, + closeAllFolders: { + type: OptionType.BOOLEAN, + description: "Close all folders when selecting a server not in a folder", + default: false + }, + closeAllHomeButton: { + type: OptionType.BOOLEAN, + description: "Close all folders when clicking on the home button", + restartNeeded: true, + default: false + }, + closeOthers: { + type: OptionType.BOOLEAN, + description: "Close other folders when opening a folder", + default: false + }, + forceOpen: { + type: OptionType.BOOLEAN, + description: "Force a folder to open when switching to a server of that folder", + default: false + } +}); + +export default definePlugin({ + name: "BetterFolders", + description: "Shows server folders on dedicated sidebar and adds folder related improvements", + authors: [Devs.juby, Devs.AutumnVN, Devs.Nuckyz], + + settings, + + patches: [ + { + find: '("guildsnav")', + predicate: () => settings.store.sidebar, + replacement: [ + // Create the isBetterFolders variable in the GuildsBar component + { + match: /(?<=let{disableAppDownload:\i=\i\.isPlatformEmbedded,isOverlay:.+?)(?=}=\i,)/, + replace: ",isBetterFolders" + }, + // If we are rendering the Better Folders sidebar, we filter out everything but the servers and folders from the GuildsBar Guild List children + { + match: /lastTargetNode:\i\[\i\.length-1\].+?Fragment.+?\]}\)\]/, + replace: '$&.filter($self.makeGuildsBarGuildListFilter(typeof isBetterFolders!=="undefined"?isBetterFolders:false))' + }, + // If we are rendering the Better Folders sidebar, we filter out everything but the scroller for the guild list from the GuildsBar Tree children + { + match: /unreadMentionsIndicatorBottom,barClassName.+?}\)\]/, + replace: '$&.filter($self.makeGuildsBarTreeFilter(typeof isBetterFolders!=="undefined"?isBetterFolders:false))' + }, + // Export the isBetterFolders variable to the folders component + { + match: /(?<=\.Messages\.SERVERS.+?switch\((\i)\.type\){case \i\.\i\.FOLDER:.+?folderNode:\i,)/, + replace: 'isBetterFolders:typeof isBetterFolders!=="undefined"?isBetterFolders:false,' + }, + // Avoid rendering servers that are not in folders in the Better Folders sidebar + { + match: /(?<=\.Messages\.SERVERS.+?switch\((\i)\.type\){case \i\.\i\.FOLDER:.+?GUILD:)/, + replace: 'if((typeof isBetterFolders!=="undefined"?isBetterFolders:false)&&$1.parentId==null)return null;' + } + ] + }, + { + find: ".FOLDER_ITEM_GUILD_ICON_MARGIN);", + replacement: [ + // Create the isBetterFolders variable in the nested folders component (the parent exports all the props so we don't have to patch it) + { + match: /(?<=let{folderNode:\i,setNodeRef:\i,)/, + replace: "isBetterFolders," + }, + // If we are rendering the normal GuildsBar sidebar, we make Discord think the folder is always collapsed to show better icons (the mini guild icons) and avoid transitions + { + match: /(?<=let{folderNode:\i,setNodeRef:\i,.+?expanded:(\i).+?;)(?=let)/, + replace: '$1=(typeof isBetterFolders!=="undefined"?isBetterFolders:false)?$1:false;' + }, + // If we are rendering the Better Folders sidebar, we filter out folders that are not expanded + { + match: /(?=return\(0,\i.\i\)\("div")(?<=selected:\i,expanded:(\i),.+?)/, + replace: (_, expanded) => `if((typeof isBetterFolders!=="undefined"?isBetterFolders:false)&&!${expanded})return null;` + } + // This code is required for the plugin to work, but we don't need it right now because we are making Discord think the folder is always collapsed + // If we no longer want to make Discord think the folder is always collapsed, we can use this code for the plugin to work + // One reason to no longer want that is to make better icons (the mini guild icons) no longer show + /* // Disable expanding and collapsing folders transition in the normal GuildsBar sidebar + { + match: /(?<=\.Messages\.SERVER_FOLDER_PLACEHOLDER.+?useTransition\)\()/, + replace: '(typeof isBetterFolders!=="undefined"?isBetterFolders:false)&&' + }, + // If we are rendering the normal GuildsBar sidebar, we avoid rendering guilds from folders that are expanded + { + match: /expandedFolderBackground,.+?,(?=\i\(\(\i,\i,\i\)=>{let{key.{0,45}ul)(?<=selected:\i,expanded:(\i),.+?)/, + replace: (m, expanded) => `${m}((typeof isBetterFolders!=="undefined"?isBetterFolders:false)||!${expanded})&&` + } */ + ] + }, + { + find: "APPLICATION_LIBRARY,render", + predicate: () => settings.store.sidebar, + replacement: { + // Render the Better Folders sidebar + match: /(?<=({className:\i\.guilds,themeOverride:\i})\))/, + replace: ",$self.FolderSideBar($1)" + } + }, + { + find: ".Messages.DISCODO_DISABLED", + predicate: () => settings.store.closeAllHomeButton, + replacement: { + // Close all folders when clicking the home button + match: /(?<=onClick:\(\)=>{)(?=.{0,200}"discodo")/, + replace: "$self.closeFolders();" + } + } + ], + + flux: { + CHANNEL_SELECT(data) { + if (!settings.store.closeAllFolders && !settings.store.forceOpen) + return; + + if (lastGuildId !== data.guildId) { + lastGuildId = data.guildId; + const guildFolder = getGuildFolder(data.guildId); + + if (guildFolder?.folderId) { + if (settings.store.forceOpen && !ExpandedGuildFolderStore.isFolderExpanded(guildFolder.folderId)) { + FolderUtils.toggleGuildFolderExpand(guildFolder.folderId); + } + } else if (settings.store.closeAllFolders) { + closeFolders(); + } + } + }, + + TOGGLE_GUILD_FOLDER_EXPAND(data) { + if (settings.store.closeOthers && !dispatchingFoldersClose) { + dispatchingFoldersClose = true; + + FluxDispatcher.wait(() => { + const expandedFolders = ExpandedGuildFolderStore.getExpandedFolders(); + + if (expandedFolders.size > 1) { + for (const id of expandedFolders) if (id !== data.folderId) + FolderUtils.toggleGuildFolderExpand(id); + } + + dispatchingFoldersClose = false; + }); + } + } + }, + + makeGuildsBarGuildListFilter(isBetterFolders: boolean) { + return child => { + if (isBetterFolders) { + return child?.props?.["aria-label"] === i18n.Messages.SERVERS; + } + return true; + }; + }, + + makeGuildsBarTreeFilter(isBetterFolders: boolean) { + return child => { + if (isBetterFolders) { + return "onScroll" in child.props; + } + return true; + }; + }, + + FolderSideBar: guildsBarProps => , + + closeFolders +}); From bc092252582d0e94c1470f7480c2b12f525d6667 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Fri, 27 Oct 2023 20:10:44 -0300 Subject: [PATCH 12/45] Add missing patches predicates to BetterFolders --- src/plugins/betterFolders/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/betterFolders/index.tsx b/src/plugins/betterFolders/index.tsx index e4bdc9800..5eb0fb16e 100644 --- a/src/plugins/betterFolders/index.tsx +++ b/src/plugins/betterFolders/index.tsx @@ -117,6 +117,7 @@ export default definePlugin({ }, { find: ".FOLDER_ITEM_GUILD_ICON_MARGIN);", + predicate: () => settings.store.sidebar, replacement: [ // Create the isBetterFolders variable in the nested folders component (the parent exports all the props so we don't have to patch it) { From b3311c6f12f06cf0600aeaab9069fccde6195e62 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Sat, 28 Oct 2023 02:19:43 +0200 Subject: [PATCH 13/45] BetterGifAltText: Fix displaying undefined --- src/plugins/betterGifAltText/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/betterGifAltText/index.ts b/src/plugins/betterGifAltText/index.ts index f07295704..8b4116318 100644 --- a/src/plugins/betterGifAltText/index.ts +++ b/src/plugins/betterGifAltText/index.ts @@ -45,7 +45,8 @@ export default definePlugin({ ], altify(props: any) { - if (props.alt && props.alt !== "GIF") return props.alt; + props.alt ??= "GIF"; + if (props.alt !== "GIF") return props.alt; let url: string = props.original || props.src; try { From 7f17e70697cb0899c960c9da2822ffc35bf84534 Mon Sep 17 00:00:00 2001 From: AutumnVN Date: Sat, 28 Oct 2023 07:20:29 +0700 Subject: [PATCH 14/45] noSystemBadge: fix (#1914) --- src/plugins/noSystemBadge.discordDesktop/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/noSystemBadge.discordDesktop/index.ts b/src/plugins/noSystemBadge.discordDesktop/index.ts index 591a0be03..0fbb5332a 100644 --- a/src/plugins/noSystemBadge.discordDesktop/index.ts +++ b/src/plugins/noSystemBadge.discordDesktop/index.ts @@ -25,15 +25,15 @@ export default definePlugin({ authors: [Devs.rushii], patches: [ { - find: "setSystemTrayApplications:function", + find: ",setSystemTrayApplications", replacement: [ { - match: /setBadge:function.+?},/, - replace: "setBadge:function(){}," + match: /setBadge\(\i\).+?},/, + replace: "setBadge(){}," }, { - match: /setSystemTrayIcon:function.+?},/, - replace: "setSystemTrayIcon:function(){}," + match: /setSystemTrayIcon\(\i\).+?},/, + replace: "setSystemTrayIcon(){}," } ] } From aae790f1c1f49160651039a816ec79914ebdbb83 Mon Sep 17 00:00:00 2001 From: AutumnVN Date: Sat, 28 Oct 2023 07:21:35 +0700 Subject: [PATCH 15/45] vencordToolbox: correct hover color + oneko (#1913) --- src/plugins/vencordToolbox/index.css | 10 +++++++--- src/plugins/vencordToolbox/index.tsx | 8 ++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/plugins/vencordToolbox/index.css b/src/plugins/vencordToolbox/index.css index 8b509868f..a1c85ad50 100644 --- a/src/plugins/vencordToolbox/index.css +++ b/src/plugins/vencordToolbox/index.css @@ -1,12 +1,16 @@ .vc-toolbox-btn, -.vc-toolbox-btn svg { +.vc-toolbox-btn>svg { -webkit-app-region: no-drag; } -.vc-toolbox-btn svg { +.vc-toolbox-btn>svg { color: var(--interactive-normal); } -:is(.vc-toolbox-btn:hover, .vc-toolbox-btn[class*="selected"]) svg { +.vc-toolbox-btn[class*="selected"]>svg { color: var(--interactive-active); } + +.vc-toolbox-btn:hover>svg { + color: var(--interactive-hover); +} diff --git a/src/plugins/vencordToolbox/index.tsx b/src/plugins/vencordToolbox/index.tsx index ba55fdeef..cd266c6f2 100644 --- a/src/plugins/vencordToolbox/index.tsx +++ b/src/plugins/vencordToolbox/index.tsx @@ -89,10 +89,10 @@ function VencordPopout(onClose: () => void) { ); } -function VencordPopoutIcon() { +function VencordPopoutIcon(isShown: boolean) { return ( - - + + ); } @@ -114,7 +114,7 @@ function VencordPopoutButton() { className="vc-toolbox-btn" onClick={() => setShow(v => !v)} tooltip={isShown ? null : "Vencord Toolbox"} - icon={VencordPopoutIcon} + icon={() => VencordPopoutIcon(isShown)} selected={isShown} /> )} From 9dd8e72245038c51a5b49d5e1f8e34888171ea5b Mon Sep 17 00:00:00 2001 From: Hugo C Date: Sat, 28 Oct 2023 02:22:04 +0200 Subject: [PATCH 16/45] fix: PiP replacing video download button (#1910) --- src/plugins/pictureInPicture/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/pictureInPicture/index.tsx b/src/plugins/pictureInPicture/index.tsx index dc6ddb0b5..4b6f87970 100644 --- a/src/plugins/pictureInPicture/index.tsx +++ b/src/plugins/pictureInPicture/index.tsx @@ -28,8 +28,8 @@ export default definePlugin({ { find: ".nonMediaAttachment]", replacement: { - match: /\.nonMediaAttachment\].{0,10}children:\[\S/, - replace: "$&&&$self.renderPiPButton()," + match: /\.nonMediaAttachment\].{0,10}children:\[(\S)/, + replace: "$&,$1&&$self.renderPiPButton()," }, }, ], From bfb48b4faf5a87cbd8d9784ad6348ade24a306ae Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Sat, 28 Oct 2023 01:00:17 -0300 Subject: [PATCH 17/45] BetterFolders: Option to choose whether to keep guild icons (#1918) --- src/plugins/betterFolders/index.tsx | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/plugins/betterFolders/index.tsx b/src/plugins/betterFolders/index.tsx index 5eb0fb16e..a3b20c6ca 100644 --- a/src/plugins/betterFolders/index.tsx +++ b/src/plugins/betterFolders/index.tsx @@ -73,6 +73,12 @@ export const settings = definePluginSettings({ type: OptionType.BOOLEAN, description: "Force a folder to open when switching to a server of that folder", default: false + }, + keepIcons: { + type: OptionType.BOOLEAN, + description: "Keep showing guild icons in the primary guild bar folder when it's open in the BetterFolders sidebar", + restartNeeded: true, + default: false } }); @@ -126,6 +132,7 @@ export default definePlugin({ }, // If we are rendering the normal GuildsBar sidebar, we make Discord think the folder is always collapsed to show better icons (the mini guild icons) and avoid transitions { + predicate: () => settings.store.keepIcons, match: /(?<=let{folderNode:\i,setNodeRef:\i,.+?expanded:(\i).+?;)(?=let)/, replace: '$1=(typeof isBetterFolders!=="undefined"?isBetterFolders:false)?$1:false;' }, @@ -133,20 +140,19 @@ export default definePlugin({ { match: /(?=return\(0,\i.\i\)\("div")(?<=selected:\i,expanded:(\i),.+?)/, replace: (_, expanded) => `if((typeof isBetterFolders!=="undefined"?isBetterFolders:false)&&!${expanded})return null;` - } - // This code is required for the plugin to work, but we don't need it right now because we are making Discord think the folder is always collapsed - // If we no longer want to make Discord think the folder is always collapsed, we can use this code for the plugin to work - // One reason to no longer want that is to make better icons (the mini guild icons) no longer show - /* // Disable expanding and collapsing folders transition in the normal GuildsBar sidebar + }, + // Disable expanding and collapsing folders transition in the normal GuildsBar sidebar { + predicate: () => !settings.store.keepIcons, match: /(?<=\.Messages\.SERVER_FOLDER_PLACEHOLDER.+?useTransition\)\()/, replace: '(typeof isBetterFolders!=="undefined"?isBetterFolders:false)&&' }, // If we are rendering the normal GuildsBar sidebar, we avoid rendering guilds from folders that are expanded { + predicate: () => !settings.store.keepIcons, match: /expandedFolderBackground,.+?,(?=\i\(\(\i,\i,\i\)=>{let{key.{0,45}ul)(?<=selected:\i,expanded:(\i),.+?)/, replace: (m, expanded) => `${m}((typeof isBetterFolders!=="undefined"?isBetterFolders:false)||!${expanded})&&` - } */ + } ] }, { From 4b958d17fd28ce39917c006c614efb4189fa4dd0 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Sat, 28 Oct 2023 17:18:00 -0300 Subject: [PATCH 18/45] Fix BetterFolders freeze and add new options (#1923) --- src/plugins/betterFolders/FolderSideBar.tsx | 1 + src/plugins/betterFolders/index.tsx | 119 ++++++++++++++++---- 2 files changed, 96 insertions(+), 24 deletions(-) diff --git a/src/plugins/betterFolders/FolderSideBar.tsx b/src/plugins/betterFolders/FolderSideBar.tsx index f3884701a..5504e1d56 100644 --- a/src/plugins/betterFolders/FolderSideBar.tsx +++ b/src/plugins/betterFolders/FolderSideBar.tsx @@ -33,6 +33,7 @@ export default ErrorBoundary.wrap(guildsBarProps => { ); diff --git a/src/plugins/betterFolders/index.tsx b/src/plugins/betterFolders/index.tsx index a3b20c6ca..8f40d90ff 100644 --- a/src/plugins/betterFolders/index.tsx +++ b/src/plugins/betterFolders/index.tsx @@ -18,13 +18,21 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; +import { proxyLazy } from "@utils/lazy"; import definePlugin, { OptionType } from "@utils/types"; -import { findByPropsLazy, findStoreLazy } from "@webpack"; +import { findByProps, findByPropsLazy, findStoreLazy } from "@webpack"; import { FluxDispatcher, i18n } from "@webpack/common"; import FolderSideBar from "./FolderSideBar"; -const GuildFolderStore = findStoreLazy("SortedGuildStore"); +enum FolderIconDisplay { + Never, + Always, + MoreThanOneFolderExpanded +} + +const GuildsTree = proxyLazy(() => findByProps("GuildsTree").GuildsTree); +const SortedGuildStore = findStoreLazy("SortedGuildStore"); export const ExpandedGuildFolderStore = findStoreLazy("ExpandedGuildFolderStore"); const FolderUtils = findByPropsLazy("move", "toggleGuildFolderExpand"); @@ -32,7 +40,7 @@ let lastGuildId = null as string | null; let dispatchingFoldersClose = false; function getGuildFolder(id: string) { - return GuildFolderStore.getGuildFolders().find(folder => folder.guildIds.includes(id)); + return SortedGuildStore.getGuildFolders().find(folder => folder.guildIds.includes(id)); } function closeFolders() { @@ -50,7 +58,6 @@ export const settings = definePluginSettings({ sidebarAnim: { type: OptionType.BOOLEAN, description: "Animate opening the folder sidebar", - restartNeeded: true, default: true }, closeAllFolders: { @@ -79,6 +86,16 @@ export const settings = definePluginSettings({ description: "Keep showing guild icons in the primary guild bar folder when it's open in the BetterFolders sidebar", restartNeeded: true, default: false + }, + showFolderIcon: { + type: OptionType.SELECT, + description: "Show the folder icon above the folder guilds in the BetterFolders sidebar", + options: [ + { label: "Never", value: FolderIconDisplay.Never }, + { label: "Always", value: FolderIconDisplay.Always, default: true }, + { label: "When more than one folder is expanded", value: FolderIconDisplay.MoreThanOneFolderExpanded } + ], + restartNeeded: true } }); @@ -99,25 +116,45 @@ export default definePlugin({ match: /(?<=let{disableAppDownload:\i=\i\.isPlatformEmbedded,isOverlay:.+?)(?=}=\i,)/, replace: ",isBetterFolders" }, + // If we are rendering the Better Folders sidebar, we filter out guilds that are not in folders and unexpanded folders + { + match: /(useStateFromStoresArray\).{0,25}let \i)=(\i\.\i.getGuildsTree\(\))/, + replace: (_, rest, guildsTree) => `${rest}=$self.getGuildTree(!!arguments[0].isBetterFolders,${guildsTree},arguments[0].betterFoldersExpandedIds)` + }, // If we are rendering the Better Folders sidebar, we filter out everything but the servers and folders from the GuildsBar Guild List children { match: /lastTargetNode:\i\[\i\.length-1\].+?Fragment.+?\]}\)\]/, - replace: '$&.filter($self.makeGuildsBarGuildListFilter(typeof isBetterFolders!=="undefined"?isBetterFolders:false))' + replace: "$&.filter($self.makeGuildsBarGuildListFilter(!!arguments[0].isBetterFolders))" }, // If we are rendering the Better Folders sidebar, we filter out everything but the scroller for the guild list from the GuildsBar Tree children { match: /unreadMentionsIndicatorBottom,barClassName.+?}\)\]/, - replace: '$&.filter($self.makeGuildsBarTreeFilter(typeof isBetterFolders!=="undefined"?isBetterFolders:false))' + replace: "$&.filter($self.makeGuildsBarTreeFilter(!!arguments[0].isBetterFolders))" }, // Export the isBetterFolders variable to the folders component { match: /(?<=\.Messages\.SERVERS.+?switch\((\i)\.type\){case \i\.\i\.FOLDER:.+?folderNode:\i,)/, replace: 'isBetterFolders:typeof isBetterFolders!=="undefined"?isBetterFolders:false,' - }, - // Avoid rendering servers that are not in folders in the Better Folders sidebar + } + ] + }, + { + // This is the parent folder component + find: ".MAX_GUILD_FOLDER_NAME_LENGTH,", + predicate: () => settings.store.sidebar && settings.store.showFolderIcon !== FolderIconDisplay.Always, + replacement: [ { - match: /(?<=\.Messages\.SERVERS.+?switch\((\i)\.type\){case \i\.\i\.FOLDER:.+?GUILD:)/, - replace: 'if((typeof isBetterFolders!=="undefined"?isBetterFolders:false)&&$1.parentId==null)return null;' + // Modify the expanded state to instead return the list of expanded folders + match: /(useStateFromStores\).{0,20}=>)(\i\.\i)\.isFolderExpanded\(\i\)/, + replace: (_, rest, ExpandedGuildFolderStore) => `${rest}${ExpandedGuildFolderStore}.getExpandedFolders()`, + }, + { + // Modify the expanded prop to use the boolean if the above patch fails, or check if the folder is expanded from the list if it succeeds + // Also export the list of expanded folders to the child folder component if the patch above succeeds, else export undefined + match: /(?<=folderNode:(\i),expanded:)\i(?=,)/, + replace: (isExpandedOrExpandedIds, folderNote) => "" + + `typeof ${isExpandedOrExpandedIds}==="boolean"?${isExpandedOrExpandedIds}:${isExpandedOrExpandedIds}.has(${folderNote}.id),` + + `betterFoldersExpandedIds:${isExpandedOrExpandedIds} instanceof Set?${isExpandedOrExpandedIds}:void 0` } ] }, @@ -125,33 +162,37 @@ export default definePlugin({ find: ".FOLDER_ITEM_GUILD_ICON_MARGIN);", predicate: () => settings.store.sidebar, replacement: [ - // Create the isBetterFolders variable in the nested folders component (the parent exports all the props so we don't have to patch it) - { - match: /(?<=let{folderNode:\i,setNodeRef:\i,)/, - replace: "isBetterFolders," - }, + // We use arguments[0] to access the isBetterFolders variable in this nested folder component (the parent exports all the props so we don't have to patch it) + // If we are rendering the normal GuildsBar sidebar, we make Discord think the folder is always collapsed to show better icons (the mini guild icons) and avoid transitions { predicate: () => settings.store.keepIcons, - match: /(?<=let{folderNode:\i,setNodeRef:\i,.+?expanded:(\i).+?;)(?=let)/, - replace: '$1=(typeof isBetterFolders!=="undefined"?isBetterFolders:false)?$1:false;' - }, - // If we are rendering the Better Folders sidebar, we filter out folders that are not expanded - { - match: /(?=return\(0,\i.\i\)\("div")(?<=selected:\i,expanded:(\i),.+?)/, - replace: (_, expanded) => `if((typeof isBetterFolders!=="undefined"?isBetterFolders:false)&&!${expanded})return null;` + match: /(?<=let{folderNode:\i,setNodeRef:\i,.+?expanded:(\i),.+?;)(?=let)/, + replace: (_, isExpanded) => `${isExpanded}=!!arguments[0].isBetterFolders&&${isExpanded};` }, // Disable expanding and collapsing folders transition in the normal GuildsBar sidebar { predicate: () => !settings.store.keepIcons, match: /(?<=\.Messages\.SERVER_FOLDER_PLACEHOLDER.+?useTransition\)\()/, - replace: '(typeof isBetterFolders!=="undefined"?isBetterFolders:false)&&' + replace: "!!arguments[0].isBetterFolders&&" }, // If we are rendering the normal GuildsBar sidebar, we avoid rendering guilds from folders that are expanded { predicate: () => !settings.store.keepIcons, match: /expandedFolderBackground,.+?,(?=\i\(\(\i,\i,\i\)=>{let{key.{0,45}ul)(?<=selected:\i,expanded:(\i),.+?)/, - replace: (m, expanded) => `${m}((typeof isBetterFolders!=="undefined"?isBetterFolders:false)||!${expanded})&&` + replace: (m, isExpanded) => `${m}!arguments[0].isBetterFolders&&${isExpanded}?null:` + }, + { + // Decide if we should render the expanded folder background if we are rendering the Better Folders sidebar + predicate: () => settings.store.showFolderIcon !== FolderIconDisplay.Always, + match: /(?<=\.wrapper,children:\[)/, + replace: "$self.shouldShowFolderIconAndBackground(!!arguments[0].isBetterFolders,arguments[0].betterFoldersExpandedIds)&&" + }, + { + // Decide if we should render the expanded folder icon if we are rendering the Better Folders sidebar + predicate: () => settings.store.showFolderIcon !== FolderIconDisplay.Always, + match: /(?<=\.expandedFolderBackground.+?}\),)(?=\i,)/, + replace: "!$self.shouldShowFolderIconAndBackground(!!arguments[0].isBetterFolders,arguments[0].betterFoldersExpandedIds)?null:" } ] }, @@ -212,6 +253,21 @@ export default definePlugin({ } }, + getGuildTree(isBetterFolders: boolean, oldTree: any, expandedFolderIds?: Set) { + if (!isBetterFolders || expandedFolderIds == null) return oldTree; + + const newTree = new GuildsTree(); + // Children is every folder and guild which is not in a folder, this filters out only the expanded folders + newTree.root.children = oldTree.root.children.filter(guildOrFolder => expandedFolderIds.has(guildOrFolder.id)); + // Nodes is every folder and guild, even if it's in a folder, this filters out only the expanded folders and guilds inside them + newTree.nodes = Object.fromEntries( + Object.entries(oldTree.nodes) + .filter(([_, guildOrFolder]: any[]) => expandedFolderIds.has(guildOrFolder.id) || expandedFolderIds.has(guildOrFolder.parentId)) + ); + + return newTree; + }, + makeGuildsBarGuildListFilter(isBetterFolders: boolean) { return child => { if (isBetterFolders) { @@ -230,6 +286,21 @@ export default definePlugin({ }; }, + shouldShowFolderIconAndBackground(isBetterFolders: boolean, expandedFolderIds?: Set) { + if (!isBetterFolders) return true; + + switch (settings.store.showFolderIcon) { + case FolderIconDisplay.Never: + return false; + case FolderIconDisplay.Always: + return true; + case FolderIconDisplay.MoreThanOneFolderExpanded: + return (expandedFolderIds?.size ?? 0) > 1; + default: + return true; + } + }, + FolderSideBar: guildsBarProps => , closeFolders From af135b9245226013ebf1a56752da5d35dc5e59fe Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Sat, 28 Oct 2023 17:43:27 -0300 Subject: [PATCH 19/45] Fix AlwaysAnimate --- src/plugins/alwaysAnimate/index.ts | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/plugins/alwaysAnimate/index.ts b/src/plugins/alwaysAnimate/index.ts index f3ae27afd..d53e51452 100644 --- a/src/plugins/alwaysAnimate/index.ts +++ b/src/plugins/alwaysAnimate/index.ts @@ -21,16 +21,30 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "AlwaysAnimate", - description: "Animates anything that can be animated, besides status emojis.", + description: "Animates anything that can be animated", authors: [Devs.FieryFlames], patches: [ { - find: ".canAnimate", + find: "canAnimate:", all: true, + // Some modules match the find but the replacement is returned untouched + noWarn: true, replacement: { - match: /\.canAnimate\b/g, - replace: ".canAnimate || true" + match: /canAnimate:.+?(?=([,}].*?\)))/g, + replace: (m, rest) => { + const destructuringMatch = rest.match(/}=.+/); + if (destructuringMatch == null) return "canAnimate:!0"; + return m; + } + } + }, + { + // Status emojis + find: ".Messages.GUILD_OWNER,", + replacement: { + match: /(?<=\.activityEmoji,.+?animate:)\i/, + replace: "!0" } } ] From 522fdcd15de906ffd86ae868f5eb0905812b908a Mon Sep 17 00:00:00 2001 From: V Date: Sat, 28 Oct 2023 23:51:04 +0200 Subject: [PATCH 20/45] WebKeyBinds: Fix & make available on ArmCord --- .../index.ts | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) rename src/plugins/{webKeybinds.vencordDesktop => webKeybinds.web}/index.ts (84%) diff --git a/src/plugins/webKeybinds.vencordDesktop/index.ts b/src/plugins/webKeybinds.web/index.ts similarity index 84% rename from src/plugins/webKeybinds.vencordDesktop/index.ts rename to src/plugins/webKeybinds.web/index.ts index 798713d50..12d485aac 100644 --- a/src/plugins/webKeybinds.vencordDesktop/index.ts +++ b/src/plugins/webKeybinds.web/index.ts @@ -18,19 +18,14 @@ import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; -import { findLazy, mapMangledModuleLazy } from "@webpack"; +import { findByPropsLazy } from "@webpack"; import { ComponentDispatch, FluxDispatcher, NavigationRouter, SelectedGuildStore, SettingsRouter } from "@webpack/common"; -const GuildNavBinds = mapMangledModuleLazy("mod+alt+down", { - CtrlTab: m => m.binds?.at(-1) === "ctrl+tab", - CtrlShiftTab: m => m.binds?.at(-1) === "ctrl+shift+tab", -}); - -const DigitBinds = findLazy(m => m.binds?.[0] === "mod+1"); +const KeyBinds = findByPropsLazy("JUMP_TO_GUILD", "SERVER_NEXT"); export default definePlugin({ name: "WebKeybinds", - description: "Re-adds keybinds missing in the web version of Discord: ctrl+t, ctrl+shift+t, ctrl+tab, ctrl+shift+tab, ctrl+1-9, ctrl+,", + description: "Re-adds keybinds missing in the web version of Discord: ctrl+t, ctrl+shift+t, ctrl+tab, ctrl+shift+tab, ctrl+1-9, ctrl+,. Only works fully on Vesktop/ArmCord, not inside your browser", authors: [Devs.Ven], enabledByDefault: true, @@ -57,13 +52,13 @@ export default definePlugin({ SettingsRouter.open("My Account"); break; case "Tab": - const handler = e.shiftKey ? GuildNavBinds.CtrlShiftTab : GuildNavBinds.CtrlTab; + const handler = e.shiftKey ? KeyBinds.SERVER_PREV : KeyBinds.SERVER_NEXT; handler.action(e); break; default: if (e.key >= "1" && e.key <= "9") { e.preventDefault(); - DigitBinds.action(e, `mod+${e.key}`); + KeyBinds.JUMP_TO_GUILD.action(e, `mod+${e.key}`); } break; } From 18fdc33ee7d1f60d58645c2a98f402988b97e996 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Tue, 31 Oct 2023 23:43:28 +0100 Subject: [PATCH 21/45] [skip ci] add react linting --- .eslintrc.json | 12 +- package.json | 1 + pnpm-lock.yaml | 768 ++++++++++++++++++ .../Notifications/NotificationComponent.tsx | 2 +- src/components/ErrorBoundary.tsx | 5 +- src/components/Heart.tsx | 2 +- src/components/Icons.tsx | 2 +- src/components/PluginSettings/index.tsx | 20 +- .../VencordSettings/PatchHelperTab.tsx | 4 +- src/components/VencordSettings/ThemesTab.tsx | 2 +- src/components/VencordSettings/UpdaterTab.tsx | 4 +- src/plugins/betterFolders/FolderSideBar.tsx | 2 +- src/plugins/callTimer/index.tsx | 1 - src/plugins/consoleShortcuts/index.ts | 1 + src/plugins/customRPC/index.tsx | 2 +- src/plugins/emoteCloner/index.tsx | 42 +- src/plugins/gameActivityToggle/index.tsx | 2 +- src/plugins/messageLinkEmbeds/index.tsx | 4 +- src/plugins/moreUserTags/index.tsx | 2 +- src/plugins/mutualGroupDMs/index.tsx | 1 + .../components/RolesAndUsersPermissions.tsx | 3 +- .../components/UserPermissions.tsx | 4 +- src/plugins/pictureInPicture/index.tsx | 2 +- src/plugins/platformIndicators/index.tsx | 32 +- .../readAllNotificationsButton/index.tsx | 2 +- src/plugins/sendTimestamps/index.tsx | 2 +- .../serverProfile/GuildProfileModal.tsx | 1 + .../components/Code.tsx | 6 +- .../components/Highlighter.tsx | 2 +- src/plugins/showConnections/index.tsx | 2 +- .../components/HiddenChannelLockScreen.tsx | 2 +- src/plugins/silentMessageToggle/index.tsx | 2 +- src/plugins/silentTyping/index.tsx | 4 +- .../spotifyControls/PlayerComponent.tsx | 28 +- .../startupTimings/StartupTimingPage.tsx | 4 +- src/plugins/typingTweaks/index.tsx | 4 +- src/utils/react.tsx | 2 +- 37 files changed, 884 insertions(+), 97 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 2ee24e8b3..5d1b7c763 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,6 +9,7 @@ "unused-imports", "path-alias" ], + "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], "settings": { "import/resolver": { "alias": { @@ -20,6 +21,9 @@ ["@components", "./src/components"] ] } + }, + "react": { + "version": "18.2" } }, "rules": { @@ -93,6 +97,12 @@ "unused-imports/no-unused-imports": "error", - "path-alias/no-relative": "error" + "path-alias/no-relative": "error", + + "react/no-unescaped-entities": "off", + "react/prop-types": "off", + + /* we dont target ancient browsers */ + "react/jsx-no-target-blank": "off" } } diff --git a/package.json b/package.json index da8fc449a..ec23a4cb0 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "eslint": "^8.46.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-path-alias": "^1.0.0", + "eslint-plugin-react": "^7.33.2", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^2.0.0", "highlight.js": "10.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index be7befab3..2eb545560 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -87,6 +87,9 @@ devDependencies: eslint-plugin-path-alias: specifier: ^1.0.0 version: 1.0.0(patch_hash=m6sma4g6bh67km3q6igf6uxaja)(eslint@8.46.0) + eslint-plugin-react: + specifier: ^7.33.2 + version: 7.33.2(eslint@8.46.0) eslint-plugin-simple-import-sort: specifier: ^10.0.0 version: 10.0.0(eslint@8.46.0) @@ -855,6 +858,24 @@ packages: engines: {node: '>=0.10.0'} dev: true + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: true + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + dev: true + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -865,6 +886,49 @@ packages: engines: {node: '>=0.10.0'} dev: true + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -884,12 +948,23 @@ packages: resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} dev: true + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: true + /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true dev: true + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -967,6 +1042,14 @@ packages: unset-value: 1.0.0 dev: true + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + dev: true + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1176,6 +1259,24 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + dev: true + /define-property@0.2.5: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} engines: {node: '>=0.10.0'} @@ -1221,6 +1322,13 @@ packages: moment: 2.29.4 dev: true + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -1244,6 +1352,94 @@ packages: is-arrayish: 0.2.1 dev: true + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.13 + dev: true + + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 + function-bind: 1.1.1 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + dev: true + + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + /esbuild-android-64@0.15.18: resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} engines: {node: '>=12'} @@ -1524,6 +1720,34 @@ packages: dev: true patched: true + /eslint-plugin-react@7.33.2(eslint@8.46.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + peerDependenciesMeta: + eslint: + optional: true + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: true + /eslint-plugin-simple-header@1.0.2: resolution: {integrity: sha512-K1EJ/ueBIjPRA8qR44Ymo+GDmPYYmfoODtainGxVr7PSbX6QiaY+pTuGCrOhO+AtVsYJs8GLSVdGUTXyAxAtOA==} dev: false @@ -1791,6 +2015,12 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + /for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} @@ -1823,11 +2053,38 @@ packages: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: true + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -1835,6 +2092,14 @@ packages: pump: 3.0.0 dev: true + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + /get-tsconfig@4.5.0: resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} dev: true @@ -1892,6 +2157,13 @@ packages: type-fest: 0.20.2 dev: true + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -1908,6 +2180,12 @@ packages: resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} dev: true + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true @@ -1925,6 +2203,10 @@ packages: engines: {node: '>=6'} dev: true + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -1935,6 +2217,29 @@ packages: engines: {node: '>=8'} dev: true + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + /has-value@0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} engines: {node: '>=0.10.0'} @@ -1973,6 +2278,13 @@ packages: function-bind: 1.1.1 dev: true + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + /highlight.js@10.6.0: resolution: {integrity: sha512-8mlRcn5vk/r4+QcqerapwBYTe+iPL5ih6xrNylxrnBdHQiijDETfXX7VIxC3UiCRiINBJfANBAsPzAvRQj8RpQ==} dev: true @@ -2050,6 +2362,15 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + /is-accessor-descriptor@0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} @@ -2064,20 +2385,60 @@ packages: kind-of: 6.0.3 dev: true + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + /is-core-module@2.12.0: resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 dev: true + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + /is-data-descriptor@0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} @@ -2092,6 +2453,13 @@ packages: kind-of: 6.0.3 dev: true + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-descriptor@0.1.6: resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} engines: {node: '>=0.10.0'} @@ -2127,11 +2495,24 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.5 + dev: true + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: true + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2139,6 +2520,22 @@ packages: is-extglob: 2.1.1 dev: true + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-number@3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} @@ -2173,6 +2570,62 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.13 + dev: true + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -2182,6 +2635,10 @@ packages: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -2198,6 +2655,16 @@ packages: engines: {node: '>=0.10.0'} dev: true + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -2229,6 +2696,16 @@ packages: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: false + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.4 + object.values: 1.1.7 + dev: true + /jszip@2.7.0: resolution: {integrity: sha512-JIsRKRVC3gTRo2vM4Wy9WBC3TRcfnIZU8k65Phi3izkvPH975FowRYtKGT6PxevA0XnJ/yO8b0QwV0ydVyQwfw==} dependencies: @@ -2297,6 +2774,13 @@ packages: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: true + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -2492,6 +2976,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + /object-copy@0.1.0: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} engines: {node: '>=0.10.0'} @@ -2501,6 +2990,15 @@ packages: kind-of: 3.2.2 dev: true + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + /object-visit@1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} @@ -2508,6 +3006,41 @@ packages: isobject: 3.0.1 dev: true + /object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + /object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} @@ -2515,6 +3048,15 @@ packages: isobject: 3.0.1 dev: true + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -2677,6 +3219,14 @@ packages: engines: {node: '>=0.4.0'} dev: true + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: true + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true @@ -2735,6 +3285,10 @@ packages: engines: {node: '>=8'} dev: true + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -2771,6 +3325,18 @@ packages: strip-indent: 3.0.0 dev: true + /reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: true + /regex-not@1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} @@ -2779,6 +3345,15 @@ packages: safe-regex: 1.1.0 dev: true + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: true + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -2813,6 +3388,15 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /ret@0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} @@ -2836,10 +3420,28 @@ packages: queue-microtask: 1.2.3 dev: true + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-regex: 1.1.4 + dev: true + /safe-regex@1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} dependencies: @@ -2851,6 +3453,11 @@ packages: hasBin: true dev: true + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + /semver@7.5.0: resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} engines: {node: '>=10'} @@ -2859,6 +3466,25 @@ packages: lru-cache: 6.0.0 dev: true + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + dev: true + /set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} @@ -2881,6 +3507,14 @@ packages: engines: {node: '>=8'} dev: true + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + dev: true + /signal-exit@4.0.1: resolution: {integrity: sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==} engines: {node: '>=14'} @@ -3006,6 +3640,45 @@ packages: strip-ansi: 6.0.1 dev: true + /string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 + side-channel: 1.0.4 + dev: true + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: @@ -3263,12 +3936,59 @@ packages: engines: {node: '>=14.16'} dev: true + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: true + /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true dev: true + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + /unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} dependencies: @@ -3348,6 +4068,54 @@ packages: webidl-conversions: 3.0.1 dev: true + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: true + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: true + + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true diff --git a/src/api/Notifications/NotificationComponent.tsx b/src/api/Notifications/NotificationComponent.tsx index caa4b64ef..71c40c736 100644 --- a/src/api/Notifications/NotificationComponent.tsx +++ b/src/api/Notifications/NotificationComponent.tsx @@ -21,7 +21,7 @@ import "./styles.css"; import { useSettings } from "@api/Settings"; import ErrorBoundary from "@components/ErrorBoundary"; import { classes } from "@utils/misc"; -import { React, useEffect, useMemo, useState, useStateFromStores, WindowStore } from "@webpack/common"; +import { useEffect, useMemo, useState, useStateFromStores, WindowStore } from "@webpack/common"; import { NotificationData } from "./Notifications"; diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx index ea2e02b51..02e0e939b 100644 --- a/src/components/ErrorBoundary.tsx +++ b/src/components/ErrorBoundary.tsx @@ -80,10 +80,7 @@ const ErrorBoundary = LazyComponent(() => { if (this.props.noop) return null; if (this.props.fallback) - return ; + return {this.props.children}; const msg = this.props.message || "An error occurred while rendering this Component. More info can be found below and in your console."; diff --git a/src/components/Heart.tsx b/src/components/Heart.tsx index b33b83643..017b41645 100644 --- a/src/components/Heart.tsx +++ b/src/components/Heart.tsx @@ -27,7 +27,7 @@ export function Heart() { > diff --git a/src/components/Icons.tsx b/src/components/Icons.tsx index 93b1323e7..01012d1fc 100644 --- a/src/components/Icons.tsx +++ b/src/components/Icons.tsx @@ -58,7 +58,7 @@ export function LinkIcon({ height = 24, width = 24, className }: IconProps) { className={classes(className, "vc-link-icon")} viewBox="0 0 24 24" > - + diff --git a/src/components/PluginSettings/index.tsx b/src/components/PluginSettings/index.tsx index fe111fa9d..19e9fb3f4 100644 --- a/src/components/PluginSettings/index.tsx +++ b/src/components/PluginSettings/index.tsx @@ -30,7 +30,7 @@ import { ChangeList } from "@utils/ChangeList"; import { Logger } from "@utils/Logger"; import { Margins } from "@utils/margins"; import { classes, isObjectEmpty } from "@utils/misc"; -import { openModalLazy } from "@utils/modal"; +import { openModal } from "@utils/modal"; import { useAwaiter } from "@utils/react"; import { Plugin } from "@utils/types"; import { findByPropsLazy } from "@webpack"; @@ -95,12 +95,14 @@ export function PluginCard({ plugin, disabled, onRestartNeeded, onMouseEnter, on const isEnabled = () => settings.enabled ?? false; - function openModal() { - openModalLazy(async () => { - return modalProps => { - return onRestartNeeded(plugin.name)} />; - }; - }); + function openPluginModal() { + openModal(modalProps => ( + onRestartNeeded(plugin.name)} + /> + )); } function toggleEnabled() { @@ -159,7 +161,7 @@ export function PluginCard({ plugin, disabled, onRestartNeeded, onMouseEnter, on onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} infoButton={ - diff --git a/src/plugins/spotifyControls/PlayerComponent.tsx b/src/plugins/spotifyControls/PlayerComponent.tsx index 43c499ab7..64ee52fc1 100644 --- a/src/plugins/spotifyControls/PlayerComponent.tsx +++ b/src/plugins/spotifyControls/PlayerComponent.tsx @@ -38,19 +38,21 @@ function msToHuman(ms: number) { } function Svg(path: string, label: string) { - return () => ( - - - - ); + return function Icon() { + return ( + + + + ); + }; } // KraXen's icons :yesyes: diff --git a/src/plugins/startupTimings/StartupTimingPage.tsx b/src/plugins/startupTimings/StartupTimingPage.tsx index c8cf51da2..0950b0688 100644 --- a/src/plugins/startupTimings/StartupTimingPage.tsx +++ b/src/plugins/startupTimings/StartupTimingPage.tsx @@ -120,8 +120,8 @@ function ServerTrace({ trace }: ServerTraceProps) { - {lines.map(line => ( - {line} + {lines.map((line, i) => ( + {line} ))} diff --git a/src/plugins/typingTweaks/index.tsx b/src/plugins/typingTweaks/index.tsx index 62bcd41f6..ccb863ce7 100644 --- a/src/plugins/typingTweaks/index.tsx +++ b/src/plugins/typingTweaks/index.tsx @@ -21,7 +21,7 @@ import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; import { openUserProfile } from "@utils/discord"; import definePlugin, { OptionType } from "@utils/types"; -import { Avatar, GuildMemberStore, React, RelationshipStore } from "@webpack/common"; +import { Avatar, GuildMemberStore, RelationshipStore } from "@webpack/common"; import { User } from "discord-types/general"; const settings = definePluginSettings({ @@ -135,7 +135,7 @@ export default definePlugin({ return children.map(c => c.type === "strong" - ? + ? : c ); } diff --git a/src/utils/react.tsx b/src/utils/react.tsx index 0181c95b8..43a4d121e 100644 --- a/src/utils/react.tsx +++ b/src/utils/react.tsx @@ -133,7 +133,7 @@ export function useForceUpdater(withDep?: true) { export function LazyComponent(factory: () => React.ComponentType, attempts = 5) { const get = makeLazy(factory, attempts); - return (props: T) => { + return function Lazy(props: T) { const Component = get() ?? NoopComponent; return ; }; From 584885acf5a650afdff145b3f6bac971995d4a2c Mon Sep 17 00:00:00 2001 From: Vendicated Date: Tue, 31 Oct 2023 23:56:13 +0100 Subject: [PATCH 22/45] [skip ci] Revert "add react linting" doesnt work properly :( This reverts commit 18fdc33ee7d1f60d58645c2a98f402988b97e996. --- .eslintrc.json | 12 +- package.json | 1 - pnpm-lock.yaml | 768 ------------------ .../Notifications/NotificationComponent.tsx | 2 +- src/components/ErrorBoundary.tsx | 5 +- src/components/Heart.tsx | 2 +- src/components/Icons.tsx | 2 +- src/components/PluginSettings/index.tsx | 20 +- .../VencordSettings/PatchHelperTab.tsx | 4 +- src/components/VencordSettings/ThemesTab.tsx | 2 +- src/components/VencordSettings/UpdaterTab.tsx | 4 +- src/plugins/betterFolders/FolderSideBar.tsx | 2 +- src/plugins/callTimer/index.tsx | 1 + src/plugins/consoleShortcuts/index.ts | 1 - src/plugins/customRPC/index.tsx | 2 +- src/plugins/emoteCloner/index.tsx | 42 +- src/plugins/gameActivityToggle/index.tsx | 2 +- src/plugins/messageLinkEmbeds/index.tsx | 4 +- src/plugins/moreUserTags/index.tsx | 2 +- src/plugins/mutualGroupDMs/index.tsx | 1 - .../components/RolesAndUsersPermissions.tsx | 3 +- .../components/UserPermissions.tsx | 4 +- src/plugins/pictureInPicture/index.tsx | 2 +- src/plugins/platformIndicators/index.tsx | 32 +- .../readAllNotificationsButton/index.tsx | 2 +- src/plugins/sendTimestamps/index.tsx | 2 +- .../serverProfile/GuildProfileModal.tsx | 1 - .../components/Code.tsx | 6 +- .../components/Highlighter.tsx | 2 +- src/plugins/showConnections/index.tsx | 2 +- .../components/HiddenChannelLockScreen.tsx | 2 +- src/plugins/silentMessageToggle/index.tsx | 2 +- src/plugins/silentTyping/index.tsx | 4 +- .../spotifyControls/PlayerComponent.tsx | 28 +- .../startupTimings/StartupTimingPage.tsx | 4 +- src/plugins/typingTweaks/index.tsx | 4 +- src/utils/react.tsx | 2 +- 37 files changed, 97 insertions(+), 884 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 5d1b7c763..2ee24e8b3 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,7 +9,6 @@ "unused-imports", "path-alias" ], - "extends": ["plugin:react/recommended", "plugin:react/jsx-runtime"], "settings": { "import/resolver": { "alias": { @@ -21,9 +20,6 @@ ["@components", "./src/components"] ] } - }, - "react": { - "version": "18.2" } }, "rules": { @@ -97,12 +93,6 @@ "unused-imports/no-unused-imports": "error", - "path-alias/no-relative": "error", - - "react/no-unescaped-entities": "off", - "react/prop-types": "off", - - /* we dont target ancient browsers */ - "react/jsx-no-target-blank": "off" + "path-alias/no-relative": "error" } } diff --git a/package.json b/package.json index ec23a4cb0..da8fc449a 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,6 @@ "eslint": "^8.46.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-path-alias": "^1.0.0", - "eslint-plugin-react": "^7.33.2", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^2.0.0", "highlight.js": "10.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2eb545560..be7befab3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -87,9 +87,6 @@ devDependencies: eslint-plugin-path-alias: specifier: ^1.0.0 version: 1.0.0(patch_hash=m6sma4g6bh67km3q6igf6uxaja)(eslint@8.46.0) - eslint-plugin-react: - specifier: ^7.33.2 - version: 7.33.2(eslint@8.46.0) eslint-plugin-simple-import-sort: specifier: ^10.0.0 version: 10.0.0(eslint@8.46.0) @@ -858,24 +855,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 - dev: true - - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-string: 1.0.7 - dev: true - /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -886,49 +865,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - dev: true - - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - dev: true - /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -948,23 +884,12 @@ packages: resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} dev: true - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: true - /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -1042,14 +967,6 @@ packages: unset-value: 1.0.0 dev: true - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} - dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - dev: true - /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1259,24 +1176,6 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - dev: true - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 - object-keys: 1.1.1 - dev: true - /define-property@0.2.5: resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} engines: {node: '>=0.10.0'} @@ -1322,13 +1221,6 @@ packages: moment: 2.29.4 dev: true - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -1352,94 +1244,6 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 - is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.12 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 - dev: true - - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} - dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 - function-bind: 1.1.1 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.6 - iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 - dev: true - - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 - dev: true - - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - dependencies: - hasown: 2.0.0 - dev: true - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - /esbuild-android-64@0.15.18: resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} engines: {node: '>=12'} @@ -1720,34 +1524,6 @@ packages: dev: true patched: true - /eslint-plugin-react@7.33.2(eslint@8.46.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - peerDependenciesMeta: - eslint: - optional: true - dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - eslint: 8.46.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - dev: true - /eslint-plugin-simple-header@1.0.2: resolution: {integrity: sha512-K1EJ/ueBIjPRA8qR44Ymo+GDmPYYmfoODtainGxVr7PSbX6QiaY+pTuGCrOhO+AtVsYJs8GLSVdGUTXyAxAtOA==} dev: false @@ -2015,12 +1791,6 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - /for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} @@ -2053,38 +1823,11 @@ packages: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true - - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} - dependencies: - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - dev: true - /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -2092,14 +1835,6 @@ packages: pump: 3.0.0 dev: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: true - /get-tsconfig@4.5.0: resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} dev: true @@ -2157,13 +1892,6 @@ packages: type-fest: 0.20.2 dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - dev: true - /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -2180,12 +1908,6 @@ packages: resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.2 - dev: true - /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true @@ -2203,10 +1925,6 @@ packages: engines: {node: '>=6'} dev: true - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -2217,29 +1935,6 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - dependencies: - get-intrinsic: 1.2.2 - dev: true - - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - /has-value@0.3.1: resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} engines: {node: '>=0.10.0'} @@ -2278,13 +1973,6 @@ packages: function-bind: 1.1.1 dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - dev: true - /highlight.js@10.6.0: resolution: {integrity: sha512-8mlRcn5vk/r4+QcqerapwBYTe+iPL5ih6xrNylxrnBdHQiijDETfXX7VIxC3UiCRiINBJfANBAsPzAvRQj8RpQ==} dev: true @@ -2362,15 +2050,6 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 - dev: true - /is-accessor-descriptor@0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} @@ -2385,60 +2064,20 @@ packages: kind-of: 6.0.3 dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: true - /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true - - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true - /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true - /is-core-module@2.12.0: resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.0 - dev: true - /is-data-descriptor@0.1.4: resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} engines: {node: '>=0.10.0'} @@ -2453,13 +2092,6 @@ packages: kind-of: 6.0.3 dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - /is-descriptor@0.1.6: resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} engines: {node: '>=0.10.0'} @@ -2495,24 +2127,11 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - dependencies: - call-bind: 1.0.5 - dev: true - /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: true - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2520,22 +2139,6 @@ packages: is-extglob: 2.1.1 dev: true - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true - - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true - - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - /is-number@3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} @@ -2570,62 +2173,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true - - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true - - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.5 - dev: true - - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.13 - dev: true - - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.5 - dev: true - - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: true - /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -2635,10 +2182,6 @@ packages: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true - /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -2655,16 +2198,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 - dev: true - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -2696,16 +2229,6 @@ packages: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: false - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - object.assign: 4.1.4 - object.values: 1.1.7 - dev: true - /jszip@2.7.0: resolution: {integrity: sha512-JIsRKRVC3gTRo2vM4Wy9WBC3TRcfnIZU8k65Phi3izkvPH975FowRYtKGT6PxevA0XnJ/yO8b0QwV0ydVyQwfw==} dependencies: @@ -2774,13 +2297,6 @@ packages: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: true - /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -2976,11 +2492,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - /object-copy@0.1.0: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} engines: {node: '>=0.10.0'} @@ -2990,15 +2501,6 @@ packages: kind-of: 3.2.2 dev: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true - /object-visit@1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} @@ -3006,41 +2508,6 @@ packages: isobject: 3.0.1 dev: true - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - /object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} @@ -3048,15 +2515,6 @@ packages: isobject: 3.0.1 dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -3219,14 +2677,6 @@ packages: engines: {node: '>=0.4.0'} dev: true - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: true - /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true @@ -3285,10 +2735,6 @@ packages: engines: {node: '>=8'} dev: true - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true - /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -3325,18 +2771,6 @@ packages: strip-indent: 3.0.0 dev: true - /reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - which-builtin-type: 1.1.3 - dev: true - /regex-not@1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} engines: {node: '>=0.10.0'} @@ -3345,15 +2779,6 @@ packages: safe-regex: 1.1.0 dev: true - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - set-function-name: 2.0.1 - dev: true - /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3388,15 +2813,6 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - /ret@0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} @@ -3420,28 +2836,10 @@ packages: queue-microtask: 1.2.3 dev: true - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - isarray: 2.0.5 - dev: true - /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-regex: 1.1.4 - dev: true - /safe-regex@1.1.0: resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} dependencies: @@ -3453,11 +2851,6 @@ packages: hasBin: true dev: true - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true - /semver@7.5.0: resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} engines: {node: '>=10'} @@ -3466,25 +2859,6 @@ packages: lru-cache: 6.0.0 dev: true - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - dev: true - - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 - dev: true - /set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} @@ -3507,14 +2881,6 @@ packages: engines: {node: '>=8'} dev: true - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 - dev: true - /signal-exit@4.0.1: resolution: {integrity: sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==} engines: {node: '>=14'} @@ -3640,45 +3006,6 @@ packages: strip-ansi: 6.0.1 dev: true - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - internal-slot: 1.0.6 - regexp.prototype.flags: 1.5.1 - set-function-name: 2.0.1 - side-channel: 1.0.4 - dev: true - - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true - /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: @@ -3936,59 +3263,12 @@ packages: engines: {node: '>=14.16'} dev: true - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: true - - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true - - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true - - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - is-typed-array: 1.1.12 - dev: true - /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true dev: true - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.5 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true - /unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} dependencies: @@ -4068,54 +3348,6 @@ packages: webidl-conversions: 3.0.1 dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - - /which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} - dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 - dev: true - - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - dev: true - - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - dev: true - /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true diff --git a/src/api/Notifications/NotificationComponent.tsx b/src/api/Notifications/NotificationComponent.tsx index 71c40c736..caa4b64ef 100644 --- a/src/api/Notifications/NotificationComponent.tsx +++ b/src/api/Notifications/NotificationComponent.tsx @@ -21,7 +21,7 @@ import "./styles.css"; import { useSettings } from "@api/Settings"; import ErrorBoundary from "@components/ErrorBoundary"; import { classes } from "@utils/misc"; -import { useEffect, useMemo, useState, useStateFromStores, WindowStore } from "@webpack/common"; +import { React, useEffect, useMemo, useState, useStateFromStores, WindowStore } from "@webpack/common"; import { NotificationData } from "./Notifications"; diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx index 02e0e939b..ea2e02b51 100644 --- a/src/components/ErrorBoundary.tsx +++ b/src/components/ErrorBoundary.tsx @@ -80,7 +80,10 @@ const ErrorBoundary = LazyComponent(() => { if (this.props.noop) return null; if (this.props.fallback) - return {this.props.children}; + return ; const msg = this.props.message || "An error occurred while rendering this Component. More info can be found below and in your console."; diff --git a/src/components/Heart.tsx b/src/components/Heart.tsx index 017b41645..b33b83643 100644 --- a/src/components/Heart.tsx +++ b/src/components/Heart.tsx @@ -27,7 +27,7 @@ export function Heart() { > diff --git a/src/components/Icons.tsx b/src/components/Icons.tsx index 01012d1fc..93b1323e7 100644 --- a/src/components/Icons.tsx +++ b/src/components/Icons.tsx @@ -58,7 +58,7 @@ export function LinkIcon({ height = 24, width = 24, className }: IconProps) { className={classes(className, "vc-link-icon")} viewBox="0 0 24 24" > - + diff --git a/src/components/PluginSettings/index.tsx b/src/components/PluginSettings/index.tsx index 19e9fb3f4..fe111fa9d 100644 --- a/src/components/PluginSettings/index.tsx +++ b/src/components/PluginSettings/index.tsx @@ -30,7 +30,7 @@ import { ChangeList } from "@utils/ChangeList"; import { Logger } from "@utils/Logger"; import { Margins } from "@utils/margins"; import { classes, isObjectEmpty } from "@utils/misc"; -import { openModal } from "@utils/modal"; +import { openModalLazy } from "@utils/modal"; import { useAwaiter } from "@utils/react"; import { Plugin } from "@utils/types"; import { findByPropsLazy } from "@webpack"; @@ -95,14 +95,12 @@ export function PluginCard({ plugin, disabled, onRestartNeeded, onMouseEnter, on const isEnabled = () => settings.enabled ?? false; - function openPluginModal() { - openModal(modalProps => ( - onRestartNeeded(plugin.name)} - /> - )); + function openModal() { + openModalLazy(async () => { + return modalProps => { + return onRestartNeeded(plugin.name)} />; + }; + }); } function toggleEnabled() { @@ -161,7 +159,7 @@ export function PluginCard({ plugin, disabled, onRestartNeeded, onMouseEnter, on onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} infoButton={ - diff --git a/src/plugins/spotifyControls/PlayerComponent.tsx b/src/plugins/spotifyControls/PlayerComponent.tsx index 64ee52fc1..43c499ab7 100644 --- a/src/plugins/spotifyControls/PlayerComponent.tsx +++ b/src/plugins/spotifyControls/PlayerComponent.tsx @@ -38,21 +38,19 @@ function msToHuman(ms: number) { } function Svg(path: string, label: string) { - return function Icon() { - return ( - - - - ); - }; + return () => ( + + + + ); } // KraXen's icons :yesyes: diff --git a/src/plugins/startupTimings/StartupTimingPage.tsx b/src/plugins/startupTimings/StartupTimingPage.tsx index 0950b0688..c8cf51da2 100644 --- a/src/plugins/startupTimings/StartupTimingPage.tsx +++ b/src/plugins/startupTimings/StartupTimingPage.tsx @@ -120,8 +120,8 @@ function ServerTrace({ trace }: ServerTraceProps) { - {lines.map((line, i) => ( - {line} + {lines.map(line => ( + {line} ))} diff --git a/src/plugins/typingTweaks/index.tsx b/src/plugins/typingTweaks/index.tsx index ccb863ce7..62bcd41f6 100644 --- a/src/plugins/typingTweaks/index.tsx +++ b/src/plugins/typingTweaks/index.tsx @@ -21,7 +21,7 @@ import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; import { openUserProfile } from "@utils/discord"; import definePlugin, { OptionType } from "@utils/types"; -import { Avatar, GuildMemberStore, RelationshipStore } from "@webpack/common"; +import { Avatar, GuildMemberStore, React, RelationshipStore } from "@webpack/common"; import { User } from "discord-types/general"; const settings = definePluginSettings({ @@ -135,7 +135,7 @@ export default definePlugin({ return children.map(c => c.type === "strong" - ? + ? : c ); } diff --git a/src/utils/react.tsx b/src/utils/react.tsx index 43a4d121e..0181c95b8 100644 --- a/src/utils/react.tsx +++ b/src/utils/react.tsx @@ -133,7 +133,7 @@ export function useForceUpdater(withDep?: true) { export function LazyComponent(factory: () => React.ComponentType, attempts = 5) { const get = makeLazy(factory, attempts); - return function Lazy(props: T) { + return (props: T) => { const Component = get() ?? NoopComponent; return ; }; From 9af2ec65ae5ebcfabedbc3fc703b25868ed0d65b Mon Sep 17 00:00:00 2001 From: Vendicated Date: Wed, 1 Nov 2023 02:09:43 +0100 Subject: [PATCH 23/45] OnePingPerDM: fix server pings --- src/plugins/onePingPerDM/index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/plugins/onePingPerDM/index.ts b/src/plugins/onePingPerDM/index.ts index 37ca87125..ae38343db 100644 --- a/src/plugins/onePingPerDM/index.ts +++ b/src/plugins/onePingPerDM/index.ts @@ -55,10 +55,8 @@ export default definePlugin({ }], isPrivateChannelRead(message: MessageJSON) { const channelType = ChannelStore.getChannel(message.channel_id)?.type; - if (channelType !== ChannelType.DM && channelType !== ChannelType.GROUP_DM) { - return false; - } if ( + (channelType !== ChannelType.DM && channelType !== ChannelType.GROUP_DM) || (channelType === ChannelType.DM && settings.store.channelToAffect === "group_dm") || (channelType === ChannelType.GROUP_DM && settings.store.channelToAffect === "user_dm") || (settings.store.allowMentions && message.mentions.some(m => m.id === UserStore.getCurrentUser().id)) || From 9d78233afad79402b1422c484f4d233fd9a60540 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Sat, 28 Oct 2023 20:32:53 -0300 Subject: [PATCH 24/45] Fix displaying BetterFolders sidebar when watching streams in fullscreen --- src/plugins/betterFolders/FolderSideBar.tsx | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/plugins/betterFolders/FolderSideBar.tsx b/src/plugins/betterFolders/FolderSideBar.tsx index 5504e1d56..97959873f 100644 --- a/src/plugins/betterFolders/FolderSideBar.tsx +++ b/src/plugins/betterFolders/FolderSideBar.tsx @@ -18,16 +18,19 @@ import ErrorBoundary from "@components/ErrorBoundary"; import { LazyComponent } from "@utils/react"; -import { find, findByPropsLazy } from "@webpack"; -import { React, useStateFromStores } from "@webpack/common"; +import { find, findByPropsLazy, findStoreLazy } from "@webpack"; +import { useStateFromStores } from "@webpack/common"; +import type { CSSProperties } from "react"; import { ExpandedGuildFolderStore, settings } from "."; +const ChannelRTCStore = findStoreLazy("ChannelRTCStore"); const Animations = findByPropsLazy("a", "animated", "useTransition"); const GuildsBar = LazyComponent(() => find(m => m.type?.toString().includes('("guildsnav")'))); export default ErrorBoundary.wrap(guildsBarProps => { const expandedFolders = useStateFromStores([ExpandedGuildFolderStore], () => ExpandedGuildFolderStore.getExpandedFolders()); + const isFullscreen = useStateFromStores([ChannelRTCStore], () => ChannelRTCStore.isFullscreenInContext()); const Sidebar = ( { const visible = !!expandedFolders.size; const guilds = document.querySelector(guildsBarProps.className.split(" ").map(c => `.${c}`).join("")); + // We need to display none if we are in fullscreen. Yes this seems horrible doing with css, but it's literally how Discord does it. + // Also display flex otherwise to fix scrolling + const barStyle = { + display: isFullscreen ? "none" : "flex", + } as CSSProperties; + if (!guilds || !settings.store.sidebarAnim) { return visible - ?
{Sidebar}
+ ?
{Sidebar}
: null; } @@ -54,9 +63,9 @@ export default ErrorBoundary.wrap(guildsBarProps => { leave={{ width: 0 }} config={{ duration: 200 }} > - {(style, show) => + {(animationStyle, show) => show && ( - + {Sidebar} ) From 56a9d79f856fd1bffd703e8723b5c1dfb6de6be1 Mon Sep 17 00:00:00 2001 From: AutumnVN Date: Wed, 1 Nov 2023 08:14:32 +0700 Subject: [PATCH 25/45] PiP: fix issues / styles (#1927) --- src/plugins/pictureInPicture/index.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/plugins/pictureInPicture/index.tsx b/src/plugins/pictureInPicture/index.tsx index 4b6f87970..ba4aa8387 100644 --- a/src/plugins/pictureInPicture/index.tsx +++ b/src/plugins/pictureInPicture/index.tsx @@ -4,6 +4,8 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ +import "./styles.css"; + import { definePluginSettings } from "@api/Settings"; import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; @@ -28,8 +30,8 @@ export default definePlugin({ { find: ".nonMediaAttachment]", replacement: { - match: /\.nonMediaAttachment\].{0,10}children:\[(\S)/, - replace: "$&,$1&&$self.renderPiPButton()," + match: /\.nonMediaAttachment\]:!(\i).{0,10}children:\[(\S)/, + replace: "$&,$1&&$2&&$self.renderPiPButton()," }, }, ], @@ -40,6 +42,7 @@ export default definePlugin({ {tooltipProps => (
From e37f62ac0a8d93bd354f09567e3e19dd7e8b7d63 Mon Sep 17 00:00:00 2001 From: AutumnVN Date: Wed, 1 Nov 2023 08:19:02 +0700 Subject: [PATCH 26/45] imageZoom: dont close carousel modal on image click (#1926) Co-authored-by: Vendicated --- src/plugins/imageZoom/index.tsx | 7 +++++++ src/plugins/imageZoom/styles.css | 18 ++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/plugins/imageZoom/index.tsx b/src/plugins/imageZoom/index.tsx index 08f2e29d3..75c944ebd 100644 --- a/src/plugins/imageZoom/index.tsx +++ b/src/plugins/imageZoom/index.tsx @@ -186,6 +186,13 @@ export default definePlugin({ } ] }, + { + find: ".carouselModal", + replacement: { + match: /(?<=\.carouselModal.{0,100}onClick:)\i,/, + replace: "()=>{}," + } + } ], settings, diff --git a/src/plugins/imageZoom/styles.css b/src/plugins/imageZoom/styles.css index 09c3c8580..51e225c05 100644 --- a/src/plugins/imageZoom/styles.css +++ b/src/plugins/imageZoom/styles.css @@ -15,19 +15,17 @@ border-radius: 0; } -.vc-imgzoom-nearest-neighbor > img { - image-rendering: pixelated; /* https://googlechrome.github.io/samples/image-rendering-pixelated/index.html */ +.vc-imgzoom-nearest-neighbor>img { + image-rendering: pixelated; + + /* https://googlechrome.github.io/samples/image-rendering-pixelated/index.html */ } /* make the carousel take up less space so we can click the backdrop and exit out of it */ -[class|="carouselModal"] { - height: fit-content; - box-shadow: none; +[class*="modalCarouselWrapper_"] { + top: 0 !important; } -[class|="wrapper"]:has(> #vc-imgzoom-magnify-modal) { - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); +[class*="carouselModal_"] { + height: 0 !important; } From 9de6c2d4ff17ccf9a2a205b00cccc534692a6c51 Mon Sep 17 00:00:00 2001 From: AutumnVN Date: Wed, 1 Nov 2023 08:19:26 +0700 Subject: [PATCH 27/45] previewMessage: fix button (#1919) --- src/plugins/previewMessage/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/previewMessage/index.tsx b/src/plugins/previewMessage/index.tsx index bc6751141..f2634ae6b 100644 --- a/src/plugins/previewMessage/index.tsx +++ b/src/plugins/previewMessage/index.tsx @@ -137,5 +137,5 @@ export default definePlugin({ }, ], - previewIcon: ErrorBoundary.wrap(PreviewButton, { noop: true }), + chatBarIcon: ErrorBoundary.wrap(PreviewButton, { noop: true }), }); From 5dc0d06be16733e2d5a49b7b8ad8127fea9660ae Mon Sep 17 00:00:00 2001 From: Haruka <96925398+nakoyasha@users.noreply.github.com> Date: Wed, 1 Nov 2023 03:23:45 +0200 Subject: [PATCH 28/45] EmoteCloner: make the error toasts useful (#1938) Co-authored-by: Vendicated --- src/plugins/emoteCloner/index.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/plugins/emoteCloner/index.tsx b/src/plugins/emoteCloner/index.tsx index c44731152..219ce435f 100644 --- a/src/plugins/emoteCloner/index.tsx +++ b/src/plugins/emoteCloner/index.tsx @@ -155,10 +155,15 @@ async function doClone(guildId: string, data: Sticker | Emoji) { type: Toasts.Type.SUCCESS, id: Toasts.genId() }); - } catch (e) { + } catch (e: any) { + let message = "Something went wrong (check console!)"; + try { + message = JSON.parse(e.text).message; + } catch { } + new Logger("EmoteCloner").error("Failed to clone", data.name, "to", guildId, e); Toasts.show({ - message: "Oopsie something went wrong :( Check console!!!", + message: "Failed to clone: " + message, type: Toasts.Type.FAILURE, id: Toasts.genId() }); From dd61b0c9992c53958508104e3489b63954285121 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Wed, 1 Nov 2023 02:25:13 +0100 Subject: [PATCH 29/45] bump to v1.6.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index da8fc449a..fa463823c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "vencord", "private": "true", - "version": "1.6.1", + "version": "1.6.2", "description": "The cutest Discord client mod", "homepage": "https://github.com/Vendicated/Vencord#readme", "bugs": { From 9cf88d42324f3930f707cfdb74613e4b1fac9ff7 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Wed, 1 Nov 2023 22:46:06 -0300 Subject: [PATCH 30/45] Fix MessageDecorationsAPI --- src/plugins/_api/messageDecorations.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/_api/messageDecorations.ts b/src/plugins/_api/messageDecorations.ts index 1646ad645..b41ec0be9 100644 --- a/src/plugins/_api/messageDecorations.ts +++ b/src/plugins/_api/messageDecorations.ts @@ -27,8 +27,8 @@ export default definePlugin({ { find: '"Message Username"', replacement: { - match: /currentUserIsPremium:.{0,70}{children:\i(?=}\))/, - replace: "$&.concat(Vencord.Api.MessageDecorations.__addDecorationsToMessage(arguments[0]))" + match: /\.Messages\.GUILD_COMMUNICATION_DISABLED_BOTTOM_SHEET_TITLE.+?}\),\i(?=\])/, + replace: "$&,...Vencord.Api.MessageDecorations.__addDecorationsToMessage(arguments[0])" } } ], From 098da8c3fd95cdd1f299b86d0b919b001009a1df Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Wed, 1 Nov 2023 23:26:13 -0300 Subject: [PATCH 31/45] Fix ViewIcons --- src/plugins/viewIcons/index.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx index fd6b7b6bf..ccbc8ddca 100644 --- a/src/plugins/viewIcons/index.tsx +++ b/src/plugins/viewIcons/index.tsx @@ -65,7 +65,9 @@ const settings = definePluginSettings({ } }); -function openImage(url: string) { +function openImage(url?: string) { + if (!url) return; + const format = url.startsWith("/") ? "png" : settings.store.format; const u = new URL(url, window.location.href); @@ -171,12 +173,12 @@ export default definePlugin({ }, patches: [ - // Make pfps clickable + // Make pfps clickable and add pointer cursor { - find: "onAddFriend:function", + find: ".AVATAR_DECORATION_STATUS_ROUND_16;", replacement: { - match: /\{src:(\i)(?=,avatarDecoration)/, - replace: "{src:$1,onClick:()=>$self.openImage($1)" + match: /memo\(.{0,50}(?=let{statusColor:\i,status:\i,...\i}=(\i),)/, + replace: (m, props) => `${m}${props}.onClick=()=>$self.openImage(${props}.src);${props}.style={cursor:${props}.src?"pointer":void 0};` } }, // Make banners clickable From 27fffc8bc3fcb6bdca22704f268710f72cc94c4c Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Wed, 1 Nov 2023 23:28:52 -0300 Subject: [PATCH 32/45] Fix ShowMeYourName --- src/plugins/showMeYourName/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/showMeYourName/index.tsx b/src/plugins/showMeYourName/index.tsx index 6986f69f2..62d0645d2 100644 --- a/src/plugins/showMeYourName/index.tsx +++ b/src/plugins/showMeYourName/index.tsx @@ -47,7 +47,7 @@ export default definePlugin({ authors: [Devs.Rini, Devs.TheKodeToad], patches: [ { - find: '"Message Username"', + find: ".useCanSeeRemixBadge)", replacement: { match: /(?<=onContextMenu:\i,children:).*?\}/, replace: "$self.renderUsername(arguments[0])}" From 44b21394b317079721ec5ec48cc3d00bcfeda873 Mon Sep 17 00:00:00 2001 From: AutumnVN Date: Fri, 3 Nov 2023 07:56:31 +0700 Subject: [PATCH 33/45] gifPaste: fix unable to use gif picker in profile customization (#1947) --- src/plugins/gifPaste/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/gifPaste/index.ts b/src/plugins/gifPaste/index.ts index 8c1303ba4..9ce88f9d2 100644 --- a/src/plugins/gifPaste/index.ts +++ b/src/plugins/gifPaste/index.ts @@ -33,8 +33,8 @@ export default definePlugin({ patches: [{ find: ".handleSelectGIF=", replacement: { - match: /\.handleSelectGIF=\i=>\{/, - replace: ".handleSelectGIF=function(gif){return $self.handleSelect(gif);" + match: /\.handleSelectGIF=(\i)=>\{/, + replace: ".handleSelectGIF=$1=>{if (!this.props.className) return $self.handleSelect($1);" } }], From fa9da2d693fb6dde3c973bf467a6e14674f9ea06 Mon Sep 17 00:00:00 2001 From: AutumnVN Date: Fri, 3 Nov 2023 07:57:39 +0700 Subject: [PATCH 34/45] noMosaic: play video inline + optional media layout type (#1946) --- src/plugins/noMosaic/index.ts | 45 +++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/src/plugins/noMosaic/index.ts b/src/plugins/noMosaic/index.ts index 49343503d..7f9fad53c 100644 --- a/src/plugins/noMosaic/index.ts +++ b/src/plugins/noMosaic/index.ts @@ -4,28 +4,58 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ +import { definePluginSettings } from "@api/Settings"; import { disableStyle, enableStyle } from "@api/Styles"; import { Devs } from "@utils/constants"; -import definePlugin from "@utils/types"; +import definePlugin, { OptionType } from "@utils/types"; import style from "./styles.css?managed"; +const settings = definePluginSettings({ + inlineVideo: { + description: "Play videos without carousel modal", + type: OptionType.BOOLEAN, + default: true, + restartNeeded: true + }, + mediaLayoutType: { + description: "Choose media layout type", + type: OptionType.SELECT, + restartNeeded: true, + options: [ + { label: "STATIC, render loading image but image isn't resposive, no problem unless discord window width is too small", value: "STATIC", default: true }, + { label: "RESPONSIVE, image is responsive but not render loading image, cause messages shift when loaded", value: "RESPONSIVE" }, + ] + } +}); + export default definePlugin({ name: "NoMosaic", authors: [Devs.AutumnVN], description: "Removes Discord new image mosaic", tags: ["image", "mosaic", "media"], + + settings, + patches: [ { find: ".oneByTwoLayoutThreeGrid", replacement: [{ match: /mediaLayoutType:\i\.\i\.MOSAIC/, - replace: 'mediaLayoutType:"RESPONSIVE"' + replace: "mediaLayoutType:$self.mediaLayoutType()", }, { match: /null!==\(\i=\i\.get\(\i\)\)&&void 0!==\i\?\i:"INVALID"/, replace: '"INVALID"', - },] + }] + }, + { + find: "renderAttachments(", + predicate: () => settings.store.inlineVideo, + replacement: { + match: /url:(\i)\.url\}\);return /, + replace: "$&$1.content_type?.startsWith('image/')&&" + } }, { find: "Messages.REMOVE_ATTACHMENT_TOOLTIP_TEXT", @@ -33,10 +63,17 @@ export default definePlugin({ match: /\i===\i\.\i\.MOSAIC/, replace: "true" } - }], + } + ], + + mediaLayoutType() { + return settings.store.mediaLayoutType; + }, + start() { enableStyle(style); }, + stop() { disableStyle(style); } From fcf2bdda70201c87585b2f3060f9b380e13938e3 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 3 Nov 2023 02:03:53 +0100 Subject: [PATCH 35/45] fix TypingTweaks --- src/plugins/typingTweaks/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/typingTweaks/index.tsx b/src/plugins/typingTweaks/index.tsx index 62bcd41f6..d3f4a1409 100644 --- a/src/plugins/typingTweaks/index.tsx +++ b/src/plugins/typingTweaks/index.tsx @@ -112,7 +112,7 @@ export default definePlugin({ { find: "getCooldownTextStyle", replacement: { - match: /(?<=(\i)\.length\?\i.\i\.Messages.THREE_USERS_TYPING\.format\({\i:(\i),\i:(\i),\i:\i}\):)\i\.\i\.Messages\.SEVERAL_USERS_TYPING/, + match: /(?<=(\i)\.length\?\i.\i\.Messages.THREE_USERS_TYPING\.format\({\i:(\i),(?:\i:)?(\i),\i:\i}\):)\i\.\i\.Messages\.SEVERAL_USERS_TYPING/, replace: (_, users, a, b) => `$self.buildSeveralUsers({ a: ${a}, b: ${b}, count: ${users}.length - 2 })` }, predicate: () => settings.store.alternativeFormatting From 7f73e133647fe612ca5b2e571062f768f47f6cda Mon Sep 17 00:00:00 2001 From: Lewis Crichton Date: Sat, 4 Nov 2023 17:41:38 +0000 Subject: [PATCH 36/45] docs: point people to advisories for security bugs (#1957) --- .github/ISSUE_TEMPLATE/bug_report.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 74b2a418b..d79f5e490 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -14,7 +14,8 @@ body: DO NOT USE THIS FORM, unless - you are a vencord contributor - you were given explicit permission to use this form by a moderator in our support server - - you are filing a security related report + + DO NOT USE THIS FORM FOR SECURITY RELATED ISSUES. [CREATE A SECURITY ADVISORY INSTEAD.](https://github.com/Vendicated/Vencord/security/advisories/new) - type: input id: discord From 37b9a6246081400091a815205cc63cb217535661 Mon Sep 17 00:00:00 2001 From: AutumnVN Date: Sun, 5 Nov 2023 00:44:29 +0700 Subject: [PATCH 37/45] favGifSearch: fix search bar (#1955) --- src/plugins/favGifSearch/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/favGifSearch/index.tsx b/src/plugins/favGifSearch/index.tsx index 0cb5166e1..592d8f547 100644 --- a/src/plugins/favGifSearch/index.tsx +++ b/src/plugins/favGifSearch/index.tsx @@ -60,7 +60,7 @@ interface Instance { } -const containerClasses: { searchBar: string; } = findByPropsLazy("searchBar", "searchHeader", "searchInput"); +const containerClasses: { searchBar: string; } = findByPropsLazy("searchBar", "searchBarFullRow"); export const settings = definePluginSettings({ searchOption: { @@ -182,7 +182,7 @@ function SearchBar({ instance, SearchBarComponent }: { instance: Instance; Searc ref={ref} autoFocus={true} className={containerClasses.searchBar} - size={SearchBarComponent.Sizes.SMALL} + size={SearchBarComponent.Sizes.MEDIUM} onChange={onChange} onClear={() => { setQuery(""); From 77659be4f0d7e6cc8d643037cf4188d1255c143f Mon Sep 17 00:00:00 2001 From: AutumnVN Date: Sun, 5 Nov 2023 00:44:53 +0700 Subject: [PATCH 38/45] fakeNitro: disallow emoji in add reaction (#1954) --- src/plugins/fakeNitro/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/fakeNitro/index.ts b/src/plugins/fakeNitro/index.ts index efec9a8b5..e4311106d 100644 --- a/src/plugins/fakeNitro/index.ts +++ b/src/plugins/fakeNitro/index.ts @@ -201,7 +201,7 @@ export default definePlugin({ predicate: () => settings.store.enableEmojiBypass, replacement: { match: /((?:canUseEmojisEverywhere|canUseAnimatedEmojis):function\(\i)\){(.+?\))(?=})/g, - replace: (_, rest, premiumCheck) => `${rest},fakeNitroIntention){${premiumCheck}||fakeNitroIntention!=null||[${EmojiIntentions.CHAT},${EmojiIntentions.GUILD_STICKER_RELATED_EMOJI}].includes(fakeNitroIntention)` + replace: (_, rest, premiumCheck) => `${rest},fakeNitroIntention){${premiumCheck}||fakeNitroIntention==null||[${EmojiIntentions.CHAT},${EmojiIntentions.GUILD_STICKER_RELATED_EMOJI}].includes(fakeNitroIntention)` } }, // Allow stickers to be sent everywhere From a257926609d9c88f44015ee0b06040be5936d85f Mon Sep 17 00:00:00 2001 From: AutumnVN Date: Sun, 5 Nov 2023 00:45:17 +0700 Subject: [PATCH 39/45] customRpc: fix discord attachment link (#1949) --- src/plugins/customRPC/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/customRPC/index.tsx b/src/plugins/customRPC/index.tsx index 8ed741215..feed52fde 100644 --- a/src/plugins/customRPC/index.tsx +++ b/src/plugins/customRPC/index.tsx @@ -30,6 +30,7 @@ const ActivityClassName = findByPropsLazy("activity", "buttonColor"); const Colors = findByPropsLazy("profileColors"); async function getApplicationAsset(key: string): Promise { + if (/https?:\/\/(cdn|media)\.discordapp\.(com|net)\/attachments\//.test(key)) return "mp:" + key.replace(/https?:\/\/(cdn|media)\.discordapp\.(com|net)\//, ""); return (await ApplicationAssetUtils.fetchAssetIds(settings.store.appID!, [key]))[0]; } From 2c9793202d1e9538736ec7e795e1b466a46a66cb Mon Sep 17 00:00:00 2001 From: Vendicated Date: Sat, 4 Nov 2023 18:54:02 +0100 Subject: [PATCH 40/45] Revert "Fix ViewIcons" This reverts commit 098da8c3fd95cdd1f299b86d0b919b001009a1df. --- src/plugins/viewIcons/index.tsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx index ccbc8ddca..fd6b7b6bf 100644 --- a/src/plugins/viewIcons/index.tsx +++ b/src/plugins/viewIcons/index.tsx @@ -65,9 +65,7 @@ const settings = definePluginSettings({ } }); -function openImage(url?: string) { - if (!url) return; - +function openImage(url: string) { const format = url.startsWith("/") ? "png" : settings.store.format; const u = new URL(url, window.location.href); @@ -173,12 +171,12 @@ export default definePlugin({ }, patches: [ - // Make pfps clickable and add pointer cursor + // Make pfps clickable { - find: ".AVATAR_DECORATION_STATUS_ROUND_16;", + find: "onAddFriend:function", replacement: { - match: /memo\(.{0,50}(?=let{statusColor:\i,status:\i,...\i}=(\i),)/, - replace: (m, props) => `${m}${props}.onClick=()=>$self.openImage(${props}.src);${props}.style={cursor:${props}.src?"pointer":void 0};` + match: /\{src:(\i)(?=,avatarDecoration)/, + replace: "{src:$1,onClick:()=>$self.openImage($1)" } }, // Make banners clickable From a67c7f841d3a4fc96cb64a61aa37d00454d658bc Mon Sep 17 00:00:00 2001 From: Vendicated Date: Sat, 4 Nov 2023 18:54:29 +0100 Subject: [PATCH 41/45] Fix ViewIcons correctly --- src/plugins/viewIcons/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx index fd6b7b6bf..2da3e21c2 100644 --- a/src/plugins/viewIcons/index.tsx +++ b/src/plugins/viewIcons/index.tsx @@ -173,7 +173,7 @@ export default definePlugin({ patches: [ // Make pfps clickable { - find: "onAddFriend:function", + find: "User Profile Modal - Context Menu", replacement: { match: /\{src:(\i)(?=,avatarDecoration)/, replace: "{src:$1,onClick:()=>$self.openImage($1)" From 370b3d366df87b6359c5844e6f7784f31fbcd748 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Sat, 4 Nov 2023 18:59:16 +0100 Subject: [PATCH 42/45] OpenInApp: Fix links in messages --- src/plugins/openInApp/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/openInApp/index.ts b/src/plugins/openInApp/index.ts index e26a01eb9..a65c49317 100644 --- a/src/plugins/openInApp/index.ts +++ b/src/plugins/openInApp/index.ts @@ -55,8 +55,8 @@ export default definePlugin({ { find: "trackAnnouncementMessageLinkClicked({", replacement: { - match: /(?<=handleClick:function\(\)\{return (\i)\}.+?)async function \1\(.+?\)\{/, - replace: "$& if(await $self.handleLink(...arguments)) return;" + match: /(?<=handleClick:function\(\)\{return (\i)\}.+?)function \1\(.+?\)\{/, + replace: "async $& if(await $self.handleLink(...arguments)) return;" } }, // Make Spotify profile activity links open in app on web From dd44ac1ad2280672e2c60587a177f51a351c77fa Mon Sep 17 00:00:00 2001 From: Vendicated Date: Sat, 4 Nov 2023 19:08:44 +0100 Subject: [PATCH 43/45] OpenInApp: Support podcasts --- src/plugins/openInApp/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/openInApp/index.ts b/src/plugins/openInApp/index.ts index a65c49317..5a2641e2a 100644 --- a/src/plugins/openInApp/index.ts +++ b/src/plugins/openInApp/index.ts @@ -23,7 +23,7 @@ import { showToast, Toasts } from "@webpack/common"; import type { MouseEvent } from "react"; const ShortUrlMatcher = /^https:\/\/(spotify\.link|s\.team)\/.+$/; -const SpotifyMatcher = /^https:\/\/open\.spotify\.com\/(track|album|artist|playlist|user)\/(.+)(?:\?.+?)?$/; +const SpotifyMatcher = /^https:\/\/open\.spotify\.com\/(track|album|artist|playlist|user|episode)\/(.+)(?:\?.+?)?$/; const SteamMatcher = /^https:\/\/(steamcommunity\.com|(?:help|store)\.steampowered\.com)\/.+$/; const EpicMatcher = /^https:\/\/store\.epicgames\.com\/(.+)$/; From c0f786804a79f0e87195efe70d5813cf5121ae30 Mon Sep 17 00:00:00 2001 From: Marvin Witt Date: Sun, 5 Nov 2023 02:06:08 +0100 Subject: [PATCH 44/45] fix(dearrow): don't replace thumbnail if only original available (#1959) --- src/plugins/dearrow/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/dearrow/index.tsx b/src/plugins/dearrow/index.tsx index c6bf4e05d..f6b9ef952 100644 --- a/src/plugins/dearrow/index.tsx +++ b/src/plugins/dearrow/index.tsx @@ -63,7 +63,7 @@ async function embedDidMount(this: Component) { embed.rawTitle = titles[0].title; } - if (thumbnails[0]?.votes >= 0) { + if (thumbnails[0]?.votes >= 0 && thumbnails[0].timestamp) { embed.dearrow.oldThumb = embed.thumbnail.proxyURL; embed.thumbnail.proxyURL = `https://dearrow-thumb.ajay.app/api/v1/getThumbnail?videoID=${videoId}&time=${thumbnails[0].timestamp}`; } From dc3591ba185d2989f133d9925755e92f3b8212c0 Mon Sep 17 00:00:00 2001 From: zImPatrick <23613354+zImPatrick@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:58:10 +0100 Subject: [PATCH 45/45] Fix FakeNitro sticker bypass (#1964) --- src/plugins/fakeNitro/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/fakeNitro/index.ts b/src/plugins/fakeNitro/index.ts index e4311106d..4d6b7957b 100644 --- a/src/plugins/fakeNitro/index.ts +++ b/src/plugins/fakeNitro/index.ts @@ -206,10 +206,10 @@ export default definePlugin({ }, // Allow stickers to be sent everywhere { - find: "canUseStickersEverywhere:function", + find: "canUseCustomStickersEverywhere:function", predicate: () => settings.store.enableStickerBypass, replacement: { - match: /canUseStickersEverywhere:function\(\i\){/, + match: /canUseCustomStickersEverywhere:function\(\i\){/, replace: "$&return true;" }, },