Skip to content

Commit 698c00c

Browse files
feat(deps): update react to 19 (#2487)
* chore(deps): update react to 19 * fix: examples to show backwards compatibility with react 18 * fix: types * fix: eslint --------- Co-authored-by: Dylan Tientcheu <[email protected]>
1 parent 7f670b6 commit 698c00c

40 files changed

+203
-66
lines changed

examples/demo-react-18/index.html

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<!doctype html>
2+
<html lang="en">
3+
4+
<head>
5+
<meta charset="UTF-8" />
6+
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
7+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
8+
<title>DocSearch v3 - React</title>
9+
</head>
10+
11+
<body>
12+
<div id="root"></div>
13+
<script type="module" src="/src/main.tsx"></script>
14+
</body>
15+
16+
</html>

examples/demo-react-18/package.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"name": "@docsearch/react-18-example",
3+
"description": "DocSearch v3 React 18 example",
4+
"version": "3.8.3",
5+
"private": true,
6+
"license": "MIT",
7+
"type": "module",
8+
"scripts": {
9+
"dev": "vite",
10+
"build": "tsc -b && vite build",
11+
"preview": "vite preview"
12+
},
13+
"dependencies": {
14+
"@docsearch/css": "workspace:*",
15+
"@docsearch/react": "workspace:*",
16+
"react": "^18.0.0",
17+
"react-dom": "^18.0.0"
18+
},
19+
"devDependencies": {
20+
"@vitejs/plugin-react": "^4.3.4",
21+
"vite": "^6.0.7"
22+
}
23+
}
5.43 KB
Binary file not shown.

examples/demo-react-18/src/App.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
body {
2+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,
3+
Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
4+
}

examples/demo-react-18/src/App.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { DocSearch } from '@docsearch/react';
2+
import React from 'react';
3+
import './App.css';
4+
import '@docsearch/css/dist/style.css';
5+
6+
function App(): React.JSX.Element {
7+
return (
8+
<div>
9+
<h1>DocSearch v3 - React - 18</h1>
10+
<DocSearch indexName="vuejs" appId="ML0LEBN7FQ" apiKey="21cf9df0734770a2448a9da64a700c22" insights={true} />
11+
</div>
12+
);
13+
}
14+
15+
export default App;

examples/demo-react-18/src/main.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/* eslint-disable react/react-in-jsx-scope */
2+
import { StrictMode } from 'react';
3+
import { createRoot } from 'react-dom/client';
4+
5+
import App from './App.tsx';
6+
7+
createRoot(document.getElementById('root')!).render(
8+
<StrictMode>
9+
<App />
10+
</StrictMode>,
11+
);
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/// <reference types="vite/client" />

examples/demo-react-18/tsconfig.json

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"compilerOptions": {
3+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4+
"target": "ES2020",
5+
"useDefineForClassFields": true,
6+
"lib": [
7+
"ES2020",
8+
"DOM",
9+
"DOM.Iterable"
10+
],
11+
"module": "ESNext",
12+
"skipLibCheck": true,
13+
/* Bundler mode */
14+
"moduleResolution": "Bundler",
15+
"allowImportingTsExtensions": true,
16+
"isolatedModules": true,
17+
"moduleDetection": "force",
18+
"noEmit": true,
19+
"jsx": "react-jsx",
20+
/* Linting */
21+
"strict": true,
22+
"noUnusedLocals": true,
23+
"noUnusedParameters": true,
24+
"noFallthroughCasesInSwitch": true,
25+
"noUncheckedSideEffectImports": true
26+
},
27+
"include": [
28+
"src",
29+
"vite.config.ts"
30+
],
31+
}

examples/demo-react-18/vite.config.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import react from '@vitejs/plugin-react';
2+
import { defineConfig } from 'vite';
3+
4+
// https://vite.dev/config/
5+
export default defineConfig({
6+
plugins: [react()],
7+
});

