mirror of
https://github.com/ueberdosis/tiptap.git
synced 2025-06-07 17:43:49 +08:00
add support for react 19 ref props (#6405)
Some checks are pending
build / build (20) (push) Waiting to run
build / test (20, map[name:Demos/Commands spec:./demos/src/Commands/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/Examples spec:./demos/src/Examples/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/Experiments spec:./demos/src/Experiments/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/Extensions spec:./demos/src/Extensions/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/GuideContent spec:./demos/src/GuideContent/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/GuideGettingStarted spec:./demos/src/GuideGettingStarted/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/Marks spec:./demos/src/Marks/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/Nodes spec:./demos/src/Nodes/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Integration spec:./tests/cypress/integration/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / release (20) (push) Blocked by required conditions
Publish / Release (20) (push) Waiting to run
Some checks are pending
build / build (20) (push) Waiting to run
build / test (20, map[name:Demos/Commands spec:./demos/src/Commands/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/Examples spec:./demos/src/Examples/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/Experiments spec:./demos/src/Experiments/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/Extensions spec:./demos/src/Extensions/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/GuideContent spec:./demos/src/GuideContent/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/GuideGettingStarted spec:./demos/src/GuideGettingStarted/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/Marks spec:./demos/src/Marks/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Demos/Nodes spec:./demos/src/Nodes/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / test (20, map[name:Integration spec:./tests/cypress/integration/**/*.spec.{js,ts}]) (push) Blocked by required conditions
build / release (20) (push) Blocked by required conditions
Publish / Release (20) (push) Waiting to run
* add support for react 19 ref props * added changeset * Update packages/react/src/ReactRenderer.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * use partial imports instead of importing the whole React library * fix react renderer not passing ref prop * upgrade dev dependencies for react * updated lockfile * upgrade dev dependencies * update package.json * remove optionalDependencies and move react deps to peerDependencies * enhance ReactRenderer for React 19 compatibility and improve ref handling * remove unused 'node' property from ReactNodeViewProps type definition * fix: update ref type in ReactNodeView to be generic * fix: replace FunctionComponent with NamedExoticComponent for better performance in ReactNodeView * cloned react renderer element props to avoid side effects --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
parent
4f498944b5
commit
ef12b32623
5
.changeset/shiny-impalas-remember.md
Normal file
5
.changeset/shiny-impalas-remember.md
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
'@tiptap/react': minor
|
||||
---
|
||||
|
||||
Added support for React 19 ref in props
|
@ -56,8 +56,8 @@
|
||||
"iframe-resizer": "^4.4.5",
|
||||
"postcss": "^8.4.49",
|
||||
"postcss-import": "^15.1.0",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0",
|
||||
"sass": "^1.83.0",
|
||||
"svelte": "^4.2.19",
|
||||
"tailwindcss": "^3.4.17",
|
||||
|
@ -1,8 +1,8 @@
|
||||
import type { NodeViewProps } from '@tiptap/react'
|
||||
import type { ReactNodeViewProps } from '@tiptap/react'
|
||||
import { NodeViewWrapper } from '@tiptap/react'
|
||||
import React from 'react'
|
||||
|
||||
export default (props: NodeViewProps) => {
|
||||
export default (props: ReactNodeViewProps<HTMLLabelElement>) => {
|
||||
const increase = () => {
|
||||
props.updateAttributes({
|
||||
count: props.node.attrs.count + 1,
|
||||
@ -11,7 +11,7 @@ export default (props: NodeViewProps) => {
|
||||
|
||||
return (
|
||||
<NodeViewWrapper className="react-component">
|
||||
<label>React Component</label>
|
||||
<label ref={props.ref}>React Component</label>
|
||||
|
||||
<div className="content">
|
||||
<button onClick={increase}>This button has been clicked {props.node.attrs.count} times.</button>
|
||||
|
@ -1,10 +1,10 @@
|
||||
import type { NodeViewProps } from '@tiptap/react'
|
||||
import type { ReactNodeViewProps } from '@tiptap/react'
|
||||
import { NodeViewWrapper } from '@tiptap/react'
|
||||
import React, { useContext } from 'react'
|
||||
|
||||
import { Context } from './Context.js'
|
||||
|
||||
export default (props: NodeViewProps) => {
|
||||
export default (props: ReactNodeViewProps) => {
|
||||
const { value } = useContext(Context)
|
||||
|
||||
const increase = () => {
|
||||
|
@ -1,8 +1,8 @@
|
||||
import './MentionList.scss'
|
||||
|
||||
import React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react'
|
||||
import React, { useEffect, useImperativeHandle, useState } from 'react'
|
||||
|
||||
export default forwardRef((props, ref) => {
|
||||
export default props => {
|
||||
const [selectedIndex, setSelectedIndex] = useState(0)
|
||||
|
||||
const selectItem = index => {
|
||||
@ -27,7 +27,7 @@ export default forwardRef((props, ref) => {
|
||||
|
||||
useEffect(() => setSelectedIndex(0), [props.items])
|
||||
|
||||
useImperativeHandle(ref, () => ({
|
||||
useImperativeHandle(props.ref, () => ({
|
||||
onKeyDown: ({ event }) => {
|
||||
if (event.key === 'ArrowUp') {
|
||||
upHandler()
|
||||
@ -65,4 +65,4 @@ export default forwardRef((props, ref) => {
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
})
|
||||
}
|
||||
|
@ -43,8 +43,8 @@
|
||||
"@commitlint/config-conventional": "^19.6.0",
|
||||
"@cypress/webpack-preprocessor": "^6.0.2",
|
||||
"@testing-library/react": "16.2.0",
|
||||
"@types/react": "^18.3.18",
|
||||
"@types/react-dom": "^18.3.5",
|
||||
"@types/react": "^19.0.0",
|
||||
"@types/react-dom": "^19.0.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.19.0",
|
||||
"@typescript-eslint/parser": "^8.19.0",
|
||||
"babel-loader": "^9.2.1",
|
||||
@ -66,7 +66,7 @@
|
||||
"minimist": "^1.2.8",
|
||||
"pkg-pr-new": "0.0.32",
|
||||
"prettier": "3.3.3",
|
||||
"react": "^18.0.0",
|
||||
"react": "^19.0.0",
|
||||
"tinyglobby": "0.2.10",
|
||||
"ts-loader": "9.3.1",
|
||||
"tsup": "^8.3.5",
|
||||
|
@ -48,8 +48,8 @@
|
||||
"@tiptap/pm": "workspace:*",
|
||||
"@types/react": "^18.3.18",
|
||||
"@types/react-dom": "^18.3.5",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1"
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@tiptap/extension-bubble-menu": "workspace:*",
|
||||
|
@ -1,12 +1,13 @@
|
||||
import type { DecorationWithType, Editor, NodeViewProps, NodeViewRenderer, NodeViewRendererOptions } from '@tiptap/core'
|
||||
import type { DecorationWithType, Editor, NodeViewRenderer, NodeViewRendererOptions } from '@tiptap/core'
|
||||
import { getRenderedAttributes, NodeView } from '@tiptap/core'
|
||||
import type { Node, Node as ProseMirrorNode } from '@tiptap/pm/model'
|
||||
import type { Decoration, DecorationSource, NodeView as ProseMirrorNodeView } from '@tiptap/pm/view'
|
||||
import type { ComponentType } from 'react'
|
||||
import React from 'react'
|
||||
import type { ComponentType, NamedExoticComponent } from 'react'
|
||||
import { createElement, createRef, memo } from 'react'
|
||||
|
||||
import type { EditorWithContentComponent } from './Editor.js'
|
||||
import { ReactRenderer } from './ReactRenderer.js'
|
||||
import type { ReactNodeViewProps } from './types.js'
|
||||
import type { ReactNodeViewContextProps } from './useReactNodeView.js'
|
||||
import { ReactNodeViewContext } from './useReactNodeView.js'
|
||||
|
||||
@ -45,14 +46,15 @@ export interface ReactNodeViewRendererOptions extends NodeViewRendererOptions {
|
||||
}
|
||||
|
||||
export class ReactNodeView<
|
||||
Component extends ComponentType<NodeViewProps> = ComponentType<NodeViewProps>,
|
||||
T = HTMLElement,
|
||||
Component extends ComponentType<ReactNodeViewProps<T>> = ComponentType<ReactNodeViewProps<T>>,
|
||||
NodeEditor extends Editor = Editor,
|
||||
Options extends ReactNodeViewRendererOptions = ReactNodeViewRendererOptions,
|
||||
> extends NodeView<Component, NodeEditor, Options> {
|
||||
/**
|
||||
* The renderer instance.
|
||||
*/
|
||||
renderer!: ReactRenderer<unknown, NodeViewProps>
|
||||
renderer!: ReactRenderer<unknown, ReactNodeViewProps<T>>
|
||||
|
||||
/**
|
||||
* The element that holds the rich-text content of the node.
|
||||
@ -76,7 +78,8 @@ export class ReactNodeView<
|
||||
getPos: () => this.getPos(),
|
||||
updateAttributes: (attributes = {}) => this.updateAttributes(attributes),
|
||||
deleteNode: () => this.deleteNode(),
|
||||
} satisfies NodeViewProps
|
||||
ref: createRef<T>(),
|
||||
} satisfies ReactNodeViewProps<T>
|
||||
|
||||
if (!(this.component as any).displayName) {
|
||||
const capitalizeFirstChar = (string: string): string => {
|
||||
@ -96,10 +99,10 @@ export class ReactNodeView<
|
||||
const Component = this.component
|
||||
// For performance reasons, we memoize the provider component
|
||||
// And all of the things it requires are declared outside of the component, so it doesn't need to re-render
|
||||
const ReactNodeViewProvider: React.FunctionComponent<NodeViewProps> = React.memo(componentProps => {
|
||||
const ReactNodeViewProvider: NamedExoticComponent<ReactNodeViewProps<T>> = memo(componentProps => {
|
||||
return (
|
||||
<ReactNodeViewContext.Provider value={context}>
|
||||
{React.createElement(Component, componentProps)}
|
||||
{createElement(Component, componentProps)}
|
||||
</ReactNodeViewContext.Provider>
|
||||
)
|
||||
})
|
||||
@ -302,8 +305,8 @@ export class ReactNodeView<
|
||||
/**
|
||||
* Create a React node view renderer.
|
||||
*/
|
||||
export function ReactNodeViewRenderer(
|
||||
component: ComponentType<NodeViewProps>,
|
||||
export function ReactNodeViewRenderer<T = HTMLElement>(
|
||||
component: ComponentType<ReactNodeViewProps<T>>,
|
||||
options?: Partial<ReactNodeViewRendererOptions>,
|
||||
): NodeViewRenderer {
|
||||
return props => {
|
||||
@ -314,6 +317,6 @@ export function ReactNodeViewRenderer(
|
||||
return {} as unknown as ProseMirrorNodeView
|
||||
}
|
||||
|
||||
return new ReactNodeView(component, props, options)
|
||||
return new ReactNodeView<T>(component, props, options)
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,13 @@
|
||||
import type { Editor } from '@tiptap/core'
|
||||
import React from 'react'
|
||||
import type {
|
||||
ComponentClass,
|
||||
ForwardRefExoticComponent,
|
||||
FunctionComponent,
|
||||
PropsWithoutRef,
|
||||
ReactNode,
|
||||
RefAttributes,
|
||||
} from 'react'
|
||||
import { version as reactVersion } from 'react'
|
||||
import { flushSync } from 'react-dom'
|
||||
|
||||
import type { EditorWithContentComponent } from './Editor.js'
|
||||
@ -22,6 +30,26 @@ function isForwardRefComponent(Component: any) {
|
||||
return !!(typeof Component === 'object' && Component.$$typeof?.toString() === 'Symbol(react.forward_ref)')
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if we're running React 19+ by detecting if function components support ref props
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isReact19Plus(): boolean {
|
||||
// React 19 is detected by checking React version if available
|
||||
// In practice, we'll use a more conservative approach and assume React 18 behavior
|
||||
// unless we can definitively detect React 19
|
||||
try {
|
||||
// @ts-ignore
|
||||
if (reactVersion) {
|
||||
const majorVersion = parseInt(reactVersion.split('.')[0], 10)
|
||||
return majorVersion >= 19
|
||||
}
|
||||
} catch {
|
||||
// Fallback to React 18 behavior if we can't determine version
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
export interface ReactRendererOptions {
|
||||
/**
|
||||
* The editor instance.
|
||||
@ -53,9 +81,9 @@ export interface ReactRendererOptions {
|
||||
}
|
||||
|
||||
type ComponentType<R, P> =
|
||||
| React.ComponentClass<P>
|
||||
| React.FunctionComponent<P>
|
||||
| React.ForwardRefExoticComponent<React.PropsWithoutRef<P> & React.RefAttributes<R>>
|
||||
| ComponentClass<P>
|
||||
| FunctionComponent<P>
|
||||
| ForwardRefExoticComponent<PropsWithoutRef<P> & RefAttributes<R>>
|
||||
|
||||
/**
|
||||
* The ReactRenderer class. It's responsible for rendering React components inside the editor.
|
||||
@ -79,7 +107,7 @@ export class ReactRenderer<R = unknown, P extends Record<string, any> = object>
|
||||
|
||||
props: P
|
||||
|
||||
reactElement: React.ReactNode
|
||||
reactElement: ReactNode
|
||||
|
||||
ref: R | null = null
|
||||
|
||||
@ -120,14 +148,32 @@ export class ReactRenderer<R = unknown, P extends Record<string, any> = object>
|
||||
const props = this.props
|
||||
const editor = this.editor as EditorWithContentComponent
|
||||
|
||||
if (isClassComponent(Component) || isForwardRefComponent(Component)) {
|
||||
// @ts-ignore This is a hack to make the ref work
|
||||
props.ref = (ref: R) => {
|
||||
this.ref = ref
|
||||
// Handle ref forwarding with React 18/19 compatibility
|
||||
const isReact19 = isReact19Plus()
|
||||
const isClassComp = isClassComponent(Component)
|
||||
const isForwardRefComp = isForwardRefComponent(Component)
|
||||
|
||||
const elementProps = { ...props }
|
||||
|
||||
if (!elementProps.ref) {
|
||||
if (isReact19) {
|
||||
// React 19: ref is a standard prop for all components
|
||||
// @ts-ignore - Setting ref prop for React 19 compatibility
|
||||
elementProps.ref = (ref: R) => {
|
||||
this.ref = ref
|
||||
}
|
||||
} else if (isClassComp || isForwardRefComp) {
|
||||
// React 18 and prior: only set ref for class components and forwardRef components
|
||||
// @ts-ignore - Setting ref prop for React 18 class/forwardRef components
|
||||
elementProps.ref = (ref: R) => {
|
||||
this.ref = ref
|
||||
}
|
||||
}
|
||||
// For function components in React 18, we can't use ref - the component won't receive it
|
||||
// This is a limitation we have to accept for React 18 function components without forwardRef
|
||||
}
|
||||
|
||||
this.reactElement = <Component {...props} />
|
||||
this.reactElement = <Component {...elementProps} />
|
||||
|
||||
editor?.contentComponent?.setRenderer(this.id, this)
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ export * from './NodeViewWrapper.js'
|
||||
export * from './ReactMarkViewRenderer.js'
|
||||
export * from './ReactNodeViewRenderer.js'
|
||||
export * from './ReactRenderer.js'
|
||||
export * from './types.js'
|
||||
export * from './useEditor.js'
|
||||
export * from './useEditorState.js'
|
||||
export * from './useReactNodeView.js'
|
||||
|
6
packages/react/src/types.ts
Normal file
6
packages/react/src/types.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import type { NodeViewProps as CoreNodeViewProps } from '@tiptap/core'
|
||||
import type React from 'react'
|
||||
|
||||
export type ReactNodeViewProps<T = HTMLElement> = CoreNodeViewProps & {
|
||||
ref: React.RefObject<T>
|
||||
}
|
@ -74,18 +74,14 @@
|
||||
"devDependencies": {
|
||||
"@tiptap/core": "workspace:*",
|
||||
"@tiptap/pm": "workspace:*",
|
||||
"@types/react": "^18.2.14",
|
||||
"@types/react-dom": "^18.2.6",
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
"@types/react": "^19.0.0",
|
||||
"@types/react-dom": "^19.0.0",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@tiptap/core": "workspace:*",
|
||||
"@tiptap/pm": "workspace:*"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@types/react": "^18.2.14",
|
||||
"@types/react-dom": "^18.2.6",
|
||||
"@tiptap/pm": "workspace:*",
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
},
|
||||
|
138
pnpm-lock.yaml
138
pnpm-lock.yaml
@ -37,13 +37,13 @@ importers:
|
||||
version: 6.0.2(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1(esbuild@0.24.2)))(webpack@5.97.1(esbuild@0.24.2))
|
||||
'@testing-library/react':
|
||||
specifier: 16.2.0
|
||||
version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||
'@types/react':
|
||||
specifier: ^18.3.18
|
||||
version: 18.3.18
|
||||
specifier: ^19.0.0
|
||||
version: 19.1.6
|
||||
'@types/react-dom':
|
||||
specifier: ^18.3.5
|
||||
version: 18.3.5(@types/react@18.3.18)
|
||||
specifier: ^19.0.0
|
||||
version: 19.1.5(@types/react@19.1.6)
|
||||
'@typescript-eslint/eslint-plugin':
|
||||
specifier: ^8.19.0
|
||||
version: 8.21.0(@typescript-eslint/parser@8.21.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)
|
||||
@ -108,8 +108,8 @@ importers:
|
||||
specifier: 3.3.3
|
||||
version: 3.3.3
|
||||
react:
|
||||
specifier: ^18.0.0
|
||||
version: 18.3.1
|
||||
specifier: ^19.0.0
|
||||
version: 19.1.0
|
||||
tinyglobby:
|
||||
specifier: 0.2.10
|
||||
version: 0.2.10
|
||||
@ -160,7 +160,7 @@ importers:
|
||||
version: 2.15.0(y-protocols@1.0.6(yjs@13.6.23))(yjs@13.6.23)
|
||||
'@lexical/react':
|
||||
specifier: ^0.11.3
|
||||
version: 0.11.3(lexical@0.11.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.23)
|
||||
version: 0.11.3(lexical@0.11.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(yjs@13.6.23)
|
||||
'@lifeomic/attempt':
|
||||
specifier: 3.1.0
|
||||
version: 3.1.0
|
||||
@ -286,11 +286,11 @@ importers:
|
||||
specifier: ^15.1.0
|
||||
version: 15.1.0(postcss@8.5.1)
|
||||
react:
|
||||
specifier: ^18.3.1
|
||||
version: 18.3.1
|
||||
specifier: ^19.0.0
|
||||
version: 19.1.0
|
||||
react-dom:
|
||||
specifier: ^18.3.1
|
||||
version: 18.3.1(react@18.3.1)
|
||||
specifier: ^19.0.0
|
||||
version: 19.1.0(react@19.1.0)
|
||||
sass:
|
||||
specifier: ^1.83.0
|
||||
version: 1.83.4
|
||||
@ -769,7 +769,7 @@ importers:
|
||||
version: 3.1.3
|
||||
use-sync-external-store:
|
||||
specifier: ^1.4.0
|
||||
version: 1.4.0(react@18.3.1)
|
||||
version: 1.4.0(react@19.1.0)
|
||||
optionalDependencies:
|
||||
'@tiptap/extension-bubble-menu':
|
||||
specifier: workspace:*
|
||||
@ -791,11 +791,11 @@ importers:
|
||||
specifier: ^18.3.5
|
||||
version: 18.3.5(@types/react@18.3.18)
|
||||
react:
|
||||
specifier: ^18.3.1
|
||||
version: 18.3.1
|
||||
specifier: ^19.0.0
|
||||
version: 19.1.0
|
||||
react-dom:
|
||||
specifier: ^18.3.1
|
||||
version: 18.3.1(react@18.3.1)
|
||||
specifier: ^19.0.0
|
||||
version: 19.1.0(react@19.1.0)
|
||||
|
||||
packages/starter-kit:
|
||||
dependencies:
|
||||
@ -873,19 +873,6 @@ importers:
|
||||
version: link:../pm
|
||||
|
||||
packages/static-renderer:
|
||||
optionalDependencies:
|
||||
'@types/react':
|
||||
specifier: ^18.2.14
|
||||
version: 18.3.18
|
||||
'@types/react-dom':
|
||||
specifier: ^18.2.6
|
||||
version: 18.3.5(@types/react@18.3.18)
|
||||
react:
|
||||
specifier: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
version: 18.3.1
|
||||
react-dom:
|
||||
specifier: ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
version: 18.3.1(react@18.3.1)
|
||||
devDependencies:
|
||||
'@tiptap/core':
|
||||
specifier: workspace:*
|
||||
@ -893,6 +880,18 @@ importers:
|
||||
'@tiptap/pm':
|
||||
specifier: workspace:*
|
||||
version: link:../pm
|
||||
'@types/react':
|
||||
specifier: ^19.0.0
|
||||
version: 19.1.6
|
||||
'@types/react-dom':
|
||||
specifier: ^19.0.0
|
||||
version: 19.1.5(@types/react@19.1.6)
|
||||
react:
|
||||
specifier: ^19.0.0
|
||||
version: 19.1.0
|
||||
react-dom:
|
||||
specifier: ^19.0.0
|
||||
version: 19.1.0(react@19.1.0)
|
||||
|
||||
packages/suggestion:
|
||||
devDependencies:
|
||||
@ -2728,9 +2727,17 @@ packages:
|
||||
peerDependencies:
|
||||
'@types/react': ^18.0.0
|
||||
|
||||
'@types/react-dom@19.1.5':
|
||||
resolution: {integrity: sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==}
|
||||
peerDependencies:
|
||||
'@types/react': ^19.0.0
|
||||
|
||||
'@types/react@18.3.18':
|
||||
resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==}
|
||||
|
||||
'@types/react@19.1.6':
|
||||
resolution: {integrity: sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==}
|
||||
|
||||
'@types/sinonjs__fake-timers@8.1.1':
|
||||
resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==}
|
||||
|
||||
@ -4934,10 +4941,6 @@ packages:
|
||||
resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
loose-envify@1.4.0:
|
||||
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
|
||||
hasBin: true
|
||||
|
||||
loupe@2.3.7:
|
||||
resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
|
||||
|
||||
@ -5563,10 +5566,10 @@ packages:
|
||||
randombytes@2.1.0:
|
||||
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
|
||||
|
||||
react-dom@18.3.1:
|
||||
resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
|
||||
react-dom@19.1.0:
|
||||
resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
|
||||
peerDependencies:
|
||||
react: ^18.3.1
|
||||
react: ^19.1.0
|
||||
|
||||
react-error-boundary@3.1.4:
|
||||
resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==}
|
||||
@ -5584,8 +5587,8 @@ packages:
|
||||
resolution: {integrity: sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
react@18.3.1:
|
||||
resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
|
||||
react@19.1.0:
|
||||
resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
read-cache@1.0.0:
|
||||
@ -5765,8 +5768,8 @@ packages:
|
||||
engines: {node: '>=14.0.0'}
|
||||
hasBin: true
|
||||
|
||||
scheduler@0.23.2:
|
||||
resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
|
||||
scheduler@0.26.0:
|
||||
resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
|
||||
|
||||
schema-utils@3.3.0:
|
||||
resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
|
||||
@ -8218,7 +8221,7 @@ snapshots:
|
||||
'@lexical/utils': 0.11.3(lexical@0.11.3)
|
||||
lexical: 0.11.3
|
||||
|
||||
'@lexical/react@0.11.3(lexical@0.11.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(yjs@13.6.23)':
|
||||
'@lexical/react@0.11.3(lexical@0.11.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(yjs@13.6.23)':
|
||||
dependencies:
|
||||
'@lexical/clipboard': 0.11.3(lexical@0.11.3)
|
||||
'@lexical/code': 0.11.3(lexical@0.11.3)
|
||||
@ -8238,9 +8241,9 @@ snapshots:
|
||||
'@lexical/utils': 0.11.3(lexical@0.11.3)
|
||||
'@lexical/yjs': 0.11.3(lexical@0.11.3)(yjs@13.6.23)
|
||||
lexical: 0.11.3
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
react-error-boundary: 3.1.4(react@18.3.1)
|
||||
react: 19.1.0
|
||||
react-dom: 19.1.0(react@19.1.0)
|
||||
react-error-boundary: 3.1.4(react@19.1.0)
|
||||
transitivePeerDependencies:
|
||||
- yjs
|
||||
|
||||
@ -8584,15 +8587,15 @@ snapshots:
|
||||
lz-string: 1.5.0
|
||||
pretty-format: 27.5.1
|
||||
|
||||
'@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.5(@types/react@19.1.6))(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.0
|
||||
'@testing-library/dom': 10.4.0
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
react: 19.1.0
|
||||
react-dom: 19.1.0(react@19.1.0)
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.18
|
||||
'@types/react-dom': 18.3.5(@types/react@18.3.18)
|
||||
'@types/react': 19.1.6
|
||||
'@types/react-dom': 19.1.5(@types/react@19.1.6)
|
||||
|
||||
'@tiptap/y-tiptap@3.0.0-beta.3(prosemirror-model@1.24.1)(prosemirror-state@1.4.3)(prosemirror-view@1.38.1)(y-protocols@1.0.6(yjs@13.6.23))(yjs@13.6.23)':
|
||||
dependencies:
|
||||
@ -8663,11 +8666,19 @@ snapshots:
|
||||
dependencies:
|
||||
'@types/react': 18.3.18
|
||||
|
||||
'@types/react-dom@19.1.5(@types/react@19.1.6)':
|
||||
dependencies:
|
||||
'@types/react': 19.1.6
|
||||
|
||||
'@types/react@18.3.18':
|
||||
dependencies:
|
||||
'@types/prop-types': 15.7.14
|
||||
csstype: 3.1.3
|
||||
|
||||
'@types/react@19.1.6':
|
||||
dependencies:
|
||||
csstype: 3.1.3
|
||||
|
||||
'@types/sinonjs__fake-timers@8.1.1': {}
|
||||
|
||||
'@types/sizzle@2.3.9': {}
|
||||
@ -11253,10 +11264,6 @@ snapshots:
|
||||
|
||||
longest@2.0.1: {}
|
||||
|
||||
loose-envify@1.4.0:
|
||||
dependencies:
|
||||
js-tokens: 4.0.0
|
||||
|
||||
loupe@2.3.7:
|
||||
dependencies:
|
||||
get-func-name: 2.0.2
|
||||
@ -11895,16 +11902,15 @@ snapshots:
|
||||
dependencies:
|
||||
safe-buffer: 5.2.1
|
||||
|
||||
react-dom@18.3.1(react@18.3.1):
|
||||
react-dom@19.1.0(react@19.1.0):
|
||||
dependencies:
|
||||
loose-envify: 1.4.0
|
||||
react: 18.3.1
|
||||
scheduler: 0.23.2
|
||||
react: 19.1.0
|
||||
scheduler: 0.26.0
|
||||
|
||||
react-error-boundary@3.1.4(react@18.3.1):
|
||||
react-error-boundary@3.1.4(react@19.1.0):
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.0
|
||||
react: 18.3.1
|
||||
react: 19.1.0
|
||||
|
||||
react-is@17.0.2: {}
|
||||
|
||||
@ -11912,9 +11918,7 @@ snapshots:
|
||||
|
||||
react-refresh@0.13.0: {}
|
||||
|
||||
react@18.3.1:
|
||||
dependencies:
|
||||
loose-envify: 1.4.0
|
||||
react@19.1.0: {}
|
||||
|
||||
read-cache@1.0.0:
|
||||
dependencies:
|
||||
@ -12135,9 +12139,7 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@parcel/watcher': 2.5.0
|
||||
|
||||
scheduler@0.23.2:
|
||||
dependencies:
|
||||
loose-envify: 1.4.0
|
||||
scheduler@0.26.0: {}
|
||||
|
||||
schema-utils@3.3.0:
|
||||
dependencies:
|
||||
@ -12767,9 +12769,9 @@ snapshots:
|
||||
|
||||
url-join@5.0.0: {}
|
||||
|
||||
use-sync-external-store@1.4.0(react@18.3.1):
|
||||
use-sync-external-store@1.4.0(react@19.1.0):
|
||||
dependencies:
|
||||
react: 18.3.1
|
||||
react: 19.1.0
|
||||
|
||||
util-deprecate@1.0.2: {}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user