Merge Dev & Fixes
Some checks failed
Release / Build Equicord (push) Has been cancelled
Test / Test (push) Has been cancelled

This commit is contained in:
thororen1234 2025-05-05 19:15:23 -04:00
commit b9e07cbe0f
No known key found for this signature in database
9 changed files with 24 additions and 23 deletions

View file

@ -18,7 +18,7 @@
import { Settings } from "@api/Settings"; import { Settings } from "@api/Settings";
import { Queue } from "@utils/Queue"; import { Queue } from "@utils/Queue";
import { ReactDOM } from "@webpack/common"; import { createRoot } from "@webpack/common";
import type { ReactNode } from "react"; import type { ReactNode } from "react";
import type { Root } from "react-dom/client"; import type { Root } from "react-dom/client";
@ -35,7 +35,7 @@ function getRoot() {
const container = document.createElement("div"); const container = document.createElement("div");
container.id = "vc-notification-container"; container.id = "vc-notification-container";
document.body.append(container); document.body.append(container);
reactRoot = ReactDOM.createRoot(container); reactRoot = createRoot(container);
} }
return reactRoot; return reactRoot;
} }

View file

@ -21,7 +21,7 @@ import { disableStyle, enableStyle } from "@api/Styles";
import { Devs } from "@utils/constants"; import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types"; import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack"; import { findByPropsLazy } from "@webpack";
import { ChannelStore, MessageStore, ReactDOM, Toasts } from "@webpack/common"; import { ChannelStore, createRoot, MessageStore, Toasts } from "@webpack/common";
import Message from "discord-types/general/Message"; import Message from "discord-types/general/Message";
import { Root } from "react-dom/client"; import { Root } from "react-dom/client";
@ -101,7 +101,7 @@ export default definePlugin({
madeComponent = true; madeComponent = true;
element = document.createElement("div"); element = document.createElement("div");
document.querySelector("[class^=base_]")!.appendChild(element); document.querySelector("[class^=base_]")!.appendChild(element);
root = ReactDOM.createRoot(element); root = createRoot(element);
} }
root!.render(<ReplyNavigator replies={replies} />); root!.render(<ReplyNavigator replies={replies} />);
} }

View file

@ -6,7 +6,7 @@
import { saveFile } from "@utils/web"; import { saveFile } from "@utils/web";
import { filters, findAll, findByPropsLazy, waitFor } from "@webpack"; import { filters, findAll, findByPropsLazy, waitFor } from "@webpack";
import { React, ReactDOM } from "@webpack/common"; import { createRoot, React, ReactDOM } from "@webpack/common";
import * as t from "@webpack/types"; import * as t from "@webpack/types";
export let _cssColors: string[] = []; export let _cssColors: string[] = [];
export type IconsDef = { [k: string]: t.Icon; }; export type IconsDef = { [k: string]: t.Icon; };
@ -82,7 +82,7 @@ export function saveIcon(iconName: string, icon: EventTarget & SVGSVGElement | E
export function convertComponentToHtml(component?: React.ReactElement): string { export function convertComponentToHtml(component?: React.ReactElement): string {
const container = document.createElement("div"); const container = document.createElement("div");
const root = ReactDOM.createRoot(container); const root = createRoot(container);
ReactDOM.flushSync(() => root.render(component)); ReactDOM.flushSync(() => root.render(component));
const content = container.innerHTML; const content = container.innerHTML;

View file

@ -9,7 +9,7 @@ import "./styles.css";
import { definePluginSettings } from "@api/Settings"; import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants"; import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types"; import definePlugin, { OptionType } from "@utils/types";
import { FluxDispatcher, ReactDOM, useEffect, useState } from "@webpack/common"; import { createRoot, FluxDispatcher, useEffect, useState } from "@webpack/common";
import { Root } from "react-dom/client"; import { Root } from "react-dom/client";
let jumpscareRoot: Root | undefined; let jumpscareRoot: Root | undefined;
@ -38,7 +38,7 @@ function getJumpscareRoot(): Root {
element.id = "jumpscare-root"; element.id = "jumpscare-root";
element.classList.add("jumpscare-root"); element.classList.add("jumpscare-root");
document.body.append(element); document.body.append(element);
jumpscareRoot = ReactDOM.createRoot(element); jumpscareRoot = createRoot(element);
} }
return jumpscareRoot; return jumpscareRoot;

View file

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import { React, ReactDOM } from "@webpack/common"; import { createRoot, React } from "@webpack/common";
import type { JSX, ReactNode } from "react"; import type { JSX, ReactNode } from "react";
import type { Root } from "react-dom/client"; import type { Root } from "react-dom/client";
@ -32,7 +32,7 @@ function getNotificationContainer() {
const container = document.createElement("div"); const container = document.createElement("div");
container.id = "toastnotifications-container"; container.id = "toastnotifications-container";
document.body.append(container); document.body.append(container);
RootContainer = ReactDOM.createRoot(container); RootContainer = createRoot(container);
} }
return RootContainer; return RootContainer;

View file

@ -136,7 +136,7 @@ function makeShortcuts() {
}); });
} }
const root = Common.ReactDOM.createRoot(doc.body.appendChild(document.createElement("div"))); const root = Common.createRoot(doc.body.appendChild(document.createElement("div")));
root.render(Common.React.createElement(component, props)); root.render(Common.React.createElement(component, props));
doc.addEventListener("close", () => root.unmount(), { once: true }); doc.addEventListener("close", () => root.unmount(), { once: true });