examples/demo/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
"dependencies": {
1414
"@docsearch/css": "3.8.3",
1515
"@docsearch/react": "3.8.3",
16-
"react": "^18.0.0",
17-
"react-dom": "^18.0.0"
16+
"react": "^19.0.0",
17+
"react-dom": "^19.0.0"
1818
},
1919
"devDependencies": {
2020
"@vitejs/plugin-react": "^4.3.4",

examples/demo/src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { DocSearch } from '@docsearch/react';
2-
2+
import type { JSX } from 'react';
33
import './App.css';
44
import '@docsearch/css/dist/style.css';
55

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
"@rollup/plugin-terser": "0.4.4",
4444
"@stylistic/eslint-plugin": "2.13.0",
4545
"@testing-library/dom": "10.4.0",
46-
"@types/react": "^18.0.0",
47-
"@types/react-dom": "^18.0.0",
46+
"@types/react": "^19.0.0",
47+
"@types/react-dom": "^19.0.0",
4848
"@typescript-eslint/eslint-plugin": "8.20.0",
4949
"@typescript-eslint/parser": "8.20.0",
5050
"babel-plugin-module-resolver": "5.0.2",
@@ -66,8 +66,8 @@
6666
"lerna": "8.1.9",
6767
"postcss": "8.5.1",
6868
"prettier": "3.4.2",
69-
"react": "^18.0.0",
70-
"react-dom": "^18.0.0",
69+
"react": "^19.0.0",
70+
"react-dom": "^19.0.0",
7171
"rollup": "4.31.0",
7272
"rollup-plugin-dts": "6.1.1",
7373
"rollup-plugin-filesize": "10.0.0",

packages/docsearch-react/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@
4848
"vitest": "3.0.2"
4949
},
5050
"peerDependencies": {
51-
"@types/react": ">= 16.8.0 < 19.0.0",
52-
"react": ">= 16.8.0 < 19.0.0",
53-
"react-dom": ">= 16.8.0 < 19.0.0",
51+
"@types/react": ">= 16.8.0 < 20.0.0",
52+
"react": ">= 16.8.0 < 20.0.0",
53+
"react-dom": ">= 16.8.0 < 20.0.0",
5454
"search-insights": ">= 1 < 3"
5555
},
5656
"peerDependenciesMeta": {

packages/docsearch-react/src/AlgoliaLogo.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
type AlgoliaLogoTranslations = Partial<{
44
searchByText: string;

packages/docsearch-react/src/DocSearch.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { AutocompleteState, AutocompleteOptions } from '@algolia/autocomplete-core';
22
import type { LiteClient, SearchParamsObject } from 'algoliasearch/lite';
3-
import React from 'react';
3+
import React, { type JSX } from 'react';
44
import { createPortal } from 'react-dom';
55

66
import { DocSearchButton } from './DocSearchButton';

packages/docsearch-react/src/DocSearchButton.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect, useState } from 'react';
1+
import React, { type JSX, useEffect, useState } from 'react';
22

33
import { ControlKeyIcon } from './icons/ControlKeyIcon';
44
import { SearchIcon } from './icons/SearchIcon';

packages/docsearch-react/src/DocSearchModal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { type AlgoliaInsightsHit, createAutocomplete } from '@algolia/autocomplete-core';
22
import type { SearchResponse } from 'algoliasearch/lite';
3-
import React from 'react';
3+
import React, { type JSX } from 'react';
44

55
import { MAX_QUERY_SIZE } from './constants';
66
import type { DocSearchProps } from './DocSearch';

packages/docsearch-react/src/ErrorScreen.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
import { ErrorIcon } from './icons';
44

packages/docsearch-react/src/Footer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
import { AlgoliaLogo } from './AlgoliaLogo';
44

packages/docsearch-react/src/Hit.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
import type { InternalDocSearchHit, StoredDocSearchHit } from './types';
44

packages/docsearch-react/src/NoResultsScreen.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
import { NoResultsIcon } from './icons';
44
import type { ScreenStateProps } from './ScreenState';

packages/docsearch-react/src/Results.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { AutocompleteApi, AutocompleteState, BaseItem } from '@algolia/autocomplete-core';
2-
import React from 'react';
2+
import React, { type JSX } from 'react';
33

44
import type { DocSearchProps } from './DocSearch';
55
import { Snippet } from './Snippet';

packages/docsearch-react/src/ResultsScreen.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
import { SelectIcon, SourceIcon } from './icons';
44
import { Results } from './Results';

packages/docsearch-react/src/SearchBox.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import type { AutocompleteApi, AutocompleteState } from '@algolia/autocomplete-core';
2-
import type { MutableRefObject } from 'react';
3-
import React from 'react';
2+
import React, { type JSX, type RefObject } from 'react';
43

54
import { MAX_QUERY_SIZE } from './constants';
65
import { LoadingIcon } from './icons/LoadingIcon';
@@ -20,7 +19,7 @@ interface SearchBoxProps
2019
extends AutocompleteApi<InternalDocSearchHit, React.FormEvent, React.MouseEvent, React.KeyboardEvent> {
2120
state: AutocompleteState<InternalDocSearchHit>;
2221
autoFocus: boolean;
23-
inputRef: MutableRefObject<HTMLInputElement | null>;
22+
inputRef: RefObject<HTMLInputElement | null>;
2423
onClose: () => void;
2524
isFromSelection: boolean;
2625
translations?: SearchBoxTranslations;

packages/docsearch-react/src/Snippet.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createElement } from 'react';
1+
import { type JSX, createElement } from 'react';
22

33
import type { StoredDocSearchHit } from './types';
44

packages/docsearch-react/src/StartScreen.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
import { RecentIcon, ResetIcon, StarIcon } from './icons';
44
import { Results } from './Results';

packages/docsearch-react/src/__tests__/api.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { render, act, fireEvent, screen, cleanup } from '@testing-library/react';
2-
import React from 'react';
2+
import React, { type JSX } from 'react';
33
import { describe, it, expect, afterEach } from 'vitest';
44

55
import '@testing-library/jest-dom/vitest';

packages/docsearch-react/src/icons/ControlKeyIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
export function ControlKeyIcon(): JSX.Element {
44
return (

packages/docsearch-react/src/icons/ErrorIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
export function ErrorIcon(): JSX.Element {
44
return (

packages/docsearch-react/src/icons/GoToExternalIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
export function GoToExternal(): JSX.Element {
44
return (

packages/docsearch-react/src/icons/LoadingIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
export function LoadingIcon(): JSX.Element {
44
return (

packages/docsearch-react/src/icons/NoResultsIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
export function NoResultsIcon(): JSX.Element {
44
return (

packages/docsearch-react/src/icons/RecentIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
export function RecentIcon(): JSX.Element {
44
return (

packages/docsearch-react/src/icons/ResetIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
export function ResetIcon(): JSX.Element {
44
return (

packages/docsearch-react/src/icons/SearchIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
export function SearchIcon(): JSX.Element {
44
return (

packages/docsearch-react/src/icons/SelectIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
export function SelectIcon(): JSX.Element {
44
return (

packages/docsearch-react/src/icons/SourceIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
const LvlIcon: React.FC = () => {
44
return (

packages/docsearch-react/src/icons/StarIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { type JSX } from 'react';
22

33
export function StarIcon(): JSX.Element {
44
return (

packages/docsearch-react/src/useDocSearchKeyboardEvents.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export interface UseDocSearchKeyboardEventsProps {
55
onOpen: () => void;
66
onClose: () => void;
77
onInput?: (event: KeyboardEvent) => void;
8-
searchButtonRef?: React.RefObject<HTMLButtonElement>;
8+
searchButtonRef: React.RefObject<HTMLButtonElement | null>;
99
}
1010

1111
function isEditingContent(event: KeyboardEvent): boolean {

0 commit comments

Comments
 (0)