chore: upgrade React 18→19 and fix breaking type changes
CI / Build & Quality Checks (push) Successful in 10m19s

- react 18.2.0 to 19.2.6
- react-dom 18.2.0 to 19.2.6
- @types/react 18.2.39 to 19.2.15
- @types/react-dom 18.2.17 to 19.2.3

React 19 breaking changes fixed:
- useRef<T>(null) now returns RefObject<T | null>; cast to
  RefObject<T> at 16 component call sites (safe, runtime unchanged)
- useRef<T>() without arg no longer valid; add | undefined>(undefined)
  in useDebounce, useFileDrop, useThrottle, useVirtualPaginator hooks,
  RoomInput, RoomTimeline, and ClientNonUIFeatures
- useReducer<typeof reducer> 1-arg form removed; drop explicit type arg
  in useForceUpdate (inferred from reducer function)
- global JSX namespace removed; import type { JSX } from react in
  react-custom-html-parser.tsx

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lotus Bot
2026-05-22 13:24:07 -04:00
parent c3d241715c
commit f0ed6707ba
28 changed files with 89 additions and 98 deletions
+1 -1
View File
@@ -399,7 +399,7 @@ type CallEmbedProviderProps = {
};
export function CallEmbedProvider({ children }: CallEmbedProviderProps) {
const callEmbed = useAtomValue(callEmbedAtom);
const callEmbedRef = useRef<HTMLDivElement>(null);
const callEmbedRef = useRef<HTMLDivElement>(null) as React.RefObject<HTMLDivElement>;
const joined = useCallJoined(callEmbed);
const selectedRoom = useSelectedRoom();
+2 -2
View File
@@ -12,8 +12,8 @@ type ConfirmPasswordMatchProps = {
};
export function ConfirmPasswordMatch({ initialValue, children }: ConfirmPasswordMatchProps) {
const [match, setMatch] = useState(initialValue);
const passRef = useRef<HTMLInputElement>(null);
const confPassRef = useRef<HTMLInputElement>(null);
const passRef = useRef<HTMLInputElement>(null) as React.RefObject<HTMLInputElement>;
const confPassRef = useRef<HTMLInputElement>(null) as React.RefObject<HTMLInputElement>;
const doMatch = useDebounce(
useCallback(() => {
@@ -421,8 +421,8 @@ export function EmojiBoard({
{ wait: 200 },
);
const contentScrollRef = useRef<HTMLDivElement>(null);
const virtualBaseRef = useRef<HTMLDivElement>(null);
const contentScrollRef = useRef<HTMLDivElement>(null) as React.RefObject<HTMLDivElement>;
const virtualBaseRef = useRef<HTMLDivElement>(null) as React.RefObject<HTMLDivElement>;
const virtualizer = useVirtualizer({
count: groups.length,
getScrollElement: () => contentScrollRef.current,