View file

@ -23,7 +23,7 @@ import { debounce } from "@shared/debounce";
import { Devs } from "@utils/constants"; import { Devs } from "@utils/constants";
import { Logger } from "@utils/Logger"; import { Logger } from "@utils/Logger";
import definePlugin, { OptionType } from "@utils/types"; import definePlugin, { OptionType } from "@utils/types";
import { Menu, ReactDOM } from "@webpack/common"; import { createRoot, Menu } from "@webpack/common";
import { JSX } from "react"; import { JSX } from "react";
import type { Root } from "react-dom/client"; import type { Root } from "react-dom/client";
@ -242,7 +242,7 @@ export default definePlugin({
if (instance.props.id === ELEMENT_ID) { if (instance.props.id === ELEMENT_ID) {
if (!this.currentMagnifierElement) { if (!this.currentMagnifierElement) {
this.currentMagnifierElement = <Magnifier size={settings.store.size} zoom={settings.store.zoom} instance={instance} />; this.currentMagnifierElement = <Magnifier size={settings.store.size} zoom={settings.store.zoom} instance={instance} />;
this.root = ReactDOM.createRoot(this.element!); this.root = createRoot(this.element!);
this.root.render(this.currentMagnifierElement); this.root.render(this.currentMagnifierElement);
} }
} }

View file

@ -20,7 +20,7 @@ import { Devs } from "@utils/constants";
import definePlugin from "@utils/types"; import definePlugin from "@utils/types";
import { React } from "@webpack/common"; import { React } from "@webpack/common";
let ERROR_CODES: any; let ERROR_CODES: Record<string, string> | undefined;
export default definePlugin({ export default definePlugin({
name: "ReactErrorDecoder", name: "ReactErrorDecoder",
@ -28,13 +28,12 @@ export default definePlugin({
authors: [Devs.Cyn, Devs.maisymoe], authors: [Devs.Cyn, Devs.maisymoe],
patches: [ patches: [
{ {
find: '"https://reactjs.org/docs/error-decoder.html?invariant="', find: "React has blocked a javascript: URL as a security precaution.",
replacement: { replacement: {
match: /(function .\(.\)){(for\(var .="https:\/\/reactjs\.org\/docs\/error-decoder\.html\?invariant="\+.,.=1;.<arguments\.length;.\+\+\).\+="&args\[\]="\+encodeURIComponent\(arguments\[.\]\);return"Minified React error #"\+.\+"; visit "\+.\+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.")}/, match: /"https:\/\/react.dev\/errors\/"\+\i;/,
replace: (_, func, original) => replace: "$&const vcDecodedError=$self.decodeError(...arguments);if(vcDecodedError)return vcDecodedError;"
`${func}{var decoded=$self.decodeError.apply(null, arguments);if(decoded)return decoded;${original}}`, }
}, }
},
], ],
async start() { async start() {
@ -56,5 +55,5 @@ export default definePlugin({
index++; index++;
return arg; return arg;
}); });
}, }
}); });

View file

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import { findByPropsLazy, waitFor } from "@webpack"; import { findByCodeLazy, findByPropsLazy, waitFor } from "@webpack";
export let React: typeof import("react"); export let React: typeof import("react");
export let useState: typeof React.useState; export let useState: typeof React.useState;
@ -27,7 +27,9 @@ export let useRef: typeof React.useRef;
export let useReducer: typeof React.useReducer; export let useReducer: typeof React.useReducer;
export let useCallback: typeof React.useCallback; export let useCallback: typeof React.useCallback;
export const ReactDOM: typeof import("react-dom") & typeof import("react-dom/client") = findByPropsLazy("createPortal"); export const ReactDOM: typeof import("react-dom") = findByPropsLazy("createPortal");
// 299 is an error code used in createRoot and createPortal
export const createRoot: typeof import("react-dom/client").createRoot = findByCodeLazy("(299));", ".onRecoverableError");
waitFor("useState", m => { waitFor("useState", m => {
React = m; React = m;