Skip to main content
Glama
y-codemirror.cjs.map38.9 kB
{"version":3,"file":"y-codemirror.cjs","sources":["../src/y-range.js","../src/y-sync.js","../src/y-remote-selections.js","../src/y-undomanager.js","../src/index.js"],"sourcesContent":["import * as Y from 'yjs'\n\n/**\n * Defines a range on text using relative positions that can be transformed back to\n * absolute positions. (https://docs.yjs.dev/api/relative-positions)\n */\nexport class YRange {\n /**\n * @param {Y.RelativePosition} yanchor\n * @param {Y.RelativePosition} yhead\n */\n constructor (yanchor, yhead) {\n this.yanchor = yanchor\n this.yhead = yhead\n }\n\n /**\n * @returns {any}\n */\n toJSON () {\n return {\n yanchor: Y.relativePositionToJSON(this.yanchor),\n yhead: Y.relativePositionToJSON(this.yhead)\n }\n }\n\n /**\n * @param {any} json\n * @return {YRange}\n */\n static fromJSON (json) {\n return new YRange(Y.createRelativePositionFromJSON(json.yanchor), Y.createRelativePositionFromJSON(json.yhead))\n }\n}\n","\nimport * as Y from 'yjs'\nimport * as cmState from '@codemirror/state' // eslint-disable-line\nimport * as cmView from '@codemirror/view' // eslint-disable-line\nimport { YRange } from './y-range.js'\n\nexport class YSyncConfig {\n constructor (ytext, awareness, getUserInfo) {\n this.ytext = ytext\n this.awareness = awareness\n this.undoManager = new Y.UndoManager(ytext)\n this.getUserInfo = getUserInfo\n }\n\n /**\n * Helper function to transform an absolute index position to a Yjs-based relative position\n * (https://docs.yjs.dev/api/relative-positions).\n *\n * A relative position can be transformed back to an absolute position even after the document has changed. The position is\n * automatically adapted. This does not require any position transformations. Relative positions are computed based on\n * the internal Yjs document model. Peers that share content through Yjs are guaranteed that their positions will always\n * synced up when using relatve positions.\n *\n * ```js\n * import { ySyncFacet } from 'y-codemirror'\n *\n * ..\n * const ysync = view.state.facet(ySyncFacet)\n * // transform an absolute index position to a ypos\n * const ypos = ysync.getYPos(3)\n * // transform the ypos back to an absolute position\n * ysync.fromYPos(ypos) // => 3\n * ```\n *\n * It cannot be guaranteed that absolute index positions can be synced up between peers.\n * This might lead to undesired behavior when implementing features that require that all peers see the\n * same marked range (e.g. a comment plugin).\n *\n * @param {number} pos\n * @param {number} [assoc]\n */\n toYPos (pos, assoc = 0) {\n return Y.createRelativePositionFromTypeIndex(this.ytext, pos, assoc)\n }\n\n /**\n * @param {Y.RelativePosition | Object} rpos\n */\n fromYPos (rpos) {\n const pos = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(rpos), this.ytext.doc)\n if (pos == null || pos.type !== this.ytext) {\n throw new Error('[y-codemirror] The position you want to retrieve was created by a different document')\n }\n return {\n pos: pos.index,\n assoc: pos.assoc\n }\n }\n\n /**\n * @param {cmState.SelectionRange} range\n * @return {YRange}\n */\n toYRange (range) {\n const assoc = range.assoc\n const yanchor = this.toYPos(range.anchor, assoc)\n const yhead = this.toYPos(range.head, assoc)\n return new YRange(yanchor, yhead)\n }\n\n /**\n * @param {YRange} yrange\n */\n fromYRange (yrange) {\n const anchor = this.fromYPos(yrange.yanchor)\n const head = this.fromYPos(yrange.yhead)\n if (anchor.pos === head.pos) {\n return cmState.EditorSelection.cursor(head.pos, head.assoc)\n }\n return cmState.EditorSelection.range(anchor.pos, head.pos)\n }\n}\n\n/**\n * @type {cmState.Facet<YSyncConfig, YSyncConfig>}\n */\nexport const ySyncFacet = cmState.Facet.define({\n combine (inputs) {\n return inputs[inputs.length - 1]\n }\n})\n\n/**\n * @type {cmState.AnnotationType<YSyncConfig>}\n */\nexport const ySyncAnnotation = cmState.Annotation.define()\n\n/**\n * @extends {PluginValue}\n */\nclass YSyncPluginValue {\n /**\n * @param {cmView.EditorView} view\n */\n constructor (view) {\n this.view = view\n this.conf = view.state.facet(ySyncFacet)\n this._observer = (event, tr) => {\n if (tr.origin !== this.conf) {\n const delta = event.delta\n const changes = []\n let pos = 0\n for (let i = 0; i < delta.length; i++) {\n const d = delta[i]\n if (d.insert != null) {\n changes.push({ from: pos, to: pos, insert: d.insert })\n } else if (d.delete != null) {\n changes.push({ from: pos, to: pos + d.delete, insert: '' })\n pos += d.delete\n } else {\n pos += d.retain\n }\n }\n view.dispatch({ changes, annotations: [ySyncAnnotation.of(this.conf)] })\n }\n }\n this._ytext = this.conf.ytext\n this._ytext.observe(this._observer)\n }\n\n /**\n * @param {cmView.ViewUpdate} update\n */\n update (update) {\n if (!update.docChanged || (update.transactions.length > 0 && update.transactions[0].annotation(ySyncAnnotation) === this.conf)) {\n return\n }\n const ytext = this.conf.ytext\n ytext.doc.transact(() => {\n /**\n * This variable adjusts the fromA position to the current position in the Y.Text type.\n */\n let adj = 0\n update.changes.iterChanges((fromA, toA, fromB, toB, insert) => {\n const insertText = insert.sliceString(0, insert.length, '\\n')\n if (fromA !== toA) {\n ytext.delete(fromA + adj, toA - fromA)\n }\n if (insertText.length > 0) {\n ytext.insert(fromA + adj, insertText)\n }\n adj += insertText.length - (toA - fromA)\n })\n }, this.conf)\n }\n\n destroy () {\n this._ytext.unobserve(this._observer)\n }\n}\n\nexport const ySync = cmView.ViewPlugin.fromClass(YSyncPluginValue)\n","\nimport * as cmView from '@codemirror/view'\n\nimport * as cmState from '@codemirror/state'\nimport * as dom from 'lib0/dom'\nimport * as pair from 'lib0/pair'\nimport * as math from 'lib0/math'\n\nimport * as Y from 'yjs'\nimport { ySyncFacet } from './y-sync.js'\n\nexport const yRemoteSelectionsTheme = cmView.EditorView.baseTheme({\n '.cm-ySelection': {\n },\n '.cm-yLineSelection': {\n padding: 0,\n margin: '0px 2px 0px 4px'\n },\n '.cm-ySelectionCaret': {\n position: 'relative',\n borderLeft: '1px solid black',\n borderRight: '1px solid black',\n marginLeft: '-1px',\n marginRight: '-1px',\n boxSizing: 'border-box',\n display: 'inline'\n },\n '.cm-ySelectionCaretDot': {\n borderRadius: '50%',\n position: 'absolute',\n width: '.4em',\n height: '.4em',\n top: '-.2em',\n left: '-.2em',\n backgroundColor: 'inherit',\n transition: 'transform .3s ease-in-out',\n boxSizing: 'border-box'\n },\n '.cm-ySelectionCaret:hover > .cm-ySelectionCaretDot': {\n transformOrigin: 'bottom center',\n transform: 'scale(0)'\n },\n '.cm-ySelectionInfo': {\n position: 'absolute',\n top: '-1.05em',\n left: '-1px',\n fontSize: '.75em',\n fontFamily: 'serif',\n fontStyle: 'normal',\n fontWeight: 'normal',\n lineHeight: 'normal',\n userSelect: 'none',\n color: 'white',\n paddingLeft: '2px',\n paddingRight: '2px',\n zIndex: 101,\n transition: 'opacity .3s ease-in-out',\n backgroundColor: 'inherit',\n // these should be separate\n opacity: 0,\n transitionDelay: '0s',\n whiteSpace: 'nowrap'\n },\n '.cm-ySelectionCaret:hover > .cm-ySelectionInfo': {\n opacity: 1,\n transitionDelay: '0s'\n }\n})\n\n/**\n * @todo specify the users that actually changed. Currently, we recalculate positions for every user.\n * @type {cmState.AnnotationType<Array<number>>}\n */\nconst yRemoteSelectionsAnnotation = cmState.Annotation.define()\n\nclass YRemoteCaretWidget extends cmView.WidgetType {\n /**\n * @param {string} color\n * @param {string} name\n */\n constructor (color, name) {\n super()\n this.color = color\n this.name = name\n }\n\n toDOM () {\n return /** @type {HTMLElement} */ (dom.element('span', [pair.create('class', 'cm-ySelectionCaret'), pair.create('style', `background-color: ${this.color}; border-color: ${this.color}`)], [\n dom.text('\\u2060'),\n dom.element('div', [\n pair.create('class', 'cm-ySelectionCaretDot')\n ]),\n dom.text('\\u2060'),\n dom.element('div', [\n pair.create('class', 'cm-ySelectionInfo')\n ], [\n dom.text(this.name)\n ]),\n dom.text('\\u2060')\n ]))\n }\n\n eq (widget) {\n return widget.color === this.color\n }\n\n compare (widget) {\n return widget.color === this.color\n }\n\n updateDOM () {\n return false\n }\n\n get estimatedHeight () { return -1 }\n\n ignoreEvent () {\n return true\n }\n}\n\nexport class YRemoteSelectionsPluginValue {\n /**\n * @param {cmView.EditorView} view\n */\n constructor (view) {\n this.conf = view.state.facet(ySyncFacet)\n this._listener = ({ added, updated, removed }, s, t) => {\n const clients = added.concat(updated).concat(removed)\n if (clients.findIndex(id => id !== this.conf.awareness.doc.clientID) >= 0) {\n view.dispatch({ annotations: [yRemoteSelectionsAnnotation.of([])] })\n }\n }\n this._awareness = this.conf.awareness\n this._awareness.on('change', this._listener)\n /**\n * @type {cmView.DecorationSet}\n */\n this.decorations = cmState.RangeSet.of([])\n }\n\n destroy () {\n this._awareness.off('change', this._listener)\n }\n\n /**\n * @param {cmView.ViewUpdate} update\n */\n update (update) {\n const ytext = this.conf.ytext\n const ydoc = /** @type {Y.Doc} */ (ytext.doc)\n const awareness = this.conf.awareness\n /**\n * @type {Array<cmState.Range<cmView.Decoration>>}\n */\n const decorations = []\n const localAwarenessState = this.conf.awareness.getLocalState()\n\n // set local awareness state (update cursors)\n if (localAwarenessState != null) {\n const hasFocus = update.view.hasFocus && update.view.dom.ownerDocument.hasFocus()\n const sel = hasFocus ? update.state.selection.main : null\n const currentAnchor = localAwarenessState.cursor == null ? null : Y.createRelativePositionFromJSON(localAwarenessState.cursor.anchor)\n const currentHead = localAwarenessState.cursor == null ? null : Y.createRelativePositionFromJSON(localAwarenessState.cursor.head)\n\n if (sel != null) {\n const anchor = Y.createRelativePositionFromTypeIndex(ytext, sel.anchor)\n const head = Y.createRelativePositionFromTypeIndex(ytext, sel.head)\n if (localAwarenessState.cursor == null || !Y.compareRelativePositions(currentAnchor, anchor) || !Y.compareRelativePositions(currentHead, head)) {\n awareness.setLocalStateField('cursor', {\n anchor,\n head\n })\n }\n } else if (localAwarenessState.cursor != null && hasFocus) {\n awareness.setLocalStateField('cursor', null)\n }\n }\n\n // update decorations (remote selections)\n awareness.getStates().forEach((state, clientid) => {\n if (clientid === awareness.doc.clientID) {\n return\n }\n const cursor = state.cursor\n if (cursor == null || cursor.anchor == null || cursor.head == null) {\n return\n }\n const anchor = Y.createAbsolutePositionFromRelativePosition(cursor.anchor, ydoc)\n const head = Y.createAbsolutePositionFromRelativePosition(cursor.head, ydoc)\n if (anchor == null || head == null || anchor.type !== ytext || head.type !== ytext) {\n return\n }\n\n const userColorAndName = this.conf.getUserInfo ? this.conf.getUserInfo(state.user) : state.user\n const color = userColorAndName?.color || '#30bced'\n const name = userColorAndName?.name || 'Anonymous'\n const colorLight = userColorAndName.colorLight || color + '33'\n const start = math.min(anchor.index, head.index)\n const end = math.max(anchor.index, head.index)\n const startLine = update.view.state.doc.lineAt(start)\n const endLine = update.view.state.doc.lineAt(end)\n if (startLine.number === endLine.number) {\n // selected content in a single line.\n decorations.push({\n from: start,\n to: end,\n value: cmView.Decoration.mark({\n attributes: { style: `background-color: ${colorLight}` },\n class: 'cm-ySelection'\n })\n })\n } else {\n // selected content in multiple lines\n // first, render text-selection in the first line\n decorations.push({\n from: start,\n to: startLine.from + startLine.length,\n value: cmView.Decoration.mark({\n attributes: { style: `background-color: ${colorLight}` },\n class: 'cm-ySelection'\n })\n })\n // render text-selection in the last line\n decorations.push({\n from: endLine.from,\n to: end,\n value: cmView.Decoration.mark({\n attributes: { style: `background-color: ${colorLight}` },\n class: 'cm-ySelection'\n })\n })\n for (let i = startLine.number + 1; i < endLine.number; i++) {\n const linePos = update.view.state.doc.line(i).from\n decorations.push({\n from: linePos,\n to: linePos,\n value: cmView.Decoration.line({\n attributes: { style: `background-color: ${colorLight}`, class: 'cm-yLineSelection' }\n })\n })\n }\n }\n decorations.push({\n from: head.index,\n to: head.index,\n value: cmView.Decoration.widget({\n side: head.index - anchor.index > 0 ? -1 : 1, // the local cursor should be rendered outside the remote selection\n block: false,\n widget: new YRemoteCaretWidget(color, name)\n })\n })\n })\n this.decorations = cmView.Decoration.set(decorations, true)\n }\n}\n\nexport const yRemoteSelections = cmView.ViewPlugin.fromClass(YRemoteSelectionsPluginValue, {\n decorations: v => v.decorations\n})\n","import * as Y from 'yjs' // eslint-disable-line\nimport * as cmState from '@codemirror/state'\n\nimport * as cmView from '@codemirror/view'\nimport { ySyncFacet, ySyncAnnotation } from './y-sync.js'\nimport { YRange } from './y-range.js' // eslint-disable-line\nimport { createMutex } from 'lib0/mutex'\n\nexport class YUndoManagerConfig {\n /**\n * @param {Y.UndoManager} undoManager\n */\n constructor (undoManager) {\n this.undoManager = undoManager\n }\n\n /**\n * @param {any} origin\n */\n addTrackedOrigin (origin) {\n this.undoManager.addTrackedOrigin(origin)\n }\n\n /**\n * @param {any} origin\n */\n removeTrackedOrigin (origin) {\n this.undoManager.removeTrackedOrigin(origin)\n }\n\n /**\n * @return {boolean} Whether a change was undone.\n */\n undo () {\n return this.undoManager.undo() != null\n }\n\n /**\n * @return {boolean} Whether a change was redone.\n */\n redo () {\n return this.undoManager.redo() != null\n }\n}\n\n/**\n * @type {cmState.Facet<YUndoManagerConfig, YUndoManagerConfig>}\n */\nexport const yUndoManagerFacet = cmState.Facet.define({\n combine (inputs) {\n return inputs[inputs.length - 1]\n }\n})\n\n/**\n * @type {cmState.AnnotationType<YUndoManagerConfig>}\n */\nexport const yUndoManagerAnnotation = cmState.Annotation.define()\n\n/**\n * @extends {PluginValue}\n */\nclass YUndoManagerPluginValue {\n /**\n * @param {cmView.EditorView} view\n */\n constructor (view) {\n this.view = view\n this.conf = view.state.facet(yUndoManagerFacet)\n this._undoManager = this.conf.undoManager\n this.syncConf = view.state.facet(ySyncFacet)\n /**\n * @type {null | YRange}\n */\n this._beforeChangeSelection = null\n this._mux = createMutex()\n\n this._onStackItemAdded = ({ stackItem, changedParentTypes }) => {\n // only store metadata if this type was affected\n if (changedParentTypes.has(this.syncConf.ytext) && this._beforeChangeSelection && !stackItem.meta.has(this)) { // do not overwrite previous stored selection\n stackItem.meta.set(this, this._beforeChangeSelection)\n }\n }\n this._onStackItemPopped = ({ stackItem }) => {\n const sel = stackItem.meta.get(this)\n if (sel) {\n const selection = this.syncConf.fromYRange(sel)\n view.dispatch(view.state.update({ selection }))\n this._storeSelection()\n }\n }\n /**\n * Do this without mutex, simply use the sync annotation\n */\n this._storeSelection = () => {\n // store the selection before the change is applied so we can restore it with the undo manager.\n this._beforeChangeSelection = this.syncConf.toYRange(this.view.state.selection.main)\n }\n this._undoManager.on('stack-item-added', this._onStackItemAdded)\n this._undoManager.on('stack-item-popped', this._onStackItemPopped)\n this._undoManager.addTrackedOrigin(this.syncConf)\n }\n\n /**\n * @param {cmView.ViewUpdate} update\n */\n update (update) {\n if (update.selectionSet && (update.transactions.length === 0 || update.transactions[0].annotation(ySyncAnnotation) !== this.syncConf)) {\n // This only works when YUndoManagerPlugin is included before the sync plugin\n this._storeSelection()\n }\n }\n\n destroy () {\n this._undoManager.off('stack-item-added', this._onStackItemAdded)\n this._undoManager.off('stack-item-popped', this._onStackItemPopped)\n this._undoManager.removeTrackedOrigin(this.syncConf)\n }\n}\nexport const yUndoManager = cmView.ViewPlugin.fromClass(YUndoManagerPluginValue)\n\n/**\n * @type {cmState.StateCommand}\n */\nexport const undo = ({ state, dispatch }) =>\n state.facet(yUndoManagerFacet).undo() || true\n\n/**\n * @type {cmState.StateCommand}\n */\nexport const redo = ({ state, dispatch }) =>\n state.facet(yUndoManagerFacet).redo() || true\n\n/**\n * @param {cmState.EditorState} state\n * @return {number}\n */\nexport const undoDepth = state => state.facet(yUndoManagerFacet).undoManager.undoStack.length\n\n/**\n * @param {cmState.EditorState} state\n * @return {number}\n */\nexport const redoDepth = state => state.facet(yUndoManagerFacet).undoManager.redoStack.length\n\n/**\n * Default key bindigs for the undo manager.\n * @type {Array<cmView.KeyBinding>}\n */\nexport const yUndoManagerKeymap = [\n { key: 'Mod-z', run: undo, preventDefault: true },\n { key: 'Mod-y', mac: 'Mod-Shift-z', run: redo, preventDefault: true },\n { key: 'Mod-Shift-z', run: redo, preventDefault: true }\n]\n","\nimport * as Y from 'yjs' // eslint-disable-line\nimport * as cmView from '@codemirror/view'\nimport * as cmState from '@codemirror/state' // eslint-disable-line\n\nimport { YRange } from './y-range.js'\nimport { ySync, ySyncFacet, YSyncConfig } from './y-sync.js'\nimport { yRemoteSelections, yRemoteSelectionsTheme } from './y-remote-selections.js'\nimport { yUndoManager, yUndoManagerFacet, YUndoManagerConfig, undo, redo, yUndoManagerKeymap } from './y-undomanager.js'\n\nexport { YRange, yRemoteSelections, yRemoteSelectionsTheme, ySync, ySyncFacet, YSyncConfig, yUndoManagerKeymap }\n\n/**\n * @param {Y.Text} ytext\n * @param {any} awareness\n * @param {Object} [opts]\n * @param {Y.UndoManager | false} [opts.undoManager] Set undoManager to false to disable the undo-redo plugin\n * @param {((u: any) => { name?: String, colorLight?: String, color?: String })} [opts.getUserInfo] Optional fn to take user awareness state info and transform into name + color(s)\n * @return {cmState.Extension}\n */\nexport const yCollab = (ytext, awareness, opts) => {\n // types not quite right... the jsdoc type stuff is awkward\n const undoManager = opts?.undoManager ?? new Y.UndoManager(ytext)\n const getUserInfo = opts?.getUserInfo\n const ySyncConfig = new YSyncConfig(ytext, awareness, getUserInfo)\n const plugins = [\n ySyncFacet.of(ySyncConfig),\n ySync\n ]\n\n if (awareness) {\n plugins.push(\n yRemoteSelectionsTheme,\n yRemoteSelections\n )\n }\n if (undoManager !== false) {\n // By default, only track changes that are produced by the sync plugin (local edits)\n plugins.push(\n yUndoManagerFacet.of(new YUndoManagerConfig(undoManager)),\n yUndoManager,\n cmView.EditorView.domEventHandlers({\n beforeinput (e, view) {\n if (e.inputType === 'historyUndo') return undo(view)\n if (e.inputType === 'historyRedo') return redo(view)\n return false\n }\n })\n )\n }\n return plugins\n}\n"],"names":["Y","cmState","cmView","dom","pair","math","createMutex"],"mappings":"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"}

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server