diff --git a/src/components/PluginSettings/PluginModal.tsx b/src/components/PluginSettings/PluginModal.tsx
index 7d5750df..34de43c2 100644
--- a/src/components/PluginSettings/PluginModal.tsx
+++ b/src/components/PluginSettings/PluginModal.tsx
@@ -24,9 +24,8 @@ import { proxyLazy } from "@utils/lazy";
import { Margins } from "@utils/margins";
import { classes, isObjectEmpty } from "@utils/misc";
import { ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalProps, ModalRoot, ModalSize } from "@utils/modal";
-import { findComponentByCodeLazy } from "@utils/react";
import { OptionType, Plugin } from "@utils/types";
-import { findByPropsLazy } from "@webpack";
+import { findByPropsLazy, findComponentByCodeLazy } from "@webpack";
import { Button, Clickable, FluxDispatcher, Forms, React, Text, Tooltip, UserStore, UserUtils } from "@webpack/common";
import { User } from "discord-types/general";
import { Constructor } from "type-fest";
diff --git a/src/plugins/betterFolders/FolderSideBar.tsx b/src/plugins/betterFolders/FolderSideBar.tsx
index 13dd9ac8..53d24ed9 100644
--- a/src/plugins/betterFolders/FolderSideBar.tsx
+++ b/src/plugins/betterFolders/FolderSideBar.tsx
@@ -17,8 +17,7 @@
*/
import ErrorBoundary from "@components/ErrorBoundary";
-import { findComponentByCodeLazy } from "@utils/react";
-import { findByPropsLazy, findStoreLazy } from "@webpack";
+import { findByPropsLazy, findComponentByCodeLazy, findStoreLazy } from "@webpack";
import { useStateFromStores } from "@webpack/common";
import type { CSSProperties } from "react";
diff --git a/src/plugins/clientTheme/index.tsx b/src/plugins/clientTheme/index.tsx
index e5de67e4..7b30863e 100644
--- a/src/plugins/clientTheme/index.tsx
+++ b/src/plugins/clientTheme/index.tsx
@@ -11,8 +11,8 @@ import { Devs } from "@utils/constants";
import { getTheme, Theme } from "@utils/discord";
import { Margins } from "@utils/margins";
import { classes } from "@utils/misc";
-import { findComponentByCodeLazy } from "@utils/react";
import definePlugin, { OptionType, StartAt } from "@utils/types";
+import { findComponentByCodeLazy } from "@webpack";
import { Button, Forms } from "@webpack/common";
const ColorPicker = findComponentByCodeLazy(".Messages.USER_SETTINGS_PROFILE_COLOR_SELECT_COLOR");
diff --git a/src/plugins/customRPC/index.tsx b/src/plugins/customRPC/index.tsx
index 64bfd460..3653a077 100644
--- a/src/plugins/customRPC/index.tsx
+++ b/src/plugins/customRPC/index.tsx
@@ -20,9 +20,9 @@ import { definePluginSettings, Settings } from "@api/Settings";
import { Link } from "@components/Link";
import { Devs } from "@utils/constants";
import { isTruthy } from "@utils/guards";
-import { findComponentByCodeLazy, useAwaiter } from "@utils/react";
+import { useAwaiter } from "@utils/react";
import definePlugin, { OptionType } from "@utils/types";
-import { findByPropsLazy } from "@webpack";
+import { findByPropsLazy, findComponentByCodeLazy } from "@webpack";
import { ApplicationAssetUtils, FluxDispatcher, Forms, GuildStore, React, SelectedChannelStore, SelectedGuildStore, UserStore } from "@webpack/common";
const ActivityComponent = findComponentByCodeLazy("onOpenGameProfile");
diff --git a/src/plugins/gameActivityToggle/index.tsx b/src/plugins/gameActivityToggle/index.tsx
index cc68d55b..2b84d26f 100644
--- a/src/plugins/gameActivityToggle/index.tsx
+++ b/src/plugins/gameActivityToggle/index.tsx
@@ -19,8 +19,8 @@
import { disableStyle, enableStyle } from "@api/Styles";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
-import { findComponentByCodeLazy } from "@utils/react";
import definePlugin from "@utils/types";
+import { findComponentByCodeLazy } from "@webpack";
import { StatusSettingsStores } from "@webpack/common";
import style from "./style.css?managed";
diff --git a/src/plugins/messageLinkEmbeds/index.tsx b/src/plugins/messageLinkEmbeds/index.tsx
index d8c3c99f..76282999 100644
--- a/src/plugins/messageLinkEmbeds/index.tsx
+++ b/src/plugins/messageLinkEmbeds/index.tsx
@@ -22,9 +22,8 @@ import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants.js";
import { classes } from "@utils/misc";
import { Queue } from "@utils/Queue";
-import { findComponentByCodeLazy } from "@utils/react";
import definePlugin, { OptionType } from "@utils/types";
-import { findByPropsLazy } from "@webpack";
+import { findByPropsLazy, findComponentByCodeLazy } from "@webpack";
import {
Button,
ChannelStore,
diff --git a/src/plugins/serverProfile/GuildProfileModal.tsx b/src/plugins/serverProfile/GuildProfileModal.tsx
index 9def7bf9..97b40b76 100644
--- a/src/plugins/serverProfile/GuildProfileModal.tsx
+++ b/src/plugins/serverProfile/GuildProfileModal.tsx
@@ -10,8 +10,8 @@ import { classNameFactory } from "@api/Styles";
import { openImageModal, openUserProfile } from "@utils/discord";
import { classes } from "@utils/misc";
import { ModalRoot, ModalSize, openModal } from "@utils/modal";
-import { findExportedComponentLazy, useAwaiter } from "@utils/react";
-import { findByPropsLazy } from "@webpack";
+import { useAwaiter } from "@utils/react";
+import { findByPropsLazy, findExportedComponentLazy } from "@webpack";
import { FluxDispatcher, Forms, GuildChannelStore, GuildMemberStore, moment, Parser, PresenceStore, RelationshipStore, ScrollerThin, SnowflakeUtils, TabBar, Timestamp, useEffect, UserStore, UserUtils, useState, useStateFromStores } from "@webpack/common";
import { Guild, User } from "discord-types/general";
diff --git a/src/plugins/showConnections/VerifiedIcon.tsx b/src/plugins/showConnections/VerifiedIcon.tsx
index 20005069..ffdf21e6 100644
--- a/src/plugins/showConnections/VerifiedIcon.tsx
+++ b/src/plugins/showConnections/VerifiedIcon.tsx
@@ -16,8 +16,7 @@
* along with this program. If not, see .
*/
-import { findComponentByCodeLazy } from "@utils/react";
-import { findLazy } from "@webpack";
+import { findComponentByCodeLazy, findLazy } from "@webpack";
import { i18n, useToken } from "@webpack/common";
const ColorMap = findLazy(m => m.colors?.INTERACTIVE_MUTED?.css);
diff --git a/src/plugins/showConnections/index.tsx b/src/plugins/showConnections/index.tsx
index 2d2122d6..67fcc968 100644
--- a/src/plugins/showConnections/index.tsx
+++ b/src/plugins/showConnections/index.tsx
@@ -24,9 +24,8 @@ import { Flex } from "@components/Flex";
import { CopyIcon, LinkIcon } from "@components/Icons";
import { Devs } from "@utils/constants";
import { copyWithToast } from "@utils/misc";
-import { findComponentByCodeLazy } from "@utils/react";
import definePlugin, { OptionType } from "@utils/types";
-import { findByCodeLazy, findByPropsLazy, findStoreLazy } from "@webpack";
+import { findByCodeLazy, findByPropsLazy, findComponentByCodeLazy, findStoreLazy } from "@webpack";
import { Text, Tooltip, UserProfileStore } from "@webpack/common";
import { User } from "discord-types/general";
diff --git a/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx b/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx
index 5231fe8e..649e87aa 100644
--- a/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx
+++ b/src/plugins/showHiddenChannels/components/HiddenChannelLockScreen.tsx
@@ -18,9 +18,8 @@
import { Settings } from "@api/Settings";
import ErrorBoundary from "@components/ErrorBoundary";
-import { findComponentByCodeLazy, findComponentLazy } from "@utils/react";
import { formatDuration } from "@utils/text";
-import { findByPropsLazy } from "@webpack";
+import { findByPropsLazy, findComponentByCodeLazy, findComponentLazy } from "@webpack";
import { EmojiStore, FluxDispatcher, GuildMemberStore, GuildStore, moment, Parser, PermissionsBits, PermissionStore, SnowflakeUtils, Text, Timestamp, Tooltip, useEffect, useState } from "@webpack/common";
import type { Channel } from "discord-types/general";
diff --git a/src/plugins/voiceMessages/VoicePreview.tsx b/src/plugins/voiceMessages/VoicePreview.tsx
index d2c62336..0976f794 100644
--- a/src/plugins/voiceMessages/VoicePreview.tsx
+++ b/src/plugins/voiceMessages/VoicePreview.tsx
@@ -16,7 +16,8 @@
* along with this program. If not, see .
*/
-import { findComponentByCodeLazy, useTimer } from "@utils/react";
+import { useTimer } from "@utils/react";
+import { findComponentByCodeLazy } from "@webpack";
import { cl } from "./utils";
diff --git a/src/plugins/whoReacted/index.tsx b/src/plugins/whoReacted/index.tsx
index 15395a1f..4a2bdeed 100644
--- a/src/plugins/whoReacted/index.tsx
+++ b/src/plugins/whoReacted/index.tsx
@@ -20,9 +20,9 @@ import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import { sleep } from "@utils/misc";
import { Queue } from "@utils/Queue";
-import { findComponentByCodeLazy, useForceUpdater } from "@utils/react";
+import { useForceUpdater } from "@utils/react";
import definePlugin from "@utils/types";
-import { findByPropsLazy } from "@webpack";
+import { findByPropsLazy, findComponentByCodeLazy } from "@webpack";
import { ChannelStore, FluxDispatcher, React, RestAPI, Tooltip } from "@webpack/common";
import { CustomEmoji } from "@webpack/types";
import { Message, ReactionEmoji, User } from "discord-types/general";
diff --git a/src/utils/react.tsx b/src/utils/react.tsx
index 2e3352bc..2d2bac39 100644
--- a/src/utils/react.tsx
+++ b/src/utils/react.tsx
@@ -16,7 +16,6 @@
* along with this program. If not, see .
*/
-import { FilterFn, filters, find, findByProps } from "@webpack";
import { React, useEffect, useMemo, useReducer, useState } from "@webpack/common";
import { makeLazy } from "./lazy";
@@ -145,41 +144,6 @@ export function useTimer({ interval = 1000, deps = [] }: TimerOpts) {
return time;
}
-/**
- * Finds the component which includes all the given code. Checks for plain components, memos and forwardRefs
- */
-export function findComponentByCode(...code: string[]) {
- const filter = filters.byCode(...code);
- return find(m => {
- if (filter(m)) return true;
- if (!m.$$typeof) return false;
- if (m.type) return filter(m.type); // memos
- if (m.render) return filter(m.render); // forwardRefs
- return false;
- }) ?? NoopComponent;
-}
-
-/**
- * Finds the first component that matches the filter, lazily.
- */
-export function findComponentLazy(filter: FilterFn) {
- return LazyComponent(() => find(filter));
-}
-
-/**
- * Finds the first component that includes all the given code, lazily
- */
-export function findComponentByCodeLazy(...code: string[]) {
- return LazyComponent(() => findComponentByCode(...code));
-}
-
-/**
- * Finds the first component that is exported by the first prop name, lazily
- */
-export function findExportedComponentLazy(...props: string[]) {
- return LazyComponent(() => findByProps(...props)?.[props[0]]);
-}
-
/**
* A lazy component. The factory method is called on first render.
* @param factory Function returning a Component
diff --git a/src/webpack/webpack.ts b/src/webpack/webpack.ts
index 4fb94056..9e3a0aab 100644
--- a/src/webpack/webpack.ts
+++ b/src/webpack/webpack.ts
@@ -18,6 +18,7 @@
import { proxyLazy } from "@utils/lazy";
import { Logger } from "@utils/Logger";
+import { LazyComponent, NoopComponent } from "@utils/react";
import type { WebpackInstance } from "discord-types/other";
import { traceFunction } from "../debug/Tracer";
@@ -392,6 +393,41 @@ export function findStoreLazy(name: string) {
return proxyLazy(() => findStore(name));
}
+/**
+ * Finds the component which includes all the given code. Checks for plain components, memos and forwardRefs
+ */
+export function findComponentByCode(...code: string[]) {
+ const filter = filters.byCode(...code);
+ return find(m => {
+ if (filter(m)) return true;
+ if (!m.$$typeof) return false;
+ if (m.type) return filter(m.type); // memos
+ if (m.render) return filter(m.render); // forwardRefs
+ return false;
+ }) ?? NoopComponent;
+}
+
+/**
+ * Finds the first component that matches the filter, lazily.
+ */
+export function findComponentLazy(filter: FilterFn) {
+ return LazyComponent(() => find(filter));
+}
+
+/**
+ * Finds the first component that includes all the given code, lazily
+ */
+export function findComponentByCodeLazy(...code: string[]) {
+ return LazyComponent(() => findComponentByCode(...code));
+}
+
+/**
+ * Finds the first component that is exported by the first prop name, lazily
+ */
+export function findExportedComponentLazy(...props: string[]) {
+ return LazyComponent(() => findByProps(...props)?.[props[0]]);
+}
+
/**
* Wait for a module that matches the provided filter to be registered,
* then call the callback with the module as the first argument