69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
| /**
 | |
|  * Copyright (c) Meta Platforms, Inc. and affiliates.
 | |
|  *
 | |
|  * This source code is licensed under the MIT license found in the
 | |
|  * LICENSE file in the root directory of this source tree.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| import type {Binding} from '.';
 | |
| import type {CollabElementNode} from './CollabElementNode';
 | |
| import type {LineBreakNode, NodeKey} from 'lexical';
 | |
| import type {Map as YMap} from 'yjs';
 | |
| 
 | |
| import {$getNodeByKey, $isLineBreakNode} from 'lexical';
 | |
| 
 | |
| export class CollabLineBreakNode {
 | |
|   _map: YMap<unknown>;
 | |
|   _key: NodeKey;
 | |
|   _parent: CollabElementNode;
 | |
|   _type: 'linebreak';
 | |
| 
 | |
|   constructor(map: YMap<unknown>, parent: CollabElementNode) {
 | |
|     this._key = '';
 | |
|     this._map = map;
 | |
|     this._parent = parent;
 | |
|     this._type = 'linebreak';
 | |
|   }
 | |
| 
 | |
|   getNode(): null | LineBreakNode {
 | |
|     const node = $getNodeByKey(this._key);
 | |
|     return $isLineBreakNode(node) ? node : null;
 | |
|   }
 | |
| 
 | |
|   getKey(): NodeKey {
 | |
|     return this._key;
 | |
|   }
 | |
| 
 | |
|   getSharedType(): YMap<unknown> {
 | |
|     return this._map;
 | |
|   }
 | |
| 
 | |
|   getType(): string {
 | |
|     return this._type;
 | |
|   }
 | |
| 
 | |
|   getSize(): number {
 | |
|     return 1;
 | |
|   }
 | |
| 
 | |
|   getOffset(): number {
 | |
|     const collabElementNode = this._parent;
 | |
|     return collabElementNode.getChildOffset(this);
 | |
|   }
 | |
| 
 | |
|   destroy(binding: Binding): void {
 | |
|     const collabNodeMap = binding.collabNodeMap;
 | |
|     collabNodeMap.delete(this._key);
 | |
|   }
 | |
| }
 | |
| 
 | |
| export function $createCollabLineBreakNode(
 | |
|   map: YMap<unknown>,
 | |
|   parent: CollabElementNode,
 | |
| ): CollabLineBreakNode {
 | |
|   const collabNode = new CollabLineBreakNode(map, parent);
 | |
|   map._collabNode = collabNode;
 | |
|   return collabNode;
 | |
| }
 |