Skip to content

Commit bdd3e2f

Browse files
authored
chore(docs): migrate documentation site to React 19 (DS-4553) (#226)
1 parent c69e842 commit bdd3e2f

File tree

14 files changed

+1438
-1427
lines changed

14 files changed

+1438
-1427
lines changed

package.json

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@
5858
"@testing-library/user-event": "^14.6.1",
5959
"@types/fs-extra": "^11.0.4",
6060
"@types/node": "^22.13.13",
61-
"@types/react": "^18.3.10",
62-
"@types/react-dom": "^18.3.0",
61+
"@types/react": "^19.2.7",
62+
"@types/react-dom": "^19.2.3",
6363
"@typescript-eslint/eslint-plugin": "^8.46.2",
6464
"@vitejs/plugin-react": "^5.1.0",
6565
"@vitest/coverage-v8": "^3.2.4",
@@ -87,8 +87,8 @@
8787
"postcss-lightningcss": "^1.0.2",
8888
"postcss-mixins": "^11.0.3",
8989
"prettier": "^3.6.2",
90-
"react": "^18.3.1",
91-
"react-dom": "^18.3.1",
90+
"react": "^19.2.3",
91+
"react-dom": "^19.2.3",
9292
"react-hook-form": "^7.68.0",
9393
"remark-gfm": "^4.0.1",
9494
"rimraf": "^6.0.1",
@@ -164,5 +164,13 @@
164164
"opera > 91",
165165
"edge > 105"
166166
],
167-
"packageManager": "[email protected]"
167+
"packageManager": "[email protected]",
168+
"pnpm": {
169+
"overrides": {
170+
"react": "^19.0.0",
171+
"react-dom": "^19.0.0",
172+
"@types/react-dom": "^19.0.0",
173+
"@types/react": "^19.0.0"
174+
}
175+
}
168176
}

packages/components/src/components/Calendar/components/CalendarGrid/CalendarGrid.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@ export function CalendarGrid({ state, ...props }: CalendarGridProps) {
6060

6161
// Unique nodeRef per key to avoid findDOMNode and animate enter/exit correctly
6262
const nodeRefs = useRef(
63-
new Map<string, RefObject<HTMLTableSectionElement>>()
63+
new Map<string, RefObject<HTMLTableSectionElement | null>>()
6464
);
6565

6666
const k = currentKey;
6767

6868
if (!nodeRefs.current.has(k)) {
69-
nodeRefs.current.set(k, createRef<HTMLTableSectionElement>());
69+
nodeRefs.current.set(k, createRef<HTMLTableSectionElement | null>());
7070
}
7171

7272
const tbodyRef = nodeRefs.current.get(k)!;

packages/components/src/components/FormField/FormFieldControlGroup/FormFieldControlGroup.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export const FormFieldControlGroup = forwardRef<
3535
const { focusProps, isFocused } = useFocusRing({ within: true });
3636

3737
const focusManagedChildren = Children.map(children, (child: ReactNode) => {
38-
if (!isValidElement(child)) return child;
38+
if (!isValidElement<Record<string, unknown>>(child)) return child;
3939

4040
const merged = mergeProps(focusProps, child.props);
4141

packages/components/src/components/Tabs/Tabs.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ export function TabsRender<T extends object>(
7070
}
7171

7272
/** To calculate the size of the prev/next buttons. */
73-
const scrollButtonRef = useRef<HTMLButtonElement>(null);
74-
const tabListRef = useRef<HTMLDivElement>(null);
75-
const scrollBoxRef = useRef<HTMLDivElement>(null);
73+
const scrollButtonRef = useRef<HTMLButtonElement | null>(null);
74+
const tabListRef = useRef<HTMLDivElement | null>(null);
75+
const scrollBoxRef = useRef<HTMLDivElement | null>(null);
7676
const { tabListProps } = useTabList(props, state, tabListRef);
7777
const itemsRefs = useRefs<HTMLElement>(state.collection.size);
7878

packages/components/src/components/Tabs/utils.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ export type TabsMeta = {
3030
};
3131

3232
export const getTabsMeta = (
33-
tabListRef: RefObject<HTMLElement>,
34-
scrollBoxRef: RefObject<HTMLElement>,
35-
activeTabRef: RefObject<HTMLElement>
33+
tabListRef: RefObject<HTMLElement | null>,
34+
scrollBoxRef: RefObject<HTMLElement | null>,
35+
activeTabRef: RefObject<HTMLElement | null>
3636
): TabsMeta => {
3737
const scrollBoxNode = scrollBoxRef.current;
3838
const tabsListNode = tabListRef.current;

packages/core/src/hooks/useDOMRef/useDOMRef.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { useImperativeHandle, useRef } from 'react';
66
export function useDOMRef<T extends HTMLElement = HTMLElement>(
77
ref?: RefObject<T | null> | Ref<T | null>
88
) {
9-
const domRef = useRef<T>(null);
9+
const domRef = useRef<T>(null!);
1010

1111
useImperativeHandle(ref, () => domRef.current);
1212

packages/core/src/hooks/useEventListener/useEventListener.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export function useEventListener<
5050
}: UseEventListener<
5151
K,
5252
(event: HTMLElementEventMap[K]) => void,
53-
RefObject<T>
53+
RefObject<T | null>
5454
>): void;
5555

5656
export function useEventListener<K extends keyof DocumentEventMap>({
@@ -100,7 +100,7 @@ export function useEventListener<
100100
| DocumentEventMap[KD]
101101
| Event
102102
) => void,
103-
RefObject<T> | undefined
103+
RefObject<T | null> | undefined
104104
>): void {
105105
const savedListener = useMutableRef<typeof handler>(handler);
106106

packages/core/src/hooks/useInfiniteScroll/useInfiniteScroll.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export function useInfiniteScroll<T extends HTMLElement = any>({
3030
}: UseInfiniteScrollOptions) {
3131
const loadMoreRef = useRef<T>(null);
3232
const isFetchingRef = useRef(false);
33-
const savedFetchData = useRef<typeof fetchData>();
33+
const savedFetchData = useRef<typeof fetchData>(undefined);
3434

3535
useEffect(() => {
3636
savedFetchData.current = fetchData;
Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
'use client';
22

3-
import { createRef, type RefObject, type Key, useRef } from 'react';
3+
import { createRef, useCallback, useRef } from 'react';
4+
import type { Key, RefObject } from 'react';
45

5-
export function useKeyedRefs<T>() {
6-
const mapRef = useRef(new Map<Key, RefObject<T>>());
6+
export function useKeyedRefs<T extends HTMLElement = HTMLElement>() {
7+
const mapRef = useRef<Map<Key, RefObject<T | null>>>(new Map());
78

8-
return (key: Key): RefObject<T> => {
9+
return useCallback((key: Key): RefObject<T | null> => {
910
let ref = mapRef.current.get(key);
1011

1112
if (!ref) {
12-
ref = createRef<T>();
13+
ref = createRef<T | null>();
1314
mapRef.current.set(key, ref);
1415
}
1516

1617
return ref;
17-
};
18+
}, []);
1819
}

packages/core/src/hooks/useResizeObserverRefs/useResizeObserverRefs.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export const useResizeObserverRefs = <
99
Element extends HTMLElement | SVGGraphicsElement,
1010
ReturnType,
1111
>(
12-
refs: Array<RefObject<Element>>,
12+
refs: Array<RefObject<Element | null>>,
1313
mapper: (el: Element | null) => ReturnType
1414
): ReturnType[] => {
1515
const calculateDimensionsRef = useMutableRef(() =>

0 commit comments

Comments
 (0)