{
  "version": 3,
  "sources": ["../../src/quill-delta/Delta.ts"],
  "sourcesContent": ["// File copied https://github.com/slab/delta/blob/main/src/Delta.ts with changes:\n// - fast-diff swapped out for 'diff',\n// - lodash.clonedeep is replaced with JSON parse / stringify\n// - lodash.isequal is replaced with fast-deep-equal.\n\n// @ts-ignore\n/**\n * External dependencies\n */\nimport type { Change } from 'diff';\nimport { diffChars, diffLines } from 'diff';\nimport { default as isEqual } from 'fast-deep-equal/es6';\n\n/**\n * Internal dependencies\n */\nimport AttributeMap from './AttributeMap';\nimport Op from './Op';\nimport OpIterator from './OpIterator';\n\nfunction cloneDeep< T >( value: T ): T {\n\treturn JSON.parse( JSON.stringify( value ) ) as T;\n}\n\nconst NULL_CHARACTER = String.fromCharCode( 0 ); // Placeholder char for embed in diff()\nconst STRING_TOO_LARGE_THRESHOLD = 10000; // If either string is larger than this, use a less precise diff algorithm optimized for large strings\n\n/**\n * Normalize diff changes so that `count` reflects UTF-16 code-unit length\n * rather than grapheme-cluster count (which diffChars may return when\n * Intl.Segmenter is available, e.g. diff v8+).\n *\n * @param changes - The array of changes from diffChars.\n * @return The changes with `count` normalized to UTF-16 code-unit length.\n */\nfunction normalizeChangeCounts( changes: Change[] ): Change[] {\n\treturn changes.map( ( change ) => ( {\n\t\t...change,\n\t\tcount: change.value.length,\n\t} ) );\n}\n\ninterface EmbedHandler< T > {\n\tcompose: ( a: T, b: T, keepNull: boolean ) => T;\n\tinvert: ( a: T, b: T ) => T;\n\ttransform: ( a: T, b: T, priority: boolean ) => T;\n}\n\nconst getEmbedTypeAndData = (\n\ta: Op[ 'insert' ] | Op[ 'retain' ],\n\tb: Op[ 'insert' ]\n): [ string, unknown, unknown ] => {\n\tif ( typeof a !== 'object' || a === null ) {\n\t\tthrow new Error( `cannot retain a ${ typeof a }` );\n\t}\n\tif ( typeof b !== 'object' || b === null ) {\n\t\tthrow new Error( `cannot retain a ${ typeof b }` );\n\t}\n\tconst embedType = Object.keys( a )[ 0 ];\n\tif ( ! embedType || embedType !== Object.keys( b )[ 0 ] ) {\n\t\tthrow new Error(\n\t\t\t`embed types not matched: ${ embedType } != ${\n\t\t\t\tObject.keys( b )[ 0 ]\n\t\t\t}`\n\t\t);\n\t}\n\treturn [ embedType, a[ embedType ], b[ embedType ] ];\n};\n\nclass Delta {\n\tstatic Op = Op;\n\tstatic OpIterator = OpIterator;\n\tstatic AttributeMap = AttributeMap;\n\tprivate static handlers: {\n\t\t[ embedType: string ]: EmbedHandler< unknown >;\n\t} = {};\n\n\tstatic registerEmbed< T >(\n\t\tembedType: string,\n\t\thandler: EmbedHandler< T >\n\t): void {\n\t\tthis.handlers[ embedType ] = handler as EmbedHandler< unknown >;\n\t}\n\n\tstatic unregisterEmbed( embedType: string ): void {\n\t\tdelete this.handlers[ embedType ];\n\t}\n\n\tprivate static getHandler( embedType: string ): EmbedHandler< unknown > {\n\t\tconst handler = this.handlers[ embedType ];\n\t\tif ( ! handler ) {\n\t\t\tthrow new Error( `no handlers for embed type \"${ embedType }\"` );\n\t\t}\n\t\treturn handler;\n\t}\n\n\tops: Op[];\n\tconstructor( ops?: Op[] | { ops: Op[] } ) {\n\t\t// Assume we are given a well formed ops\n\t\tif ( Array.isArray( ops ) ) {\n\t\t\tthis.ops = ops;\n\t\t} else if (\n\t\t\tops !== null &&\n\t\t\tops !== undefined &&\n\t\t\tArray.isArray( ops.ops )\n\t\t) {\n\t\t\tthis.ops = ops.ops;\n\t\t} else {\n\t\t\tthis.ops = [];\n\t\t}\n\t}\n\n\tinsert(\n\t\targ: string | Record< string, unknown >,\n\t\tattributes?: AttributeMap | null\n\t): this {\n\t\tconst newOp: Op = {};\n\t\tif ( typeof arg === 'string' && arg.length === 0 ) {\n\t\t\treturn this;\n\t\t}\n\t\tnewOp.insert = arg;\n\t\tif (\n\t\t\tattributes !== null &&\n\t\t\tattributes !== undefined &&\n\t\t\ttypeof attributes === 'object' &&\n\t\t\tObject.keys( attributes ).length > 0\n\t\t) {\n\t\t\tnewOp.attributes = attributes;\n\t\t}\n\t\treturn this.push( newOp );\n\t}\n\n\tdelete( length: number ): this {\n\t\tif ( length <= 0 ) {\n\t\t\treturn this;\n\t\t}\n\t\treturn this.push( { delete: length } );\n\t}\n\n\tretain(\n\t\tlength: number | Record< string, unknown >,\n\t\tattributes?: AttributeMap | null\n\t): this {\n\t\tif ( typeof length === 'number' && length <= 0 ) {\n\t\t\treturn this;\n\t\t}\n\t\tconst newOp: Op = { retain: length };\n\t\tif (\n\t\t\tattributes !== null &&\n\t\t\tattributes !== undefined &&\n\t\t\ttypeof attributes === 'object' &&\n\t\t\tObject.keys( attributes ).length > 0\n\t\t) {\n\t\t\tnewOp.attributes = attributes;\n\t\t}\n\t\treturn this.push( newOp );\n\t}\n\n\tpush( newOp: Op ): this {\n\t\tlet index = this.ops.length;\n\t\tlet lastOp = this.ops[ index - 1 ];\n\t\tnewOp = cloneDeep( newOp );\n\t\tif ( typeof lastOp === 'object' ) {\n\t\t\tif (\n\t\t\t\ttypeof newOp.delete === 'number' &&\n\t\t\t\ttypeof lastOp.delete === 'number'\n\t\t\t) {\n\t\t\t\tthis.ops[ index - 1 ] = {\n\t\t\t\t\tdelete: lastOp.delete + newOp.delete,\n\t\t\t\t};\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\t// Since it does not matter if we insert before or after deleting at the same index,\n\t\t\t// always prefer to insert first\n\t\t\tif (\n\t\t\t\ttypeof lastOp.delete === 'number' &&\n\t\t\t\tnewOp.insert !== null &&\n\t\t\t\tnewOp.insert !== undefined\n\t\t\t) {\n\t\t\t\tindex -= 1;\n\t\t\t\tlastOp = this.ops[ index - 1 ];\n\t\t\t\tif ( typeof lastOp !== 'object' ) {\n\t\t\t\t\tthis.ops.unshift( newOp );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( isEqual( newOp.attributes, lastOp.attributes ) ) {\n\t\t\t\tif (\n\t\t\t\t\ttypeof newOp.insert === 'string' &&\n\t\t\t\t\ttypeof lastOp.insert === 'string'\n\t\t\t\t) {\n\t\t\t\t\tthis.ops[ index - 1 ] = {\n\t\t\t\t\t\tinsert: lastOp.insert + newOp.insert,\n\t\t\t\t\t};\n\t\t\t\t\tif ( typeof newOp.attributes === 'object' ) {\n\t\t\t\t\t\tthis.ops[ index - 1 ].attributes = newOp.attributes;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t} else if (\n\t\t\t\t\ttypeof newOp.retain === 'number' &&\n\t\t\t\t\ttypeof lastOp.retain === 'number'\n\t\t\t\t) {\n\t\t\t\t\tthis.ops[ index - 1 ] = {\n\t\t\t\t\t\tretain: lastOp.retain + newOp.retain,\n\t\t\t\t\t};\n\t\t\t\t\tif ( typeof newOp.attributes === 'object' ) {\n\t\t\t\t\t\tthis.ops[ index - 1 ].attributes = newOp.attributes;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif ( index === this.ops.length ) {\n\t\t\tthis.ops.push( newOp );\n\t\t} else {\n\t\t\tthis.ops.splice( index, 0, newOp );\n\t\t}\n\t\treturn this;\n\t}\n\n\tchop(): this {\n\t\tconst lastOp = this.ops[ this.ops.length - 1 ];\n\t\tif (\n\t\t\tlastOp &&\n\t\t\ttypeof lastOp.retain === 'number' &&\n\t\t\t! lastOp.attributes\n\t\t) {\n\t\t\tthis.ops.pop();\n\t\t}\n\t\treturn this;\n\t}\n\n\tfilter( predicate: ( op: Op, index: number ) => boolean ): Op[] {\n\t\treturn this.ops.filter( predicate );\n\t}\n\n\tforEach( predicate: ( op: Op, index: number ) => void ): void {\n\t\tthis.ops.forEach( predicate );\n\t}\n\n\tmap< T >( predicate: ( op: Op, index: number ) => T ): T[] {\n\t\treturn this.ops.map( predicate );\n\t}\n\n\tpartition( predicate: ( op: Op ) => boolean ): [ Op[], Op[] ] {\n\t\tconst passed: Op[] = [];\n\t\tconst failed: Op[] = [];\n\t\tthis.forEach( ( op ) => {\n\t\t\tconst target = predicate( op ) ? passed : failed;\n\t\t\ttarget.push( op );\n\t\t} );\n\t\treturn [ passed, failed ];\n\t}\n\n\treduce< T >(\n\t\tpredicate: ( accum: T, curr: Op, index: number ) => T,\n\t\tinitialValue: T\n\t): T {\n\t\treturn this.ops.reduce( predicate, initialValue );\n\t}\n\n\tchangeLength(): number {\n\t\treturn this.reduce( ( length, elem ) => {\n\t\t\tif ( elem.insert ) {\n\t\t\t\treturn length + Op.length( elem );\n\t\t\t} else if ( elem.delete ) {\n\t\t\t\treturn length - elem.delete;\n\t\t\t}\n\t\t\treturn length;\n\t\t}, 0 );\n\t}\n\n\tlength(): number {\n\t\treturn this.reduce( ( length, elem ) => {\n\t\t\treturn length + Op.length( elem );\n\t\t}, 0 );\n\t}\n\n\tslice( start = 0, end = Infinity ): Delta {\n\t\tconst ops = [];\n\t\tconst iter = new OpIterator( this.ops );\n\t\tlet index = 0;\n\t\twhile ( index < end && iter.hasNext() ) {\n\t\t\tlet nextOp;\n\t\t\tif ( index < start ) {\n\t\t\t\tnextOp = iter.next( start - index );\n\t\t\t} else {\n\t\t\t\tnextOp = iter.next( end - index );\n\t\t\t\tops.push( nextOp );\n\t\t\t}\n\t\t\tindex += Op.length( nextOp );\n\t\t}\n\t\treturn new Delta( ops );\n\t}\n\n\tcompose( other: Delta ): Delta {\n\t\tconst thisIter = new OpIterator( this.ops );\n\t\tconst otherIter = new OpIterator( other.ops );\n\t\tconst ops = [];\n\t\tconst firstOther = otherIter.peek();\n\t\tif (\n\t\t\tfirstOther !== null &&\n\t\t\tfirstOther !== undefined &&\n\t\t\ttypeof firstOther.retain === 'number' &&\n\t\t\t( firstOther.attributes === null ||\n\t\t\t\tfirstOther.attributes === undefined )\n\t\t) {\n\t\t\tlet firstLeft = firstOther.retain;\n\t\t\twhile (\n\t\t\t\tthisIter.peekType() === 'insert' &&\n\t\t\t\tthisIter.peekLength() <= firstLeft\n\t\t\t) {\n\t\t\t\tfirstLeft -= thisIter.peekLength();\n\t\t\t\tops.push( thisIter.next() );\n\t\t\t}\n\t\t\tif ( firstOther.retain - firstLeft > 0 ) {\n\t\t\t\totherIter.next( firstOther.retain - firstLeft );\n\t\t\t}\n\t\t}\n\t\tconst delta = new Delta( ops );\n\t\twhile ( thisIter.hasNext() || otherIter.hasNext() ) {\n\t\t\tif ( otherIter.peekType() === 'insert' ) {\n\t\t\t\tdelta.push( otherIter.next() );\n\t\t\t} else if ( thisIter.peekType() === 'delete' ) {\n\t\t\t\tdelta.push( thisIter.next() );\n\t\t\t} else {\n\t\t\t\tconst length = Math.min(\n\t\t\t\t\tthisIter.peekLength(),\n\t\t\t\t\totherIter.peekLength()\n\t\t\t\t);\n\t\t\t\tconst thisOp = thisIter.next( length );\n\t\t\t\tconst otherOp = otherIter.next( length );\n\t\t\t\tif ( otherOp.retain ) {\n\t\t\t\t\tconst newOp: Op = {};\n\t\t\t\t\tif ( typeof thisOp.retain === 'number' ) {\n\t\t\t\t\t\tnewOp.retain =\n\t\t\t\t\t\t\ttypeof otherOp.retain === 'number'\n\t\t\t\t\t\t\t\t? length\n\t\t\t\t\t\t\t\t: otherOp.retain;\n\t\t\t\t\t} else if ( typeof otherOp.retain === 'number' ) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthisOp.retain === null ||\n\t\t\t\t\t\t\tthisOp.retain === undefined\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnewOp.insert = thisOp.insert;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewOp.retain = thisOp.retain;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst action =\n\t\t\t\t\t\t\tthisOp.retain === null ||\n\t\t\t\t\t\t\tthisOp.retain === undefined\n\t\t\t\t\t\t\t\t? 'insert'\n\t\t\t\t\t\t\t\t: 'retain';\n\t\t\t\t\t\tconst [ embedType, thisData, otherData ] =\n\t\t\t\t\t\t\tgetEmbedTypeAndData(\n\t\t\t\t\t\t\t\tthisOp[ action ],\n\t\t\t\t\t\t\t\totherOp.retain\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\tconst handler = Delta.getHandler( embedType );\n\t\t\t\t\t\tnewOp[ action ] = {\n\t\t\t\t\t\t\t[ embedType ]: handler.compose(\n\t\t\t\t\t\t\t\tthisData,\n\t\t\t\t\t\t\t\totherData,\n\t\t\t\t\t\t\t\taction === 'retain'\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t// Preserve null when composing with a retain, otherwise remove it for inserts\n\t\t\t\t\tconst attributes = AttributeMap.compose(\n\t\t\t\t\t\tthisOp.attributes,\n\t\t\t\t\t\totherOp.attributes,\n\t\t\t\t\t\ttypeof thisOp.retain === 'number'\n\t\t\t\t\t);\n\t\t\t\t\tif ( attributes ) {\n\t\t\t\t\t\tnewOp.attributes = attributes;\n\t\t\t\t\t}\n\t\t\t\t\tdelta.push( newOp );\n\n\t\t\t\t\t// Optimization if rest of other is just retain\n\t\t\t\t\tif (\n\t\t\t\t\t\t! otherIter.hasNext() &&\n\t\t\t\t\t\tisEqual( delta.ops[ delta.ops.length - 1 ], newOp )\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst rest = new Delta( thisIter.rest() );\n\t\t\t\t\t\treturn delta.concat( rest ).chop();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Other op should be delete, we could be an insert or retain\n\t\t\t\t\t// Insert + delete cancels out\n\t\t\t\t} else if (\n\t\t\t\t\ttypeof otherOp.delete === 'number' &&\n\t\t\t\t\t( typeof thisOp.retain === 'number' ||\n\t\t\t\t\t\t( typeof thisOp.retain === 'object' &&\n\t\t\t\t\t\t\tthisOp.retain !== null ) )\n\t\t\t\t) {\n\t\t\t\t\tdelta.push( otherOp );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn delta.chop();\n\t}\n\n\tconcat( other: Delta ): Delta {\n\t\tconst delta = new Delta( this.ops.slice() );\n\t\tif ( other.ops.length > 0 ) {\n\t\t\tdelta.push( other.ops[ 0 ] );\n\t\t\tdelta.ops = delta.ops.concat( other.ops.slice( 1 ) );\n\t\t}\n\t\treturn delta;\n\t}\n\n\tdiff( other: Delta ): Delta {\n\t\tif ( this.ops === other.ops ) {\n\t\t\treturn new Delta();\n\t\t}\n\t\tconst strings = this.deltasToStrings( other );\n\t\tconst diffResult = normalizeChangeCounts(\n\t\t\tdiffChars( strings[ 0 ], strings[ 1 ] )\n\t\t);\n\t\tconst thisIter = new OpIterator( this.ops );\n\t\tconst otherIter = new OpIterator( other.ops );\n\t\tconst retDelta = this.convertChangesToDelta(\n\t\t\tdiffResult,\n\t\t\tthisIter,\n\t\t\totherIter\n\t\t);\n\n\t\treturn retDelta.chop();\n\t}\n\n\teachLine(\n\t\tpredicate: (\n\t\t\tline: Delta,\n\t\t\tattributes: AttributeMap,\n\t\t\tindex: number\n\t\t) => boolean | void,\n\t\tnewline = '\\n'\n\t): void {\n\t\tconst iter = new OpIterator( this.ops );\n\t\tlet line = new Delta();\n\t\tlet i = 0;\n\t\twhile ( iter.hasNext() ) {\n\t\t\tif ( iter.peekType() !== 'insert' ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst thisOp = iter.peek();\n\t\t\tconst start = Op.length( thisOp ) - iter.peekLength();\n\t\t\tconst index =\n\t\t\t\ttypeof thisOp.insert === 'string'\n\t\t\t\t\t? thisOp.insert.indexOf( newline, start ) - start\n\t\t\t\t\t: -1;\n\t\t\tif ( index < 0 ) {\n\t\t\t\tline.push( iter.next() );\n\t\t\t} else if ( index > 0 ) {\n\t\t\t\tline.push( iter.next( index ) );\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tpredicate( line, iter.next( 1 ).attributes || {}, i ) ===\n\t\t\t\t\tfalse\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ti += 1;\n\t\t\t\tline = new Delta();\n\t\t\t}\n\t\t}\n\t\tif ( line.length() > 0 ) {\n\t\t\tpredicate( line, {}, i );\n\t\t}\n\t}\n\n\tinvert( base: Delta ): Delta {\n\t\tconst inverted = new Delta();\n\t\tthis.reduce( ( baseIndex, op ) => {\n\t\t\tif ( op.insert ) {\n\t\t\t\tinverted.delete( Op.length( op ) );\n\t\t\t} else if (\n\t\t\t\ttypeof op.retain === 'number' &&\n\t\t\t\t( op.attributes === null || op.attributes === undefined )\n\t\t\t) {\n\t\t\t\tinverted.retain( op.retain );\n\t\t\t\treturn baseIndex + op.retain;\n\t\t\t} else if ( op.delete || typeof op.retain === 'number' ) {\n\t\t\t\tconst length = ( op.delete || op.retain ) as number;\n\t\t\t\tconst slice = base.slice( baseIndex, baseIndex + length );\n\t\t\t\tslice.forEach( ( baseOp ) => {\n\t\t\t\t\tif ( op.delete ) {\n\t\t\t\t\t\tinverted.push( baseOp );\n\t\t\t\t\t} else if ( op.retain && op.attributes ) {\n\t\t\t\t\t\tinverted.retain(\n\t\t\t\t\t\t\tOp.length( baseOp ),\n\t\t\t\t\t\t\tAttributeMap.invert(\n\t\t\t\t\t\t\t\top.attributes,\n\t\t\t\t\t\t\t\tbaseOp.attributes\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn baseIndex + length;\n\t\t\t} else if ( typeof op.retain === 'object' && op.retain !== null ) {\n\t\t\t\tconst slice = base.slice( baseIndex, baseIndex + 1 );\n\t\t\t\tconst baseOp = new OpIterator( slice.ops ).next();\n\t\t\t\tconst [ embedType, opData, baseOpData ] = getEmbedTypeAndData(\n\t\t\t\t\top.retain,\n\t\t\t\t\tbaseOp.insert\n\t\t\t\t);\n\t\t\t\tconst handler = Delta.getHandler( embedType );\n\t\t\t\tinverted.retain(\n\t\t\t\t\t{ [ embedType ]: handler.invert( opData, baseOpData ) },\n\t\t\t\t\tAttributeMap.invert( op.attributes, baseOp.attributes )\n\t\t\t\t);\n\t\t\t\treturn baseIndex + 1;\n\t\t\t}\n\t\t\treturn baseIndex;\n\t\t}, 0 );\n\t\treturn inverted.chop();\n\t}\n\n\ttransform( index: number, priority?: boolean ): number;\n\ttransform( other: Delta, priority?: boolean ): Delta;\n\ttransform( arg: number | Delta, priority = false ): typeof arg {\n\t\tpriority = !! priority;\n\t\tif ( typeof arg === 'number' ) {\n\t\t\treturn this.transformPosition( arg, priority );\n\t\t}\n\t\tconst other: Delta = arg;\n\t\tconst thisIter = new OpIterator( this.ops );\n\t\tconst otherIter = new OpIterator( other.ops );\n\t\tconst delta = new Delta();\n\t\twhile ( thisIter.hasNext() || otherIter.hasNext() ) {\n\t\t\tif (\n\t\t\t\tthisIter.peekType() === 'insert' &&\n\t\t\t\t( priority || otherIter.peekType() !== 'insert' )\n\t\t\t) {\n\t\t\t\tdelta.retain( Op.length( thisIter.next() ) );\n\t\t\t} else if ( otherIter.peekType() === 'insert' ) {\n\t\t\t\tdelta.push( otherIter.next() );\n\t\t\t} else {\n\t\t\t\tconst length = Math.min(\n\t\t\t\t\tthisIter.peekLength(),\n\t\t\t\t\totherIter.peekLength()\n\t\t\t\t);\n\t\t\t\tconst thisOp = thisIter.next( length );\n\t\t\t\tconst otherOp = otherIter.next( length );\n\t\t\t\tif ( thisOp.delete ) {\n\t\t\t\t\t// Our delete either makes their delete redundant or removes their retain\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if ( otherOp.delete ) {\n\t\t\t\t\tdelta.push( otherOp );\n\t\t\t\t} else {\n\t\t\t\t\tconst thisData = thisOp.retain;\n\t\t\t\t\tconst otherData = otherOp.retain;\n\t\t\t\t\tlet transformedData: Op[ 'retain' ] =\n\t\t\t\t\t\ttypeof otherData === 'object' && otherData !== null\n\t\t\t\t\t\t\t? otherData\n\t\t\t\t\t\t\t: length;\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof thisData === 'object' &&\n\t\t\t\t\t\tthisData !== null &&\n\t\t\t\t\t\ttypeof otherData === 'object' &&\n\t\t\t\t\t\totherData !== null\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst embedType = Object.keys( thisData )[ 0 ];\n\t\t\t\t\t\tif ( embedType === Object.keys( otherData )[ 0 ] ) {\n\t\t\t\t\t\t\tconst handler = Delta.getHandler( embedType );\n\t\t\t\t\t\t\tif ( handler ) {\n\t\t\t\t\t\t\t\ttransformedData = {\n\t\t\t\t\t\t\t\t\t[ embedType ]: handler.transform(\n\t\t\t\t\t\t\t\t\t\tthisData[ embedType ],\n\t\t\t\t\t\t\t\t\t\totherData[ embedType ],\n\t\t\t\t\t\t\t\t\t\tpriority\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// We retain either their retain or insert\n\t\t\t\t\tdelta.retain(\n\t\t\t\t\t\ttransformedData,\n\t\t\t\t\t\tAttributeMap.transform(\n\t\t\t\t\t\t\tthisOp.attributes,\n\t\t\t\t\t\t\totherOp.attributes,\n\t\t\t\t\t\t\tpriority\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn delta.chop();\n\t}\n\n\ttransformPosition( index: number, priority = false ): number {\n\t\tpriority = !! priority;\n\t\tconst thisIter = new OpIterator( this.ops );\n\t\tlet offset = 0;\n\t\twhile ( thisIter.hasNext() && offset <= index ) {\n\t\t\tconst length = thisIter.peekLength();\n\t\t\tconst nextType = thisIter.peekType();\n\t\t\tthisIter.next();\n\t\t\tif ( nextType === 'delete' ) {\n\t\t\t\tindex -= Math.min( length, index - offset );\n\t\t\t\tcontinue;\n\t\t\t} else if (\n\t\t\t\tnextType === 'insert' &&\n\t\t\t\t( offset < index || ! priority )\n\t\t\t) {\n\t\t\t\tindex += length;\n\t\t\t}\n\t\t\toffset += length;\n\t\t}\n\t\treturn index;\n\t}\n\n\t/**\n\t * Given a Delta and a cursor position, do a diff and attempt to adjust\n\t * the diff to place insertions or deletions at the cursor position.\n\t *\n\t * @param other             - The other Delta to diff against.\n\t * @param cursorAfterChange - The cursor position index after the change.\n\t * @return A Delta that attempts to place insertions or deletions at the cursor position.\n\t */\n\tdiffWithCursor( other: Delta, cursorAfterChange: number | null ): Delta {\n\t\tif ( this.ops === other.ops ) {\n\t\t\treturn new Delta();\n\t\t}\n\n\t\tconst strings = this.deltasToStrings( other );\n\n\t\t// When large changes are pasted into the code editor, this can\n\t\t// result in very long strings as a result of comparing the\n\t\t// `content` of the code editor before and after the change.\n\t\t// In this case, diffChars() can take a very long time to complete,\n\t\t// which causes the editor to freeze.\n\t\t// When we detect strings that are too long, use a less-precise diff\n\t\t// method that is optimized for large inputs, at the cost of less\n\t\t// accurate diffing and cursor placement.\n\t\tconst maxStringLength = Math.max(\n\t\t\t...strings.map( ( str ) => str.length )\n\t\t);\n\n\t\tif ( maxStringLength > STRING_TOO_LARGE_THRESHOLD ) {\n\t\t\tconst diffResult = normalizeChangeCounts(\n\t\t\t\tdiffLines( strings[ 0 ], strings[ 1 ] )\n\t\t\t);\n\t\t\tconst thisIterLarge = new OpIterator( this.ops );\n\t\t\tconst otherIterLarge = new OpIterator( other.ops );\n\t\t\treturn this.convertChangesToDelta(\n\t\t\t\tdiffResult,\n\t\t\t\tthisIterLarge,\n\t\t\t\totherIterLarge\n\t\t\t).chop();\n\t\t} else if ( cursorAfterChange === null ) {\n\t\t\t// If no cursor position is provided and the string\n\t\t\t// is a reasonable length, do a regular diff.\n\t\t\treturn this.diff( other );\n\t\t}\n\n\t\tlet diffs = normalizeChangeCounts(\n\t\t\tdiffChars( strings[ 0 ], strings[ 1 ] )\n\t\t);\n\t\tlet lastDiffPosition = 0;\n\t\tconst adjustedDiffs: Change[] = [];\n\n\t\tfor ( let i = 0; i < diffs.length; i++ ) {\n\t\t\tconst diff = diffs[ i ];\n\n\t\t\tconst segmentStart = lastDiffPosition;\n\t\t\tconst segmentEnd = lastDiffPosition + ( diff.count ?? 0 );\n\t\t\tconst isCursorInSegment =\n\t\t\t\tcursorAfterChange > segmentStart &&\n\t\t\t\tcursorAfterChange <= segmentEnd;\n\n\t\t\tconst isUnchangedSegment = ! diff.added && ! diff.removed;\n\t\t\tconst isRemovalSegment = diff.removed && ! diff.added;\n\n\t\t\tconst nextDiff = diffs[ i + 1 ];\n\t\t\tconst isNextDiffAnInsert =\n\t\t\t\tnextDiff && nextDiff.added && ! nextDiff.removed;\n\n\t\t\t// Path 1: Look-ahead strategy\n\t\t\t// If the position of the cursor is in an \"unchanged\" segment, but there's an insertion\n\t\t\t// right after this section, then the insertion has likely been placed in\n\t\t\t// the incorrect spot, and we can move the insertion to the position of the cursor.\n\t\t\tif (\n\t\t\t\tisUnchangedSegment &&\n\t\t\t\tisCursorInSegment &&\n\t\t\t\tisNextDiffAnInsert\n\t\t\t) {\n\t\t\t\tconst movedSegments = this.tryMoveInsertionToCursor(\n\t\t\t\t\tdiff,\n\t\t\t\t\tnextDiff,\n\t\t\t\t\tcursorAfterChange,\n\t\t\t\t\tsegmentStart\n\t\t\t\t);\n\n\t\t\t\tif ( movedSegments ) {\n\t\t\t\t\tadjustedDiffs.push( ...movedSegments );\n\t\t\t\t\t// Skip the next diff since we've already consumed it\n\t\t\t\t\ti++;\n\t\t\t\t\tlastDiffPosition = segmentEnd;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Path 2: Look-back strategy\n\t\t\t// Handle removals by checking if cursor was in the previous unchanged segment\n\t\t\tif ( isRemovalSegment ) {\n\t\t\t\tconst movedSegments = this.tryMoveDeletionToCursor(\n\t\t\t\t\tdiff,\n\t\t\t\t\tadjustedDiffs,\n\t\t\t\t\tcursorAfterChange,\n\t\t\t\t\tlastDiffPosition\n\t\t\t\t);\n\n\t\t\t\tif ( movedSegments ) {\n\t\t\t\t\t// Remove the previous unchanged segment from adjustedDiffs\n\t\t\t\t\tadjustedDiffs.pop();\n\t\t\t\t\tadjustedDiffs.push( ...movedSegments );\n\t\t\t\t\tlastDiffPosition += diff.count ?? 0;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Path 3: Do nothing - add diff as-is\n\t\t\tadjustedDiffs.push( diff );\n\t\t\tif ( ! diff.added ) {\n\t\t\t\tlastDiffPosition += diff.count ?? 0;\n\t\t\t}\n\t\t}\n\n\t\tdiffs = adjustedDiffs;\n\n\t\tconst thisIter = new OpIterator( this.ops );\n\t\tconst otherIter = new OpIterator( other.ops );\n\t\tconst retDelta = this.convertChangesToDelta(\n\t\t\tdiffs,\n\t\t\tthisIter,\n\t\t\totherIter\n\t\t);\n\n\t\treturn retDelta.chop();\n\t}\n\n\t/**\n\t * Try to move an insertion operation from after an unchanged segment to the cursor position within it.\n\t * This is a \"look-ahead\" strategy.\n\t *\n\t * @param diff              - The current unchanged diff segment.\n\t * @param nextDiff          - The next diff segment (expected to be an insertion).\n\t * @param cursorAfterChange - The cursor position after the change.\n\t * @param segmentStart      - The start position of the current segment.\n\t * @return An array of adjusted diff segments if the insertion was successfully moved, null otherwise.\n\t */\n\tprivate tryMoveInsertionToCursor(\n\t\tdiff: Change,\n\t\tnextDiff: Change,\n\t\tcursorAfterChange: number,\n\t\tsegmentStart: number\n\t): Change[] | null {\n\t\tconst nextDiffInsert = nextDiff.value;\n\t\tconst insertLength = nextDiffInsert.length;\n\t\tconst insertOffset = cursorAfterChange - segmentStart - insertLength;\n\n\t\t// Verify that the inserted text matches the text at the cursor position\n\t\tconst textAtCursor = diff.value.substring(\n\t\t\tinsertOffset,\n\t\t\tinsertOffset + nextDiffInsert.length\n\t\t);\n\t\tconst isInsertMoveable = textAtCursor === nextDiffInsert;\n\n\t\t// The insert text matches what's at the cursor position,\n\t\t// so we can safely move the insertion to the cursor position.\n\t\tif ( ! isInsertMoveable ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Split the current segment at the cursor\n\t\tconst beforeCursor = diff.value.substring( 0, insertOffset );\n\t\tconst afterCursor = diff.value.substring( insertOffset );\n\n\t\tconst result: Change[] = [];\n\n\t\t// Add before cursor part (if not empty)\n\t\tif ( beforeCursor.length > 0 ) {\n\t\t\tresult.push( {\n\t\t\t\tvalue: beforeCursor,\n\t\t\t\tcount: beforeCursor.length,\n\t\t\t\tadded: false,\n\t\t\t\tremoved: false,\n\t\t\t} );\n\t\t}\n\n\t\t// Add the insertion in the middle\n\t\tresult.push( nextDiff );\n\n\t\t// Add after cursor part (if not empty)\n\t\tif ( afterCursor.length > 0 ) {\n\t\t\tresult.push( {\n\t\t\t\tvalue: afterCursor,\n\t\t\t\tcount: afterCursor.length,\n\t\t\t\tadded: false,\n\t\t\t\tremoved: false,\n\t\t\t} );\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Try to move a deletion operation to the cursor position by looking back at the previous unchanged segment.\n\t * This is a \"look-back\" strategy.\n\t *\n\t * @param diff              - The current deletion diff segment.\n\t * @param adjustedDiffs     - The array of previously processed diff segments.\n\t * @param cursorAfterChange - The cursor position after the change.\n\t * @param lastDiffPosition  - The position in the document up to (but not including) the current diff.\n\t * @return An array of adjusted diff segments if the deletion was successfully moved, null otherwise.\n\t */\n\tprivate tryMoveDeletionToCursor(\n\t\tdiff: Change,\n\t\tadjustedDiffs: Change[],\n\t\tcursorAfterChange: number,\n\t\tlastDiffPosition: number\n\t): Change[] | null {\n\t\t// Check if there's a preceding unchanged segment where cursor falls\n\t\t// and the deleted characters match characters in that segment\n\t\tconst prevDiff = adjustedDiffs[ adjustedDiffs.length - 1 ];\n\n\t\tif ( ! prevDiff || prevDiff.added || prevDiff.removed ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst prevSegmentStart = lastDiffPosition - ( prevDiff.count ?? 0 );\n\t\tconst prevSegmentEnd = lastDiffPosition;\n\n\t\t// Check if cursor is within or at the end of the previous unchanged segment\n\t\tif (\n\t\t\tcursorAfterChange < prevSegmentStart ||\n\t\t\tcursorAfterChange >= prevSegmentEnd\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Check if the deleted characters match the text at the cursor position\n\t\tconst deletedChars = diff.value;\n\t\tconst deleteOffset = cursorAfterChange - prevSegmentStart;\n\t\tconst textAtCursor = prevDiff.value.substring(\n\t\t\tdeleteOffset,\n\t\t\tdeleteOffset + deletedChars.length\n\t\t);\n\t\tconst canBePlacedHere = textAtCursor === deletedChars;\n\n\t\tif ( ! canBePlacedHere ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Split the unchanged segment at the cursor and place deletion there\n\t\tconst beforeCursor = prevDiff.value.substring( 0, deleteOffset );\n\t\tconst atAndAfterCursor = prevDiff.value.substring( deleteOffset );\n\n\t\t// The deletion should consume characters starting at cursor\n\t\tconst deletionLength = diff.count ?? 0;\n\t\tconst afterDeletion = atAndAfterCursor.substring( deletionLength );\n\n\t\tconst result: Change[] = [];\n\n\t\t// Add before cursor part (if not empty)\n\t\tif ( beforeCursor.length > 0 ) {\n\t\t\tresult.push( {\n\t\t\t\tvalue: beforeCursor,\n\t\t\t\tcount: beforeCursor.length,\n\t\t\t\tadded: false,\n\t\t\t\tremoved: false,\n\t\t\t} );\n\t\t}\n\n\t\t// Add the deletion\n\t\tresult.push( diff );\n\n\t\t// Add after deletion part (if not empty)\n\t\tif ( afterDeletion.length > 0 ) {\n\t\t\tresult.push( {\n\t\t\t\tvalue: afterDeletion,\n\t\t\t\tcount: afterDeletion.length,\n\t\t\t\tadded: false,\n\t\t\t\tremoved: false,\n\t\t\t} );\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Convert two Deltas to string representations for diffing.\n\t *\n\t * @param other - The other Delta to convert.\n\t * @return A tuple of [thisString, otherString].\n\t */\n\tprivate deltasToStrings( other: Delta ): [ string, string ] {\n\t\treturn [ this, other ].map( ( delta ) => {\n\t\t\treturn delta\n\t\t\t\t.map( ( op ) => {\n\t\t\t\t\tif ( op.insert !== null || op.insert !== undefined ) {\n\t\t\t\t\t\treturn typeof op.insert === 'string'\n\t\t\t\t\t\t\t? op.insert\n\t\t\t\t\t\t\t: NULL_CHARACTER;\n\t\t\t\t\t}\n\t\t\t\t\tconst prep = delta === other ? 'on' : 'with';\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'diff() called ' + prep + ' non-document'\n\t\t\t\t\t);\n\t\t\t\t} )\n\t\t\t\t.join( '' );\n\t\t} ) as [ string, string ];\n\t}\n\n\t/**\n\t * Process diff changes and convert them to Delta operations.\n\t *\n\t * @param changes   - The array of changes from the diff algorithm.\n\t * @param thisIter  - Iterator for this Delta's operations.\n\t * @param otherIter - Iterator for the other Delta's operations.\n\t * @return A Delta containing the processed diff operations.\n\t */\n\tprivate convertChangesToDelta(\n\t\tchanges: Change[],\n\t\tthisIter: OpIterator,\n\t\totherIter: OpIterator\n\t): Delta {\n\t\tconst retDelta = new Delta();\n\t\tchanges.forEach( ( component: Change ) => {\n\t\t\tlet length = component.count ?? 0;\n\t\t\twhile ( length > 0 ) {\n\t\t\t\tlet opLength = 0;\n\t\t\t\tif ( component.added ) {\n\t\t\t\t\topLength = Math.min( otherIter.peekLength(), length );\n\t\t\t\t\tretDelta.push( otherIter.next( opLength ) );\n\t\t\t\t} else if ( component.removed ) {\n\t\t\t\t\topLength = Math.min( length, thisIter.peekLength() );\n\t\t\t\t\tthisIter.next( opLength );\n\t\t\t\t\tretDelta.delete( opLength );\n\t\t\t\t} else {\n\t\t\t\t\topLength = Math.min(\n\t\t\t\t\t\tthisIter.peekLength(),\n\t\t\t\t\t\totherIter.peekLength(),\n\t\t\t\t\t\tlength\n\t\t\t\t\t);\n\t\t\t\t\tconst thisOp = thisIter.next( opLength );\n\t\t\t\t\tconst otherOp = otherIter.next( opLength );\n\t\t\t\t\tif ( isEqual( thisOp.insert, otherOp.insert ) ) {\n\t\t\t\t\t\tretDelta.retain(\n\t\t\t\t\t\t\topLength,\n\t\t\t\t\t\t\tAttributeMap.diff(\n\t\t\t\t\t\t\t\tthisOp.attributes,\n\t\t\t\t\t\t\t\totherOp.attributes\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tretDelta.push( otherOp ).delete( opLength );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlength -= opLength;\n\t\t\t}\n\t\t} );\n\t\treturn retDelta;\n\t}\n}\n\nexport default Delta;\nexport { Op, OpIterator, AttributeMap };\n"],
  "mappings": "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",
  "names": []
}
