33 lines
996 B
TypeScript
33 lines
996 B
TypeScript
|
import { ySyncPlugin, yCursorPlugin, yUndoPlugin } from 'y-prosemirror'
|
||
|
import type { ProseMirrorExtension } from '../state'
|
||
|
import type { YOptions } from '../context'
|
||
|
|
||
|
export const cursorBuilder = (user: any): HTMLElement => {
|
||
|
const cursor = document.createElement('span')
|
||
|
|
||
|
cursor.classList.add('ProseMirror-yjs-cursor')
|
||
|
cursor.setAttribute('style', `border-color: ${user.background}`)
|
||
|
const userDiv = document.createElement('span')
|
||
|
|
||
|
userDiv.setAttribute('style', `background-color: ${user.background}; color: ${user.foreground}`)
|
||
|
userDiv.textContent = user.name
|
||
|
cursor.append(userDiv)
|
||
|
|
||
|
return cursor
|
||
|
}
|
||
|
|
||
|
export default (y: YOptions): ProseMirrorExtension => ({
|
||
|
plugins: (prev) =>
|
||
|
y
|
||
|
? [
|
||
|
...prev,
|
||
|
ySyncPlugin(y.type),
|
||
|
// FIXME
|
||
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||
|
// @ts-ignore
|
||
|
yCursorPlugin(y.provider.awareness, { cursorBuilder }),
|
||
|
yUndoPlugin()
|
||
|
]
|
||
|
: prev
|
||
|
})
|