import type { CursorRenderer, CursorRenderOpts, PresenceUser, SelectionRenderer } from './view'; import type { PresenceManager } from '@jsonjoy.com/collaborative-presence/lib/PresenceManager'; import type { StrApi } from 'json-joy/lib/json-crdt'; import * as monaco from 'monaco-editor'; /** Accessor for the JSON CRDT `str` node — return `null` / `undefined` when * the node is not yet available (e.g. loading state). */ export type StrRef = () => StrApi | null | undefined; export interface MonacoPresenceOpts extends CursorRenderOpts { /** The Monaco editor instance. */ editor: monaco.editor.IStandaloneCodeEditor; /** The shared presence store. */ manager: PresenceManager; /** Accessor for the JSON CRDT `str` node. */ str: StrRef; /** Custom caret DOM factory. When omitted, the default label-style cursor * from `view.ts` is used. */ renderCursor?: CursorRenderer; /** Custom selection class name factory. When omitted, a semi-transparent * background is used via dynamically injected `