{"version":3,"file":"y-prosemirror.cjs","sources":["../src/plugins/keys.js","../src/utils.js","../src/plugins/sync-plugin.js","../src/lib.js","../src/plugins/cursor-plugin.js","../src/plugins/undo-plugin.js"],"sourcesContent":["import { PluginKey } from 'prosemirror-state' // eslint-disable-line\n\n/**\n * The unique prosemirror plugin key for syncPlugin\n *\n * @public\n */\nexport const ySyncPluginKey = new PluginKey('y-sync')\n\n/**\n * The unique prosemirror plugin key for undoPlugin\n *\n * @public\n * @type {PluginKey<import('./undo-plugin').UndoPluginState>}\n */\nexport const yUndoPluginKey = new PluginKey('y-undo')\n\n/**\n * The unique prosemirror plugin key for cursorPlugin\n *\n * @public\n */\nexport const yCursorPluginKey = new PluginKey('yjs-cursor')\n","import * as sha256 from 'lib0/hash/sha256'\nimport * as buf from 'lib0/buffer'\n\n/**\n * Custom function to transform sha256 hash to N byte\n *\n * @param {Uint8Array} digest\n */\nconst _convolute = digest => {\n  const N = 6\n  for (let i = N; i < digest.length; i++) {\n    digest[i % N] = digest[i % N] ^ digest[i]\n  }\n  return digest.slice(0, N)\n}\n\n/**\n * @param {any} json\n */\nexport const hashOfJSON = (json) => buf.toBase64(_convolute(sha256.digest(buf.encodeAny(json))))\n","/**\n * @module bindings/prosemirror\n */\n\nimport { createMutex } from 'lib0/mutex'\nimport * as PModel from 'prosemirror-model'\nimport { AllSelection, Plugin, TextSelection, NodeSelection } from \"prosemirror-state\"; // eslint-disable-line\nimport * as math from 'lib0/math'\nimport * as object from 'lib0/object'\nimport * as set from 'lib0/set'\nimport { simpleDiff } from 'lib0/diff'\nimport * as error from 'lib0/error'\nimport { ySyncPluginKey, yUndoPluginKey } from './keys.js'\nimport * as Y from 'yjs'\nimport {\n  absolutePositionToRelativePosition,\n  relativePositionToAbsolutePosition\n} from '../lib.js'\nimport * as random from 'lib0/random'\nimport * as environment from 'lib0/environment'\nimport * as dom from 'lib0/dom'\nimport * as eventloop from 'lib0/eventloop'\nimport * as map from 'lib0/map'\nimport * as utils from '../utils.js'\n\n/**\n * @typedef {Object} BindingMetadata\n * @property {ProsemirrorMapping} BindingMetadata.mapping\n * @property {Map<import('prosemirror-model').MarkType, boolean>} BindingMetadata.isOMark - is overlapping mark\n */\n\n/**\n * @return {BindingMetadata}\n */\nexport const createEmptyMeta = () => ({\n  mapping: new Map(),\n  isOMark: new Map()\n})\n\n/**\n * @param {Y.Item} item\n * @param {Y.Snapshot} [snapshot]\n */\nexport const isVisible = (item, snapshot) =>\n  snapshot === undefined\n    ? !item.deleted\n    : (snapshot.sv.has(item.id.client) && /** @type {number} */\n      (snapshot.sv.get(item.id.client)) > item.id.clock &&\n      !Y.isDeleted(snapshot.ds, item.id))\n\n/**\n * Either a node if type is YXmlElement or an Array of text nodes if YXmlText\n * @typedef {Map<Y.AbstractType<any>, PModel.Node | Array<PModel.Node>>} ProsemirrorMapping\n */\n\n/**\n * @typedef {Object} ColorDef\n * @property {string} ColorDef.light\n * @property {string} ColorDef.dark\n */\n\n/**\n * @typedef {Object} YSyncOpts\n * @property {Array<ColorDef>} [YSyncOpts.colors]\n * @property {Map<string,ColorDef>} [YSyncOpts.colorMapping]\n * @property {Y.PermanentUserData|null} [YSyncOpts.permanentUserData]\n * @property {ProsemirrorMapping} [YSyncOpts.mapping]\n * @property {function} [YSyncOpts.onFirstRender] Fired when the content from Yjs is initially rendered to ProseMirror\n */\n\n/**\n * @type {Array<ColorDef>}\n */\nconst defaultColors = [{ light: '#ecd44433', dark: '#ecd444' }]\n\n/**\n * @param {Map<string,ColorDef>} colorMapping\n * @param {Array<ColorDef>} colors\n * @param {string} user\n * @return {ColorDef}\n */\nconst getUserColor = (colorMapping, colors, user) => {\n  // @todo do not hit the same color twice if possible\n  if (!colorMapping.has(user)) {\n    if (colorMapping.size < colors.length) {\n      const usedColors = set.create()\n      colorMapping.forEach((color) => usedColors.add(color))\n      colors = colors.filter((color) => !usedColors.has(color))\n    }\n    colorMapping.set(user, random.oneOf(colors))\n  }\n  return /** @type {ColorDef} */ (colorMapping.get(user))\n}\n\n/**\n * This plugin listens to changes in prosemirror view and keeps yXmlState and view in sync.\n *\n * This plugin also keeps references to the type and the shared document so other plugins can access it.\n * @param {Y.XmlFragment} yXmlFragment\n * @param {YSyncOpts} opts\n * @return {any} Returns a prosemirror plugin that binds to this type\n */\nexport const ySyncPlugin = (yXmlFragment, {\n  colors = defaultColors,\n  colorMapping = new Map(),\n  permanentUserData = null,\n  onFirstRender = () => {},\n  mapping\n} = {}) => {\n  let initialContentChanged = false\n  const binding = new ProsemirrorBinding(yXmlFragment, mapping)\n  const plugin = new Plugin({\n    props: {\n      editable: (state) => {\n        const syncState = ySyncPluginKey.getState(state)\n        return syncState.snapshot == null && syncState.prevSnapshot == null\n      }\n    },\n    key: ySyncPluginKey,\n    state: {\n      /**\n       * @returns {any}\n       */\n      init: (_initargs, _state) => {\n        return {\n          type: yXmlFragment,\n          doc: yXmlFragment.doc,\n          binding,\n          snapshot: null,\n          prevSnapshot: null,\n          isChangeOrigin: false,\n          isUndoRedoOperation: false,\n          addToHistory: true,\n          colors,\n          colorMapping,\n          permanentUserData\n        }\n      },\n      apply: (tr, pluginState) => {\n        const change = tr.getMeta(ySyncPluginKey)\n        if (change !== undefined) {\n          pluginState = Object.assign({}, pluginState)\n          for (const key in change) {\n            pluginState[key] = change[key]\n          }\n        }\n        pluginState.addToHistory = tr.getMeta('addToHistory') !== false\n        // always set isChangeOrigin. If undefined, this is not change origin.\n        pluginState.isChangeOrigin = change !== undefined &&\n          !!change.isChangeOrigin\n        pluginState.isUndoRedoOperation = change !== undefined && !!change.isChangeOrigin && !!change.isUndoRedoOperation\n        if (binding.prosemirrorView !== null) {\n          if (\n            change !== undefined &&\n            (change.snapshot != null || change.prevSnapshot != null)\n          ) {\n            // snapshot changed, rerender next\n            eventloop.timeout(0, () => {\n              if (binding.prosemirrorView == null) {\n                return\n              }\n              if (change.restore == null) {\n                binding._renderSnapshot(\n                  change.snapshot,\n                  change.prevSnapshot,\n                  pluginState\n                )\n              } else {\n                binding._renderSnapshot(\n                  change.snapshot,\n                  change.snapshot,\n                  pluginState\n                )\n                // reset to current prosemirror state\n                delete pluginState.restore\n                delete pluginState.snapshot\n                delete pluginState.prevSnapshot\n                binding.mux(() => {\n                  binding._prosemirrorChanged(\n                    binding.prosemirrorView.state.doc\n                  )\n                })\n              }\n            })\n          }\n        }\n        return pluginState\n      }\n    },\n    view: (view) => {\n      binding.initView(view)\n      if (mapping == null) {\n        // force rerender to update the bindings mapping\n        binding._forceRerender()\n      }\n      onFirstRender()\n      return {\n        update: () => {\n          const pluginState = plugin.getState(view.state)\n          if (\n            pluginState.snapshot == null && pluginState.prevSnapshot == null\n          ) {\n            if (\n              // If the content doesn't change initially, we don't render anything to Yjs\n              // If the content was cleared by a user action, we want to catch the change and\n              // represent it in Yjs\n              initialContentChanged ||\n              view.state.doc.content.findDiffStart(\n                view.state.doc.type.createAndFill().content\n              ) !== null\n            ) {\n              initialContentChanged = true\n              if (\n                pluginState.addToHistory === false &&\n                !pluginState.isChangeOrigin\n              ) {\n                const yUndoPluginState = yUndoPluginKey.getState(view.state)\n                /**\n                 * @type {Y.UndoManager}\n                 */\n                const um = yUndoPluginState && yUndoPluginState.undoManager\n                if (um) {\n                  um.stopCapturing()\n                }\n              }\n              binding.mux(() => {\n                /** @type {Y.Doc} */ (pluginState.doc).transact((tr) => {\n                  tr.meta.set('addToHistory', pluginState.addToHistory)\n                  binding._prosemirrorChanged(view.state.doc)\n                }, ySyncPluginKey)\n              })\n            }\n          }\n        },\n        destroy: () => {\n          binding.destroy()\n        }\n      }\n    }\n  })\n  return plugin\n}\n\n/**\n * @param {import('prosemirror-state').Transaction} tr\n * @param {ReturnType<typeof getRelativeSelection>} relSel\n * @param {ProsemirrorBinding} binding\n */\nconst restoreRelativeSelection = (tr, relSel, binding) => {\n  if (relSel !== null && relSel.anchor !== null && relSel.head !== null) {\n    if (relSel.type === 'all') {\n      tr.setSelection(new AllSelection(tr.doc))\n    } else if (relSel.type === 'node') {\n      const anchor = relativePositionToAbsolutePosition(\n        binding.doc,\n        binding.type,\n        relSel.anchor,\n        binding.mapping\n      )\n      tr.setSelection(NodeSelection.create(tr.doc, anchor))\n    } else {\n      const anchor = relativePositionToAbsolutePosition(\n        binding.doc,\n        binding.type,\n        relSel.anchor,\n        binding.mapping\n      )\n      const head = relativePositionToAbsolutePosition(\n        binding.doc,\n        binding.type,\n        relSel.head,\n        binding.mapping\n      )\n      if (anchor !== null && head !== null) {\n        const sel = TextSelection.between(tr.doc.resolve(anchor), tr.doc.resolve(head))\n        tr.setSelection(sel)\n      }\n    }\n  }\n}\n\n/**\n * @param {ProsemirrorBinding} pmbinding\n * @param {import('prosemirror-state').EditorState} state\n */\nexport const getRelativeSelection = (pmbinding, state) => ({\n  type: /** @type {any} */ (state.selection).jsonID,\n  anchor: absolutePositionToRelativePosition(\n    state.selection.anchor,\n    pmbinding.type,\n    pmbinding.mapping\n  ),\n  head: absolutePositionToRelativePosition(\n    state.selection.head,\n    pmbinding.type,\n    pmbinding.mapping\n  )\n})\n\n/**\n * Binding for prosemirror.\n *\n * @protected\n */\nexport class ProsemirrorBinding {\n  /**\n   * @param {Y.XmlFragment} yXmlFragment The bind source\n   * @param {ProsemirrorMapping} mapping\n   */\n  constructor (yXmlFragment, mapping = new Map()) {\n    this.type = yXmlFragment\n    /**\n     * this will be set once the view is created\n     * @type {any}\n     */\n    this.prosemirrorView = null\n    this.mux = createMutex()\n    this.mapping = mapping\n    /**\n     * Is overlapping mark - i.e. mark does not exclude itself.\n     *\n     * @type {Map<import('prosemirror-model').MarkType, boolean>}\n     */\n    this.isOMark = new Map()\n    this._observeFunction = this._typeChanged.bind(this)\n    /**\n     * @type {Y.Doc}\n     */\n    // @ts-ignore\n    this.doc = yXmlFragment.doc\n    /**\n     * current selection as relative positions in the Yjs model\n     */\n    this.beforeTransactionSelection = null\n    this.beforeAllTransactions = () => {\n      if (this.beforeTransactionSelection === null && this.prosemirrorView != null) {\n        this.beforeTransactionSelection = getRelativeSelection(\n          this,\n          this.prosemirrorView.state\n        )\n      }\n    }\n    this.afterAllTransactions = () => {\n      this.beforeTransactionSelection = null\n    }\n    this._domSelectionInView = null\n  }\n\n  /**\n   * Create a transaction for changing the prosemirror state.\n   *\n   * @returns\n   */\n  get _tr () {\n    return this.prosemirrorView.state.tr.setMeta('addToHistory', false)\n  }\n\n  _isLocalCursorInView () {\n    if (!this.prosemirrorView.hasFocus()) return false\n    if (environment.isBrowser && this._domSelectionInView === null) {\n      // Calculate the domSelectionInView and clear by next tick after all events are finished\n      eventloop.timeout(0, () => {\n        this._domSelectionInView = null\n      })\n      this._domSelectionInView = this._isDomSelectionInView()\n    }\n    return this._domSelectionInView\n  }\n\n  _isDomSelectionInView () {\n    const selection = this.prosemirrorView._root.getSelection()\n\n    if (selection == null || selection.anchorNode == null) return false\n\n    const range = this.prosemirrorView._root.createRange()\n    range.setStart(selection.anchorNode, selection.anchorOffset)\n    range.setEnd(selection.focusNode, selection.focusOffset)\n\n    // This is a workaround for an edgecase where getBoundingClientRect will\n    // return zero values if the selection is collapsed at the start of a newline\n    // see reference here: https://stackoverflow.com/a/59780954\n    const rects = range.getClientRects()\n    if (rects.length === 0) {\n      // probably buggy newline behavior, explicitly select the node contents\n      if (range.startContainer && range.collapsed) {\n        range.selectNodeContents(range.startContainer)\n      }\n    }\n\n    const bounding = range.getBoundingClientRect()\n    const documentElement = dom.doc.documentElement\n\n    return bounding.bottom >= 0 && bounding.right >= 0 &&\n      bounding.left <=\n        (window.innerWidth || documentElement.clientWidth || 0) &&\n      bounding.top <= (window.innerHeight || documentElement.clientHeight || 0)\n  }\n\n  /**\n   * @param {Y.Snapshot} snapshot\n   * @param {Y.Snapshot} prevSnapshot\n   */\n  renderSnapshot (snapshot, prevSnapshot) {\n    if (!prevSnapshot) {\n      prevSnapshot = Y.createSnapshot(Y.createDeleteSet(), new Map())\n    }\n    this.prosemirrorView.dispatch(\n      this._tr.setMeta(ySyncPluginKey, { snapshot, prevSnapshot })\n    )\n  }\n\n  unrenderSnapshot () {\n    this.mapping.clear()\n    this.mux(() => {\n      const fragmentContent = this.type.toArray().map((t) =>\n        createNodeFromYElement(\n          /** @type {Y.XmlElement} */ (t),\n          this.prosemirrorView.state.schema,\n          this\n        )\n      ).filter((n) => n !== null)\n      // @ts-ignore\n      const tr = this._tr.replace(\n        0,\n        this.prosemirrorView.state.doc.content.size,\n        new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0)\n      )\n      tr.setMeta(ySyncPluginKey, { snapshot: null, prevSnapshot: null })\n      this.prosemirrorView.dispatch(tr)\n    })\n  }\n\n  _forceRerender () {\n    this.mapping.clear()\n    this.mux(() => {\n      // If this is a forced rerender, this might neither happen as a pm change nor within a Yjs\n      // transaction. Then the \"before selection\" doesn't exist. In this case, we need to create a\n      // relative position before replacing content. Fixes #126\n      const sel = this.beforeTransactionSelection !== null ? null : this.prosemirrorView.state.selection\n      const fragmentContent = this.type.toArray().map((t) =>\n        createNodeFromYElement(\n          /** @type {Y.XmlElement} */ (t),\n          this.prosemirrorView.state.schema,\n          this\n        )\n      ).filter((n) => n !== null)\n      // @ts-ignore\n      const tr = this._tr.replace(\n        0,\n        this.prosemirrorView.state.doc.content.size,\n        new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0)\n      )\n      if (sel) {\n        /**\n         * If the Prosemirror document we just created from this.type is\n         * smaller than the previous document, the selection might be\n         * out of bound, which would make Prosemirror throw an error.\n         */\n        const clampedAnchor = math.min(math.max(sel.anchor, 0), tr.doc.content.size)\n        const clampedHead = math.min(math.max(sel.head, 0), tr.doc.content.size)\n\n        tr.setSelection(TextSelection.create(tr.doc, clampedAnchor, clampedHead))\n      }\n      this.prosemirrorView.dispatch(\n        tr.setMeta(ySyncPluginKey, { isChangeOrigin: true, binding: this })\n      )\n    })\n  }\n\n  /**\n   * @param {Y.Snapshot|Uint8Array} snapshot\n   * @param {Y.Snapshot|Uint8Array} prevSnapshot\n   * @param {Object} pluginState\n   */\n  _renderSnapshot (snapshot, prevSnapshot, pluginState) {\n    /**\n     * The document that contains the full history of this document.\n     * @type {Y.Doc}\n     */\n    let historyDoc = this.doc\n    let historyType = this.type\n    if (!snapshot) {\n      snapshot = Y.snapshot(this.doc)\n    }\n    if (snapshot instanceof Uint8Array || prevSnapshot instanceof Uint8Array) {\n      if (!(snapshot instanceof Uint8Array) || !(prevSnapshot instanceof Uint8Array)) {\n        // expected both snapshots to be v2 updates\n        error.unexpectedCase()\n      }\n      historyDoc = new Y.Doc({ gc: false })\n      Y.applyUpdateV2(historyDoc, prevSnapshot)\n      prevSnapshot = Y.snapshot(historyDoc)\n      Y.applyUpdateV2(historyDoc, snapshot)\n      snapshot = Y.snapshot(historyDoc)\n      if (historyType._item === null) {\n        /**\n         * If is a root type, we need to find the root key in the initial document\n         * and use it to get the history type.\n         */\n        const rootKey = Array.from(this.doc.share.keys()).find(\n          (key) => this.doc.share.get(key) === this.type\n        )\n        historyType = historyDoc.getXmlFragment(rootKey)\n      } else {\n        /**\n         * If it is a sub type, we use the item id to find the history type.\n         */\n        const historyStructs =\n          historyDoc.store.clients.get(historyType._item.id.client) ?? []\n        const itemIndex = Y.findIndexSS(\n          historyStructs,\n          historyType._item.id.clock\n        )\n        const item = /** @type {Y.Item} */ (historyStructs[itemIndex])\n        const content = /** @type {Y.ContentType} */ (item.content)\n        historyType = /** @type {Y.XmlFragment} */ (content.type)\n      }\n    }\n    // clear mapping because we are going to rerender\n    this.mapping.clear()\n    this.mux(() => {\n      historyDoc.transact((transaction) => {\n        // before rendering, we are going to sanitize ops and split deleted ops\n        // if they were deleted by seperate users.\n        /**\n         * @type {Y.PermanentUserData}\n         */\n        const pud = pluginState.permanentUserData\n        if (pud) {\n          pud.dss.forEach((ds) => {\n            Y.iterateDeletedStructs(transaction, ds, (_item) => {})\n          })\n        }\n        /**\n         * @param {'removed'|'added'} type\n         * @param {Y.ID} id\n         */\n        const computeYChange = (type, id) => {\n          const user = type === 'added'\n            ? pud.getUserByClientId(id.client)\n            : pud.getUserByDeletedId(id)\n          return {\n            user,\n            type,\n            color: getUserColor(\n              pluginState.colorMapping,\n              pluginState.colors,\n              user\n            )\n          }\n        }\n        // Create document fragment and render\n        const fragmentContent = Y.typeListToArraySnapshot(\n          historyType,\n          new Y.Snapshot(prevSnapshot.ds, snapshot.sv)\n        ).map((t) => {\n          if (\n            !t._item.deleted || isVisible(t._item, snapshot) ||\n            isVisible(t._item, prevSnapshot)\n          ) {\n            return createNodeFromYElement(\n              t,\n              this.prosemirrorView.state.schema,\n              { mapping: new Map(), isOMark: new Map() },\n              snapshot,\n              prevSnapshot,\n              computeYChange\n            )\n          } else {\n            // No need to render elements that are not visible by either snapshot.\n            // If a client adds and deletes content in the same snapshot the element is not visible by either snapshot.\n            return null\n          }\n        }).filter((n) => n !== null)\n        // @ts-ignore\n        const tr = this._tr.replace(\n          0,\n          this.prosemirrorView.state.doc.content.size,\n          new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0)\n        )\n        this.prosemirrorView.dispatch(\n          tr.setMeta(ySyncPluginKey, { isChangeOrigin: true })\n        )\n      }, ySyncPluginKey)\n    })\n  }\n\n  /**\n   * @param {Array<Y.YEvent<any>>} events\n   * @param {Y.Transaction} transaction\n   */\n  _typeChanged (events, transaction) {\n    if (this.prosemirrorView == null) return\n    const syncState = ySyncPluginKey.getState(this.prosemirrorView.state)\n    if (\n      events.length === 0 || syncState.snapshot != null ||\n      syncState.prevSnapshot != null\n    ) {\n      // drop out if snapshot is active\n      this.renderSnapshot(syncState.snapshot, syncState.prevSnapshot)\n      return\n    }\n    this.mux(() => {\n      /**\n       * @param {any} _\n       * @param {Y.AbstractType<any>} type\n       */\n      const delType = (_, type) => this.mapping.delete(type)\n      Y.iterateDeletedStructs(\n        transaction,\n        transaction.deleteSet,\n        (struct) => {\n          if (struct.constructor === Y.Item) {\n            const type = /** @type {Y.ContentType} */ (/** @type {Y.Item} */ (struct).content).type\n            type && this.mapping.delete(type)\n          }\n        }\n      )\n      transaction.changed.forEach(delType)\n      transaction.changedParentTypes.forEach(delType)\n      const fragmentContent = this.type.toArray().map((t) =>\n        createNodeIfNotExists(\n          /** @type {Y.XmlElement | Y.XmlHook} */ (t),\n          this.prosemirrorView.state.schema,\n          this\n        )\n      ).filter((n) => n !== null)\n      // @ts-ignore\n      let tr = this._tr.replace(\n        0,\n        this.prosemirrorView.state.doc.content.size,\n        new PModel.Slice(PModel.Fragment.from(fragmentContent), 0, 0)\n      )\n      restoreRelativeSelection(tr, this.beforeTransactionSelection, this)\n      tr = tr.setMeta(ySyncPluginKey, { isChangeOrigin: true, isUndoRedoOperation: transaction.origin instanceof Y.UndoManager })\n      if (\n        this.beforeTransactionSelection !== null && this._isLocalCursorInView()\n      ) {\n        tr.scrollIntoView()\n      }\n      this.prosemirrorView.dispatch(tr)\n    })\n  }\n\n  /**\n   * @param {import('prosemirror-model').Node} doc\n   */\n  _prosemirrorChanged (doc) {\n    this.doc.transact(() => {\n      updateYFragment(this.doc, this.type, doc, this)\n      this.beforeTransactionSelection = getRelativeSelection(\n        this,\n        this.prosemirrorView.state\n      )\n    }, ySyncPluginKey)\n  }\n\n  /**\n   * View is ready to listen to changes. Register observers.\n   * @param {any} prosemirrorView\n   */\n  initView (prosemirrorView) {\n    if (this.prosemirrorView != null) this.destroy()\n    this.prosemirrorView = prosemirrorView\n    this.doc.on('beforeAllTransactions', this.beforeAllTransactions)\n    this.doc.on('afterAllTransactions', this.afterAllTransactions)\n    this.type.observeDeep(this._observeFunction)\n  }\n\n  destroy () {\n    if (this.prosemirrorView == null) return\n    this.prosemirrorView = null\n    this.type.unobserveDeep(this._observeFunction)\n    this.doc.off('beforeAllTransactions', this.beforeAllTransactions)\n    this.doc.off('afterAllTransactions', this.afterAllTransactions)\n  }\n}\n\n/**\n * @private\n * @param {Y.XmlElement | Y.XmlHook} el\n * @param {PModel.Schema} schema\n * @param {BindingMetadata} meta\n * @param {Y.Snapshot} [snapshot]\n * @param {Y.Snapshot} [prevSnapshot]\n * @param {function('removed' | 'added', Y.ID):any} [computeYChange]\n * @return {PModel.Node | null}\n */\nconst createNodeIfNotExists = (\n  el,\n  schema,\n  meta,\n  snapshot,\n  prevSnapshot,\n  computeYChange\n) => {\n  const node = /** @type {PModel.Node} */ (meta.mapping.get(el))\n  if (node === undefined) {\n    if (el instanceof Y.XmlElement) {\n      return createNodeFromYElement(\n        el,\n        schema,\n        meta,\n        snapshot,\n        prevSnapshot,\n        computeYChange\n      )\n    } else {\n      throw error.methodUnimplemented() // we are currently not handling hooks\n    }\n  }\n  return node\n}\n\n/**\n * @private\n * @param {Y.XmlElement} el\n * @param {any} schema\n * @param {BindingMetadata} meta\n * @param {Y.Snapshot} [snapshot]\n * @param {Y.Snapshot} [prevSnapshot]\n * @param {function('removed' | 'added', Y.ID):any} [computeYChange]\n * @return {PModel.Node | null} Returns node if node could be created. Otherwise it deletes the yjs type and returns null\n */\nexport const createNodeFromYElement = (\n  el,\n  schema,\n  meta,\n  snapshot,\n  prevSnapshot,\n  computeYChange\n) => {\n  const children = []\n  /**\n   * @param {Y.XmlElement | Y.XmlText} type\n   */\n  const createChildren = (type) => {\n    if (type instanceof Y.XmlElement) {\n      const n = createNodeIfNotExists(\n        type,\n        schema,\n        meta,\n        snapshot,\n        prevSnapshot,\n        computeYChange\n      )\n      if (n !== null) {\n        children.push(n)\n      }\n    } else {\n      // If the next ytext exists and was created by us, move the content to the current ytext.\n      // This is a fix for #160 -- duplication of characters when two Y.Text exist next to each\n      // other.\n      const nextytext = /** @type {Y.ContentType} */ (type._item.right?.content)?.type\n      if (nextytext instanceof Y.Text && !nextytext._item.deleted && nextytext._item.id.client === nextytext.doc.clientID) {\n        type.applyDelta([\n          { retain: type.length },\n          ...nextytext.toDelta()\n        ])\n        nextytext.doc.transact(tr => {\n          nextytext._item.delete(tr)\n        })\n      }\n      // now create the prosemirror text nodes\n      const ns = createTextNodesFromYText(\n        type,\n        schema,\n        meta,\n        snapshot,\n        prevSnapshot,\n        computeYChange\n      )\n      if (ns !== null) {\n        ns.forEach((textchild) => {\n          if (textchild !== null) {\n            children.push(textchild)\n          }\n        })\n      }\n    }\n  }\n  if (snapshot === undefined || prevSnapshot === undefined) {\n    el.toArray().forEach(createChildren)\n  } else {\n    Y.typeListToArraySnapshot(el, new Y.Snapshot(prevSnapshot.ds, snapshot.sv))\n      .forEach(createChildren)\n  }\n  try {\n    const attrs = el.getAttributes(snapshot)\n    if (snapshot !== undefined) {\n      if (!isVisible(/** @type {Y.Item} */ (el._item), snapshot)) {\n        attrs.ychange = computeYChange\n          ? computeYChange('removed', /** @type {Y.Item} */ (el._item).id)\n          : { type: 'removed' }\n      } else if (!isVisible(/** @type {Y.Item} */ (el._item), prevSnapshot)) {\n        attrs.ychange = computeYChange\n          ? computeYChange('added', /** @type {Y.Item} */ (el._item).id)\n          : { type: 'added' }\n      }\n    }\n    const node = schema.node(el.nodeName, attrs, children)\n    meta.mapping.set(el, node)\n    return node\n  } catch (e) {\n    // an error occured while creating the node. This is probably a result of a concurrent action.\n    /** @type {Y.Doc} */ (el.doc).transact((transaction) => {\n      /** @type {Y.Item} */ (el._item).delete(transaction)\n    }, ySyncPluginKey)\n    meta.mapping.delete(el)\n    return null\n  }\n}\n\n/**\n * @private\n * @param {Y.XmlText} text\n * @param {import('prosemirror-model').Schema} schema\n * @param {BindingMetadata} _meta\n * @param {Y.Snapshot} [snapshot]\n * @param {Y.Snapshot} [prevSnapshot]\n * @param {function('removed' | 'added', Y.ID):any} [computeYChange]\n * @return {Array<PModel.Node>|null}\n */\nconst createTextNodesFromYText = (\n  text,\n  schema,\n  _meta,\n  snapshot,\n  prevSnapshot,\n  computeYChange\n) => {\n  const nodes = []\n  const deltas = text.toDelta(snapshot, prevSnapshot, computeYChange)\n  try {\n    for (let i = 0; i < deltas.length; i++) {\n      const delta = deltas[i]\n      nodes.push(schema.text(delta.insert, attributesToMarks(delta.attributes, schema)))\n    }\n  } catch (e) {\n    // an error occured while creating the node. This is probably a result of a concurrent action.\n    /** @type {Y.Doc} */ (text.doc).transact((transaction) => {\n      /** @type {Y.Item} */ (text._item).delete(transaction)\n    }, ySyncPluginKey)\n    return null\n  }\n  // @ts-ignore\n  return nodes\n}\n\n/**\n * @private\n * @param {Array<any>} nodes prosemirror node\n * @param {BindingMetadata} meta\n * @return {Y.XmlText}\n */\nconst createTypeFromTextNodes = (nodes, meta) => {\n  const type = new Y.XmlText()\n  const delta = nodes.map((node) => ({\n    // @ts-ignore\n    insert: node.text,\n    attributes: marksToAttributes(node.marks, meta)\n  }))\n  type.applyDelta(delta)\n  meta.mapping.set(type, nodes)\n  return type\n}\n\n/**\n * @private\n * @param {any} node prosemirror node\n * @param {BindingMetadata} meta\n * @return {Y.XmlElement}\n */\nconst createTypeFromElementNode = (node, meta) => {\n  const type = new Y.XmlElement(node.type.name)\n  for (const key in node.attrs) {\n    const val = node.attrs[key]\n    if (val !== null && key !== 'ychange') {\n      type.setAttribute(key, val)\n    }\n  }\n  type.insert(\n    0,\n    normalizePNodeContent(node).map((n) =>\n      createTypeFromTextOrElementNode(n, meta)\n    )\n  )\n  meta.mapping.set(type, node)\n  return type\n}\n\n/**\n * @private\n * @param {PModel.Node|Array<PModel.Node>} node prosemirror text node\n * @param {BindingMetadata} meta\n * @return {Y.XmlElement|Y.XmlText}\n */\nconst createTypeFromTextOrElementNode = (node, meta) =>\n  node instanceof Array\n    ? createTypeFromTextNodes(node, meta)\n    : createTypeFromElementNode(node, meta)\n\n/**\n * @param {any} val\n */\nconst isObject = (val) => typeof val === 'object' && val !== null\n\n/**\n * @param {any} pattrs\n * @param {any} yattrs\n */\nconst equalAttrs = (pattrs, yattrs) => {\n  const keys = Object.keys(pattrs).filter((key) => pattrs[key] !== null)\n  let eq =\n    keys.length ===\n      (yattrs == null ? 0 : Object.keys(yattrs).filter((key) => yattrs[key] !== null).length)\n  for (let i = 0; i < keys.length && eq; i++) {\n    const key = keys[i]\n    const l = pattrs[key]\n    const r = yattrs[key]\n    eq = key === 'ychange' || l === r ||\n      (isObject(l) && isObject(r) && equalAttrs(l, r))\n  }\n  return eq\n}\n\n/**\n * @typedef {Array<Array<PModel.Node>|PModel.Node>} NormalizedPNodeContent\n */\n\n/**\n * @param {any} pnode\n * @return {NormalizedPNodeContent}\n */\nconst normalizePNodeContent = (pnode) => {\n  const c = pnode.content.content\n  const res = []\n  for (let i = 0; i < c.length; i++) {\n    const n = c[i]\n    if (n.isText) {\n      const textNodes = []\n      for (let tnode = c[i]; i < c.length && tnode.isText; tnode = c[++i]) {\n        textNodes.push(tnode)\n      }\n      i--\n      res.push(textNodes)\n    } else {\n      res.push(n)\n    }\n  }\n  return res\n}\n\n/**\n * @param {Y.XmlText} ytext\n * @param {Array<any>} ptexts\n */\nconst equalYTextPText = (ytext, ptexts) => {\n  const delta = ytext.toDelta()\n  return delta.length === ptexts.length &&\n    delta.every(/** @type {(d:any,i:number) => boolean} */ (d, i) =>\n      d.insert === /** @type {any} */ (ptexts[i]).text &&\n      object.keys(d.attributes || {}).length === ptexts[i].marks.length &&\n      object.every(d.attributes, (attr, yattrname) => {\n        const markname = yattr2markname(yattrname)\n        const pmarks = ptexts[i].marks\n        return equalAttrs(attr, pmarks.find(/** @param {any} mark */ mark => mark.type.name === markname)?.attrs)\n      })\n    )\n}\n\n/**\n * @param {Y.XmlElement|Y.XmlText|Y.XmlHook} ytype\n * @param {any|Array<any>} pnode\n */\nconst equalYTypePNode = (ytype, pnode) => {\n  if (\n    ytype instanceof Y.XmlElement && !(pnode instanceof Array) &&\n    matchNodeName(ytype, pnode)\n  ) {\n    const normalizedContent = normalizePNodeContent(pnode)\n    return ytype._length === normalizedContent.length &&\n      equalAttrs(ytype.getAttributes(), pnode.attrs) &&\n      ytype.toArray().every((ychild, i) =>\n        equalYTypePNode(ychild, normalizedContent[i])\n      )\n  }\n  return ytype instanceof Y.XmlText && pnode instanceof Array &&\n    equalYTextPText(ytype, pnode)\n}\n\n/**\n * @param {PModel.Node | Array<PModel.Node> | undefined} mapped\n * @param {PModel.Node | Array<PModel.Node>} pcontent\n */\nconst mappedIdentity = (mapped, pcontent) =>\n  mapped === pcontent ||\n  (mapped instanceof Array && pcontent instanceof Array &&\n    mapped.length === pcontent.length && mapped.every((a, i) =>\n    pcontent[i] === a\n  ))\n\n/**\n * @param {Y.XmlElement} ytype\n * @param {PModel.Node} pnode\n * @param {BindingMetadata} meta\n * @return {{ foundMappedChild: boolean, equalityFactor: number }}\n */\nconst computeChildEqualityFactor = (ytype, pnode, meta) => {\n  const yChildren = ytype.toArray()\n  const pChildren = normalizePNodeContent(pnode)\n  const pChildCnt = pChildren.length\n  const yChildCnt = yChildren.length\n  const minCnt = math.min(yChildCnt, pChildCnt)\n  let left = 0\n  let right = 0\n  let foundMappedChild = false\n  for (; left < minCnt; left++) {\n    const leftY = yChildren[left]\n    const leftP = pChildren[left]\n    if (mappedIdentity(meta.mapping.get(leftY), leftP)) {\n      foundMappedChild = true // definite (good) match!\n    } else if (!equalYTypePNode(leftY, leftP)) {\n      break\n    }\n  }\n  for (; left + right < minCnt; right++) {\n    const rightY = yChildren[yChildCnt - right - 1]\n    const rightP = pChildren[pChildCnt - right - 1]\n    if (mappedIdentity(meta.mapping.get(rightY), rightP)) {\n      foundMappedChild = true\n    } else if (!equalYTypePNode(rightY, rightP)) {\n      break\n    }\n  }\n  return {\n    equalityFactor: left + right,\n    foundMappedChild\n  }\n}\n\n/**\n * @param {Y.Text} ytext\n */\nconst ytextTrans = (ytext) => {\n  let str = ''\n  /**\n   * @type {Y.Item|null}\n   */\n  let n = ytext._start\n  const nAttrs = {}\n  while (n !== null) {\n    if (!n.deleted) {\n      if (n.countable && n.content instanceof Y.ContentString) {\n        str += n.content.str\n      } else if (n.content instanceof Y.ContentFormat) {\n        nAttrs[n.content.key] = null\n      }\n    }\n    n = n.right\n  }\n  return {\n    str,\n    nAttrs\n  }\n}\n\n/**\n * @todo test this more\n *\n * @param {Y.Text} ytext\n * @param {Array<any>} ptexts\n * @param {BindingMetadata} meta\n */\nconst updateYText = (ytext, ptexts, meta) => {\n  meta.mapping.set(ytext, ptexts)\n  const { nAttrs, str } = ytextTrans(ytext)\n  const content = ptexts.map((p) => ({\n    insert: /** @type {any} */ (p).text,\n    attributes: Object.assign({}, nAttrs, marksToAttributes(p.marks, meta))\n  }))\n  const { insert, remove, index } = simpleDiff(\n    str,\n    content.map((c) => c.insert).join('')\n  )\n  ytext.delete(index, remove)\n  ytext.insert(index, insert)\n  ytext.applyDelta(\n    content.map((c) => ({ retain: c.insert.length, attributes: c.attributes }))\n  )\n}\n\nconst hashedMarkNameRegex = /(.*)(--[a-zA-Z0-9+/=]{8})$/\n/**\n * @param {string} attrName\n */\nexport const yattr2markname = attrName => hashedMarkNameRegex.exec(attrName)?.[1] ?? attrName\n\n/**\n * @todo move this to markstoattributes\n *\n * @param {Object<string, any>} attrs\n * @param {import('prosemirror-model').Schema} schema\n */\nexport const attributesToMarks = (attrs, schema) => {\n  /**\n   * @type {Array<import('prosemirror-model').Mark>}\n   */\n  const marks = []\n  for (const markName in attrs) {\n    // remove hashes if necessary\n    marks.push(schema.mark(yattr2markname(markName), attrs[markName]))\n  }\n  return marks\n}\n\n/**\n * @param {Array<import('prosemirror-model').Mark>} marks\n * @param {BindingMetadata} meta\n */\nconst marksToAttributes = (marks, meta) => {\n  const pattrs = {}\n  marks.forEach((mark) => {\n    if (mark.type.name !== 'ychange') {\n      const isOverlapping = map.setIfUndefined(meta.isOMark, mark.type, () => !mark.type.excludes(mark.type))\n      pattrs[isOverlapping ? `${mark.type.name}--${utils.hashOfJSON(mark.toJSON())}` : mark.type.name] = mark.attrs\n    }\n  })\n  return pattrs\n}\n\n/**\n * Update a yDom node by syncing the current content of the prosemirror node.\n *\n * This is a y-prosemirror internal feature that you can use at your own risk.\n *\n * @private\n * @unstable\n *\n * @param {{transact: Function}} y\n * @param {Y.XmlFragment} yDomFragment\n * @param {any} pNode\n * @param {BindingMetadata} meta\n */\nexport const updateYFragment = (y, yDomFragment, pNode, meta) => {\n  if (\n    yDomFragment instanceof Y.XmlElement &&\n    yDomFragment.nodeName !== pNode.type.name\n  ) {\n    throw new Error('node name mismatch!')\n  }\n  meta.mapping.set(yDomFragment, pNode)\n  // update attributes\n  if (yDomFragment instanceof Y.XmlElement) {\n    const yDomAttrs = yDomFragment.getAttributes()\n    const pAttrs = pNode.attrs\n    for (const key in pAttrs) {\n      if (pAttrs[key] !== null) {\n        if (yDomAttrs[key] !== pAttrs[key] && key !== 'ychange') {\n          yDomFragment.setAttribute(key, pAttrs[key])\n        }\n      } else {\n        yDomFragment.removeAttribute(key)\n      }\n    }\n    // remove all keys that are no longer in pAttrs\n    for (const key in yDomAttrs) {\n      if (pAttrs[key] === undefined) {\n        yDomFragment.removeAttribute(key)\n      }\n    }\n  }\n  // update children\n  const pChildren = normalizePNodeContent(pNode)\n  const pChildCnt = pChildren.length\n  const yChildren = yDomFragment.toArray()\n  const yChildCnt = yChildren.length\n  const minCnt = math.min(pChildCnt, yChildCnt)\n  let left = 0\n  let right = 0\n  // find number of matching elements from left\n  for (; left < minCnt; left++) {\n    const leftY = yChildren[left]\n    const leftP = pChildren[left]\n    if (!mappedIdentity(meta.mapping.get(leftY), leftP)) {\n      if (equalYTypePNode(leftY, leftP)) {\n        // update mapping\n        meta.mapping.set(leftY, leftP)\n      } else {\n        break\n      }\n    }\n  }\n  // find number of matching elements from right\n  for (; right + left < minCnt; right++) {\n    const rightY = yChildren[yChildCnt - right - 1]\n    const rightP = pChildren[pChildCnt - right - 1]\n    if (!mappedIdentity(meta.mapping.get(rightY), rightP)) {\n      if (equalYTypePNode(rightY, rightP)) {\n        // update mapping\n        meta.mapping.set(rightY, rightP)\n      } else {\n        break\n      }\n    }\n  }\n  y.transact(() => {\n    // try to compare and update\n    while (yChildCnt - left - right > 0 && pChildCnt - left - right > 0) {\n      const leftY = yChildren[left]\n      const leftP = pChildren[left]\n      const rightY = yChildren[yChildCnt - right - 1]\n      const rightP = pChildren[pChildCnt - right - 1]\n      if (leftY instanceof Y.XmlText && leftP instanceof Array) {\n        if (!equalYTextPText(leftY, leftP)) {\n          updateYText(leftY, leftP, meta)\n        }\n        left += 1\n      } else {\n        let updateLeft = leftY instanceof Y.XmlElement &&\n          matchNodeName(leftY, leftP)\n        let updateRight = rightY instanceof Y.XmlElement &&\n          matchNodeName(rightY, rightP)\n        if (updateLeft && updateRight) {\n          // decide which which element to update\n          const equalityLeft = computeChildEqualityFactor(\n            /** @type {Y.XmlElement} */ (leftY),\n            /** @type {PModel.Node} */ (leftP),\n            meta\n          )\n          const equalityRight = computeChildEqualityFactor(\n            /** @type {Y.XmlElement} */ (rightY),\n            /** @type {PModel.Node} */ (rightP),\n            meta\n          )\n          if (\n            equalityLeft.foundMappedChild && !equalityRight.foundMappedChild\n          ) {\n            updateRight = false\n          } else if (\n            !equalityLeft.foundMappedChild && equalityRight.foundMappedChild\n          ) {\n            updateLeft = false\n          } else if (\n            equalityLeft.equalityFactor < equalityRight.equalityFactor\n          ) {\n            updateLeft = false\n          } else {\n            updateRight = false\n          }\n        }\n        if (updateLeft) {\n          updateYFragment(\n            y,\n            /** @type {Y.XmlFragment} */ (leftY),\n            /** @type {PModel.Node} */ (leftP),\n            meta\n          )\n          left += 1\n        } else if (updateRight) {\n          updateYFragment(\n            y,\n            /** @type {Y.XmlFragment} */ (rightY),\n            /** @type {PModel.Node} */ (rightP),\n            meta\n          )\n          right += 1\n        } else {\n          meta.mapping.delete(yDomFragment.get(left))\n          yDomFragment.delete(left, 1)\n          yDomFragment.insert(left, [\n            createTypeFromTextOrElementNode(leftP, meta)\n          ])\n          left += 1\n        }\n      }\n    }\n    const yDelLen = yChildCnt - left - right\n    if (\n      yChildCnt === 1 && pChildCnt === 0 && yChildren[0] instanceof Y.XmlText\n    ) {\n      meta.mapping.delete(yChildren[0])\n      // Edge case handling https://github.com/yjs/y-prosemirror/issues/108\n      // Only delete the content of the Y.Text to retain remote changes on the same Y.Text object\n      yChildren[0].delete(0, yChildren[0].length)\n    } else if (yDelLen > 0) {\n      yDomFragment.slice(left, left + yDelLen).forEach(type => meta.mapping.delete(type))\n      yDomFragment.delete(left, yDelLen)\n    }\n    if (left + right < pChildCnt) {\n      const ins = []\n      for (let i = left; i < pChildCnt - right; i++) {\n        ins.push(createTypeFromTextOrElementNode(pChildren[i], meta))\n      }\n      yDomFragment.insert(left, ins)\n    }\n  }, ySyncPluginKey)\n}\n\n/**\n * @function\n * @param {Y.XmlElement} yElement\n * @param {any} pNode Prosemirror Node\n */\nconst matchNodeName = (yElement, pNode) =>\n  !(pNode instanceof Array) && yElement.nodeName === pNode.type.name\n","import { updateYFragment, createNodeFromYElement, yattr2markname, createEmptyMeta } from './plugins/sync-plugin.js' // eslint-disable-line\nimport { ySyncPluginKey } from './plugins/keys.js'\nimport * as Y from 'yjs'\nimport { EditorView } from 'prosemirror-view' // eslint-disable-line\nimport { Node, Schema, Fragment } from 'prosemirror-model' // eslint-disable-line\nimport * as error from 'lib0/error'\nimport * as map from 'lib0/map'\nimport * as eventloop from 'lib0/eventloop'\n\n/**\n * Either a node if type is YXmlElement or an Array of text nodes if YXmlText\n * @typedef {Map<Y.AbstractType, Node | Array<Node>>} ProsemirrorMapping\n */\n\n/**\n * Is null if no timeout is in progress.\n * Is defined if a timeout is in progress.\n * Maps from view\n * @type {Map<EditorView, Map<any, any>>|null}\n */\nlet viewsToUpdate = null\n\nconst updateMetas = () => {\n  const ups = /** @type {Map<EditorView, Map<any, any>>} */ (viewsToUpdate)\n  viewsToUpdate = null\n  ups.forEach((metas, view) => {\n    const tr = view.state.tr\n    const syncState = ySyncPluginKey.getState(view.state)\n    if (syncState && syncState.binding && !syncState.binding.isDestroyed) {\n      metas.forEach((val, key) => {\n        tr.setMeta(key, val)\n      })\n      view.dispatch(tr)\n    }\n  })\n}\n\nexport const setMeta = (view, key, value) => {\n  if (!viewsToUpdate) {\n    viewsToUpdate = new Map()\n    eventloop.timeout(0, updateMetas)\n  }\n  map.setIfUndefined(viewsToUpdate, view, map.create).set(key, value)\n}\n\n/**\n * Transforms a Prosemirror based absolute position to a Yjs Cursor (relative position in the Yjs model).\n *\n * @param {number} pos\n * @param {Y.XmlFragment} type\n * @param {ProsemirrorMapping} mapping\n * @return {any} relative position\n */\nexport const absolutePositionToRelativePosition = (pos, type, mapping) => {\n  if (pos === 0) {\n    // if the type is later populated, we want to retain the 0 position (hence assoc=-1)\n    return Y.createRelativePositionFromTypeIndex(type, 0, type.length === 0 ? -1 : 0)\n  }\n  /**\n   * @type {any}\n   */\n  let n = type._first === null ? null : /** @type {Y.ContentType} */ (type._first.content).type\n  while (n !== null && type !== n) {\n    if (n instanceof Y.XmlText) {\n      if (n._length >= pos) {\n        return Y.createRelativePositionFromTypeIndex(n, pos, type.length === 0 ? -1 : 0)\n      } else {\n        pos -= n._length\n      }\n      if (n._item !== null && n._item.next !== null) {\n        n = /** @type {Y.ContentType} */ (n._item.next.content).type\n      } else {\n        do {\n          n = n._item === null ? null : n._item.parent\n          pos--\n        } while (n !== type && n !== null && n._item !== null && n._item.next === null)\n        if (n !== null && n !== type) {\n          // @ts-gnore we know that n.next !== null because of above loop conditition\n          n = n._item === null ? null : /** @type {Y.ContentType} */ (/** @type Y.Item */ (n._item.next).content).type\n        }\n      }\n    } else {\n      const pNodeSize = /** @type {any} */ (mapping.get(n) || { nodeSize: 0 }).nodeSize\n      if (n._first !== null && pos < pNodeSize) {\n        n = /** @type {Y.ContentType} */ (n._first.content).type\n        pos--\n      } else {\n        if (pos === 1 && n._length === 0 && pNodeSize > 1) {\n          // edge case, should end in this paragraph\n          return new Y.RelativePosition(n._item === null ? null : n._item.id, n._item === null ? Y.findRootTypeKey(n) : null, null)\n        }\n        pos -= pNodeSize\n        if (n._item !== null && n._item.next !== null) {\n          n = /** @type {Y.ContentType} */ (n._item.next.content).type\n        } else {\n          if (pos === 0) {\n            // set to end of n.parent\n            n = n._item === null ? n : n._item.parent\n            return new Y.RelativePosition(n._item === null ? null : n._item.id, n._item === null ? Y.findRootTypeKey(n) : null, null)\n          }\n          do {\n            n = /** @type {Y.Item} */ (n._item).parent\n            pos--\n          } while (n !== type && /** @type {Y.Item} */ (n._item).next === null)\n          // if n is null at this point, we have an unexpected case\n          if (n !== type) {\n            // We know that n._item.next is defined because of above loop condition\n            n = /** @type {Y.ContentType} */ (/** @type {Y.Item} */ (/** @type {Y.Item} */ (n._item).next).content).type\n          }\n        }\n      }\n    }\n    if (n === null) {\n      throw error.unexpectedCase()\n    }\n    if (pos === 0 && n.constructor !== Y.XmlText && n !== type) { // TODO: set to <= 0\n      return createRelativePosition(n._item.parent, n._item)\n    }\n  }\n  return Y.createRelativePositionFromTypeIndex(type, type._length, type.length === 0 ? -1 : 0)\n}\n\nconst createRelativePosition = (type, item) => {\n  let typeid = null\n  let tname = null\n  if (type._item === null) {\n    tname = Y.findRootTypeKey(type)\n  } else {\n    typeid = Y.createID(type._item.id.client, type._item.id.clock)\n  }\n  return new Y.RelativePosition(typeid, tname, item.id)\n}\n\n/**\n * @param {Y.Doc} y\n * @param {Y.XmlFragment} documentType Top level type that is bound to pView\n * @param {any} relPos Encoded Yjs based relative position\n * @param {ProsemirrorMapping} mapping\n * @return {null|number}\n */\nexport const relativePositionToAbsolutePosition = (y, documentType, relPos, mapping) => {\n  const decodedPos = Y.createAbsolutePositionFromRelativePosition(relPos, y)\n  if (decodedPos === null || (decodedPos.type !== documentType && !Y.isParentOf(documentType, decodedPos.type._item))) {\n    return null\n  }\n  let type = decodedPos.type\n  let pos = 0\n  if (type.constructor === Y.XmlText) {\n    pos = decodedPos.index\n  } else if (type._item === null || !type._item.deleted) {\n    let n = type._first\n    let i = 0\n    while (i < type._length && i < decodedPos.index && n !== null) {\n      if (!n.deleted) {\n        const t = /** @type {Y.ContentType} */ (n.content).type\n        i++\n        if (t instanceof Y.XmlText) {\n          pos += t._length\n        } else {\n          pos += /** @type {any} */ (mapping.get(t)).nodeSize\n        }\n      }\n      n = /** @type {Y.Item} */ (n.right)\n    }\n    pos += 1 // increase because we go out of n\n  }\n  while (type !== documentType && type._item !== null) {\n    // @ts-ignore\n    const parent = type._item.parent\n    // @ts-ignore\n    if (parent._item === null || !parent._item.deleted) {\n      pos += 1 // the start tag\n      let n = /** @type {Y.AbstractType} */ (parent)._first\n      // now iterate until we found type\n      while (n !== null) {\n        const contentType = /** @type {Y.ContentType} */ (n.content).type\n        if (contentType === type) {\n          break\n        }\n        if (!n.deleted) {\n          if (contentType instanceof Y.XmlText) {\n            pos += contentType._length\n          } else {\n            pos += /** @type {any} */ (mapping.get(contentType)).nodeSize\n          }\n        }\n        n = n.right\n      }\n    }\n    type = /** @type {Y.AbstractType} */ (parent)\n  }\n  return pos - 1 // we don't count the most outer tag, because it is a fragment\n}\n\n/**\n * Utility function for converting an Y.Fragment to a ProseMirror fragment.\n *\n * @param {Y.XmlFragment} yXmlFragment\n * @param {Schema} schema\n */\nexport const yXmlFragmentToProseMirrorFragment = (yXmlFragment, schema) => {\n  const fragmentContent = yXmlFragment.toArray().map((t) =>\n    createNodeFromYElement(\n      /** @type {Y.XmlElement} */ (t),\n      schema,\n      createEmptyMeta()\n    )\n  ).filter((n) => n !== null)\n  return Fragment.fromArray(fragmentContent)\n}\n\n/**\n * Utility function for converting an Y.Fragment to a ProseMirror node.\n *\n * @param {Y.XmlFragment} yXmlFragment\n * @param {Schema} schema\n */\nexport const yXmlFragmentToProseMirrorRootNode = (yXmlFragment, schema) =>\n  schema.topNodeType.create(null, yXmlFragmentToProseMirrorFragment(yXmlFragment, schema))\n\n/**\n * The initial ProseMirror content should be supplied by Yjs. This function transforms a Y.Fragment\n * to a ProseMirror Doc node and creates a mapping that is used by the sync plugin.\n *\n * @param {Y.XmlFragment} yXmlFragment\n * @param {Schema} schema\n *\n * @todo deprecate mapping property\n */\nexport const initProseMirrorDoc = (yXmlFragment, schema) => {\n  const meta = createEmptyMeta()\n  const fragmentContent = yXmlFragment.toArray().map((t) =>\n    createNodeFromYElement(\n      /** @type {Y.XmlElement} */ (t),\n      schema,\n      meta\n    )\n  ).filter((n) => n !== null)\n  const doc = schema.topNodeType.create(null, Fragment.fromArray(fragmentContent))\n  return { doc, meta, mapping: meta.mapping }\n}\n\n/**\n * Utility method to convert a Prosemirror Doc Node into a Y.Doc.\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * @param {Node} doc\n * @param {string} xmlFragment\n * @return {Y.Doc}\n */\nexport function prosemirrorToYDoc (doc, xmlFragment = 'prosemirror') {\n  const ydoc = new Y.Doc()\n  const type = /** @type {Y.XmlFragment} */ (ydoc.get(xmlFragment, Y.XmlFragment))\n  if (!type.doc) {\n    return ydoc\n  }\n\n  prosemirrorToYXmlFragment(doc, type)\n  return type.doc\n}\n\n/**\n * Utility method to update an empty Y.XmlFragment with content from a Prosemirror Doc Node.\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * Note: The Y.XmlFragment does not need to be part of a Y.Doc document at the time that this\n * method is called, but it must be added before any other operations are performed on it.\n *\n * @param {Node} doc prosemirror document.\n * @param {Y.XmlFragment} [xmlFragment] If supplied, an xml fragment to be\n *   populated from the prosemirror state; otherwise a new XmlFragment will be created.\n * @return {Y.XmlFragment}\n */\nexport function prosemirrorToYXmlFragment (doc, xmlFragment) {\n  const type = xmlFragment || new Y.XmlFragment()\n  const ydoc = type.doc ? type.doc : { transact: (transaction) => transaction(undefined) }\n  updateYFragment(ydoc, type, doc, { mapping: new Map(), isOMark: new Map() })\n  return type\n}\n\n/**\n * Utility method to convert Prosemirror compatible JSON into a Y.Doc.\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * @param {Schema} schema\n * @param {any} state\n * @param {string} xmlFragment\n * @return {Y.Doc}\n */\nexport function prosemirrorJSONToYDoc (schema, state, xmlFragment = 'prosemirror') {\n  const doc = Node.fromJSON(schema, state)\n  return prosemirrorToYDoc(doc, xmlFragment)\n}\n\n/**\n * Utility method to convert Prosemirror compatible JSON to a Y.XmlFragment\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * @param {Schema} schema\n * @param {any} state\n * @param {Y.XmlFragment} [xmlFragment] If supplied, an xml fragment to be\n *   populated from the prosemirror state; otherwise a new XmlFragment will be created.\n * @return {Y.XmlFragment}\n */\nexport function prosemirrorJSONToYXmlFragment (schema, state, xmlFragment) {\n  const doc = Node.fromJSON(schema, state)\n  return prosemirrorToYXmlFragment(doc, xmlFragment)\n}\n\n/**\n * @deprecated Use `yXmlFragmentToProseMirrorRootNode` instead\n *\n * Utility method to convert a Y.Doc to a Prosemirror Doc node.\n *\n * @param {Schema} schema\n * @param {Y.Doc} ydoc\n * @return {Node}\n */\nexport function yDocToProsemirror (schema, ydoc) {\n  const state = yDocToProsemirrorJSON(ydoc)\n  return Node.fromJSON(schema, state)\n}\n\n/**\n *\n * @deprecated Use `yXmlFragmentToProseMirrorRootNode` instead\n *\n * Utility method to convert a Y.XmlFragment to a Prosemirror Doc node.\n *\n * @param {Schema} schema\n * @param {Y.XmlFragment} xmlFragment\n * @return {Node}\n */\nexport function yXmlFragmentToProsemirror (schema, xmlFragment) {\n  const state = yXmlFragmentToProsemirrorJSON(xmlFragment)\n  return Node.fromJSON(schema, state)\n}\n\n/**\n *\n * @deprecated Use `yXmlFragmentToProseMirrorRootNode` instead\n *\n * Utility method to convert a Y.Doc to Prosemirror compatible JSON.\n *\n * @param {Y.Doc} ydoc\n * @param {string} xmlFragment\n * @return {Record<string, any>}\n */\nexport function yDocToProsemirrorJSON (\n  ydoc,\n  xmlFragment = 'prosemirror'\n) {\n  return yXmlFragmentToProsemirrorJSON(ydoc.getXmlFragment(xmlFragment))\n}\n\n/**\n * @deprecated Use `yXmlFragmentToProseMirrorRootNode` instead\n *\n * Utility method to convert a Y.Doc to Prosemirror compatible JSON.\n *\n * @param {Y.XmlFragment} xmlFragment The fragment, which must be part of a Y.Doc.\n * @return {Record<string, any>}\n */\nexport function yXmlFragmentToProsemirrorJSON (xmlFragment) {\n  const items = xmlFragment.toArray()\n\n  /**\n   * @param {Y.AbstractType} item\n   */\n  const serialize = item => {\n    /**\n     * @type {Object} NodeObject\n     * @property {string} NodeObject.type\n     * @property {Record<string, string>=} NodeObject.attrs\n     * @property {Array<NodeObject>=} NodeObject.content\n     */\n    let response\n\n    // TODO: Must be a better way to detect text nodes than this\n    if (item instanceof Y.XmlText) {\n      const delta = item.toDelta()\n      response = delta.map(/** @param {any} d */ (d) => {\n        const text = {\n          type: 'text',\n          text: d.insert\n        }\n        if (d.attributes) {\n          text.marks = Object.keys(d.attributes).map((type_) => {\n            const attrs = d.attributes[type_]\n            const type = yattr2markname(type_)\n            const mark = {\n              type\n            }\n            if (Object.keys(attrs)) {\n              mark.attrs = attrs\n            }\n            return mark\n          })\n        }\n        return text\n      })\n    } else if (item instanceof Y.XmlElement) {\n      response = {\n        type: item.nodeName\n      }\n\n      const attrs = item.getAttributes()\n      if (Object.keys(attrs).length) {\n        response.attrs = attrs\n      }\n\n      const children = item.toArray()\n      if (children.length) {\n        response.content = children.map(serialize).flat()\n      }\n    } else {\n      // expected either Y.XmlElement or Y.XmlText\n      error.unexpectedCase()\n    }\n\n    return response\n  }\n\n  return {\n    type: 'doc',\n    content: items.map(serialize)\n  }\n}\n","import * as Y from 'yjs'\nimport { Decoration, DecorationSet } from \"prosemirror-view\"; // eslint-disable-line\nimport { Plugin } from \"prosemirror-state\"; // eslint-disable-line\nimport { Awareness } from \"y-protocols/awareness\"; // eslint-disable-line\nimport {\n  absolutePositionToRelativePosition,\n  relativePositionToAbsolutePosition,\n  setMeta\n} from '../lib.js'\nimport { yCursorPluginKey, ySyncPluginKey } from './keys.js'\n\nimport * as math from 'lib0/math'\n\n/**\n * Default awareness state filter\n *\n * @param {number} currentClientId current client id\n * @param {number} userClientId user client id\n * @param {any} _user user data\n * @return {boolean}\n */\nexport const defaultAwarenessStateFilter = (currentClientId, userClientId, _user) => currentClientId !== userClientId\n\n/**\n * Default generator for a cursor element\n *\n * @param {any} user user data\n * @return {HTMLElement}\n */\nexport const defaultCursorBuilder = (user) => {\n  const cursor = document.createElement('span')\n  cursor.classList.add('ProseMirror-yjs-cursor')\n  cursor.setAttribute('style', `border-color: ${user.color}`)\n  const userDiv = document.createElement('div')\n  userDiv.setAttribute('style', `background-color: ${user.color}`)\n  userDiv.insertBefore(document.createTextNode(user.name), null)\n  const nonbreakingSpace1 = document.createTextNode('\\u2060')\n  const nonbreakingSpace2 = document.createTextNode('\\u2060')\n  cursor.insertBefore(nonbreakingSpace1, null)\n  cursor.insertBefore(userDiv, null)\n  cursor.insertBefore(nonbreakingSpace2, null)\n  return cursor\n}\n\n/**\n * Default generator for the selection attributes\n *\n * @param {any} user user data\n * @return {import('prosemirror-view').DecorationAttrs}\n */\nexport const defaultSelectionBuilder = (user) => {\n  return {\n    style: `background-color: ${user.color}70`,\n    class: 'ProseMirror-yjs-selection'\n  }\n}\n\nconst rxValidColor = /^#[0-9a-fA-F]{6}$/\n\n/**\n * @param {any} state\n * @param {Awareness} awareness\n * @param {function(number, number, any):boolean} awarenessFilter\n * @param {(user: { name: string, color: string }, clientId: number) => Element} createCursor\n * @param {(user: { name: string, color: string }, clientId: number) => import('prosemirror-view').DecorationAttrs} createSelection\n * @return {any} DecorationSet\n */\nexport const createDecorations = (\n  state,\n  awareness,\n  awarenessFilter,\n  createCursor,\n  createSelection\n) => {\n  const ystate = ySyncPluginKey.getState(state)\n  const y = ystate.doc\n  const decorations = []\n  if (\n    ystate.snapshot != null || ystate.prevSnapshot != null ||\n    ystate.binding.mapping.size === 0\n  ) {\n    // do not render cursors while snapshot is active\n    return DecorationSet.create(state.doc, [])\n  }\n  awareness.getStates().forEach((aw, clientId) => {\n    if (!awarenessFilter(y.clientID, clientId, aw)) {\n      return\n    }\n\n    if (aw.cursor != null) {\n      const user = aw.user || {}\n      if (user.color == null) {\n        user.color = '#ffa500'\n      } else if (!rxValidColor.test(user.color)) {\n        // We only support 6-digit RGB colors in y-prosemirror\n        console.warn('A user uses an unsupported color format', user)\n      }\n      if (user.name == null) {\n        user.name = `User: ${clientId}`\n      }\n      let anchor = relativePositionToAbsolutePosition(\n        y,\n        ystate.type,\n        Y.createRelativePositionFromJSON(aw.cursor.anchor),\n        ystate.binding.mapping\n      )\n      let head = relativePositionToAbsolutePosition(\n        y,\n        ystate.type,\n        Y.createRelativePositionFromJSON(aw.cursor.head),\n        ystate.binding.mapping\n      )\n      if (anchor !== null && head !== null) {\n        const maxsize = math.max(state.doc.content.size - 1, 0)\n        anchor = math.min(anchor, maxsize)\n        head = math.min(head, maxsize)\n        decorations.push(\n          Decoration.widget(head, () => createCursor(user, clientId), {\n            key: clientId + '',\n            side: 10\n          })\n        )\n        const from = math.min(anchor, head)\n        const to = math.max(anchor, head)\n        decorations.push(\n          Decoration.inline(from, to, createSelection(user, clientId), {\n            inclusiveEnd: true,\n            inclusiveStart: false\n          })\n        )\n      }\n    }\n  })\n  return DecorationSet.create(state.doc, decorations)\n}\n\n/**\n * A prosemirror plugin that listens to awareness information on Yjs.\n * This requires that a `prosemirrorPlugin` is also bound to the prosemirror.\n *\n * @public\n * @param {Awareness} awareness\n * @param {object} opts\n * @param {function(any, any, any):boolean} [opts.awarenessStateFilter]\n * @param {(user: any, clientId: number) => HTMLElement} [opts.cursorBuilder]\n * @param {(user: any, clientId: number) => import('prosemirror-view').DecorationAttrs} [opts.selectionBuilder]\n * @param {function(any):any} [opts.getSelection]\n * @param {string} [cursorStateField] By default all editor bindings use the awareness 'cursor' field to propagate cursor information.\n * @return {any}\n */\nexport const yCursorPlugin = (\n  awareness,\n  {\n    awarenessStateFilter = defaultAwarenessStateFilter,\n    cursorBuilder = defaultCursorBuilder,\n    selectionBuilder = defaultSelectionBuilder,\n    getSelection = (state) => state.selection\n  } = {},\n  cursorStateField = 'cursor'\n) =>\n  new Plugin({\n    key: yCursorPluginKey,\n    state: {\n      init (_, state) {\n        return createDecorations(\n          state,\n          awareness,\n          awarenessStateFilter,\n          cursorBuilder,\n          selectionBuilder\n        )\n      },\n      apply (tr, prevState, _oldState, newState) {\n        const ystate = ySyncPluginKey.getState(newState)\n        const yCursorState = tr.getMeta(yCursorPluginKey)\n        if (\n          (ystate && ystate.isChangeOrigin) ||\n          (yCursorState && yCursorState.awarenessUpdated)\n        ) {\n          return createDecorations(\n            newState,\n            awareness,\n            awarenessStateFilter,\n            cursorBuilder,\n            selectionBuilder\n          )\n        }\n        return prevState.map(tr.mapping, tr.doc)\n      }\n    },\n    props: {\n      decorations: (state) => {\n        return yCursorPluginKey.getState(state)\n      }\n    },\n    view: (view) => {\n      const awarenessListener = () => {\n        // @ts-ignore\n        if (view.docView) {\n          setMeta(view, yCursorPluginKey, { awarenessUpdated: true })\n        }\n      }\n      const updateCursorInfo = () => {\n        const ystate = ySyncPluginKey.getState(view.state)\n        // @note We make implicit checks when checking for the cursor property\n        const current = awareness.getLocalState() || {}\n        if (view.hasFocus()) {\n          const selection = getSelection(view.state)\n          /**\n           * @type {Y.RelativePosition}\n           */\n          const anchor = absolutePositionToRelativePosition(\n            selection.anchor,\n            ystate.type,\n            ystate.binding.mapping\n          )\n          /**\n           * @type {Y.RelativePosition}\n           */\n          const head = absolutePositionToRelativePosition(\n            selection.head,\n            ystate.type,\n            ystate.binding.mapping\n          )\n          if (\n            current.cursor == null ||\n            !Y.compareRelativePositions(\n              Y.createRelativePositionFromJSON(current.cursor.anchor),\n              anchor\n            ) ||\n            !Y.compareRelativePositions(\n              Y.createRelativePositionFromJSON(current.cursor.head),\n              head\n            )\n          ) {\n            awareness.setLocalStateField(cursorStateField, {\n              anchor,\n              head\n            })\n          }\n        } else if (\n          current.cursor != null &&\n          relativePositionToAbsolutePosition(\n            ystate.doc,\n            ystate.type,\n            Y.createRelativePositionFromJSON(current.cursor.anchor),\n            ystate.binding.mapping\n          ) !== null\n        ) {\n          // delete cursor information if current cursor information is owned by this editor binding\n          awareness.setLocalStateField(cursorStateField, null)\n        }\n      }\n      awareness.on('change', awarenessListener)\n      view.dom.addEventListener('focusin', updateCursorInfo)\n      view.dom.addEventListener('focusout', updateCursorInfo)\n      return {\n        update: updateCursorInfo,\n        destroy: () => {\n          view.dom.removeEventListener('focusin', updateCursorInfo)\n          view.dom.removeEventListener('focusout', updateCursorInfo)\n          awareness.off('change', awarenessListener)\n          awareness.setLocalStateField(cursorStateField, null)\n        }\n      }\n    }\n  })\n","import { Plugin } from 'prosemirror-state'\n\nimport { getRelativeSelection } from './sync-plugin.js'\nimport { UndoManager, Item, ContentType, XmlElement, Text } from 'yjs'\nimport { yUndoPluginKey, ySyncPluginKey } from './keys.js'\n\n/**\n * @typedef {Object} UndoPluginState\n * @property {import('yjs').UndoManager} undoManager\n * @property {ReturnType<typeof getRelativeSelection> | null} prevSel\n * @property {boolean} hasUndoOps\n * @property {boolean} hasRedoOps\n */\n\n/**\n * Undo the last user action\n *\n * @param {import('prosemirror-state').EditorState} state\n * @return {boolean} whether a change was undone\n */\nexport const undo = state => yUndoPluginKey.getState(state)?.undoManager?.undo() != null\n\n/**\n * Redo the last user action\n *\n * @param {import('prosemirror-state').EditorState} state\n * @return {boolean} whether a change was undone\n */\nexport const redo = state => yUndoPluginKey.getState(state)?.undoManager?.redo() != null\n\n/**\n * Undo the last user action if there are undo operations available\n * @type {import('prosemirror-state').Command}\n */\nexport const undoCommand = (state, dispatch) => dispatch == null ? yUndoPluginKey.getState(state)?.undoManager?.canUndo() : undo(state)\n\n/**\n * Redo the last user action if there are redo operations available\n * @type {import('prosemirror-state').Command}\n */\nexport const redoCommand = (state, dispatch) => dispatch == null ? yUndoPluginKey.getState(state)?.undoManager?.canRedo() : redo(state)\n\nexport const defaultProtectedNodes = new Set(['paragraph'])\n\n/**\n * @param {import('yjs').Item} item\n * @param {Set<string>} protectedNodes\n * @returns {boolean}\n */\nexport const defaultDeleteFilter = (item, protectedNodes) => !(item instanceof Item) ||\n  !(item.content instanceof ContentType) ||\n  !(item.content.type instanceof Text ||\n  (item.content.type instanceof XmlElement && protectedNodes.has(item.content.type.nodeName))) ||\n  item.content.type._length === 0\n\n/**\n * @param {object} [options]\n * @param {Set<string>} [options.protectedNodes]\n * @param {any[]} [options.trackedOrigins]\n * @param {import('yjs').UndoManager | null} [options.undoManager]\n */\nexport const yUndoPlugin = ({ protectedNodes = defaultProtectedNodes, trackedOrigins = [], undoManager = null } = {}) => new Plugin({\n  key: yUndoPluginKey,\n  state: {\n    init: (initargs, state) => {\n      // TODO: check if plugin order matches and fix\n      const ystate = ySyncPluginKey.getState(state)\n      const _undoManager = undoManager || new UndoManager(ystate.type, {\n        trackedOrigins: new Set([ySyncPluginKey].concat(trackedOrigins)),\n        deleteFilter: (item) => defaultDeleteFilter(item, protectedNodes),\n        captureTransaction: tr => tr.meta.get('addToHistory') !== false\n      })\n      return {\n        undoManager: _undoManager,\n        prevSel: null,\n        hasUndoOps: _undoManager.undoStack.length > 0,\n        hasRedoOps: _undoManager.redoStack.length > 0\n      }\n    },\n    apply: (tr, val, oldState, state) => {\n      const binding = ySyncPluginKey.getState(state).binding\n      const undoManager = val.undoManager\n      const hasUndoOps = undoManager.undoStack.length > 0\n      const hasRedoOps = undoManager.redoStack.length > 0\n      if (binding) {\n        return {\n          undoManager,\n          prevSel: getRelativeSelection(binding, oldState),\n          hasUndoOps,\n          hasRedoOps\n        }\n      } else {\n        if (hasUndoOps !== val.hasUndoOps || hasRedoOps !== val.hasRedoOps) {\n          return Object.assign({}, val, {\n            hasUndoOps: undoManager.undoStack.length > 0,\n            hasRedoOps: undoManager.redoStack.length > 0\n          })\n        } else { // nothing changed\n          return val\n        }\n      }\n    }\n  },\n  view: view => {\n    const ystate = ySyncPluginKey.getState(view.state)\n    const undoManager = yUndoPluginKey.getState(view.state).undoManager\n    undoManager.on('stack-item-added', ({ stackItem }) => {\n      const binding = ystate.binding\n      if (binding) {\n        stackItem.meta.set(binding, yUndoPluginKey.getState(view.state).prevSel)\n      }\n    })\n    undoManager.on('stack-item-popped', ({ stackItem }) => {\n      const binding = ystate.binding\n      if (binding) {\n        binding.beforeTransactionSelection = stackItem.meta.get(binding) || binding.beforeTransactionSelection\n      }\n    })\n    return {\n      destroy: () => {\n        undoManager.destroy()\n      }\n    }\n  }\n})\n"],"names":["PluginKey","buf","sha256","Y","set","random","Plugin","eventloop","AllSelection","NodeSelection","TextSelection","createMutex","environment","dom","PModel","math","error","object","simpleDiff","map","utils.hashOfJSON","Fragment","Node","DecorationSet","Decoration","Item","ContentType","Text","XmlElement","UndoManager"],"mappings":"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"}