feat(richtext-lexical)!: upgrade lexical from 0.17.0 to 0.18.0, make tables more reliable (#8444)

This PR

- Introduces multiline markdown transformers / mdx support
- Introduce `shouldMergeAdjacentLines` option in
`$convertFromMarkdownString`. If true, merges adjacent lines as per
commonmark spec. This would allow to close:
https://github.com/payloadcms/payload/issues/8049
- Many new features and bug fixes!
- Ports over changes from the lexical playground. Most notably:
  - add support for enabling table row stripping
  - make table resizing & table cell selection more reliable

**BREAKING**: This upgrades lexical from 0.17.0 to 0.18.0. If you have
any lexical packages installed in your project, please update them
accordingly. Additionally, if you depend on the lexical APIs, please
consult their changelog, as lexical may introduce breaking changes:
https://github.com/facebook/lexical/releases/tag/v0.18.0

---------

Co-authored-by: Alessio Gravili <alessio@gravili.de>
This commit is contained in:
Germán Jabloñski
2024-09-28 14:10:44 -03:00
committed by GitHub
parent 613d3b090e
commit 8b44676b0d
16 changed files with 317 additions and 338 deletions

View File

@@ -99,7 +99,7 @@
"prettier --write", "prettier --write",
"eslint --cache --fix" "eslint --cache --fix"
], ],
"templates/website/**/*": "sh -c \"cd templates/website; pnpm install --ignore-workspace; pnpm run lint --fix\"", "templates/website/**/*": "sh -c \"cd templates/website; pnpm install --no-frozen-lockfile --ignore-workspace; pnpm run lint --fix\"",
"tsconfig.json": "node scripts/reset-tsconfig.js" "tsconfig.json": "node scripts/reset-tsconfig.js"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -52,22 +52,22 @@
"translateNewKeys": "node --no-deprecation --import @swc-node/register/esm-register scripts/translateNewKeys.ts" "translateNewKeys": "node --no-deprecation --import @swc-node/register/esm-register scripts/translateNewKeys.ts"
}, },
"dependencies": { "dependencies": {
"@lexical/headless": "0.17.0", "@lexical/headless": "0.18.0",
"@lexical/link": "0.17.0", "@lexical/link": "0.18.0",
"@lexical/list": "0.17.0", "@lexical/list": "0.18.0",
"@lexical/mark": "0.17.0", "@lexical/mark": "0.18.0",
"@lexical/markdown": "0.17.0", "@lexical/markdown": "0.18.0",
"@lexical/react": "0.17.0", "@lexical/react": "0.18.0",
"@lexical/rich-text": "0.17.0", "@lexical/rich-text": "0.18.0",
"@lexical/selection": "0.17.0", "@lexical/selection": "0.18.0",
"@lexical/utils": "0.17.0", "@lexical/utils": "0.18.0",
"@payloadcms/translations": "workspace:*", "@payloadcms/translations": "workspace:*",
"@payloadcms/ui": "workspace:*", "@payloadcms/ui": "workspace:*",
"@types/uuid": "10.0.0", "@types/uuid": "10.0.0",
"bson-objectid": "2.0.4", "bson-objectid": "2.0.4",
"dequal": "2.0.3", "dequal": "2.0.3",
"escape-html": "1.0.3", "escape-html": "1.0.3",
"lexical": "0.17.0", "lexical": "0.18.0",
"react-error-boundary": "4.0.13", "react-error-boundary": "4.0.13",
"uuid": "10.0.0" "uuid": "10.0.0"
}, },
@@ -77,7 +77,7 @@
"@babel/preset-env": "^7.24.5", "@babel/preset-env": "^7.24.5",
"@babel/preset-react": "^7.24.1", "@babel/preset-react": "^7.24.1",
"@babel/preset-typescript": "^7.24.1", "@babel/preset-typescript": "^7.24.1",
"@lexical/eslint-plugin": "0.17.0", "@lexical/eslint-plugin": "0.18.0",
"@payloadcms/eslint-config": "workspace:*", "@payloadcms/eslint-config": "workspace:*",
"@types/escape-html": "1.0.4", "@types/escape-html": "1.0.4",
"@types/json-schema": "7.0.15", "@types/json-schema": "7.0.15",
@@ -95,18 +95,18 @@
"peerDependencies": { "peerDependencies": {
"@faceless-ui/modal": "3.0.0-beta.2", "@faceless-ui/modal": "3.0.0-beta.2",
"@faceless-ui/scroll-info": "2.0.0-beta.0", "@faceless-ui/scroll-info": "2.0.0-beta.0",
"@lexical/headless": "0.17.0", "@lexical/headless": "0.18.0",
"@lexical/link": "0.17.0", "@lexical/link": "0.18.0",
"@lexical/list": "0.17.0", "@lexical/list": "0.18.0",
"@lexical/mark": "0.17.0", "@lexical/mark": "0.18.0",
"@lexical/markdown": "0.17.0", "@lexical/markdown": "0.18.0",
"@lexical/react": "0.17.0", "@lexical/react": "0.18.0",
"@lexical/rich-text": "0.17.0", "@lexical/rich-text": "0.18.0",
"@lexical/selection": "0.17.0", "@lexical/selection": "0.18.0",
"@lexical/table": "0.17.0", "@lexical/table": "0.18.0",
"@lexical/utils": "0.17.0", "@lexical/utils": "0.18.0",
"@payloadcms/next": "workspace:*", "@payloadcms/next": "workspace:*",
"lexical": "0.17.0", "lexical": "0.18.0",
"payload": "workspace:*", "payload": "workspace:*",
"react": "^19.0.0 || ^19.0.0-rc-5dcb0097-20240918", "react": "^19.0.0 || ^19.0.0-rc-5dcb0097-20240918",
"react-dom": "^19.0.0 || ^19.0.0-rc-5dcb0097-20240918" "react-dom": "^19.0.0 || ^19.0.0-rc-5dcb0097-20240918"

View File

@@ -56,17 +56,20 @@ export const InlineBlockComponent: React.FC<Props> = (props) => {
const $onDelete = useCallback( const $onDelete = useCallback(
(event: KeyboardEvent) => { (event: KeyboardEvent) => {
if (isSelected && $isNodeSelection($getSelection())) { const deleteSelection = $getSelection()
if (isSelected && $isNodeSelection(deleteSelection)) {
event.preventDefault() event.preventDefault()
const node = $getNodeByKey(nodeKey) editor.update(() => {
if ($isInlineBlockNode(node)) { deleteSelection.getNodes().forEach((node) => {
node.remove() if ($isInlineBlockNode(node)) {
return true node.remove()
} }
})
})
} }
return false return false
}, },
[isSelected, nodeKey], [editor, isSelected],
) )
const onClick = useCallback( const onClick = useCallback(
(payload: MouseEvent) => { (payload: MouseEvent) => {

View File

@@ -58,47 +58,6 @@ function computeSelectionCount(selection: TableSelection): {
} }
} }
// This is important when merging cells as there is no good way to re-merge weird shapes (a result
// of selecting merged cells and non-merged)
function isTableSelectionRectangular(selection: TableSelection): boolean {
const nodes = selection.getNodes()
const currentRows: Array<number> = []
let currentRow: null | TableRowNode = null
let expectedColumns: null | number = null
let currentColumns = 0
for (let i = 0; i < nodes.length; i++) {
const node = nodes[i]
if ($isTableCellNode(node)) {
const row = node.getParentOrThrow()
if (!$isTableRowNode(row)) {
throw new Error('Expected CellNode to have a RowNode parent')
}
if (currentRow !== row) {
if (expectedColumns !== null && currentColumns !== expectedColumns) {
return false
}
if (currentRow !== null) {
expectedColumns = currentColumns
}
currentRow = row
currentColumns = 0
}
const colSpan = node.__colSpan
for (let j = 0; j < colSpan; j++) {
if (currentRows[currentColumns + j] === undefined) {
currentRows[currentColumns + j] = 0
}
currentRows[currentColumns + j] += node.__rowSpan
}
currentColumns += colSpan
}
}
return (
(expectedColumns === null || currentColumns === expectedColumns) &&
currentRows.every((v) => v === currentRows[0])
)
}
function $canUnmerge(): boolean { function $canUnmerge(): boolean {
const selection = $getSelection() const selection = $getSelection()
if ( if (
@@ -183,10 +142,8 @@ function TableActionMenu({
if ($isTableSelection(selection)) { if ($isTableSelection(selection)) {
const currentSelectionCounts = computeSelectionCount(selection) const currentSelectionCounts = computeSelectionCount(selection)
updateSelectionCounts(computeSelectionCount(selection)) updateSelectionCounts(computeSelectionCount(selection))
setCanMergeCells(
isTableSelectionRectangular(selection) && setCanMergeCells(currentSelectionCounts.columns > 1 || currentSelectionCounts.rows > 1)
(currentSelectionCounts.columns > 1 || currentSelectionCounts.rows > 1),
)
} }
// Unmerge cell // Unmerge cell
setCanUnmergeCell($canUnmerge()) setCanUnmergeCell($canUnmerge())
@@ -252,9 +209,9 @@ function TableActionMenu({
throw new Error('Expected to find tableElement in DOM') throw new Error('Expected to find tableElement in DOM')
} }
const tableSelection = getTableObserverFromTableElement(tableElement) const tableObserver = getTableObserverFromTableElement(tableElement)
if (tableSelection !== null) { if (tableObserver !== null) {
tableSelection.clearHighlight() tableObserver.clearHighlight()
} }
tableNode.markDirty() tableNode.markDirty()
@@ -374,12 +331,13 @@ function TableActionMenu({
throw new Error('Expected table row') throw new Error('Expected table row')
} }
const newStyle = tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.ROW
tableRow.getChildren().forEach((tableCell) => { tableRow.getChildren().forEach((tableCell) => {
if (!$isTableCellNode(tableCell)) { if (!$isTableCellNode(tableCell)) {
throw new Error('Expected table cell') throw new Error('Expected table cell')
} }
tableCell.toggleHeaderStyle(TableCellHeaderStates.ROW) tableCell.setHeaderStyles(newStyle, TableCellHeaderStates.ROW)
}) })
clearTableSelection() clearTableSelection()
@@ -400,6 +358,7 @@ function TableActionMenu({
throw new Error('Expected table cell to be inside of table row.') throw new Error('Expected table cell to be inside of table row.')
} }
const newStyle = tableCellNode.getHeaderStyles() ^ TableCellHeaderStates.COLUMN
for (let r = 0; r < tableRows.length; r++) { for (let r = 0; r < tableRows.length; r++) {
const tableRow = tableRows[r] const tableRow = tableRows[r]
@@ -419,7 +378,20 @@ function TableActionMenu({
throw new Error('Expected table cell') throw new Error('Expected table cell')
} }
tableCell.toggleHeaderStyle(TableCellHeaderStates.COLUMN) tableCell.setHeaderStyles(newStyle, TableCellHeaderStates.COLUMN)
}
clearTableSelection()
onClose()
})
}, [editor, tableCellNode, clearTableSelection, onClose])
const toggleRowStriping = useCallback(() => {
editor.update(() => {
if (tableCellNode.isAttached()) {
const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)
if (tableNode) {
tableNode.setRowStriping(!tableNode.getRowStriping())
}
} }
clearTableSelection() clearTableSelection()
@@ -470,6 +442,14 @@ function TableActionMenu({
</React.Fragment> </React.Fragment>
) : null} ) : null}
<button
className="item"
data-test-id="table-row-striping"
onClick={() => toggleRowStriping()}
type="button"
>
<span className="text">Toggle Row Striping</span>
</button>
<button <button
className="item" className="item"
data-test-id="table-insert-row-above" data-test-id="table-insert-row-above"

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import type { TableCellNode, TableDOMCell, TableMapType, TableMapValueType } from '@lexical/table' import type { TableCellNode, TableDOMCell, TableMapType } from '@lexical/table'
import type { LexicalEditor } from 'lexical' import type { LexicalEditor } from 'lexical'
import type { JSX, MouseEventHandler } from 'react' import type { JSX, MouseEventHandler } from 'react'
@@ -13,6 +13,7 @@ import {
$isTableCellNode, $isTableCellNode,
$isTableRowNode, $isTableRowNode,
getDOMCellFromTarget, getDOMCellFromTarget,
TableNode,
} from '@lexical/table' } from '@lexical/table'
import { calculateZoomLevel } from '@lexical/utils' import { calculateZoomLevel } from '@lexical/utils'
import { $getNearestNodeFromDOMNode } from 'lexical' import { $getNearestNodeFromDOMNode } from 'lexical'
@@ -32,7 +33,7 @@ type MousePosition = {
type MouseDraggingDirection = 'bottom' | 'right' type MouseDraggingDirection = 'bottom' | 'right'
const MIN_ROW_HEIGHT = 33 const MIN_ROW_HEIGHT = 33
const MIN_COLUMN_WIDTH = 50 const MIN_COLUMN_WIDTH = 92
function TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element { function TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {
const targetRef = useRef<HTMLElement | null>(null) const targetRef = useRef<HTMLElement | null>(null)
@@ -59,6 +60,20 @@ function TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {
return (event.buttons & 1) === 1 return (event.buttons & 1) === 1
} }
useEffect(() => {
return editor.registerNodeTransform(TableNode, (tableNode) => {
if (tableNode.getColWidths()) {
return tableNode
}
const numColumns = tableNode.getColumnCount()
const columnWidth = MIN_COLUMN_WIDTH
tableNode.setColWidths(Array(numColumns).fill(columnWidth))
return tableNode
})
}, [editor])
useEffect(() => { useEffect(() => {
const onMouseMove = (event: MouseEvent) => { const onMouseMove = (event: MouseEvent) => {
setTimeout(() => { setTimeout(() => {
@@ -119,13 +134,12 @@ function TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {
} }
const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => { const removeRootListener = editor.registerRootListener((rootElement, prevRootElement) => {
rootElement?.addEventListener('mousemove', onMouseMove)
rootElement?.addEventListener('mousedown', onMouseDown)
rootElement?.addEventListener('mouseup', onMouseUp)
prevRootElement?.removeEventListener('mousemove', onMouseMove) prevRootElement?.removeEventListener('mousemove', onMouseMove)
prevRootElement?.removeEventListener('mousedown', onMouseDown) prevRootElement?.removeEventListener('mousedown', onMouseDown)
prevRootElement?.removeEventListener('mouseup', onMouseUp) prevRootElement?.removeEventListener('mouseup', onMouseUp)
rootElement?.addEventListener('mousemove', onMouseMove)
rootElement?.addEventListener('mousedown', onMouseDown)
rootElement?.addEventListener('mouseup', onMouseUp)
}) })
return () => { return () => {
@@ -155,7 +169,8 @@ function TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {
const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode) const tableNode = $getTableNodeFromLexicalNodeOrThrow(tableCellNode)
const tableRowIndex = $getTableRowIndexFromTableCellNode(tableCellNode) const tableRowIndex =
$getTableRowIndexFromTableCellNode(tableCellNode) + tableCellNode.getRowSpan() - 1
const tableRows = tableNode.getChildren() const tableRows = tableNode.getChildren()
@@ -186,27 +201,6 @@ function TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {
[activeCell, editor], [activeCell, editor],
) )
const getCellNodeWidth = (
cell: TableCellNode,
activeEditor: LexicalEditor,
): number | undefined => {
const width = cell.getWidth()
if (width !== undefined) {
return width
}
const domCellNode = activeEditor.getElementByKey(cell.getKey())
if (domCellNode == null) {
return undefined
}
const computedStyle = getComputedStyle(domCellNode)
return (
domCellNode.clientWidth -
parseFloat(computedStyle.paddingLeft) -
parseFloat(computedStyle.paddingRight)
)
}
const getCellNodeHeight = ( const getCellNodeHeight = (
cell: TableCellNode, cell: TableCellNode,
activeEditor: LexicalEditor, activeEditor: LexicalEditor,
@@ -244,21 +238,18 @@ function TableCellResizer({ editor }: { editor: LexicalEditor }): JSX.Element {
throw new Error('TableCellResizer: Table column not found.') throw new Error('TableCellResizer: Table column not found.')
} }
for (let row = 0; row < tableMap.length; row++) { const colWidths = tableNode.getColWidths()
const cell: TableMapValueType = tableMap[row][columnIndex] if (!colWidths) {
if ( return
cell.startRow === row &&
(columnIndex === tableMap[row].length - 1 ||
tableMap[row][columnIndex].cell !== tableMap[row][columnIndex + 1].cell)
) {
const width = getCellNodeWidth(cell.cell, editor)
if (width === undefined) {
continue
}
const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH)
cell.cell.setWidth(newWidth)
}
} }
const width = colWidths[columnIndex]
if (width === undefined) {
return
}
const newColWidths = [...colWidths]
const newWidth = Math.max(width + widthChange, MIN_COLUMN_WIDTH)
newColWidths[columnIndex] = newWidth
tableNode.setColWidths(newColWidths)
}, },
{ tag: 'skip-scroll-into-view' }, { tag: 'skip-scroll-into-view' },
) )

View File

@@ -8,7 +8,7 @@
overflow-y: scroll; overflow-y: scroll;
overflow-x: scroll; overflow-x: scroll;
table-layout: fixed; table-layout: fixed;
width: max-content; width: fit-content;
margin: 0 25px 30px 0; margin: 0 25px 30px 0;
::selection { ::selection {
@@ -20,13 +20,16 @@
} }
} }
&__tableRowStriping tr:nth-child(even) {
background-color: var(--theme-elevation-100);
}
&__tableSelected { &__tableSelected {
outline: 2px solid rgb(60, 132, 244); outline: 2px solid rgb(60, 132, 244);
} }
&__tableCell { &__tableCell {
border: 1px solid var(--theme-elevation-200); border: 1px solid var(--theme-elevation-200);
min-width: 75px;
vertical-align: top; vertical-align: top;
text-align: start; text-align: start;
padding: 6px 8px; padding: 6px 8px;

View File

@@ -118,7 +118,7 @@ export const TablePlugin: PluginComponent = () => {
COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_EDITOR,
), ),
) )
}, [cellContext, editor, toggleModal]) }, [cellContext, drawerSlug, editor, toggleModal])
return ( return (
<React.Fragment> <React.Fragment>

View File

@@ -6,7 +6,6 @@ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext
import { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection.js' import { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection.js'
import { addClassNamesToElement, mergeRegister, removeClassNamesFromElement } from '@lexical/utils' import { addClassNamesToElement, mergeRegister, removeClassNamesFromElement } from '@lexical/utils'
import { import {
$getNodeByKey,
$getSelection, $getSelection,
$isNodeSelection, $isNodeSelection,
CLICK_COMMAND, CLICK_COMMAND,
@@ -31,17 +30,20 @@ export function HorizontalRuleComponent({ nodeKey }: { nodeKey: NodeKey }) {
const $onDelete = useCallback( const $onDelete = useCallback(
(event: KeyboardEvent) => { (event: KeyboardEvent) => {
if (isSelected && $isNodeSelection($getSelection())) { const deleteSelection = $getSelection()
if (isSelected && $isNodeSelection(deleteSelection)) {
event.preventDefault() event.preventDefault()
const node = $getNodeByKey(nodeKey) editor.update(() => {
if ($isHorizontalRuleNode(node)) { deleteSelection.getNodes().forEach((node) => {
node.remove() if ($isHorizontalRuleNode(node)) {
return true node.remove()
} }
})
})
} }
return false return false
}, },
[isSelected, nodeKey], [editor, isSelected],
) )
useEffect(() => { useEffect(() => {

View File

@@ -99,18 +99,21 @@ const Component: React.FC<Props> = (props) => {
const $onDelete = useCallback( const $onDelete = useCallback(
(payload: KeyboardEvent) => { (payload: KeyboardEvent) => {
if (isSelected && $isNodeSelection($getSelection())) { const deleteSelection = $getSelection()
if (isSelected && $isNodeSelection(deleteSelection)) {
const event: KeyboardEvent = payload const event: KeyboardEvent = payload
event.preventDefault() event.preventDefault()
const node = $getNodeByKey(nodeKey!) editor.update(() => {
if ($isRelationshipNode(node)) { deleteSelection.getNodes().forEach((node) => {
node.remove() if ($isRelationshipNode(node)) {
return true node.remove()
} }
})
})
} }
return false return false
}, },
[isSelected, nodeKey], [editor, isSelected],
) )
const onClick = useCallback( const onClick = useCallback(
(payload: MouseEvent) => { (payload: MouseEvent) => {

View File

@@ -126,17 +126,20 @@ const Component: React.FC<ElementProps> = (props) => {
const $onDelete = useCallback( const $onDelete = useCallback(
(event: KeyboardEvent) => { (event: KeyboardEvent) => {
if (isSelected && $isNodeSelection($getSelection())) { const deleteSelection = $getSelection()
if (isSelected && $isNodeSelection(deleteSelection)) {
event.preventDefault() event.preventDefault()
const node = $getNodeByKey(nodeKey) editor.update(() => {
if ($isUploadNode(node)) { deleteSelection.getNodes().forEach((node) => {
node.remove() if ($isUploadNode(node)) {
return true node.remove()
} }
})
})
} }
return false return false
}, },
[isSelected, nodeKey], [editor, isSelected],
) )
useEffect(() => { useEffect(() => {

View File

@@ -61,7 +61,7 @@ export function lexicalEditor(props?: LexicalEditorProps): LexicalRichTextAdapte
'@lexical/selection', '@lexical/selection',
'@lexical/utils', '@lexical/utils',
], ],
targetVersion: '0.17.0', targetVersion: '0.18.0',
}, },
], ],
}) })

View File

@@ -92,6 +92,7 @@ export const LexicalEditorTheme: EditorThemeClasses = {
tableCellSelected: 'LexicalEditorTheme__tableCellSelected', tableCellSelected: 'LexicalEditorTheme__tableCellSelected',
tableCellSortedIndicator: 'LexicalEditorTheme__tableCellSortedIndicator', tableCellSortedIndicator: 'LexicalEditorTheme__tableCellSortedIndicator',
tableResizeRuler: 'LexicalEditorTheme__tableCellResizeRuler', tableResizeRuler: 'LexicalEditorTheme__tableCellResizeRuler',
tableRowStriping: 'LexicalEditorTheme__tableRowStriping',
tableSelected: 'LexicalEditorTheme__tableSelected', tableSelected: 'LexicalEditorTheme__tableSelected',
text: { text: {
bold: 'LexicalEditorTheme__textBold', bold: 'LexicalEditorTheme__textBold',

View File

@@ -1,11 +1,2 @@
'use client' 'use client'
import * as facelessUIImport from '@faceless-ui/scroll-info' export { ScrollInfoProvider, useScrollInfo } from '@faceless-ui/scroll-info'
const { ScrollInfoProvider } =
facelessUIImport && 'ScrollInfoProvider' in facelessUIImport
? facelessUIImport
: { ScrollInfoProvider: undefined }
const { useScrollInfo } =
facelessUIImport && 'useScrollInfo' in facelessUIImport
? facelessUIImport
: { useScrollInfo: undefined }
export { ScrollInfoProvider, useScrollInfo }

354
pnpm-lock.yaml generated
View File

@@ -1229,35 +1229,35 @@ importers:
specifier: 2.0.0-beta.0 specifier: 2.0.0-beta.0
version: 2.0.0-beta.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918) version: 2.0.0-beta.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)
'@lexical/headless': '@lexical/headless':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
'@lexical/link': '@lexical/link':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
'@lexical/list': '@lexical/list':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
'@lexical/mark': '@lexical/mark':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
'@lexical/markdown': '@lexical/markdown':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
'@lexical/react': '@lexical/react':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(yjs@13.6.18) version: 0.18.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(yjs@13.6.18)
'@lexical/rich-text': '@lexical/rich-text':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
'@lexical/selection': '@lexical/selection':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
'@lexical/table': '@lexical/table':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
'@lexical/utils': '@lexical/utils':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
'@payloadcms/next': '@payloadcms/next':
specifier: workspace:* specifier: workspace:*
version: link:../next version: link:../next
@@ -1280,8 +1280,8 @@ importers:
specifier: 1.0.3 specifier: 1.0.3
version: 1.0.3 version: 1.0.3
lexical: lexical:
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
react: react:
specifier: 19.0.0-rc-5dcb0097-20240918 specifier: 19.0.0-rc-5dcb0097-20240918
version: 19.0.0-rc-5dcb0097-20240918 version: 19.0.0-rc-5dcb0097-20240918
@@ -1311,8 +1311,8 @@ importers:
specifier: ^7.24.1 specifier: ^7.24.1
version: 7.24.7(@babel/core@7.25.2) version: 7.24.7(@babel/core@7.25.2)
'@lexical/eslint-plugin': '@lexical/eslint-plugin':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0(eslint@9.9.1(jiti@1.21.6)) version: 0.18.0(eslint@9.9.1(jiti@1.21.6))
'@payloadcms/eslint-config': '@payloadcms/eslint-config':
specifier: workspace:* specifier: workspace:*
version: link:../eslint-config version: link:../eslint-config
@@ -1643,11 +1643,11 @@ importers:
specifier: ^3.614.0 specifier: ^3.614.0
version: 3.629.0 version: 3.629.0
'@lexical/headless': '@lexical/headless':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
'@lexical/markdown': '@lexical/markdown':
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
'@payloadcms/db-mongodb': '@payloadcms/db-mongodb':
specifier: workspace:* specifier: workspace:*
version: link:../packages/db-mongodb version: link:../packages/db-mongodb
@@ -1781,8 +1781,8 @@ importers:
specifier: 4.0.0 specifier: 4.0.0
version: 4.0.0 version: 4.0.0
lexical: lexical:
specifier: 0.17.0 specifier: 0.18.0
version: 0.17.0 version: 0.18.0
next: next:
specifier: 15.0.0-canary.160 specifier: 15.0.0-canary.160
version: 15.0.0-canary.160(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4) version: 15.0.0-canary.160(@playwright/test@1.46.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-24ec0eb-20240918)(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(sass@1.77.4)
@@ -3594,82 +3594,82 @@ packages:
'@juggle/resize-observer@3.4.0': '@juggle/resize-observer@3.4.0':
resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
'@lexical/clipboard@0.17.0': '@lexical/clipboard@0.18.0':
resolution: {integrity: sha512-wYtC6VJhuSxUZc69VTU+vBgzB4HQqhve2hLrr3v+3tR2aimx3KnKphCCP1TexCntxpEnOTPXafEgpOW/EVQE+Q==} resolution: {integrity: sha512-ybc+hx14wj0n2ZjdOkLcZ02MRB3UprXjpLDXlByFIuVcZpUxVcp3NzA0UBPOKXYKvdt0bmgjnAsFWM5OSbwS0w==}
'@lexical/code@0.17.0': '@lexical/code@0.18.0':
resolution: {integrity: sha512-8zrgHzf27aYySfUVeSKw8YP/LkRlXHSwD03BKlkSZAb4HX/WC60SGmdXUhtyTIBucqe0pnuGsRYfR9euD0/tfw==} resolution: {integrity: sha512-VB8fRHIrB8QTqyZUvGBMVWP2tpKe3ArOjPdWAqgrS8MVFldqUhuTHcW+XJFkVxcEBYCXynNT29YRYtQhfQ+vDQ==}
'@lexical/devtools-core@0.17.0': '@lexical/devtools-core@0.18.0':
resolution: {integrity: sha512-0ftqWsoCb96oTc8Ok+uvjGAXZpsN9oc6ml3d46BdufdZyxHXC4qU3YVoPfLkgAHzH+4fQlNypu7u3Ym3dZ2rJg==} resolution: {integrity: sha512-gVgtEkLwGjz1frOmDpFJzDPFxPgAcC9n5ZaaZWHo5GLcptnQmkuLm1t+UInQWujXhFmcyJzfiqDaMJ8EIcb2Ww==}
peerDependencies: peerDependencies:
react: 19.0.0-rc-5dcb0097-20240918 react: 19.0.0-rc-5dcb0097-20240918
react-dom: 19.0.0-rc-5dcb0097-20240918 react-dom: 19.0.0-rc-5dcb0097-20240918
'@lexical/dragon@0.17.0': '@lexical/dragon@0.18.0':
resolution: {integrity: sha512-XSsrHVwhjBIVF9VN9MFm6Go8fquj5H/jlYuyNzemHq0tOli8NaoSovGc5q0LwXr88RPsuIt1jluazR7Q1+kxTQ==} resolution: {integrity: sha512-toD/y2/TgtG+eFVKXf65kDk/Mv02FwgmcGH18nyAabZnO1TLBaMYPkGFdTTZ8hVmQxqIu9nZuLWUbdIBMs8UWw==}
'@lexical/eslint-plugin@0.17.0': '@lexical/eslint-plugin@0.18.0':
resolution: {integrity: sha512-O6RyQBXAdi90jlthWwfOuxYG4zqzWkpNwsX1V6N8t5iH80Te04LsnfG+hIB/5V8rxm8WPkTjMrqAX3UEZy5Shg==} resolution: {integrity: sha512-i9tveFKOq6Bk5CFt7qoPJlxG16bbLApxfXevvs+PDfxiNCCTkcV/DB85rGAs6LMM0FMyEbIYbmaWpq0wOZ3FSA==}
peerDependencies: peerDependencies:
eslint: '>=7.31.0 || ^8.0.0' eslint: '>=7.31.0 || ^8.0.0'
'@lexical/hashtag@0.17.0': '@lexical/hashtag@0.18.0':
resolution: {integrity: sha512-E6nSoz9haB6JypQtYxG5OYr36AHgam/FBMu77OWNl1KsJbkP8nInm+P22QFsNnEvs4Hk6/0FJ5g42+lTEnGmIg==} resolution: {integrity: sha512-bm+Sv7keguVYbUY0ngd+iAv2Owd3dePzdVkzkmw9Al8GPXkE5ll8fjq6Xjw2u3OVhf+9pTnesIo/AS7H+h0exw==}
'@lexical/headless@0.17.0': '@lexical/headless@0.18.0':
resolution: {integrity: sha512-yKvXcq2F6S1lwDLcwv+bHht/al1LcFmidPT3rjISRxLX+/YjUcUT8MmvV773Du4piV4rFPbVlBPFBZfHJkDxXw==} resolution: {integrity: sha512-GPUL7rTSYer+/g37blFbJ5MXDPCgMf1wT87Wr+IF7PdUb1D68NwePQxFBBTWMlT/wjm4YU1Qzcv5Izxldif5YQ==}
'@lexical/history@0.17.0': '@lexical/history@0.18.0':
resolution: {integrity: sha512-SfeUKAXf9pZpqee9rMOTt33V0J0p/AS9TZLT9Un9dU6wAaHfv6NFax1ND0JoG1a9YkTc539mufxVLNjsNRc0ag==} resolution: {integrity: sha512-c87J4ke1Sae03coElJay2Ikac/4OcA2OmhtNbt2gAi/XBtcsP4mPuz1yZfZf9XIe+weekObgjinvZekQ2AFw0g==}
'@lexical/html@0.17.0': '@lexical/html@0.18.0':
resolution: {integrity: sha512-sI458CEP/j+Gd2YEo1+vTax31ZAjdq5jmRJMgSKxzKlkVYAUY9eH5u3Y3awPLwLVXJHiIopMX02GeZytibuTiw==} resolution: {integrity: sha512-8lhba1DFnnobXgYm4Rk5Gr2tZedD4Gl6A/NKCt7whO/CET63vT3UnK2ggcVVgtIJG530Cv0bdZoJbJu5DauI5w==}
'@lexical/link@0.17.0': '@lexical/link@0.18.0':
resolution: {integrity: sha512-Kux6yvPit6y0ksPpwimv3seVrXAsggkqB6oT6oAVBaDpYuygVEwNDqg/rCTtB3mHQ4eeuU33mdK7MSXZ34bZRQ==} resolution: {integrity: sha512-GCYcbNTSTwJk0lr+GMc8nn6Meq44BZs3QL2d1B0skpZAspd8yI53sRS6HDy5P+jW5P0dzyZr/XJAU4U+7zsEEg==}
'@lexical/list@0.17.0': '@lexical/list@0.18.0':
resolution: {integrity: sha512-anDuSUykTv+lqyCwl1m+sThrB15OKCa00Eo68/d2HQSHDD3KNWgSx709dcR17bD9oT204yOhMJbQGywuzcEyGQ==} resolution: {integrity: sha512-DEWs9Scbg3+STZeE2O0OoG8SWnKnxQccObBzyeHRjn4GAN6JA7lgcAzfrdgp0fNWTbMM/ku876MmXKGnqhvg9Q==}
'@lexical/mark@0.17.0': '@lexical/mark@0.18.0':
resolution: {integrity: sha512-Ynqh9KHXUcB9qLOTGC9s+bbWtawOwRStkeIeAugTqrwckyYWeDaePpyJ6IhBBJy1E1CfpiZn71NDeP+FuRjnXQ==} resolution: {integrity: sha512-QA4YWfTP5WWnCnoH/RmfcsSZyhhd7oeFWDpfP7S8Bbmhz6kiPwGcsVr+uRQBBT56AqEX167xX2rX8JR6FiYZqA==}
'@lexical/markdown@0.17.0': '@lexical/markdown@0.18.0':
resolution: {integrity: sha512-6IuJ2l5p/Ma+VBUIStIRXwTC01GEzx21gvqqywuqBUzAOiMr1oRM+DGsQgrzZrcjX+LzUlZ5ZgjuWtK8XKVAZw==} resolution: {integrity: sha512-uSWwcK8eJw5C+waEhU5WoX8W+JxNZbKuFnZwsn5nsp+iQgqMj4qY6g0yJub4sq8vvh6jjl4vVXhXTq2up9aykw==}
'@lexical/offset@0.17.0': '@lexical/offset@0.18.0':
resolution: {integrity: sha512-onE6SD2mIAwBLTT5v5fVBVtRg/NpQj+o10vTWJ1ImvEUERpSoCyHMTy3IMoSMuCRwuOG9C0cFEret2u+QS8Icw==} resolution: {integrity: sha512-KGlboyLSxQAH5PMOlJmyvHlbYXZneVnKiHpfyBV5IUX5kuyB/eZbQEYcJP9saekfQ5Xb1FWXWmsZEo+sWtrrZA==}
'@lexical/overflow@0.17.0': '@lexical/overflow@0.18.0':
resolution: {integrity: sha512-dh+nQAmeobKvZFodWyzNh1ZjX043Patk/1Lwct9XmtAGMUdXL+tB0bbguWVcDfY8OYu1CTQGfbdq2oMEJYzwsg==} resolution: {integrity: sha512-3ATTwttVgZtVLq60ZUWbpbXBbpuMa3PZD5CxSP3nulviL+2I4phvacV4WUN+8wMeq+PGmuarl+cYfrFL02ii3g==}
'@lexical/plain-text@0.17.0': '@lexical/plain-text@0.18.0':
resolution: {integrity: sha512-AEk+3ttbRyRi7m9UbU1CdLUtGsXh4FFZkBC12twV3U82lZHOdHocLlTutP+lcbYlGjeq6UF43NxOSGzsYEunsA==} resolution: {integrity: sha512-L6yQpiwW0ZacY1oNwvRBxSuW2TZaUcveZLheJc8JzGcZoVxzII/CAbLZG8691VbNuKsbOURiNXZIsgwujKmo4Q==}
'@lexical/react@0.17.0': '@lexical/react@0.18.0':
resolution: {integrity: sha512-HZ3joq+5g2++2vo/6scTd60Y2bsu8ya8EUdopyudnmGZGKAcAPue9pLOlBaEpsYZ7vqTuGjiPgtEBfFzDy9rlg==} resolution: {integrity: sha512-DLvIbTsjvFIFqm+9zvAjEwuZHAbSxzZf1AGqf1lLctlL/Ran0f+8EZOv5jttELTe7xISZ2+xSXTLRfyxhNwGXQ==}
peerDependencies: peerDependencies:
react: 19.0.0-rc-5dcb0097-20240918 react: 19.0.0-rc-5dcb0097-20240918
react-dom: 19.0.0-rc-5dcb0097-20240918 react-dom: 19.0.0-rc-5dcb0097-20240918
'@lexical/rich-text@0.17.0': '@lexical/rich-text@0.18.0':
resolution: {integrity: sha512-XJc8gQBSwppCkESQaNcGtyTaPXZaeCQDcUVpnDjDK0vM/ZZN8TErxbujwbSqA3kO2dBds9N8WxNboSwuncMBcQ==} resolution: {integrity: sha512-xMANCB7WueMsmWK8qxik5FZN4ApyaHWHQILS9r4FTbdv/DlNepsR7Pt8kg2317xZ56NAueQLIdyyKYXG1nBrHw==}
'@lexical/selection@0.17.0': '@lexical/selection@0.18.0':
resolution: {integrity: sha512-UTjlvyhFY/lmHtBaIaVRwYnRfO9gR4I32+PT7vHQr4v3VfcgS63YEGSgEZy3Gh1pfeJqaZATN58+jCuMAQXlWQ==} resolution: {integrity: sha512-mJoMhmxeZLfM9K2JMYETs9u179IkHQUlgtYG5GZJHjKx2iUn+9KvJ9RVssq+Lusi7C/N42wWPGNHDPdUvFtxXg==}
'@lexical/table@0.17.0': '@lexical/table@0.18.0':
resolution: {integrity: sha512-RQF7IG0rGL2/bPaPFUIMgDA3QMdDflvXSnE7Udgbj9yMqSKhYkaERVfNyoLckDUSuusGJd6XV+qum6JWn0nSNA==} resolution: {integrity: sha512-TeTAnuFAAgVjm1QE8adRB3GFWN+DUUiS4vzGq+ynPRCtNdpmW27NmTkRMyxKsetUtt7nIFfj4DvLvor4RwqIpA==}
'@lexical/text@0.17.0': '@lexical/text@0.18.0':
resolution: {integrity: sha512-kFH0V6yjW8YswmoY7vHT4zHFDflGfamuUxTPHROpdnq/JMjHeaVwtmFBdrP0gknaC8XMRXdr3EsemQ7cbOoDPA==} resolution: {integrity: sha512-MTHSBeq3K0+lqSsP5oysBMnY4tPVhB8kAa2xBnEc3dYgXFxEEvJwZahbHNX93EPObtJkxXfUuI63Al4G3lYK8A==}
'@lexical/utils@0.17.0': '@lexical/utils@0.18.0':
resolution: {integrity: sha512-B/n0rRGDmdMrqi2qnprLt6SntC6jb4JItLmPl8zDDdg7/HxMdLq3F93vogeiXQJn0mlNqgiENWHvLAy5K2C2uQ==} resolution: {integrity: sha512-4s9dVpBZjqIaA/1q2GtfWFjKsv2Wqhjer0Zw2mcl1TIVN0zreXxcTKN316QppAWmSQJxVGvkWHjjaZJwl6/TSw==}
'@lexical/yjs@0.17.0': '@lexical/yjs@0.18.0':
resolution: {integrity: sha512-xJv3frcK/jskssLbzdY4yfBaM7+LWaZD4YjYkJ/bvRDTey2w+McF+SvsJ/yBA8YF1oaL3rT+0aIQJ7rfH+AxjA==} resolution: {integrity: sha512-rl7Rl9XIb3ygQEEHOFtACdXs3BE+UUUmdyNqB6kK9A6IRGz+w4Azp+qzt8It/t+c0oaSYHpAtcLNXg1amJz+kA==}
peerDependencies: peerDependencies:
yjs: '>=13.5.22' yjs: '>=13.5.22'
@@ -7144,8 +7144,8 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
lexical@0.17.0: lexical@0.18.0:
resolution: {integrity: sha512-cCFmANO5rIf34NF0go/hxp5S3V5Z8G2Rsa1FJy50qF2WM5EJNJ/MqN75TApjfgMkfrbO6gau3X12nCqwsT7aDg==} resolution: {integrity: sha512-3K/B0RpzjoW+Wj2E455wWXxkqxqK8UgdIiuqkOqdOsoSSo5mCkHOU6eVw7Nlmlr1MFvAMzGmz4RPn8NZaLQ2Mw==}
lib0@0.2.97: lib0@0.2.97:
resolution: {integrity: sha512-Q4d1ekgvufi9FiHkkL46AhecfNjznSL9MRNoJRQ76gBHS9OqU2ArfQK0FvBpuxgWeJeNI0LVgAYMIpsGeX4gYg==} resolution: {integrity: sha512-Q4d1ekgvufi9FiHkkL46AhecfNjznSL9MRNoJRQ76gBHS9OqU2ArfQK0FvBpuxgWeJeNI0LVgAYMIpsGeX4gYg==}
@@ -11999,157 +11999,159 @@ snapshots:
'@juggle/resize-observer@3.4.0': {} '@juggle/resize-observer@3.4.0': {}
'@lexical/clipboard@0.17.0': '@lexical/clipboard@0.18.0':
dependencies: dependencies:
'@lexical/html': 0.17.0 '@lexical/html': 0.18.0
'@lexical/list': 0.17.0 '@lexical/list': 0.18.0
'@lexical/selection': 0.17.0 '@lexical/selection': 0.18.0
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
'@lexical/code@0.17.0': '@lexical/code@0.18.0':
dependencies: dependencies:
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
prismjs: 1.29.0 prismjs: 1.29.0
'@lexical/devtools-core@0.17.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)': '@lexical/devtools-core@0.18.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)':
dependencies: dependencies:
'@lexical/html': 0.17.0 '@lexical/html': 0.18.0
'@lexical/link': 0.17.0 '@lexical/link': 0.18.0
'@lexical/mark': 0.17.0 '@lexical/mark': 0.18.0
'@lexical/table': 0.17.0 '@lexical/table': 0.18.0
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
react: 19.0.0-rc-5dcb0097-20240918 react: 19.0.0-rc-5dcb0097-20240918
react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918) react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918)
'@lexical/dragon@0.17.0': '@lexical/dragon@0.18.0':
dependencies: dependencies:
lexical: 0.17.0 lexical: 0.18.0
'@lexical/eslint-plugin@0.17.0(eslint@9.9.1(jiti@1.21.6))': '@lexical/eslint-plugin@0.18.0(eslint@9.9.1(jiti@1.21.6))':
dependencies: dependencies:
eslint: 9.9.1(jiti@1.21.6) eslint: 9.9.1(jiti@1.21.6)
'@lexical/hashtag@0.17.0': '@lexical/hashtag@0.18.0':
dependencies: dependencies:
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
'@lexical/headless@0.17.0': '@lexical/headless@0.18.0':
dependencies: dependencies:
lexical: 0.17.0 lexical: 0.18.0
'@lexical/history@0.17.0': '@lexical/history@0.18.0':
dependencies: dependencies:
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
'@lexical/html@0.17.0': '@lexical/html@0.18.0':
dependencies: dependencies:
'@lexical/selection': 0.17.0 '@lexical/selection': 0.18.0
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
'@lexical/link@0.17.0': '@lexical/link@0.18.0':
dependencies: dependencies:
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
'@lexical/list@0.17.0': '@lexical/list@0.18.0':
dependencies: dependencies:
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
'@lexical/mark@0.17.0': '@lexical/mark@0.18.0':
dependencies: dependencies:
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
'@lexical/markdown@0.17.0': '@lexical/markdown@0.18.0':
dependencies: dependencies:
'@lexical/code': 0.17.0 '@lexical/code': 0.18.0
'@lexical/link': 0.17.0 '@lexical/link': 0.18.0
'@lexical/list': 0.17.0 '@lexical/list': 0.18.0
'@lexical/rich-text': 0.17.0 '@lexical/rich-text': 0.18.0
'@lexical/text': 0.17.0 '@lexical/text': 0.18.0
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
'@lexical/offset@0.17.0': '@lexical/offset@0.18.0':
dependencies: dependencies:
lexical: 0.17.0 lexical: 0.18.0
'@lexical/overflow@0.17.0': '@lexical/overflow@0.18.0':
dependencies: dependencies:
lexical: 0.17.0 lexical: 0.18.0
'@lexical/plain-text@0.17.0': '@lexical/plain-text@0.18.0':
dependencies: dependencies:
'@lexical/clipboard': 0.17.0 '@lexical/clipboard': 0.18.0
'@lexical/selection': 0.17.0 '@lexical/selection': 0.18.0
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
'@lexical/react@0.17.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(yjs@13.6.18)': '@lexical/react@0.18.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)(yjs@13.6.18)':
dependencies: dependencies:
'@lexical/clipboard': 0.17.0 '@lexical/clipboard': 0.18.0
'@lexical/code': 0.17.0 '@lexical/code': 0.18.0
'@lexical/devtools-core': 0.17.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918) '@lexical/devtools-core': 0.18.0(react-dom@19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918))(react@19.0.0-rc-5dcb0097-20240918)
'@lexical/dragon': 0.17.0 '@lexical/dragon': 0.18.0
'@lexical/hashtag': 0.17.0 '@lexical/hashtag': 0.18.0
'@lexical/history': 0.17.0 '@lexical/history': 0.18.0
'@lexical/link': 0.17.0 '@lexical/link': 0.18.0
'@lexical/list': 0.17.0 '@lexical/list': 0.18.0
'@lexical/mark': 0.17.0 '@lexical/mark': 0.18.0
'@lexical/markdown': 0.17.0 '@lexical/markdown': 0.18.0
'@lexical/overflow': 0.17.0 '@lexical/overflow': 0.18.0
'@lexical/plain-text': 0.17.0 '@lexical/plain-text': 0.18.0
'@lexical/rich-text': 0.17.0 '@lexical/rich-text': 0.18.0
'@lexical/selection': 0.17.0 '@lexical/selection': 0.18.0
'@lexical/table': 0.17.0 '@lexical/table': 0.18.0
'@lexical/text': 0.17.0 '@lexical/text': 0.18.0
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
'@lexical/yjs': 0.17.0(yjs@13.6.18) '@lexical/yjs': 0.18.0(yjs@13.6.18)
lexical: 0.17.0 lexical: 0.18.0
react: 19.0.0-rc-5dcb0097-20240918 react: 19.0.0-rc-5dcb0097-20240918
react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918) react-dom: 19.0.0-rc-5dcb0097-20240918(react@19.0.0-rc-5dcb0097-20240918)
react-error-boundary: 3.1.4(react@19.0.0-rc-5dcb0097-20240918) react-error-boundary: 3.1.4(react@19.0.0-rc-5dcb0097-20240918)
transitivePeerDependencies: transitivePeerDependencies:
- yjs - yjs
'@lexical/rich-text@0.17.0': '@lexical/rich-text@0.18.0':
dependencies: dependencies:
'@lexical/clipboard': 0.17.0 '@lexical/clipboard': 0.18.0
'@lexical/selection': 0.17.0 '@lexical/selection': 0.18.0
'@lexical/utils': 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
'@lexical/selection@0.17.0': '@lexical/selection@0.18.0':
dependencies: dependencies:
lexical: 0.17.0 lexical: 0.18.0
'@lexical/table@0.17.0': '@lexical/table@0.18.0':
dependencies: dependencies:
'@lexical/utils': 0.17.0 '@lexical/clipboard': 0.18.0
lexical: 0.17.0 '@lexical/utils': 0.18.0
lexical: 0.18.0
'@lexical/text@0.17.0': '@lexical/text@0.18.0':
dependencies: dependencies:
lexical: 0.17.0 lexical: 0.18.0
'@lexical/utils@0.17.0': '@lexical/utils@0.18.0':
dependencies: dependencies:
'@lexical/list': 0.17.0 '@lexical/list': 0.18.0
'@lexical/selection': 0.17.0 '@lexical/selection': 0.18.0
'@lexical/table': 0.17.0 '@lexical/table': 0.18.0
lexical: 0.17.0 lexical: 0.18.0
'@lexical/yjs@0.17.0(yjs@13.6.18)': '@lexical/yjs@0.18.0(yjs@13.6.18)':
dependencies: dependencies:
'@lexical/offset': 0.17.0 '@lexical/offset': 0.18.0
lexical: 0.17.0 '@lexical/selection': 0.18.0
lexical: 0.18.0
yjs: 13.6.18 yjs: 13.6.18
'@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4)': '@libsql/client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.4)':
@@ -16409,7 +16411,7 @@ snapshots:
prelude-ls: 1.2.1 prelude-ls: 1.2.1
type-check: 0.4.0 type-check: 0.4.0
lexical@0.17.0: {} lexical@0.18.0: {}
lib0@0.2.97: lib0@0.2.97:
dependencies: dependencies:

View File

@@ -39,7 +39,7 @@
"geist": "^1.3.0", "geist": "^1.3.0",
"graphql": "^16.8.2", "graphql": "^16.8.2",
"jsonwebtoken": "9.0.2", "jsonwebtoken": "9.0.2",
"lexical": "0.17.0", "lexical": "0.18.0",
"lucide-react": "^0.378.0", "lucide-react": "^0.378.0",
"next": "15.0.0-canary.160", "next": "15.0.0-canary.160",
"payload": "beta", "payload": "beta",

View File

@@ -23,8 +23,8 @@
}, },
"devDependencies": { "devDependencies": {
"@aws-sdk/client-s3": "^3.614.0", "@aws-sdk/client-s3": "^3.614.0",
"@lexical/headless": "0.17.0", "@lexical/headless": "0.18.0",
"@lexical/markdown": "0.17.0", "@lexical/markdown": "0.18.0",
"@payloadcms/db-mongodb": "workspace:*", "@payloadcms/db-mongodb": "workspace:*",
"@payloadcms/db-postgres": "workspace:*", "@payloadcms/db-postgres": "workspace:*",
"@payloadcms/db-sqlite": "workspace:*", "@payloadcms/db-sqlite": "workspace:*",
@@ -69,7 +69,7 @@
"file-type": "19.3.0", "file-type": "19.3.0",
"http-status": "1.6.2", "http-status": "1.6.2",
"jwt-decode": "4.0.0", "jwt-decode": "4.0.0",
"lexical": "0.17.0", "lexical": "0.18.0",
"next": "15.0.0-canary.160", "next": "15.0.0-canary.160",
"payload": "workspace:*", "payload": "workspace:*",
"qs-esm": "7.0.2", "qs-esm": "7.0.2",