{"version":3,"file":"y-monaco.cjs","sources":["../src/y-monaco.js"],"sourcesContent":["import * as Y from 'yjs'\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js'\nimport * as error from 'lib0/error'\nimport { createMutex } from 'lib0/mutex'\nimport { Awareness } from 'y-protocols/awareness' // eslint-disable-line\n\nclass RelativeSelection {\n  /**\n   * @param {Y.RelativePosition} start\n   * @param {Y.RelativePosition} end\n   * @param {monaco.SelectionDirection} direction\n   */\n  constructor (start, end, direction) {\n    this.start = start\n    this.end = end\n    this.direction = direction\n  }\n}\n\n/**\n * @param {monaco.editor.IStandaloneCodeEditor} editor\n * @param {monaco.editor.ITextModel} monacoModel\n * @param {Y.Text} type\n */\nconst createRelativeSelection = (editor, monacoModel, type) => {\n  const sel = editor.getSelection()\n  if (sel !== null) {\n    const startPos = sel.getStartPosition()\n    const endPos = sel.getEndPosition()\n    const start = Y.createRelativePositionFromTypeIndex(type, monacoModel.getOffsetAt(startPos))\n    const end = Y.createRelativePositionFromTypeIndex(type, monacoModel.getOffsetAt(endPos))\n    return new RelativeSelection(start, end, sel.getDirection())\n  }\n  return null\n}\n\n/**\n * @param {monaco.editor.IEditor} editor\n * @param {Y.Text} type\n * @param {RelativeSelection} relSel\n * @param {Y.Doc} doc\n * @return {null|monaco.Selection}\n */\nconst createMonacoSelectionFromRelativeSelection = (editor, type, relSel, doc) => {\n  const start = Y.createAbsolutePositionFromRelativePosition(relSel.start, doc)\n  const end = Y.createAbsolutePositionFromRelativePosition(relSel.end, doc)\n  if (start !== null && end !== null && start.type === type && end.type === type) {\n    const model = /** @type {monaco.editor.ITextModel} */ (editor.getModel())\n    const startPos = model.getPositionAt(start.index)\n    const endPos = model.getPositionAt(end.index)\n    return monaco.Selection.createWithDirection(startPos.lineNumber, startPos.column, endPos.lineNumber, endPos.column, relSel.direction)\n  }\n  return null\n}\n\nexport class MonacoBinding {\n  /**\n   * @param {Y.Text} ytext\n   * @param {monaco.editor.ITextModel} monacoModel\n   * @param {Set<monaco.editor.IStandaloneCodeEditor>} [editors]\n   * @param {Awareness?} [awareness]\n   */\n  constructor (ytext, monacoModel, editors = new Set(), awareness = null) {\n    this.doc = /** @type {Y.Doc} */ (ytext.doc)\n    this.ytext = ytext\n    this.monacoModel = monacoModel\n    this.editors = editors\n    this.mux = createMutex()\n    /**\n     * @type {Map<monaco.editor.IStandaloneCodeEditor, RelativeSelection>}\n     */\n    this._savedSelections = new Map()\n    this._beforeTransaction = () => {\n      this.mux(() => {\n        this._savedSelections = new Map()\n        editors.forEach(editor => {\n          if (editor.getModel() === monacoModel) {\n            const rsel = createRelativeSelection(editor, monacoModel, ytext)\n            if (rsel !== null) {\n              this._savedSelections.set(editor, rsel)\n            }\n          }\n        })\n      })\n    }\n    this.doc.on('beforeAllTransactions', this._beforeTransaction)\n    this._decorations = new Map()\n    this._rerenderDecorations = () => {\n      editors.forEach(editor => {\n        if (awareness && editor.getModel() === monacoModel) {\n          // render decorations\n          const currentDecorations = this._decorations.get(editor) || []\n          /**\n           * @type {Array<monaco.editor.IModelDeltaDecoration>}\n           */\n          const newDecorations = []\n          awareness.getStates().forEach((state, clientID) => {\n            if (clientID !== this.doc.clientID && state.selection != null && state.selection.anchor != null && state.selection.head != null) {\n              const anchorAbs = Y.createAbsolutePositionFromRelativePosition(state.selection.anchor, this.doc)\n              const headAbs = Y.createAbsolutePositionFromRelativePosition(state.selection.head, this.doc)\n              if (anchorAbs !== null && headAbs !== null && anchorAbs.type === ytext && headAbs.type === ytext) {\n                let start, end, afterContentClassName, beforeContentClassName\n                if (anchorAbs.index < headAbs.index) {\n                  start = monacoModel.getPositionAt(anchorAbs.index)\n                  end = monacoModel.getPositionAt(headAbs.index)\n                  afterContentClassName = 'yRemoteSelectionHead yRemoteSelectionHead-' + clientID\n                  beforeContentClassName = null\n                } else {\n                  start = monacoModel.getPositionAt(headAbs.index)\n                  end = monacoModel.getPositionAt(anchorAbs.index)\n                  afterContentClassName = null\n                  beforeContentClassName = 'yRemoteSelectionHead yRemoteSelectionHead-' + clientID\n                }\n                newDecorations.push({\n                  range: new monaco.Range(start.lineNumber, start.column, end.lineNumber, end.column),\n                  options: {\n                    className: 'yRemoteSelection yRemoteSelection-' + clientID,\n                    afterContentClassName,\n                    beforeContentClassName\n                  }\n                })\n              }\n            }\n          })\n          this._decorations.set(editor, editor.deltaDecorations(currentDecorations, newDecorations))\n        } else {\n          // ignore decorations\n          this._decorations.delete(editor)\n        }\n      })\n    }\n    /**\n     * @param {Y.YTextEvent} event\n     */\n    this._ytextObserver = event => {\n      this.mux(() => {\n        let index = 0\n        event.delta.forEach(op => {\n          if (op.retain !== undefined) {\n            index += op.retain\n          } else if (op.insert !== undefined) {\n            const pos = monacoModel.getPositionAt(index)\n            const range = new monaco.Selection(pos.lineNumber, pos.column, pos.lineNumber, pos.column)\n            const insert = /** @type {string} */ (op.insert)\n            monacoModel.applyEdits([{ range, text: insert }])\n            index += insert.length\n          } else if (op.delete !== undefined) {\n            const pos = monacoModel.getPositionAt(index)\n            const endPos = monacoModel.getPositionAt(index + op.delete)\n            const range = new monaco.Selection(pos.lineNumber, pos.column, endPos.lineNumber, endPos.column)\n            monacoModel.applyEdits([{ range, text: '' }])\n          } else {\n            throw error.unexpectedCase()\n          }\n        })\n        this._savedSelections.forEach((rsel, editor) => {\n          const sel = createMonacoSelectionFromRelativeSelection(editor, ytext, rsel, this.doc)\n          if (sel !== null) {\n            editor.setSelection(sel)\n          }\n        })\n      })\n      this._rerenderDecorations()\n    }\n    ytext.observe(this._ytextObserver)\n    {\n      const ytextValue = ytext.toString()\n      if (monacoModel.getValue() !== ytextValue) {\n        monacoModel.setValue(ytextValue)\n      }\n    }\n    this._monacoChangeHandler = monacoModel.onDidChangeContent(event => {\n      // apply changes from right to left\n      this.mux(() => {\n        this.doc.transact(() => {\n          event.changes.sort((change1, change2) => change2.rangeOffset - change1.rangeOffset).forEach(change => {\n            ytext.delete(change.rangeOffset, change.rangeLength)\n            ytext.insert(change.rangeOffset, change.text)\n          })\n        }, this)\n      })\n    })\n    this._monacoDisposeHandler = monacoModel.onWillDispose(() => {\n      this.destroy()\n    })\n    if (awareness) {\n      editors.forEach(editor => {\n        editor.onDidChangeCursorSelection(() => {\n          if (editor.getModel() === monacoModel) {\n            const sel = editor.getSelection()\n            if (sel === null) {\n              return\n            }\n            let anchor = monacoModel.getOffsetAt(sel.getStartPosition())\n            let head = monacoModel.getOffsetAt(sel.getEndPosition())\n            if (sel.getDirection() === monaco.SelectionDirection.RTL) {\n              const tmp = anchor\n              anchor = head\n              head = tmp\n            }\n            awareness.setLocalStateField('selection', {\n              anchor: Y.createRelativePositionFromTypeIndex(ytext, anchor),\n              head: Y.createRelativePositionFromTypeIndex(ytext, head)\n            })\n          }\n        })\n        awareness.on('change', this._rerenderDecorations)\n      })\n      this.awareness = awareness\n    }\n  }\n\n  destroy () {\n    this._monacoChangeHandler.dispose()\n    this._monacoDisposeHandler.dispose()\n    this.ytext.unobserve(this._ytextObserver)\n    this.doc.off('beforeAllTransactions', this._beforeTransaction)\n    if (this.awareness) {\n      this.awareness.off('change', this._rerenderDecorations)\n    }\n  }\n}\n"],"names":["Y","monaco","createMutex","error"],"mappings":"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"}