Skip to content

Commit 5a4683b

Browse files
authored
Merge pull request #62 from retejs/support-react-19
feat: support react 19
2 parents 1ee52bf + 494db41 commit 5a4683b

File tree

17 files changed

+5629
-5492
lines changed

17 files changed

+5629
-5492
lines changed

eslint.config.mjs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ export default tseslint.config(
77
...configs,
88
{
99
files: ['**/*.{js,jsx,mjs,cjs,ts,tsx}'],
10+
settings: {
11+
react: {
12+
version: 'detect',
13+
}
14+
},
1015
plugins: {
1116
react,
1217
},
@@ -44,7 +49,8 @@ export default tseslint.config(
4449
],
4550
'@typescript-eslint/no-deprecated': 'warn',
4651
'react/no-deprecated': 'warn',
47-
'@typescript-eslint/unbound-method': 'off'
52+
'@typescript-eslint/unbound-method': 'off',
53+
'no-undefined': 'off'
4854
}
4955
}
5056
)

package-lock.json

Lines changed: 5508 additions & 5435 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
"url": "https://github.com/retejs/react-plugin/issues"
2525
},
2626
"peerDependencies": {
27-
"react": "^16.8.6 || ^17 || ^18",
28-
"react-dom": "^16.8.6 || ^17 || ^18",
27+
"react": "^16.8.6 || ^17 || ^18 || ^19 ",
28+
"react-dom": "^16.8.6 || ^17 || ^18 || ^19",
2929
"rete": "^2.0.1",
3030
"rete-area-plugin": "^2.0.0",
3131
"rete-render-utils": "^2.0.0",
@@ -34,19 +34,20 @@
3434
"devDependencies": {
3535
"@babel/preset-react": "^7.18.6",
3636
"@rollup/plugin-commonjs": "^23.0.2",
37-
"@types/react": "^18.0.21",
38-
"@types/react-dom": "^18.0.6",
39-
"@types/styled-components": "^5.1.26",
37+
"@types/react": "^19.0.0",
38+
"@types/react-dom": "^19.0.0",
39+
"@types/styled-components": "^5.1.34",
4040
"eslint-plugin-react": "^7.35.0",
4141
"globals": "^15.9.0",
42-
"react": "^18.2.0",
42+
"react": "^19.0.0",
43+
"react-dom": "^19.0.0",
4344
"rete": "^2.0.1",
4445
"rete-area-plugin": "^2.0.0",
4546
"rete-cli": "~2.0.1",
4647
"rete-render-utils": "^2.0.0",
4748
"rollup-plugin-replace": "^2.2.0",
4849
"rollup-plugin-sass": "^1.2.2",
49-
"styled-components": "^5.3.6"
50+
"styled-components": "^6.1.19"
5051
},
5152
"dependencies": {
5253
"@babel/runtime": "^7.21.0",

src/globals.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { JSX as Jsx } from 'react/jsx-runtime'
2+
3+
declare global {
4+
namespace JSX {
5+
type ElementClass = Jsx.ElementClass
6+
type Element = Jsx.Element
7+
type IntrinsicElements = Jsx.IntrinsicElements
8+
}
9+
}

src/index.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as React from 'react'
22
import { BaseSchemes, CanAssignSignal, Scope } from 'rete'
33

44
import { RenderPreset } from './presets/types'
5-
import { getRenderer, Renderer } from './renderer'
5+
import { CreateRoot, getRenderer, HasLegacyRender, Renderer } from './renderer'
66
import { Position, RenderSignal } from './types'
77
import { Root } from './utils'
88

@@ -28,9 +28,11 @@ type Requires<Schemes extends BaseSchemes> =
2828
/**
2929
* Plugin props
3030
*/
31-
export type Props = {
31+
export type Props = HasLegacyRender extends true ? {
3232
/** root factory for React.js 18+ */
33-
createRoot?: (container: Element | DocumentFragment) => any
33+
createRoot?: CreateRoot
34+
} : {
35+
createRoot: CreateRoot
3436
}
3537

3638
/**
@@ -44,7 +46,7 @@ export class ReactPlugin<Schemes extends BaseSchemes, T = Requires<Schemes>> ext
4446
renderer: Renderer
4547
presets: RenderPreset<Schemes, T>[] = []
4648

47-
constructor(props?: Props) {
49+
constructor(...[props]: HasLegacyRender extends true ? [props?: Props] : [props: Props]) {
4850
super('react-render')
4951
this.renderer = getRenderer({ createRoot: props?.createRoot })
5052

src/presets/classic/components/Control.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export function Control<N extends 'text' | 'number'>(props: { data: ClassicPrese
3131
type={props.data.type}
3232
ref={ref}
3333
readOnly={props.data.readonly}
34-
onChange={e => {
34+
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
3535
const val = (props.data.type === 'number'
3636
? +e.target.value
3737
: e.target.value) as typeof props.data['value']

src/presets/classic/components/Node.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ export const NodeStyles = styled.div<NodeExtraData & { selected: boolean, styles
1515
cursor: pointer;
1616
box-sizing: border-box;
1717
width: ${props => Number.isFinite(props.width)
18-
? `${props.width}px`
19-
: `${$nodewidth}px`};
18+
? `${props.width}px`
19+
: `${$nodewidth}px`};
2020
height: ${props => Number.isFinite(props.height)
21-
? `${props.height}px`
22-
: 'auto'};
21+
? `${props.height}px`
22+
: 'auto'};
2323
padding-bottom: 6px;
2424
position: relative;
2525
user-select: none;

src/presets/context-menu/components/Item.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,13 @@ export function ItemElement(props: Props) {
4141
const Subitems = props.components?.subitems?.(props.data) || SubitemStyles
4242

4343
return <Component
44-
onClick={e => {
44+
onClick={(e: React.MouseEvent) => {
4545
e.stopPropagation()
4646
props.data.handler()
4747
props.hide()
4848
}}
4949
hasSubitems={Boolean(props.data.subitems)}
50-
onPointerDown={e => {
50+
onPointerDown={(e: React.PointerEvent) => {
5151
e.stopPropagation()
5252
}}
5353
onPointerOver={() => {

src/presets/context-menu/components/Menu.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@ export function Menu(props: Props) {
3535
onMouseOver={() => {
3636
cancelHide()
3737
}}
38-
onMouseLeave={() => hide && hide()}
39-
onWheel={e => {
38+
onMouseLeave={() => {
39+
hide?.()
40+
}}
41+
onWheel={(e: React.WheelEvent) => {
4042
e.stopPropagation()
4143
}}
4244
data-testid="context-menu"

src/presets/context-menu/components/Search.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ export function Search(props: { value: string, onChange(value: string): void, co
2121
return (
2222
<Component
2323
value={props.value}
24-
onInput={e => {
24+
onInput={(e: React.FormEvent<HTMLInputElement>) => {
2525
props.onChange((e.target as HTMLInputElement).value)
2626
}}
27-
onPointerDown={e => {
27+
onPointerDown={(e: React.PointerEvent) => {
2828
e.stopPropagation()
2929
}}
3030
data-testid="context-menu-search-input"

0 commit comments

Comments
 (0)