{"version":3,"sources":["webpack:///./node_modules/immutable/dist/immutable.js","webpack:///./node_modules/core-js/modules/es.object.assign.js","webpack:///./node_modules/core-js/internals/object-assign.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/isArray.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/memoize-one/dist/memoize-one.esm.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/is-plain-object/index.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/core-js/internals/create-property.js","webpack:///./node_modules/get-window/index.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/core-js/internals/regexp-flags.js","webpack:///./node_modules/lodash/keys.js","webpack:///./node_modules/lodash/_copyObject.js","webpack:///./node_modules/core-js/modules/es.array.includes.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_getTag.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/isArrayLike.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/isLength.js","webpack:///./node_modules/lodash/_baseUnary.js","webpack:///./node_modules/lodash/_nodeUtil.js","webpack:///./node_modules/lodash/_isPrototype.js","webpack:///./node_modules/lodash/_getPrototype.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_getSymbols.js","webpack:///./node_modules/lodash/keysIn.js","webpack:///./node_modules/lodash/_cloneArrayBuffer.js","webpack:///./node_modules/lodash/isBuffer.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/isArguments.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_Stack.js","webpack:///./node_modules/lodash/_arrayPush.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/slate-react/node_modules/debug/src/browser.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/_arrayLikeKeys.js","webpack:///./node_modules/lodash/_overArg.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/_baseGetAllKeys.js","webpack:///./node_modules/lodash/stubArray.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_getSymbolsIn.js","webpack:///./node_modules/core-js/modules/es.regexp.to-string.js","webpack:///./node_modules/core-js/modules/es.array.find.js","webpack:///./node_modules/lodash/isTypedArray.js","webpack:///./node_modules/lodash/identity.js","webpack:///./node_modules/lodash/_Uint8Array.js","webpack:///./node_modules/lodash/_getAllKeys.js","webpack:///./node_modules/lodash/_hasPath.js","webpack:///./node_modules/lodash/_baseClone.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_copyArray.js","webpack:///./node_modules/lodash/_getAllKeysIn.js","webpack:///./node_modules/lodash/pick.js","webpack:///./node_modules/slate/node_modules/debug/src/browser.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/_baseTimes.js","webpack:///./node_modules/lodash/_baseIsArguments.js","webpack:///./node_modules/lodash/stubFalse.js","webpack:///./node_modules/lodash/_baseIsTypedArray.js","webpack:///./node_modules/lodash/_baseKeys.js","webpack:///./node_modules/lodash/_nativeKeys.js","webpack:///./node_modules/lodash/isPlainObject.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_stackClear.js","webpack:///./node_modules/lodash/_stackDelete.js","webpack:///./node_modules/lodash/_stackGet.js","webpack:///./node_modules/lodash/_stackHas.js","webpack:///./node_modules/lodash/_stackSet.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_arrayFilter.js","webpack:///./node_modules/lodash/_DataView.js","webpack:///./node_modules/lodash/_Promise.js","webpack:///./node_modules/lodash/_Set.js","webpack:///./node_modules/lodash/_WeakMap.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/hasIn.js","webpack:///./node_modules/lodash/_baseHasIn.js","webpack:///./node_modules/lodash/_arrayEach.js","webpack:///./node_modules/lodash/_baseAssign.js","webpack:///./node_modules/lodash/_baseAssignIn.js","webpack:///./node_modules/lodash/_baseKeysIn.js","webpack:///./node_modules/lodash/_nativeKeysIn.js","webpack:///./node_modules/lodash/_cloneBuffer.js","webpack:///./node_modules/lodash/_copySymbols.js","webpack:///./node_modules/lodash/_copySymbolsIn.js","webpack:///./node_modules/lodash/_initCloneArray.js","webpack:///./node_modules/lodash/_initCloneByTag.js","webpack:///./node_modules/lodash/_cloneDataView.js","webpack:///./node_modules/lodash/_cloneRegExp.js","webpack:///./node_modules/lodash/_cloneSymbol.js","webpack:///./node_modules/lodash/_cloneTypedArray.js","webpack:///./node_modules/lodash/_initCloneObject.js","webpack:///./node_modules/lodash/_baseCreate.js","webpack:///./node_modules/lodash/isMap.js","webpack:///./node_modules/lodash/_baseIsMap.js","webpack:///./node_modules/lodash/isSet.js","webpack:///./node_modules/lodash/_baseIsSet.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/is-hotkey/lib/index.js","webpack:///./node_modules/emotion/dist/index.esm.js","webpack:///./node_modules/@emotion/memoize/dist/memoize.esm.js","webpack:///./node_modules/slate-hotkeys/node_modules/is-hotkey/lib/index.js","webpack:///./node_modules/core-js/modules/es.object.keys.js","webpack:///./node_modules/lodash/_baseSlice.js","webpack:///./node_modules/esrever/esrever.js","webpack:///./node_modules/lodash/omit.js","webpack:///./node_modules/react-immutable-proptypes/dist/ImmutablePropTypes.js","webpack:///./node_modules/isomorphic-base64/browser.js","webpack:///./node_modules/core-js/modules/es.array.slice.js","webpack:///./node_modules/lodash/_flatRest.js","webpack:///./node_modules/core-js/modules/es.object.freeze.js","webpack:///./node_modules/core-js/internals/freezing.js","webpack:///./node_modules/direction/index.js","webpack:///./node_modules/selection-is-backward/index.js","webpack:///./node_modules/lodash/throttle.js","webpack:///./node_modules/stylis-rule-sheet/index.js","webpack:///./node_modules/@emotion/unitless/dist/unitless.esm.js","webpack:///./node_modules/@emotion/hash/dist/hash.esm.js","webpack:///./node_modules/@emotion/stylis/dist/stylis.esm.js","webpack:///./node_modules/create-emotion/dist/index.esm.js","webpack:///./node_modules/isobject/index.js","webpack:///./node_modules/lodash/_baseUnset.js","webpack:///./node_modules/lodash/last.js","webpack:///./node_modules/lodash/_parent.js","webpack:///./node_modules/lodash/_customOmitClone.js","webpack:///./node_modules/lodash/flatten.js","webpack:///./node_modules/lodash/_baseFlatten.js","webpack:///./node_modules/lodash/_isFlattenable.js","webpack:///./node_modules/lodash/_overRest.js","webpack:///./node_modules/lodash/_apply.js","webpack:///./node_modules/lodash/_setToString.js","webpack:///./node_modules/lodash/_baseSetToString.js","webpack:///./node_modules/lodash/constant.js","webpack:///./node_modules/lodash/_shortOut.js","webpack:///./node_modules/lodash/_basePick.js","webpack:///./node_modules/lodash/_basePickBy.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/slate/node_modules/debug/src/common.js","webpack:///./node_modules/slate/node_modules/ms/index.js","webpack:///./node_modules/core-js/modules/web.url.to-json.js","webpack:///./node_modules/slate-react/node_modules/debug/src/common.js","webpack:///./node_modules/slate-react/node_modules/ms/index.js","webpack:///./node_modules/get-document/index.js","webpack:///./node_modules/get-window/needs-ie-fallback.br.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./node_modules/is-url/index.js","webpack:///./node_modules/core-js/internals/internal-metadata.js","webpack:///./node_modules/slate-dev-warning/lib/slate-dev-warning.es.js","webpack:///./node_modules/slate/lib/slate.es.js","webpack:///./node_modules/slate-prop-types/lib/slate-prop-types.es.js","webpack:///./node_modules/is-in-browser/dist/module.js","webpack:///./node_modules/slate-dev-environment/lib/slate-dev-environment.es.js","webpack:///./node_modules/slate-base64-serializer/lib/slate-base64-serializer.es.js","webpack:///./node_modules/slate-plain-serializer/lib/slate-plain-serializer.es.js","webpack:///./node_modules/slate-hotkeys/lib/slate-hotkeys.es.js","webpack:///./node_modules/slate-react/lib/slate-react.es.js","webpack:///./node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js","webpack:///./node_modules/create-emotion-styled/dist/index.esm.js","webpack:///./node_modules/react-emotion/dist/index.esm.js","webpack:///./app/javascript/components/slate/components.js","webpack:///./app/javascript/components/slate/plugins/link_hover.jsx","webpack:///./app/javascript/components/slate/rich_editor.jsx","webpack:///./app/javascript/components/blocks/editor_block.jsx","webpack:///./app/javascript/packs/blocks/rich_text.js"],"names":["factory","_typeof","Symbol","iterator","obj","constructor","prototype","SLICE$0","Array","slice","createClass","ctor","superClass","Object","create","Iterable","value","isIterable","Seq","KeyedIterable","isKeyed","KeyedSeq","IndexedIterable","isIndexed","IndexedSeq","SetIterable","isAssociative","SetSeq","maybeIterable","IS_ITERABLE_SENTINEL","maybeKeyed","IS_KEYED_SENTINEL","maybeIndexed","IS_INDEXED_SENTINEL","maybeAssociative","isOrdered","maybeOrdered","IS_ORDERED_SENTINEL","Keyed","Indexed","Set","SIZE","MASK","NOT_SET","CHANGE_LENGTH","DID_ALTER","MakeRef","ref","SetRef","OwnerID","arrCopy","arr","offset","len","Math","max","length","newArr","ii","ensureSize","iter","undefined","size","__iterate","returnTrue","wrapIndex","index","uint32Index","NaN","wholeSlice","begin","end","resolveBegin","resolveIndex","resolveEnd","defaultIndex","min","REAL_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","ITERATOR_SYMBOL","Iterator","next","this","iteratorValue","type","k","v","iteratorResult","done","iteratorDone","hasIterator","getIteratorFn","isIterator","maybeIterator","getIterator","iterable","iteratorFn","call","isArrayLike","emptySequence","toSeq","seq","maybeIndexedSeqFromValue","ObjectSeq","TypeError","seqFromValue","toKeyedSeq","fromEntrySeq","keyedSeqFromValue","entrySeq","toIndexedSeq","indexedSeqFromValue","toSetSeq","toString","KEYS","VALUES","ENTRIES","inspect","toSource","of","arguments","__toString","cacheResult","_cache","__iterateUncached","toArray","fn","reverse","seqIterate","__iterator","seqIterator","isSeq","EMPTY_SEQ","EMPTY_REPEAT","EMPTY_RANGE","IS_SEQ_SENTINEL","ArraySeq","array","_array","object","keys","_object","_keys","IterableSeq","_iterable","IteratorSeq","_iterator","_iteratorCache","maybeSeq","isArray","useKeys","cache","maxIndex","entry","__iteratorUncached","fromJS","json","converter","fromJSWith","fromJSDefault","key","parentJSON","map","isPlainObj","toList","toMap","is","valueA","valueB","valueOf","equals","deepEqual","a","b","__hash","notAssociative","entries","every","flipped","_","allEqual","bSize","has","get","Repeat","times","_value","Infinity","invariant","condition","error","Error","Range","start","step","abs","_start","_end","_step","ceil","Collection","KeyedCollection","IndexedCollection","SetCollection","notSetValue","hasOwnProperty","iterations","val","includes","searchValue","indexOf","lastIndexOf","this$0","other","possibleIndex","floor","offsetValue","imul","c","d","smi","i32","hash","o","h","STRING_HASH_CACHE_MIN_STRLEN","string","stringHashCache","hashString","STRING_HASH_CACHE_SIZE","STRING_HASH_CACHE_MAX_SIZE","cachedHashString","hashCode","usingWeakMap","weakMap","UID_HASH_KEY","canDefineProperty","propertyIsEnumerable","node","nodeType","uniqueID","documentElement","getIENodeHash","objHashUID","set","isExtensible","defineProperty","apply","hashJSObj","charCodeAt","e","WeakMap","assertNotInfinite","Map","emptyMap","isMap","withMutations","forEach","maybeMap","IS_MAP_SENTINEL","keyValues","i","_root","updateMap","setIn","keyPath","updateIn","remove","deleteIn","update","updater","updatedValue","updateInDeepMap","forceIterator","clear","__ownerID","__altered","merge","mergeIntoMapWith","mergeWith","merger","iters","mergeIn","m","mergeDeep","deepMerger","mergeDeepWith","deepMergerWith","mergeDeepIn","sort","comparator","OrderedMap","sortFactory","sortBy","mapper","mutable","asMutable","wasAltered","__ensureOwner","asImmutable","MapIterator","iterate","ownerID","makeMap","EMPTY_MAP","MapPrototype","ArrayMapNode","BitmapIndexedNode","bitmap","nodes","HashArrayMapNode","count","HashCollisionNode","keyHash","ValueNode","_type","_reverse","_stack","mapIteratorFrame","mapIteratorValue","prev","__prev","root","newRoot","newSize","didChangeSize","didAlter","updateNode","shift","isLeafNode","mergeIntoNode","newNode","idx1","idx2","iterables","push","mergeIntoCollectionWith","existing","nextValue","collection","filter","x","mergeIntoMap","keyPathIter","isNotSet","existingValue","newValue","nextExisting","nextUpdated","popCount","idx","canEdit","newArray","removeIn","removed","exists","MAX_ARRAY_MAP_SIZE","createNodes","isEditable","newEntries","pop","bit","keyHashFrag","MAX_BITMAP_INDEXED_SIZE","including","expandedNodes","expandNodes","newBitmap","newNodes","newLen","after","spliceOut","spliceIn","newCount","MIN_HASH_ARRAY_MAP_SIZE","excluding","packedII","packedNodes","packNodes","keyMatch","stack","subNode","List","empty","emptyList","isList","makeList","VNode","list","setSize","maybeList","IS_LIST_SENTINEL","listNodeFor","_origin","setListBounds","newTail","_tail","getTailOffset","_capacity","updateVNode","_level","updateList","splice","insert","values","oldSize","unshift","mergeIntoListWith","iterateList","DONE","ListPrototype","removeBefore","level","originIndex","newChild","removingFirst","oldChild","editable","editableVNode","removeAfter","sizeIndex","EMPTY_LIST","EMPTY_ORDERED_MAP","left","right","tailPos","tail","iterateNodeOrLeaf","from","to","iterateLeaf","iterateNode","origin","capacity","nodeHas","lowerNode","newLowerNode","rawIndex","owner","oldOrigin","oldCapacity","newOrigin","newCapacity","newLevel","offsetShift","oldTailOffset","newTailOffset","oldTail","beginIndex","maxSize","emptyOrderedMap","isOrderedMap","maybeOrderedMap","makeOrderedMap","omap","_map","_list","updateOrderedMap","newMap","newList","flip","ToKeyedSequence","indexed","_iter","_useKeys","ToIndexedSequence","ToSetSequence","FromEntriesSequence","flipFactory","flipSequence","makeSequence","reversedSequence","cacheResultThrough","mapFactory","context","mappedSequence","reverseFactory","filterFactory","predicate","filterSequence","sliceFactory","originalSize","resolvedBegin","resolvedEnd","sliceSize","resolvedSize","sliceSeq","skipped","isSkipping","skipWhileFactory","skipSequence","skipping","concatFactory","isKeyedIterable","concat","singleton","concatSeq","flatten","reduce","sum","flattenFactory","depth","flatSequence","stopped","flatDeep","currentDepth","defaultComparator","maxFactory","maxCompare","comp","zipWithFactory","keyIter","zipper","zipSequence","iterators","isDone","steps","some","s","reify","validateEntry","resolveSize","iterableClass","Record","defaultValues","name","hasInitialized","RecordType","names","setProp","bind","setProps","RecordTypePrototype","_name","_defaultValues","RecordPrototype","valueSeq","indexedIterable","recordName","defaultVal","_empty","makeRecord","likeRecord","record","getPrototypeOf","emptySet","isSet","add","maybeSet","IS_SET_SENTINEL","fromKeys","keySeq","updateSet","union","intersect","originalSet","subtract","OrderedSet","__make","EMPTY_SET","SetPrototype","__empty","makeSet","emptyOrderedSet","isOrderedSet","maybeOrderedSet","EMPTY_ORDERED_SET","OrderedSetPrototype","makeOrderedSet","Stack","emptyStack","isStack","unshiftAll","maybeStack","IS_STACK_SENTINEL","head","_head","peek","makeStack","pushAll","EMPTY_STACK","StackPrototype","mixin","methods","keyCopier","getOwnPropertySymbols","toJS","__toJS","toJSON","toObject","toOrderedMap","toOrderedSet","toSet","toStack","__toStringMapper","join","returnValue","find","findEntry","sideEffect","separator","joined","isFirst","reducer","initialReduction","reduction","useFirst","reduceRight","reversed","not","butLast","isEmpty","countBy","grouper","groups","countByFactory","entriesSequence","entryMapper","filterNot","found","findKey","findLast","findLastEntry","findLastKey","first","flatMap","coerce","flatMapFactory","searchKey","getIn","searchKeyPath","nested","groupBy","isKeyedIter","groupByFactory","hasIn","isSubset","isSuperset","keyOf","keyMapper","last","lastKeyOf","maxBy","neg","defaultNegComparator","minBy","rest","skip","amount","skipLast","skipWhile","skipUntil","take","takeLast","takeWhile","takeSequence","iterating","takeWhileFactory","takeUntil","ordered","keyed","murmurHashOfSize","hashMerge","hashIterable","IterablePrototype","quoteString","chain","contains","mapEntries","mapKeys","KeyedIterablePrototype","JSON","stringify","String","defaultZipper","findIndex","removeNum","numArgs","spliced","findLastIndex","interpose","interposedSequence","interposeFactory","interleave","zipped","interleaved","zip","zipWith","exports","module","$","assign","target","stat","forced","DESCRIPTORS","fails","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","IndexedObject","$assign","enumerable","A","B","symbol","alphabet","split","chr","source","T","argumentsLength","f","S","j","freeGlobal","freeSelf","self","Function","webpackPolyfill","deprecate","paths","children","l","simpleIsEqual","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","isNewArgEqualToLast","newArg","_len","newArgs","_key","isObject","isObjectObject","prot","baseIsNative","getValue","_Symbol","getRawTag","objectToString","symToStringTag","toStringTag","toPrimitive","definePropertyModule","createPropertyDescriptor","propertyKey","getDocument","w","window","doc","needsIEFallback","parentWindow","execScript","win","_parentWindow","defaultView","anObject","that","result","global","ignoreCase","multiline","dotAll","unicode","sticky","arrayLikeKeys","baseKeys","assignValue","baseAssignValue","props","customizer","isNew","$includes","addToUnscopables","proto","el","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","eq","nativeCreate","getNative","isKeyable","data","__data__","DataView","Promise","baseGetTag","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","resolve","Ctor","ctorString","isSymbol","isFunction","isLength","isKey","stringToPath","isObjectLike","func","freeExports","freeModule","freeProcess","process","nodeUtil","types","require","binding","objectProto","getPrototype","overArg","arrayFilter","stubArray","nativeGetSymbols","getSymbols","baseKeysIn","Uint8Array","arrayBuffer","byteLength","stubFalse","Buffer","isBuffer","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","baseIsArguments","isArguments","reIsUint","test","iteratee","stackClear","stackDelete","stackGet","stackHas","stackSet","reIsDeepProp","reIsPlainProp","baseToString","objValue","_typeof2","log","_console","console","formatArgs","args","useColors","namespace","humanize","diff","color","lastC","replace","match","save","namespaces","storage","setItem","removeItem","load","r","getItem","env","DEBUG","__nwjs","navigator","userAgent","toLowerCase","document","style","WebkitAppearance","firebug","exception","table","parseInt","RegExp","$1","localStorage","localstorage","colors","formatters","message","baseTimes","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","isType","skipIndexes","transform","arg","tag","funcToString","arrayPush","keysFunc","symbolsFunc","castPath","toKey","path","getSymbolsIn","redefine","flags","TO_STRING","RegExpPrototype","nativeToString","NOT_GENERIC","INCORRECT_NAME","R","p","rf","unsafe","$find","FIND","SKIPS_HOLES","callbackfn","baseIsTypedArray","baseUnary","nodeIsTypedArray","baseGetAllKeys","hasFunc","arrayEach","baseAssign","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeys","getAllKeysIn","initCloneArray","initCloneByTag","initCloneObject","keysIn","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","isDeep","isFlat","isFull","isFunc","stacked","subValue","basePick","pick","flatRest","nativeObjectToString","isOwn","unmasked","n","typedArrayTags","isPrototype","nativeKeys","funcProto","objectCtorString","assocIndexOf","pairs","LARGE_ARRAY_SIZE","isMasked","reIsHostCtor","reIsNative","uid","coreJsData","maskSrcKey","exec","IE_PROTO","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","getMapData","resIndex","memoizeCapped","rePropName","reEscapeChar","number","quote","subString","memoize","resolver","memoized","Cache","arrayMap","symbolProto","symbolToString","baseHasIn","hasPath","copyObject","nativeKeysIn","isProto","allocUnsafe","buffer","copy","input","cloneArrayBuffer","cloneDataView","cloneRegExp","cloneSymbol","cloneTypedArray","dataView","byteOffset","reFlags","regexp","lastIndex","symbolValueOf","typedArray","baseCreate","objectCreate","baseIsMap","nodeIsMap","baseIsSet","nodeIsSet","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","noop","nextTick","title","browser","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","cwd","chdir","dir","umask","IS_MAC","platform","MODIFIERS","alt","control","meta","ALIASES","break","cmd","command","ctl","ctrl","del","down","esc","ins","mod","opt","option","return","space","spacebar","up","windows","CODES","backspace","tab","enter","pause","capslock","escape","pageup","pagedown","home","arrowleft","arrowup","arrowright","arrowdown","delete","numlock","scrolllock","'","isHotkey","hotkey","options","event","parseHotkey","check","compareHotkey","byKey","ret","_iteratorNormalCompletion","_didIteratorError","_iteratorError","optional","endsWith","toKeyName","modifier","which","toKeyCode","err","expected","actual","toUpperCase","default","isCodeHotkey","isKeyHotkey","_createEmotion","flush","hydrate","cx","getRegisteredStyles","injectGlobal","keyframes","css","sheet","caches","it","regexSymbolWithCombiningMarks","regexSurrogatePair","esrever","$0","$2","charAt","baseUnset","customOmitClone","omit","CLONE_DEEP_FLAG","ImmutablePropTypes","Immutable","ANONYMOUS","productionTypeChecker","isRequired","getProductionTypeChecker","getPropType","propValue","propType","createChainableTypeChecker","validate","checkType","propName","componentName","location","propFullName","locationName","chainedCheckType","createIterableSubclassTypeChecker","subclassName","validator","immutableClassName","immutableClassTypeValidator","listOf","mapOf","orderedMapOf","setOf","orderedSetOf","stackOf","iterableOf","recordOf","shape","mapContains","orderedMapContains","orderedMap","orderedSet","atob","btoa","toAbsoluteIndex","toLength","toIndexedObject","createProperty","wellKnownSymbol","HAS_SPECIES_SUPPORT","arrayMethodHasSpeciesSupport","SPECIES","nativeSlice","Constructor","O","fin","overRest","setToString","FREEZING","onFreeze","$freeze","freeze","sham","preventExtensions","GROUP_LEFT_TO_RIGHT","EXPRESSION_LEFT_TO_RIGHT","EXPRESSION_RIGHT_TO_LEFT","selection","startNode","anchorNode","startOffset","anchorOffset","endNode","focusNode","endOffset","focusOffset","position","compareDocumentPosition","debounce","wait","leading","trailing","insertRule","delimiter","toSheet","block","content","selectors","parents","line","column","ns","at","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","str","W","M","q","g","y","C","K","u","I","t","J","F","G","N","trim","substring","ca","H","X","D","z","da","ea","fa","L","P","Y","E","ha","Q","ia","Z","ja","ka","aa","ba","la","ma","na","oa","U","prefix","use","Boolean","hyphenateRegex","processStyleName","styleName","isNaN","classnames","cls","toAdd","isBrowser","makeStyleTag","opts","createElement","setAttribute","nonce","appendChild","createTextNode","container","StyleSheet","isSpeedy","tags","ctr","_proto","inject","injected","speedy","bool","rule","sourceMap","styleSheets","ownerNode","sheetForTag","cssRules","_tag","parentNode","removeChild","__SECRET_EMOTION__","current","stylisOptions","insertionPlugin","currentSourceMap","registered","inserted","stylis","stylisPlugins","handleInterpolation","interpolation","couldBeSelectorInterpolation","__emotion_styles","selector","mergedProps","createStringFromObject","cached","stylesWithLabel","objectToStringCache","labelPattern","createClassName","styles","identifierName","createStyles","strings","stringMode","raw","interpolations","p1","scope","registeredStyles","classNames","rawClassName","className","hydrateSingleId","id","chunks","querySelectorAll","insertBefore","getAttribute","emotion","ids","_len2","_key2","animation","parent","baseGet","baseSlice","isPlainObject","baseFlatten","isFlattenable","isStrict","spreadableSymbol","isConcatSpreadable","nativeMax","otherArgs","thisArg","baseSetToString","shortOut","constant","identity","nativeNow","Date","now","lastCalled","stamp","remaining","basePickBy","baseSet","selectColor","createDebug","prevTime","debug","enabled","curr","Number","ms","format","formatter","logFn","destroy","extend","init","instances","disable","enable","skips","substr","instance","plural","msAbs","isPlural","round","parseFloat","parse","isFinite","long","fmtLong","fmtShort","URL","isDocument","ownerDocument","commonAncestorContainer","startContainer","attachEvent","toNumber","nativeMin","maxWait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","time","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","cancel","baseTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","isBinary","trimmedEndIndex","reTrimStart","reWhitespace","protocolAndDomainRE","everythingAfterProtocol","localhostDomainRE","nonLocalhostDomainRE","hiddenKeys","METADATA","setMetadata","objectID","weakData","REQUIRED","fastKey","getWeakData","isProduction","warn","Interface","Classes","Class","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","getOwnPropertyNames","desc","getOwnPropertyDescriptor","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","generate","resetGenerator","KeyUtils","setGenerator","MODEL_TYPES","BLOCK","CHANGE","DECORATION","DOCUMENT","HISTORY","INLINE","LEAF","MARK","OPERATION","POINT","RANGE","SCHEMA","SELECTION","STACK","TEXT","VALUE","any","classCallCheck","defineProperties","descriptor","configurable","writable","protoProps","staticProps","_extends","inherits","subClass","setPrototypeOf","__proto__","objectWithoutProperties","possibleConstructorReturn","ReferenceError","slicedToArray","_arr","_n","_d","_e","_s","_i","sliceIterator","toConsumableArray","arr2","Data","attrs","fromJSON","DEFAULTS","_Record","Document","preserveKeys","_object$data","_object$key","_object$nodes","createList","DEFAULTS$1","Inline","isInline","elements","item","DEFAULTS$2","Mark","isMark","DEFAULTS$3","marks","text","Leaf","mark","newMark","newMarks","set$$1","isLeaf","leaves","invalid","leaf","firstLeaf","_object$text","_object$marks","ENABLED","CACHE_KEY","UNDEFINED","UNSET","properties","_loop","property","original","__cache_key","__cache","__cache_no_args","takesArguments","cachedValue","child","DEFAULTS$4","Text","addMarks","newFirst","_Leaf$splitLeaves","splitLeaves","_Leaf$splitLeaves2","before","bundle","_Leaf$splitLeaves3","_Leaf$splitLeaves4","middle","setLeaves","_this2","decorations","dec","hasStart","hasEnd","_Leaf$splitLeaves5","_Leaf$splitLeaves6","_Leaf$splitLeaves7","_Leaf$splitLeaves8","addMark","createLeaves","getActiveMarks","leafEnd","leafStart","_this3","getMarks","getMarksAsArray","searchLeafAtOffset","_searchLeafAtOffset2","delta","beforeText","afterText","nextLeaves","removeMark","_Leaf$splitLeaves9","_Leaf$splitLeaves10","_Leaf$splitLeaves11","_Leaf$splitLeaves12","_searchLeafAtOffset3","_leaves2","_Leaf$splitLeaves13","_Leaf$splitLeaves14","getLeaves","updateMark","_Leaf$splitLeaves15","_Leaf$splitLeaves16","_Leaf$splitLeaves17","_Leaf$splitLeaves18","splitted","regenerateKey","isText","_attrs","ranges","Node","isNode","kind","isBlock","DEFAULTS$5","Block","Changes","method","change","methodAtRange","moveToStart","moveToEnd","isExpanded","addMarkAtRange","sel","select","_marks","getActiveMarksAtRange","_sel","deleteAtRange","insertBlock","insertBlockAtRange","getNode","moveToEndOfNode","insertFragment","fragment","_value2","startText","endText","startInline","lastText","getLastText","lastInline","getClosestInline","firstChild","lastChild","getTexts","isAppending","isAtStartOfNode","isAtEndOfNode","isInserting","hasBlockChildren","insertFragmentAtRange","newTexts","newText","moveToStartOfNode","moveForward","insertInline","inline","insertInlineAtRange","insertText","getInsertMarksAtRange","insertTextAtRange","removeMarkAtRange","_marks2","_sel2","replaceMark","oldMark","splitBlock","splitBlockAtRange","toggleMark","activeMarks","wrapText","suffix","wrapTextAtRange","isCollapsed","moveStartBackward","moveEndBackward","isForward","SPACE","CHAMELEON","PUNCTUATION","isSurrogate","code","isWord","char","getCharLength","getCharOffset","getWordOffset","started","TextUtils","getCharOffsetBackward","getCharOffsetForward","getWordOffsetBackward","getWordOffsetForward","Changes$1","compare","pv","tv","create$1","crop","cb","increment","newPath","range","texts","getTextsAtRange","withoutNormalizing","addMarkByKey","addMarksAtRange","snapshotSelection","startKey","endKey","schema","isStartVoid","hasVoidParent","isEndVoid","startBlock","getClosestBlock","endBlock","isHanging","getFirstText","prevText","getPreviousText","startVoid","getClosestVoid","nextText","getNextText","removeNodeByKey","endVoid","_prevText","startLength","endLength","ancestor","getCommonAncestor","startChild","getFurthestAncestor","endChild","startParent","getParent","startParentIndex","endParentIndex","_index","startChildIndex","endChildIndex","_parent","_index2","removeTextByKey","lonely","getFurthestOnlyChildAncestor","moveNodeByKey","mergeNodeByKey","deleteCharBackwardAtRange","getOffset","deleteBackwardAtRange","deleteLineBackwardAtRange","deleteWordBackwardAtRange","_range","focus","voidParent","isVoid","getDescendant","prevBlock","prevVoid","moveAnchorTo","moveFocusBackward","traversed","deleteCharForwardAtRange","deleteForwardAtRange","deleteLineForwardAtRange","deleteWordForwardAtRange","_range2","nextBlock","getNextBlock","_nextBlock","nextVoid","moveFocusTo","moveFocusForward","_next","extra","insertNodeByKey","atEnd","siblingText","splitRange","splitDescendantsByKey","moveTo","normalize","mapDescendants","isAtStart","blocks","getBlocks","firstBlock","lastBlock","lonelyChild","getFurthest","startIndex","removeNode","newIndex","nextChild","getNextSibling","nextNodes","inlineChild","inlineIndex","assertDescendant","splitNodeByKey","insertTextByKey","removeMarkByKey","setBlocksAtRange","getBlocksAtRange","sets","setNodeByKey","setInlinesAtRange","inlines","getInlinesAtRange","height","_range6","isBackward","moveAnchorToStartOfNode","setFocus","setPath","anchor","resolveRange","splitInlineAtRange","_range7","toggleMarkAtRange","unwrapBlockAtRange","createProperties","wrappers","getClosest","hasDescendant","firstMatch","lastMatch","firstText","unwrapInlineAtRange","wrapBlockAtRange","firstblock","lastblock","siblings","p2","indexes","ind","wrapInlineAtRange","inlineParent","wrapInlineByKey","endInline","endIndex","splitText","inlinekey","rng","isFocused","startInner","startInnerIndex","endInner","startInlines","endInlines","startRange","endRange","PathUtils","decrement","isAbove","_crop","_crop2","isAfter","_crop3","_crop4","isBefore","_crop5","_crop6","isSibling","lift","relate","av","Changes$2","assertNode","operations","bx","by","ax","ay","applyOperations","insertNodeByPath","applyOperation","getMarksAtIndex","previous","getPreviousSibling","state","getTextsAsArray","removals","parentPath","removeNodeByPath","createRange","removeTextByPath","activeMark","insertTextByPath","replaceTextByPath","_options$target","textPath","textOffset","splitNodeByPath","getAncestors","prevIndex","moveToRangeOfNode","parentIndex","grandPath","isLast","moveNodeByPath","updatedPath","wrapBlockByPath","wrapInlineByPath","_len3","_key3","assertPath","newKey","textKey","splitDescendantsByPath","Changes$3","history","_history","undos","redos","op","_op","withoutSaving","_history2","invert","inverse","_inverse","Point","isUnset","hasNode","point","setOffset","moveBackward","getPath","_text","getTextAtOffset","isPoint","_object$offset","_object$path","DEFAULTS$7","Decoration","_properties","isDecoration","isRange","DEFAULTS$8","isSelection","DEFAULTS$9","Selection","createSet","_object$isFocused","Changes$4","proxy","_change$value$selecti","_len31","_key31","pointEdgeObject","edge","Edge","pointEdgeSideObject","side","Side","getDirectionNode","pointBackward","pointForward","isInBlock","isPreviousInVoid","isNextInVoid","blur","deselect","moveAnchorBackward","moveAnchorForward","moveAnchorToEndOfBlock","moveAnchorToEndOfInline","moveAnchorToEndOfDocument","moveAnchorToEndOfNode","moveToAnchor","moveAnchorToEndOfNextBlock","moveAnchorToEndOfNextInline","moveAnchorToEndOfNextText","_len4","_key4","moveAnchorToEndOfPreviousBlock","moveAnchorToEndOfPreviousInline","moveAnchorToEndOfPreviousText","moveAnchorToEndOfText","moveAnchorToStartOfBlock","moveAnchorToStartOfDocument","moveAnchorToStartOfInline","moveAnchorToStartOfNextBlock","moveAnchorToStartOfNextInline","moveAnchorToStartOfNextText","_len5","_key5","moveAnchorToStartOfPreviousBlock","moveAnchorToStartOfPreviousInline","moveAnchorToStartOfPreviousText","moveAnchorToStartOfText","_change$moveAnchorBac","_len6","_key6","_len7","_key7","moveEndForward","_len8","_key8","moveEndTo","_len9","_key9","moveEndToEndOfBlock","moveEndToEndOfDocument","moveEndToEndOfNode","moveEndToEndOfInline","moveEndToEndOfNextBlock","moveEndToEndOfNextInline","moveEndToEndOfNextText","_len10","_key10","moveEndToEndOfPreviousBlock","moveEndToEndOfPreviousInline","moveEndToEndOfPreviousText","moveEndToEndOfText","moveEndToStartOfBlock","moveEndToStartOfDocument","moveEndToStartOfNode","moveEndToStartOfInline","moveEndToStartOfNextBlock","moveEndToStartOfNextInline","moveEndToStartOfNextText","_len11","_key11","moveEndToStartOfPreviousBlock","moveEndToStartOfPreviousInline","moveEndToStartOfPreviousText","moveEndToStartOfText","_len12","_key12","_len13","_key13","_len14","_key14","moveFocusToEndOfBlock","moveFocusToEndOfDocument","moveFocusToEndOfNode","moveToFocus","moveFocusToEndOfInline","moveFocusToEndOfNextBlock","moveFocusToEndOfNextInline","moveFocusToEndOfNextText","_len15","_key15","moveFocusToEndOfPreviousBlock","moveFocusToEndOfPreviousInline","moveFocusToEndOfPreviousText","moveFocusToEndOfText","moveFocusToStartOfBlock","moveFocusToStartOfDocument","moveFocusToStartOfNode","moveFocusToStartOfInline","moveFocusToStartOfNextBlock","moveFocusToStartOfNextInline","moveFocusToStartOfNextText","_len16","_key16","moveFocusToStartOfPreviousBlock","moveFocusToStartOfPreviousInline","moveFocusToStartOfPreviousText","moveFocusToStartOfText","_change$moveAnchorFor","_len17","_key17","_len18","_key18","moveStartForward","_len19","_key19","moveStartTo","_len20","_key20","moveStartToEndOfBlock","moveStartToEndOfDocument","moveStartToEndOfNode","moveStartToEndOfInline","moveStartToEndOfNextBlock","moveStartToEndOfNextInline","moveStartToEndOfNextText","_len21","_key21","moveStartToEndOfPreviousBlock","moveStartToEndOfPreviousInline","moveStartToEndOfPreviousText","moveStartToEndOfText","moveStartToStartOfBlock","moveStartToStartOfDocument","moveStartToStartOfNode","moveStartToStartOfInline","moveStartToStartOfNextBlock","moveStartToStartOfNextInline","moveStartToStartOfNextText","_len22","_key22","moveStartToStartOfPreviousBlock","moveStartToStartOfPreviousInline","moveStartToStartOfPreviousText","moveStartToStartOfText","_len23","_key23","moveToEndOfBlock","moveToEndOfDocument","moveToEndOfInline","moveToEndOfNextBlock","moveToEndOfNextInline","moveToEndOfNextText","_len24","_key24","moveToEndOfPreviousBlock","moveToEndOfPreviousInline","moveToEndOfPreviousText","moveToEndOfText","moveToRangeOfDocument","_len25","_key25","moveToStartOfBlock","moveToStartOfDocument","moveToStartOfInline","moveToStartOfNextBlock","moveToStartOfNextInline","moveToStartOfNextText","_len26","_key26","moveToStartOfPreviousBlock","moveToStartOfPreviousInline","moveToStartOfPreviousText","moveToStartOfText","_options$snapshot","snapshot","setProperties","resolveSelection","setAnchor","_len27","_key27","setEnd","_len28","_key28","_len29","_key29","setStart","_len30","_key30","DEFAULTS$10","History","operation","prevBatch","prevOperation","shouldMerge","batch","_batch","isHistory","_object$redos","_object$undos","createOperationsList","Stack$1","Stack$$1","plugins","plugin","getPluginsWith","_attrs$plugins","SlateError","_Error","_this","captureStackTrace","debug$1","CORE_RULES","DEFAULTS$12","rules","Schema","testRules","failure","validateRules","getNodeRules","validateNode","defaultNormalize","isAtomic","isSchema","_plugin$schema","_schema$blocks","_schema$inlines","_schema$marks","_options$every","_error","validateObject","validateType","validateData","validateMarks","validateText","validateFirst","validateLast","validateNodes","fail","def","_ret","defs","nextDef","validateParent","validatePrevious","validateNext","rewind","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_iterator5","_iteratorNormalCompletion6","_didIteratorError6","_iteratorError6","_step6","_iterator6","DEFAULTS$13","Value","insertNode","mapRanges","updatePoints","_value3","clearAtomicRanges","newDocument","mergeNode","resolvePath","withPath","one","two","_value5","moveNode","unset","removeText","rangeOffset","_range3","setNode","setMark","resolveDecoration","_value12","splitNode","_range4","_value14","createSelection","decs","decoration","createDecoration","_value15","preserveData","preserveDecorations","preserveHistory","preserveSelection","preserveSchema","getPreviousBlock","getNextInline","getPreviousInline","getMarksAtRange","getFragmentAtRange","isValue","_object$document","_object$selection","_object$schema","_object$history","Changes$5","Changes$6","debug$2","_op2","_op3","_path","_op4","_path2","_offset","_path3","_op6","_path4","_op7","_path5","_offset2","_length","_mark","_path6","_op9","_path7","_offset3","_op10","_path8","_offset4","_length2","_mark2","_op11","_path9","_properties2","setSelection","_properties3","_op14","_path10","_properties4","debug$3","invertOperation","inversePath","inverseNewPath","pathLast","newPathLast","_inversePath","_inversePath2","_op5","inverseNode","inverseProperties","inverseMark","_inverseProperties","inverseSelection","inverseProps","_op8","inverseValue","_inverseProperties2","OPERATION_ATTRIBUTES","add_mark","insert_node","insert_text","merge_node","move_node","remove_mark","remove_node","remove_text","set_mark","set_node","set_selection","set_value","split_node","DEFAULTS$14","Operation","ATTRIBUTES","_v","_v2","_v3","_v4","_v5","isOperation","debug$4","Change","tmp","dirty","oldValue","_tmp","oldDocument","getKeysToPathsTable","nextPath","_target","previousPath","newParentPath","oldParent","newParent","_parentPath","getDirtyKeys","normalizeDirtyOperations","normalizeKeys","_tmp2","normalizeMapAndPath","normalizePath","_this4","isChange","CommonInterface","ElementInterface","replaceNode","resolvePoint","matches","forEachDescendant","getMarksAtPosition","_endText","getActiveMarksBetweenOffsets","startMarks","endMarks","ancestors","getBlocksAsArray","isLeafBlock","getBlocksAtRangeAsArray","getBlocksByTypeAsArray","allDecorations","startAt","deep","targetPath","targetPosition","mode","getInlinesAsArray","isLeafInline","getInlinesAtRangeAsArray","getTextsAtRangeAsArray","getInlinesByTypeAsArray","_ref","currentMarks","closestBlock","getOrderedMarksAtRange","getMarksByTypeAsArray","memo","getNextNode","hasChild","getOrderedMarksBetweenPositions","getMarksBetweenOffsets","getTextsBetweenPositionsAsArray","getPreviousNode","isSelected","_range8","_range9","getChild","_this5","_this6","mergeText","_PathUtils$crop","_PathUtils$crop2","np","_child$splitText","_child$splitText2","befores","afters","_loop$1","_iteratorNormalCompletion$1","_didIteratorError$1","_iteratorError$1","_step$1","_iterator$1","NodeInterface","getFirstInvalidNode","descendant","normalizeNode","getText","RangeInterface","setPoints","_values","isBlockList","isData","isInlineList","isLeafList","isMarkSet","isNodeList","isRangeList","isTextList","_ref2","os","_ref3","_ref4","features","InputEvent","element","contentEditable","_ref5","_ref6","_name2","ANDROID_API_VERSIONS","IS_FIREFOX","IS_SAFARI","IS_IE","IS_EDGE","IS_ANDROID","IS_IOS","ANDROID_API_VERSION","matchData","versionString","_ref7","_ref8","regex","getAndroidApiVersion","HAS_INPUT_EVENTS_LEVEL_2","encode","encodeURIComponent","decode","decoded","decodeURIComponent","deserialize","deserializeNode","serialize","serializeNode","_options$delimiter2","_options$defaultBlock","defaultBlock","_options$defaultMarks","defaultMarks","_options$delimiter","_options$toJSON","HOTKEYS","bold","compose","moveWordBackward","moveWordForward","deleteBackward","deleteForward","extendBackward","extendForward","italic","undo","APPLE_HOTKEYS","moveLineBackward","moveLineForward","deleteLineBackward","deleteLineForward","deleteWordBackward","deleteWordForward","extendLineBackward","extendLineForward","redo","transposeCharacter","WINDOWS_HOTKEYS","Hotkeys","IS_APPLE","generic","apple","isGeneric","isApple","isWindows","EVENT_HANDLERS","PLUGIN_PROPS","PARSER","OffsetKey","_matches","_React$Component","_temp","_props","offsetKey","renderMarks","_props2","editor","renderText","attributes","_props3","lastChar","isLastText","isLastLeaf","Component","propTypes","Text$1","Text$$1","_initialiseProps$1","renderLeaf","defaultProps","shouldComponentUpdate","nextProps","pLast","nLast","Void","_initialiseProps$2","readOnly","Tag","spacer","outline","getChildrenDecorations","activeDecorations","childrenDecorations","keyOrders","globalOrder","childNodes","endPoints","startKeyOrder","containingChildOrder","nextChildIndex","containingChild","getContainingChildOrder","isRangeStart","endKeyOrder","isRangeEnd","orderChildDecorations","Node$1","Node$$1","_initialiseProps$3","shouldUpdate","getSelectionIndexes","getDecorations","isChildSelected","renderNode","getTextDirection","placeholder","cloneElement","findDOMNode$1","querySelector","findDOMPoint","createNodeIterator","NodeFilter","SHOW_TEXT","FILTER_ACCEPT","nextNode","textContent","findDOMRange","isBackward$$1","domAnchor","domFocus","ZERO_WIDTH_ATTRIBUTE","ZERO_WIDTH_SELECTOR","OFFSET_KEY_ATTRIBUTE","RANGE_SELECTOR","findPoint","nativeNode","nativeOffset","_normalizeNodeAndOffs","direction","getEditableChild","normalizeNodeAndOffset","nearestNode","nearestOffset","rangeNode","closest","textNode","voidNode","hasAttribute","createPoint","triedForward","triedBackward","findRange","native","StaticRange","endContainer","_native","OVERFLOWS","IS_IOS_11","scrollToSelection","scroller","overflowY","getComputedStyle","body","findScrollContainer","isWindow","backward","getRangeAt","cloneRange","collapse","cursorRect","getBoundingClientRect","collapsed","top","getClientRects","width","yOffset","xOffset","scrollerTop","scrollerLeft","scrollerBordersY","scrollerBordersX","scrollerPaddingTop","scrollerPaddingBottom","scrollerPaddingLeft","scrollerPaddingRight","innerWidth","innerHeight","pageYOffset","pageXOffset","offsetWidth","offsetHeight","scrollTop","scrollLeft","_window$getComputedSt","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","paddingTop","paddingBottom","paddingLeft","paddingRight","scrollerRect","cursorTop","cursorLeft","scrollTo","removeAllRanges","createTextRange","FIREFOX_NODE_TYPE_ACCESS_ERROR","Content","isUpdatingSelection","handlers","handler","onEvent","updateSelection","getSelection","rangeCount","isBlurred","isInEditor","setBaseAndExtent","addRange","isContentEditable","onNativeSelectionChange","activeElement","onSelect","_this$props","addEventListener","onBeforeInput","removeEventListener","toRange","tabIndex","role","tagName","spellCheck","Container","whiteSpace","wordWrap","WebkitUserModify","suppressContentEditableWarning","autoCorrect","TRANSFER_TYPES","FRAGMENT","HTML","NODE","RICH","cloneFragment","callback","_value$selection","encoded","contents","cloneContents","attach","setEndAfter","zw","isNewline","span","valFromSelection","plainText","div","clipboardData","setData","preventDefault","innerHTML","selectAllChildren","requestAnimationFrame","findNode","getEventRange","nativeEvent","_event","rect","isPrevious","previousText","caretRangeFromPoint","caretPositionFromPoint","offsetNode","moveToPoint","FRAGMENT$1","HTML$1","TEXT$1","FRAGMENT_MATCHER","getEventTransfer","transfer","dataTransfer","getType","html","rich","files","embeddedTypes","getEmbeddedTypes","items","getAsFile","getTransferType","getData","TEXT$2","setEventTransfer","mime","debug$5","AfterPlugin","isDraggingInternally","_event$getTargetRange","getTargetRanges","targetRange","inputType","onBlur","onClick","onCopy","onCut","isVoidBlock","isVoidInline","onDragEnd","onDragOver","onDragStart","selectionIncludesNode","onDrop","dispatchEvent","MouseEvent","view","bubbles","cancelable","onInput","lastLeaf","corrected","entire","onKeyDown","isSplitBlock","isDeleteBackward","deleteCharBackward","isDeleteForward","deleteCharForward","isDeleteLineBackward","isDeleteLineForward","isDeleteWordBackward","isDeleteWordForward","isRedo","isUndo","isMoveLineBackward","isMoveLineForward","isExtendLineBackward","isExtendLineForward","isMoveBackward","isMoveForward","_startText","isExtendBackward","_previousText","_startText2","_isPreviousInVoid","isExtendForward","_nextText","_startText3","_isNextInVoid","onPaste","frag","anchorText","focusText","anchorInline","focusInline","focusBlock","anchorBlock","setIsFocused","renderEditor","renderPlaceholder","isComposing","pointerEvents","display","maxWidth","debug$6","BeforePlugin","compositionCount","isCopying","isDragging","relatedTarget","onChange","setValue","onCompositionEnd","setState","onCompositionStart","onDragEnter","onDragExit","onDragLeave","dropEffect","onFocus","isCompose","isBold","isItalic","isTransposeCharacter","debug$7","Editor","_initialiseProps$4","updates","autoFocus","prevProps","resolves","render","resolvePlugins","resolveSchema","resolveStack","resolveValue","isChanging","operationsSize","resolveChange","beforePlugin","afterPlugin","editorPlugin","_prop","prop","reactPropsRegex","_inheritsLoose","_contextTypes","channel","contextTypes","setTheme","theme","testPickPropsOnStringTag","testPickPropsOnComponent","testAlwaysTrue","pickAssign","testFn","_createStyled","staticClassName","stableClassName","shouldForwardProp","label","__emotion_forwardProp","isReal","__emotion_real","baseTag","__emotion_base","Styled","_view$Component","componentWillMount","unsubscribe","subscribe","componentWillUnmount","classInterpolations","innerRef","displayName","withComponent","nextTag","nextOptions","Button","styled","active","Icon","Menu","Toolbar","StyledHover","HoverLink","href","React","LinkHoverState","currentLink","Fragment","linkHover","link","updateLinkHover","anchorTag","firstElementChild","blockRect","XHR","bottom","AjaxAPI","DEFAULT_NODE","isBoldHotkey","isItalicHotkey","isUnderlinedHotkey","wrapLink","wrapInline","unwrapLink","unwrapInline","RichEditor","linkHoverState","icon","isActive","hasLinks","onMouseDown","onClickLink","hasMark","onClickMark","hasBlock","onClickBlock","edit","section","post","setBlocks","unwrapBlock","wrapBlock","prompt","initialValue","renderMarkButton","renderLinkButton","renderBlockButton","renderMark","random","EditorBlock"],"mappings":"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","file":"js/blocks/rich_text-26e96fe0200b799be25a.chunk.js","sourcesContent":["function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global.Immutable = factory();\n})(this, function () {\n 'use strict';\n\n var SLICE$0 = Array.prototype.slice;\n\n function createClass(ctor, superClass) {\n if (superClass) {\n ctor.prototype = Object.create(superClass.prototype);\n }\n\n ctor.prototype.constructor = ctor;\n }\n\n function Iterable(value) {\n return isIterable(value) ? value : Seq(value);\n }\n\n createClass(KeyedIterable, Iterable);\n\n function KeyedIterable(value) {\n return isKeyed(value) ? value : KeyedSeq(value);\n }\n\n createClass(IndexedIterable, Iterable);\n\n function IndexedIterable(value) {\n return isIndexed(value) ? value : IndexedSeq(value);\n }\n\n createClass(SetIterable, Iterable);\n\n function SetIterable(value) {\n return isIterable(value) && !isAssociative(value) ? value : SetSeq(value);\n }\n\n function isIterable(maybeIterable) {\n return !!(maybeIterable && maybeIterable[IS_ITERABLE_SENTINEL]);\n }\n\n function isKeyed(maybeKeyed) {\n return !!(maybeKeyed && maybeKeyed[IS_KEYED_SENTINEL]);\n }\n\n function isIndexed(maybeIndexed) {\n return !!(maybeIndexed && maybeIndexed[IS_INDEXED_SENTINEL]);\n }\n\n function isAssociative(maybeAssociative) {\n return isKeyed(maybeAssociative) || isIndexed(maybeAssociative);\n }\n\n function isOrdered(maybeOrdered) {\n return !!(maybeOrdered && maybeOrdered[IS_ORDERED_SENTINEL]);\n }\n\n Iterable.isIterable = isIterable;\n Iterable.isKeyed = isKeyed;\n Iterable.isIndexed = isIndexed;\n Iterable.isAssociative = isAssociative;\n Iterable.isOrdered = isOrdered;\n Iterable.Keyed = KeyedIterable;\n Iterable.Indexed = IndexedIterable;\n Iterable.Set = SetIterable;\n var IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';\n var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';\n var IS_INDEXED_SENTINEL = '@@__IMMUTABLE_INDEXED__@@';\n var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@'; // Used for setting prototype methods that IE8 chokes on.\n\n var DELETE = 'delete'; // Constants describing the size of trie nodes.\n\n var SHIFT = 5; // Resulted in best performance after ______?\n\n var SIZE = 1 << SHIFT;\n var MASK = SIZE - 1; // A consistent shared value representing \"not set\" which equals nothing other\n // than itself, and nothing that could be provided externally.\n\n var NOT_SET = {}; // Boolean references, Rough equivalent of `bool &`.\n\n var CHANGE_LENGTH = {\n value: false\n };\n var DID_ALTER = {\n value: false\n };\n\n function MakeRef(ref) {\n ref.value = false;\n return ref;\n }\n\n function SetRef(ref) {\n ref && (ref.value = true);\n } // A function which returns a value representing an \"owner\" for transient writes\n // to tries. The return value will only ever equal itself, and will not equal\n // the return of any subsequent call of this function.\n\n\n function OwnerID() {} // http://jsperf.com/copy-array-inline\n\n\n function arrCopy(arr, offset) {\n offset = offset || 0;\n var len = Math.max(0, arr.length - offset);\n var newArr = new Array(len);\n\n for (var ii = 0; ii < len; ii++) {\n newArr[ii] = arr[ii + offset];\n }\n\n return newArr;\n }\n\n function ensureSize(iter) {\n if (iter.size === undefined) {\n iter.size = iter.__iterate(returnTrue);\n }\n\n return iter.size;\n }\n\n function wrapIndex(iter, index) {\n // This implements \"is array index\" which the ECMAString spec defines as:\n //\n // A String property name P is an array index if and only if\n // ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal\n // to 2^32−1.\n //\n // http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects\n if (typeof index !== 'number') {\n var uint32Index = index >>> 0; // N >>> 0 is shorthand for ToUint32\n\n if ('' + uint32Index !== index || uint32Index === 4294967295) {\n return NaN;\n }\n\n index = uint32Index;\n }\n\n return index < 0 ? ensureSize(iter) + index : index;\n }\n\n function returnTrue() {\n return true;\n }\n\n function wholeSlice(begin, end, size) {\n return (begin === 0 || size !== undefined && begin <= -size) && (end === undefined || size !== undefined && end >= size);\n }\n\n function resolveBegin(begin, size) {\n return resolveIndex(begin, size, 0);\n }\n\n function resolveEnd(end, size) {\n return resolveIndex(end, size, size);\n }\n\n function resolveIndex(index, size, defaultIndex) {\n return index === undefined ? defaultIndex : index < 0 ? Math.max(0, size + index) : size === undefined ? index : Math.min(size, index);\n }\n /* global Symbol */\n\n\n var ITERATE_KEYS = 0;\n var ITERATE_VALUES = 1;\n var ITERATE_ENTRIES = 2;\n var REAL_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator';\n var ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL;\n\n function Iterator(next) {\n this.next = next;\n }\n\n Iterator.prototype.toString = function () {\n return '[Iterator]';\n };\n\n Iterator.KEYS = ITERATE_KEYS;\n Iterator.VALUES = ITERATE_VALUES;\n Iterator.ENTRIES = ITERATE_ENTRIES;\n\n Iterator.prototype.inspect = Iterator.prototype.toSource = function () {\n return this.toString();\n };\n\n Iterator.prototype[ITERATOR_SYMBOL] = function () {\n return this;\n };\n\n function iteratorValue(type, k, v, iteratorResult) {\n var value = type === 0 ? k : type === 1 ? v : [k, v];\n iteratorResult ? iteratorResult.value = value : iteratorResult = {\n value: value,\n done: false\n };\n return iteratorResult;\n }\n\n function iteratorDone() {\n return {\n value: undefined,\n done: true\n };\n }\n\n function hasIterator(maybeIterable) {\n return !!getIteratorFn(maybeIterable);\n }\n\n function isIterator(maybeIterator) {\n return maybeIterator && typeof maybeIterator.next === 'function';\n }\n\n function getIterator(iterable) {\n var iteratorFn = getIteratorFn(iterable);\n return iteratorFn && iteratorFn.call(iterable);\n }\n\n function getIteratorFn(iterable) {\n var iteratorFn = iterable && (REAL_ITERATOR_SYMBOL && iterable[REAL_ITERATOR_SYMBOL] || iterable[FAUX_ITERATOR_SYMBOL]);\n\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n function isArrayLike(value) {\n return value && typeof value.length === 'number';\n }\n\n createClass(Seq, Iterable);\n\n function Seq(value) {\n return value === null || value === undefined ? emptySequence() : isIterable(value) ? value.toSeq() : seqFromValue(value);\n }\n\n Seq.of = function ()\n /*...values*/\n {\n return Seq(arguments);\n };\n\n Seq.prototype.toSeq = function () {\n return this;\n };\n\n Seq.prototype.toString = function () {\n return this.__toString('Seq {', '}');\n };\n\n Seq.prototype.cacheResult = function () {\n if (!this._cache && this.__iterateUncached) {\n this._cache = this.entrySeq().toArray();\n this.size = this._cache.length;\n }\n\n return this;\n }; // abstract __iterateUncached(fn, reverse)\n\n\n Seq.prototype.__iterate = function (fn, reverse) {\n return seqIterate(this, fn, reverse, true);\n }; // abstract __iteratorUncached(type, reverse)\n\n\n Seq.prototype.__iterator = function (type, reverse) {\n return seqIterator(this, type, reverse, true);\n };\n\n createClass(KeyedSeq, Seq);\n\n function KeyedSeq(value) {\n return value === null || value === undefined ? emptySequence().toKeyedSeq() : isIterable(value) ? isKeyed(value) ? value.toSeq() : value.fromEntrySeq() : keyedSeqFromValue(value);\n }\n\n KeyedSeq.prototype.toKeyedSeq = function () {\n return this;\n };\n\n createClass(IndexedSeq, Seq);\n\n function IndexedSeq(value) {\n return value === null || value === undefined ? emptySequence() : !isIterable(value) ? indexedSeqFromValue(value) : isKeyed(value) ? value.entrySeq() : value.toIndexedSeq();\n }\n\n IndexedSeq.of = function ()\n /*...values*/\n {\n return IndexedSeq(arguments);\n };\n\n IndexedSeq.prototype.toIndexedSeq = function () {\n return this;\n };\n\n IndexedSeq.prototype.toString = function () {\n return this.__toString('Seq [', ']');\n };\n\n IndexedSeq.prototype.__iterate = function (fn, reverse) {\n return seqIterate(this, fn, reverse, false);\n };\n\n IndexedSeq.prototype.__iterator = function (type, reverse) {\n return seqIterator(this, type, reverse, false);\n };\n\n createClass(SetSeq, Seq);\n\n function SetSeq(value) {\n return (value === null || value === undefined ? emptySequence() : !isIterable(value) ? indexedSeqFromValue(value) : isKeyed(value) ? value.entrySeq() : value).toSetSeq();\n }\n\n SetSeq.of = function ()\n /*...values*/\n {\n return SetSeq(arguments);\n };\n\n SetSeq.prototype.toSetSeq = function () {\n return this;\n };\n\n Seq.isSeq = isSeq;\n Seq.Keyed = KeyedSeq;\n Seq.Set = SetSeq;\n Seq.Indexed = IndexedSeq;\n var IS_SEQ_SENTINEL = '@@__IMMUTABLE_SEQ__@@';\n Seq.prototype[IS_SEQ_SENTINEL] = true;\n createClass(ArraySeq, IndexedSeq);\n\n function ArraySeq(array) {\n this._array = array;\n this.size = array.length;\n }\n\n ArraySeq.prototype.get = function (index, notSetValue) {\n return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue;\n };\n\n ArraySeq.prototype.__iterate = function (fn, reverse) {\n var array = this._array;\n var maxIndex = array.length - 1;\n\n for (var ii = 0; ii <= maxIndex; ii++) {\n if (fn(array[reverse ? maxIndex - ii : ii], ii, this) === false) {\n return ii + 1;\n }\n }\n\n return ii;\n };\n\n ArraySeq.prototype.__iterator = function (type, reverse) {\n var array = this._array;\n var maxIndex = array.length - 1;\n var ii = 0;\n return new Iterator(function () {\n return ii > maxIndex ? iteratorDone() : iteratorValue(type, ii, array[reverse ? maxIndex - ii++ : ii++]);\n });\n };\n\n createClass(ObjectSeq, KeyedSeq);\n\n function ObjectSeq(object) {\n var keys = Object.keys(object);\n this._object = object;\n this._keys = keys;\n this.size = keys.length;\n }\n\n ObjectSeq.prototype.get = function (key, notSetValue) {\n if (notSetValue !== undefined && !this.has(key)) {\n return notSetValue;\n }\n\n return this._object[key];\n };\n\n ObjectSeq.prototype.has = function (key) {\n return this._object.hasOwnProperty(key);\n };\n\n ObjectSeq.prototype.__iterate = function (fn, reverse) {\n var object = this._object;\n var keys = this._keys;\n var maxIndex = keys.length - 1;\n\n for (var ii = 0; ii <= maxIndex; ii++) {\n var key = keys[reverse ? maxIndex - ii : ii];\n\n if (fn(object[key], key, this) === false) {\n return ii + 1;\n }\n }\n\n return ii;\n };\n\n ObjectSeq.prototype.__iterator = function (type, reverse) {\n var object = this._object;\n var keys = this._keys;\n var maxIndex = keys.length - 1;\n var ii = 0;\n return new Iterator(function () {\n var key = keys[reverse ? maxIndex - ii : ii];\n return ii++ > maxIndex ? iteratorDone() : iteratorValue(type, key, object[key]);\n });\n };\n\n ObjectSeq.prototype[IS_ORDERED_SENTINEL] = true;\n createClass(IterableSeq, IndexedSeq);\n\n function IterableSeq(iterable) {\n this._iterable = iterable;\n this.size = iterable.length || iterable.size;\n }\n\n IterableSeq.prototype.__iterateUncached = function (fn, reverse) {\n if (reverse) {\n return this.cacheResult().__iterate(fn, reverse);\n }\n\n var iterable = this._iterable;\n var iterator = getIterator(iterable);\n var iterations = 0;\n\n if (isIterator(iterator)) {\n var step;\n\n while (!(step = iterator.next()).done) {\n if (fn(step.value, iterations++, this) === false) {\n break;\n }\n }\n }\n\n return iterations;\n };\n\n IterableSeq.prototype.__iteratorUncached = function (type, reverse) {\n if (reverse) {\n return this.cacheResult().__iterator(type, reverse);\n }\n\n var iterable = this._iterable;\n var iterator = getIterator(iterable);\n\n if (!isIterator(iterator)) {\n return new Iterator(iteratorDone);\n }\n\n var iterations = 0;\n return new Iterator(function () {\n var step = iterator.next();\n return step.done ? step : iteratorValue(type, iterations++, step.value);\n });\n };\n\n createClass(IteratorSeq, IndexedSeq);\n\n function IteratorSeq(iterator) {\n this._iterator = iterator;\n this._iteratorCache = [];\n }\n\n IteratorSeq.prototype.__iterateUncached = function (fn, reverse) {\n if (reverse) {\n return this.cacheResult().__iterate(fn, reverse);\n }\n\n var iterator = this._iterator;\n var cache = this._iteratorCache;\n var iterations = 0;\n\n while (iterations < cache.length) {\n if (fn(cache[iterations], iterations++, this) === false) {\n return iterations;\n }\n }\n\n var step;\n\n while (!(step = iterator.next()).done) {\n var val = step.value;\n cache[iterations] = val;\n\n if (fn(val, iterations++, this) === false) {\n break;\n }\n }\n\n return iterations;\n };\n\n IteratorSeq.prototype.__iteratorUncached = function (type, reverse) {\n if (reverse) {\n return this.cacheResult().__iterator(type, reverse);\n }\n\n var iterator = this._iterator;\n var cache = this._iteratorCache;\n var iterations = 0;\n return new Iterator(function () {\n if (iterations >= cache.length) {\n var step = iterator.next();\n\n if (step.done) {\n return step;\n }\n\n cache[iterations] = step.value;\n }\n\n return iteratorValue(type, iterations, cache[iterations++]);\n });\n }; // # pragma Helper functions\n\n\n function isSeq(maybeSeq) {\n return !!(maybeSeq && maybeSeq[IS_SEQ_SENTINEL]);\n }\n\n var EMPTY_SEQ;\n\n function emptySequence() {\n return EMPTY_SEQ || (EMPTY_SEQ = new ArraySeq([]));\n }\n\n function keyedSeqFromValue(value) {\n var seq = Array.isArray(value) ? new ArraySeq(value).fromEntrySeq() : isIterator(value) ? new IteratorSeq(value).fromEntrySeq() : hasIterator(value) ? new IterableSeq(value).fromEntrySeq() : _typeof(value) === 'object' ? new ObjectSeq(value) : undefined;\n\n if (!seq) {\n throw new TypeError('Expected Array or iterable object of [k, v] entries, ' + 'or keyed object: ' + value);\n }\n\n return seq;\n }\n\n function indexedSeqFromValue(value) {\n var seq = maybeIndexedSeqFromValue(value);\n\n if (!seq) {\n throw new TypeError('Expected Array or iterable object of values: ' + value);\n }\n\n return seq;\n }\n\n function seqFromValue(value) {\n var seq = maybeIndexedSeqFromValue(value) || _typeof(value) === 'object' && new ObjectSeq(value);\n\n if (!seq) {\n throw new TypeError('Expected Array or iterable object of values, or keyed object: ' + value);\n }\n\n return seq;\n }\n\n function maybeIndexedSeqFromValue(value) {\n return isArrayLike(value) ? new ArraySeq(value) : isIterator(value) ? new IteratorSeq(value) : hasIterator(value) ? new IterableSeq(value) : undefined;\n }\n\n function seqIterate(seq, fn, reverse, useKeys) {\n var cache = seq._cache;\n\n if (cache) {\n var maxIndex = cache.length - 1;\n\n for (var ii = 0; ii <= maxIndex; ii++) {\n var entry = cache[reverse ? maxIndex - ii : ii];\n\n if (fn(entry[1], useKeys ? entry[0] : ii, seq) === false) {\n return ii + 1;\n }\n }\n\n return ii;\n }\n\n return seq.__iterateUncached(fn, reverse);\n }\n\n function seqIterator(seq, type, reverse, useKeys) {\n var cache = seq._cache;\n\n if (cache) {\n var maxIndex = cache.length - 1;\n var ii = 0;\n return new Iterator(function () {\n var entry = cache[reverse ? maxIndex - ii : ii];\n return ii++ > maxIndex ? iteratorDone() : iteratorValue(type, useKeys ? entry[0] : ii - 1, entry[1]);\n });\n }\n\n return seq.__iteratorUncached(type, reverse);\n }\n\n function fromJS(json, converter) {\n return converter ? fromJSWith(converter, json, '', {\n '': json\n }) : fromJSDefault(json);\n }\n\n function fromJSWith(converter, json, key, parentJSON) {\n if (Array.isArray(json)) {\n return converter.call(parentJSON, key, IndexedSeq(json).map(function (v, k) {\n return fromJSWith(converter, v, k, json);\n }));\n }\n\n if (isPlainObj(json)) {\n return converter.call(parentJSON, key, KeyedSeq(json).map(function (v, k) {\n return fromJSWith(converter, v, k, json);\n }));\n }\n\n return json;\n }\n\n function fromJSDefault(json) {\n if (Array.isArray(json)) {\n return IndexedSeq(json).map(fromJSDefault).toList();\n }\n\n if (isPlainObj(json)) {\n return KeyedSeq(json).map(fromJSDefault).toMap();\n }\n\n return json;\n }\n\n function isPlainObj(value) {\n return value && (value.constructor === Object || value.constructor === undefined);\n }\n /**\n * An extension of the \"same-value\" algorithm as [described for use by ES6 Map\n * and Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Key_equality)\n *\n * NaN is considered the same as NaN, however -0 and 0 are considered the same\n * value, which is different from the algorithm described by\n * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).\n *\n * This is extended further to allow Objects to describe the values they\n * represent, by way of `valueOf` or `equals` (and `hashCode`).\n *\n * Note: because of this extension, the key equality of Immutable.Map and the\n * value equality of Immutable.Set will differ from ES6 Map and Set.\n *\n * ### Defining custom values\n *\n * The easiest way to describe the value an object represents is by implementing\n * `valueOf`. For example, `Date` represents a value by returning a unix\n * timestamp for `valueOf`:\n *\n * var date1 = new Date(1234567890000); // Fri Feb 13 2009 ...\n * var date2 = new Date(1234567890000);\n * date1.valueOf(); // 1234567890000\n * assert( date1 !== date2 );\n * assert( Immutable.is( date1, date2 ) );\n *\n * Note: overriding `valueOf` may have other implications if you use this object\n * where JavaScript expects a primitive, such as implicit string coercion.\n *\n * For more complex types, especially collections, implementing `valueOf` may\n * not be performant. An alternative is to implement `equals` and `hashCode`.\n *\n * `equals` takes another object, presumably of similar type, and returns true\n * if the it is equal. Equality is symmetrical, so the same result should be\n * returned if this and the argument are flipped.\n *\n * assert( a.equals(b) === b.equals(a) );\n *\n * `hashCode` returns a 32bit integer number representing the object which will\n * be used to determine how to store the value object in a Map or Set. You must\n * provide both or neither methods, one must not exist without the other.\n *\n * Also, an important relationship between these methods must be upheld: if two\n * values are equal, they *must* return the same hashCode. If the values are not\n * equal, they might have the same hashCode; this is called a hash collision,\n * and while undesirable for performance reasons, it is acceptable.\n *\n * if (a.equals(b)) {\n * assert( a.hashCode() === b.hashCode() );\n * }\n *\n * All Immutable collections implement `equals` and `hashCode`.\n *\n */\n\n\n function is(valueA, valueB) {\n if (valueA === valueB || valueA !== valueA && valueB !== valueB) {\n return true;\n }\n\n if (!valueA || !valueB) {\n return false;\n }\n\n if (typeof valueA.valueOf === 'function' && typeof valueB.valueOf === 'function') {\n valueA = valueA.valueOf();\n valueB = valueB.valueOf();\n\n if (valueA === valueB || valueA !== valueA && valueB !== valueB) {\n return true;\n }\n\n if (!valueA || !valueB) {\n return false;\n }\n }\n\n if (typeof valueA.equals === 'function' && typeof valueB.equals === 'function' && valueA.equals(valueB)) {\n return true;\n }\n\n return false;\n }\n\n function deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (!isIterable(b) || a.size !== undefined && b.size !== undefined && a.size !== b.size || a.__hash !== undefined && b.__hash !== undefined && a.__hash !== b.__hash || isKeyed(a) !== isKeyed(b) || isIndexed(a) !== isIndexed(b) || isOrdered(a) !== isOrdered(b)) {\n return false;\n }\n\n if (a.size === 0 && b.size === 0) {\n return true;\n }\n\n var notAssociative = !isAssociative(a);\n\n if (isOrdered(a)) {\n var entries = a.entries();\n return b.every(function (v, k) {\n var entry = entries.next().value;\n return entry && is(entry[1], v) && (notAssociative || is(entry[0], k));\n }) && entries.next().done;\n }\n\n var flipped = false;\n\n if (a.size === undefined) {\n if (b.size === undefined) {\n if (typeof a.cacheResult === 'function') {\n a.cacheResult();\n }\n } else {\n flipped = true;\n var _ = a;\n a = b;\n b = _;\n }\n }\n\n var allEqual = true;\n\n var bSize = b.__iterate(function (v, k) {\n if (notAssociative ? !a.has(v) : flipped ? !is(v, a.get(k, NOT_SET)) : !is(a.get(k, NOT_SET), v)) {\n allEqual = false;\n return false;\n }\n });\n\n return allEqual && a.size === bSize;\n }\n\n createClass(Repeat, IndexedSeq);\n\n function Repeat(value, times) {\n if (!(this instanceof Repeat)) {\n return new Repeat(value, times);\n }\n\n this._value = value;\n this.size = times === undefined ? Infinity : Math.max(0, times);\n\n if (this.size === 0) {\n if (EMPTY_REPEAT) {\n return EMPTY_REPEAT;\n }\n\n EMPTY_REPEAT = this;\n }\n }\n\n Repeat.prototype.toString = function () {\n if (this.size === 0) {\n return 'Repeat []';\n }\n\n return 'Repeat [ ' + this._value + ' ' + this.size + ' times ]';\n };\n\n Repeat.prototype.get = function (index, notSetValue) {\n return this.has(index) ? this._value : notSetValue;\n };\n\n Repeat.prototype.includes = function (searchValue) {\n return is(this._value, searchValue);\n };\n\n Repeat.prototype.slice = function (begin, end) {\n var size = this.size;\n return wholeSlice(begin, end, size) ? this : new Repeat(this._value, resolveEnd(end, size) - resolveBegin(begin, size));\n };\n\n Repeat.prototype.reverse = function () {\n return this;\n };\n\n Repeat.prototype.indexOf = function (searchValue) {\n if (is(this._value, searchValue)) {\n return 0;\n }\n\n return -1;\n };\n\n Repeat.prototype.lastIndexOf = function (searchValue) {\n if (is(this._value, searchValue)) {\n return this.size;\n }\n\n return -1;\n };\n\n Repeat.prototype.__iterate = function (fn, reverse) {\n for (var ii = 0; ii < this.size; ii++) {\n if (fn(this._value, ii, this) === false) {\n return ii + 1;\n }\n }\n\n return ii;\n };\n\n Repeat.prototype.__iterator = function (type, reverse) {\n var this$0 = this;\n var ii = 0;\n return new Iterator(function () {\n return ii < this$0.size ? iteratorValue(type, ii++, this$0._value) : iteratorDone();\n });\n };\n\n Repeat.prototype.equals = function (other) {\n return other instanceof Repeat ? is(this._value, other._value) : deepEqual(other);\n };\n\n var EMPTY_REPEAT;\n\n function invariant(condition, error) {\n if (!condition) throw new Error(error);\n }\n\n createClass(Range, IndexedSeq);\n\n function Range(start, end, step) {\n if (!(this instanceof Range)) {\n return new Range(start, end, step);\n }\n\n invariant(step !== 0, 'Cannot step a Range by 0');\n start = start || 0;\n\n if (end === undefined) {\n end = Infinity;\n }\n\n step = step === undefined ? 1 : Math.abs(step);\n\n if (end < start) {\n step = -step;\n }\n\n this._start = start;\n this._end = end;\n this._step = step;\n this.size = Math.max(0, Math.ceil((end - start) / step - 1) + 1);\n\n if (this.size === 0) {\n if (EMPTY_RANGE) {\n return EMPTY_RANGE;\n }\n\n EMPTY_RANGE = this;\n }\n }\n\n Range.prototype.toString = function () {\n if (this.size === 0) {\n return 'Range []';\n }\n\n return 'Range [ ' + this._start + '...' + this._end + (this._step !== 1 ? ' by ' + this._step : '') + ' ]';\n };\n\n Range.prototype.get = function (index, notSetValue) {\n return this.has(index) ? this._start + wrapIndex(this, index) * this._step : notSetValue;\n };\n\n Range.prototype.includes = function (searchValue) {\n var possibleIndex = (searchValue - this._start) / this._step;\n return possibleIndex >= 0 && possibleIndex < this.size && possibleIndex === Math.floor(possibleIndex);\n };\n\n Range.prototype.slice = function (begin, end) {\n if (wholeSlice(begin, end, this.size)) {\n return this;\n }\n\n begin = resolveBegin(begin, this.size);\n end = resolveEnd(end, this.size);\n\n if (end <= begin) {\n return new Range(0, 0);\n }\n\n return new Range(this.get(begin, this._end), this.get(end, this._end), this._step);\n };\n\n Range.prototype.indexOf = function (searchValue) {\n var offsetValue = searchValue - this._start;\n\n if (offsetValue % this._step === 0) {\n var index = offsetValue / this._step;\n\n if (index >= 0 && index < this.size) {\n return index;\n }\n }\n\n return -1;\n };\n\n Range.prototype.lastIndexOf = function (searchValue) {\n return this.indexOf(searchValue);\n };\n\n Range.prototype.__iterate = function (fn, reverse) {\n var maxIndex = this.size - 1;\n var step = this._step;\n var value = reverse ? this._start + maxIndex * step : this._start;\n\n for (var ii = 0; ii <= maxIndex; ii++) {\n if (fn(value, ii, this) === false) {\n return ii + 1;\n }\n\n value += reverse ? -step : step;\n }\n\n return ii;\n };\n\n Range.prototype.__iterator = function (type, reverse) {\n var maxIndex = this.size - 1;\n var step = this._step;\n var value = reverse ? this._start + maxIndex * step : this._start;\n var ii = 0;\n return new Iterator(function () {\n var v = value;\n value += reverse ? -step : step;\n return ii > maxIndex ? iteratorDone() : iteratorValue(type, ii++, v);\n });\n };\n\n Range.prototype.equals = function (other) {\n return other instanceof Range ? this._start === other._start && this._end === other._end && this._step === other._step : deepEqual(this, other);\n };\n\n var EMPTY_RANGE;\n createClass(Collection, Iterable);\n\n function Collection() {\n throw TypeError('Abstract');\n }\n\n createClass(KeyedCollection, Collection);\n\n function KeyedCollection() {}\n\n createClass(IndexedCollection, Collection);\n\n function IndexedCollection() {}\n\n createClass(SetCollection, Collection);\n\n function SetCollection() {}\n\n Collection.Keyed = KeyedCollection;\n Collection.Indexed = IndexedCollection;\n Collection.Set = SetCollection;\n var imul = typeof Math.imul === 'function' && Math.imul(0xffffffff, 2) === -2 ? Math.imul : function imul(a, b) {\n a = a | 0; // int\n\n b = b | 0; // int\n\n var c = a & 0xffff;\n var d = b & 0xffff; // Shift by 0 fixes the sign on the high part.\n\n return c * d + ((a >>> 16) * d + c * (b >>> 16) << 16 >>> 0) | 0; // int\n }; // v8 has an optimization for storing 31-bit signed numbers.\n // Values which have either 00 or 11 as the high order bits qualify.\n // This function drops the highest order bit in a signed number, maintaining\n // the sign bit.\n\n function smi(i32) {\n return i32 >>> 1 & 0x40000000 | i32 & 0xBFFFFFFF;\n }\n\n function hash(o) {\n if (o === false || o === null || o === undefined) {\n return 0;\n }\n\n if (typeof o.valueOf === 'function') {\n o = o.valueOf();\n\n if (o === false || o === null || o === undefined) {\n return 0;\n }\n }\n\n if (o === true) {\n return 1;\n }\n\n var type = _typeof(o);\n\n if (type === 'number') {\n if (o !== o || o === Infinity) {\n return 0;\n }\n\n var h = o | 0;\n\n if (h !== o) {\n h ^= o * 0xFFFFFFFF;\n }\n\n while (o > 0xFFFFFFFF) {\n o /= 0xFFFFFFFF;\n h ^= o;\n }\n\n return smi(h);\n }\n\n if (type === 'string') {\n return o.length > STRING_HASH_CACHE_MIN_STRLEN ? cachedHashString(o) : hashString(o);\n }\n\n if (typeof o.hashCode === 'function') {\n return o.hashCode();\n }\n\n if (type === 'object') {\n return hashJSObj(o);\n }\n\n if (typeof o.toString === 'function') {\n return hashString(o.toString());\n }\n\n throw new Error('Value type ' + type + ' cannot be hashed.');\n }\n\n function cachedHashString(string) {\n var hash = stringHashCache[string];\n\n if (hash === undefined) {\n hash = hashString(string);\n\n if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) {\n STRING_HASH_CACHE_SIZE = 0;\n stringHashCache = {};\n }\n\n STRING_HASH_CACHE_SIZE++;\n stringHashCache[string] = hash;\n }\n\n return hash;\n } // http://jsperf.com/hashing-strings\n\n\n function hashString(string) {\n // This is the hash from JVM\n // The hash code for a string is computed as\n // s[0] * 31 ^ (n - 1) + s[1] * 31 ^ (n - 2) + ... + s[n - 1],\n // where s[i] is the ith character of the string and n is the length of\n // the string. We \"mod\" the result to make it between 0 (inclusive) and 2^31\n // (exclusive) by dropping high bits.\n var hash = 0;\n\n for (var ii = 0; ii < string.length; ii++) {\n hash = 31 * hash + string.charCodeAt(ii) | 0;\n }\n\n return smi(hash);\n }\n\n function hashJSObj(obj) {\n var hash;\n\n if (usingWeakMap) {\n hash = weakMap.get(obj);\n\n if (hash !== undefined) {\n return hash;\n }\n }\n\n hash = obj[UID_HASH_KEY];\n\n if (hash !== undefined) {\n return hash;\n }\n\n if (!canDefineProperty) {\n hash = obj.propertyIsEnumerable && obj.propertyIsEnumerable[UID_HASH_KEY];\n\n if (hash !== undefined) {\n return hash;\n }\n\n hash = getIENodeHash(obj);\n\n if (hash !== undefined) {\n return hash;\n }\n }\n\n hash = ++objHashUID;\n\n if (objHashUID & 0x40000000) {\n objHashUID = 0;\n }\n\n if (usingWeakMap) {\n weakMap.set(obj, hash);\n } else if (isExtensible !== undefined && isExtensible(obj) === false) {\n throw new Error('Non-extensible objects are not allowed as keys.');\n } else if (canDefineProperty) {\n Object.defineProperty(obj, UID_HASH_KEY, {\n 'enumerable': false,\n 'configurable': false,\n 'writable': false,\n 'value': hash\n });\n } else if (obj.propertyIsEnumerable !== undefined && obj.propertyIsEnumerable === obj.constructor.prototype.propertyIsEnumerable) {\n // Since we can't define a non-enumerable property on the object\n // we'll hijack one of the less-used non-enumerable properties to\n // save our hash on it. Since this is a function it will not show up in\n // `JSON.stringify` which is what we want.\n obj.propertyIsEnumerable = function () {\n return this.constructor.prototype.propertyIsEnumerable.apply(this, arguments);\n };\n\n obj.propertyIsEnumerable[UID_HASH_KEY] = hash;\n } else if (obj.nodeType !== undefined) {\n // At this point we couldn't get the IE `uniqueID` to use as a hash\n // and we couldn't use a non-enumerable property to exploit the\n // dontEnum bug so we simply add the `UID_HASH_KEY` on the node\n // itself.\n obj[UID_HASH_KEY] = hash;\n } else {\n throw new Error('Unable to set a non-enumerable property on object.');\n }\n\n return hash;\n } // Get references to ES5 object methods.\n\n\n var isExtensible = Object.isExtensible; // True if Object.defineProperty works as expected. IE8 fails this test.\n\n var canDefineProperty = function () {\n try {\n Object.defineProperty({}, '@', {});\n return true;\n } catch (e) {\n return false;\n }\n }(); // IE has a `uniqueID` property on DOM nodes. We can construct the hash from it\n // and avoid memory leaks from the IE cloneNode bug.\n\n\n function getIENodeHash(node) {\n if (node && node.nodeType > 0) {\n switch (node.nodeType) {\n case 1:\n // Element\n return node.uniqueID;\n\n case 9:\n // Document\n return node.documentElement && node.documentElement.uniqueID;\n }\n }\n } // If possible, use a WeakMap.\n\n\n var usingWeakMap = typeof WeakMap === 'function';\n var weakMap;\n\n if (usingWeakMap) {\n weakMap = new WeakMap();\n }\n\n var objHashUID = 0;\n var UID_HASH_KEY = '__immutablehash__';\n\n if (typeof Symbol === 'function') {\n UID_HASH_KEY = Symbol(UID_HASH_KEY);\n }\n\n var STRING_HASH_CACHE_MIN_STRLEN = 16;\n var STRING_HASH_CACHE_MAX_SIZE = 255;\n var STRING_HASH_CACHE_SIZE = 0;\n var stringHashCache = {};\n\n function assertNotInfinite(size) {\n invariant(size !== Infinity, 'Cannot perform this action with an infinite size.');\n }\n\n createClass(Map, KeyedCollection); // @pragma Construction\n\n function Map(value) {\n return value === null || value === undefined ? emptyMap() : isMap(value) && !isOrdered(value) ? value : emptyMap().withMutations(function (map) {\n var iter = KeyedIterable(value);\n assertNotInfinite(iter.size);\n iter.forEach(function (v, k) {\n return map.set(k, v);\n });\n });\n }\n\n Map.of = function () {\n var keyValues = SLICE$0.call(arguments, 0);\n return emptyMap().withMutations(function (map) {\n for (var i = 0; i < keyValues.length; i += 2) {\n if (i + 1 >= keyValues.length) {\n throw new Error('Missing value for key: ' + keyValues[i]);\n }\n\n map.set(keyValues[i], keyValues[i + 1]);\n }\n });\n };\n\n Map.prototype.toString = function () {\n return this.__toString('Map {', '}');\n }; // @pragma Access\n\n\n Map.prototype.get = function (k, notSetValue) {\n return this._root ? this._root.get(0, undefined, k, notSetValue) : notSetValue;\n }; // @pragma Modification\n\n\n Map.prototype.set = function (k, v) {\n return updateMap(this, k, v);\n };\n\n Map.prototype.setIn = function (keyPath, v) {\n return this.updateIn(keyPath, NOT_SET, function () {\n return v;\n });\n };\n\n Map.prototype.remove = function (k) {\n return updateMap(this, k, NOT_SET);\n };\n\n Map.prototype.deleteIn = function (keyPath) {\n return this.updateIn(keyPath, function () {\n return NOT_SET;\n });\n };\n\n Map.prototype.update = function (k, notSetValue, updater) {\n return arguments.length === 1 ? k(this) : this.updateIn([k], notSetValue, updater);\n };\n\n Map.prototype.updateIn = function (keyPath, notSetValue, updater) {\n if (!updater) {\n updater = notSetValue;\n notSetValue = undefined;\n }\n\n var updatedValue = updateInDeepMap(this, forceIterator(keyPath), notSetValue, updater);\n return updatedValue === NOT_SET ? undefined : updatedValue;\n };\n\n Map.prototype.clear = function () {\n if (this.size === 0) {\n return this;\n }\n\n if (this.__ownerID) {\n this.size = 0;\n this._root = null;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n\n return emptyMap();\n }; // @pragma Composition\n\n\n Map.prototype.merge = function ()\n /*...iters*/\n {\n return mergeIntoMapWith(this, undefined, arguments);\n };\n\n Map.prototype.mergeWith = function (merger) {\n var iters = SLICE$0.call(arguments, 1);\n return mergeIntoMapWith(this, merger, iters);\n };\n\n Map.prototype.mergeIn = function (keyPath) {\n var iters = SLICE$0.call(arguments, 1);\n return this.updateIn(keyPath, emptyMap(), function (m) {\n return typeof m.merge === 'function' ? m.merge.apply(m, iters) : iters[iters.length - 1];\n });\n };\n\n Map.prototype.mergeDeep = function ()\n /*...iters*/\n {\n return mergeIntoMapWith(this, deepMerger, arguments);\n };\n\n Map.prototype.mergeDeepWith = function (merger) {\n var iters = SLICE$0.call(arguments, 1);\n return mergeIntoMapWith(this, deepMergerWith(merger), iters);\n };\n\n Map.prototype.mergeDeepIn = function (keyPath) {\n var iters = SLICE$0.call(arguments, 1);\n return this.updateIn(keyPath, emptyMap(), function (m) {\n return typeof m.mergeDeep === 'function' ? m.mergeDeep.apply(m, iters) : iters[iters.length - 1];\n });\n };\n\n Map.prototype.sort = function (comparator) {\n // Late binding\n return OrderedMap(sortFactory(this, comparator));\n };\n\n Map.prototype.sortBy = function (mapper, comparator) {\n // Late binding\n return OrderedMap(sortFactory(this, comparator, mapper));\n }; // @pragma Mutability\n\n\n Map.prototype.withMutations = function (fn) {\n var mutable = this.asMutable();\n fn(mutable);\n return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this;\n };\n\n Map.prototype.asMutable = function () {\n return this.__ownerID ? this : this.__ensureOwner(new OwnerID());\n };\n\n Map.prototype.asImmutable = function () {\n return this.__ensureOwner();\n };\n\n Map.prototype.wasAltered = function () {\n return this.__altered;\n };\n\n Map.prototype.__iterator = function (type, reverse) {\n return new MapIterator(this, type, reverse);\n };\n\n Map.prototype.__iterate = function (fn, reverse) {\n var this$0 = this;\n var iterations = 0;\n this._root && this._root.iterate(function (entry) {\n iterations++;\n return fn(entry[1], entry[0], this$0);\n }, reverse);\n return iterations;\n };\n\n Map.prototype.__ensureOwner = function (ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n\n if (!ownerID) {\n this.__ownerID = ownerID;\n this.__altered = false;\n return this;\n }\n\n return makeMap(this.size, this._root, ownerID, this.__hash);\n };\n\n function isMap(maybeMap) {\n return !!(maybeMap && maybeMap[IS_MAP_SENTINEL]);\n }\n\n Map.isMap = isMap;\n var IS_MAP_SENTINEL = '@@__IMMUTABLE_MAP__@@';\n var MapPrototype = Map.prototype;\n MapPrototype[IS_MAP_SENTINEL] = true;\n MapPrototype[DELETE] = MapPrototype.remove;\n MapPrototype.removeIn = MapPrototype.deleteIn; // #pragma Trie Nodes\n\n function ArrayMapNode(ownerID, entries) {\n this.ownerID = ownerID;\n this.entries = entries;\n }\n\n ArrayMapNode.prototype.get = function (shift, keyHash, key, notSetValue) {\n var entries = this.entries;\n\n for (var ii = 0, len = entries.length; ii < len; ii++) {\n if (is(key, entries[ii][0])) {\n return entries[ii][1];\n }\n }\n\n return notSetValue;\n };\n\n ArrayMapNode.prototype.update = function (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n var removed = value === NOT_SET;\n var entries = this.entries;\n var idx = 0;\n\n for (var len = entries.length; idx < len; idx++) {\n if (is(key, entries[idx][0])) {\n break;\n }\n }\n\n var exists = idx < len;\n\n if (exists ? entries[idx][1] === value : removed) {\n return this;\n }\n\n SetRef(didAlter);\n (removed || !exists) && SetRef(didChangeSize);\n\n if (removed && entries.length === 1) {\n return; // undefined\n }\n\n if (!exists && !removed && entries.length >= MAX_ARRAY_MAP_SIZE) {\n return createNodes(ownerID, entries, key, value);\n }\n\n var isEditable = ownerID && ownerID === this.ownerID;\n var newEntries = isEditable ? entries : arrCopy(entries);\n\n if (exists) {\n if (removed) {\n idx === len - 1 ? newEntries.pop() : newEntries[idx] = newEntries.pop();\n } else {\n newEntries[idx] = [key, value];\n }\n } else {\n newEntries.push([key, value]);\n }\n\n if (isEditable) {\n this.entries = newEntries;\n return this;\n }\n\n return new ArrayMapNode(ownerID, newEntries);\n };\n\n function BitmapIndexedNode(ownerID, bitmap, nodes) {\n this.ownerID = ownerID;\n this.bitmap = bitmap;\n this.nodes = nodes;\n }\n\n BitmapIndexedNode.prototype.get = function (shift, keyHash, key, notSetValue) {\n if (keyHash === undefined) {\n keyHash = hash(key);\n }\n\n var bit = 1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK);\n var bitmap = this.bitmap;\n return (bitmap & bit) === 0 ? notSetValue : this.nodes[popCount(bitmap & bit - 1)].get(shift + SHIFT, keyHash, key, notSetValue);\n };\n\n BitmapIndexedNode.prototype.update = function (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n if (keyHash === undefined) {\n keyHash = hash(key);\n }\n\n var keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n var bit = 1 << keyHashFrag;\n var bitmap = this.bitmap;\n var exists = (bitmap & bit) !== 0;\n\n if (!exists && value === NOT_SET) {\n return this;\n }\n\n var idx = popCount(bitmap & bit - 1);\n var nodes = this.nodes;\n var node = exists ? nodes[idx] : undefined;\n var newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter);\n\n if (newNode === node) {\n return this;\n }\n\n if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) {\n return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode);\n }\n\n if (exists && !newNode && nodes.length === 2 && isLeafNode(nodes[idx ^ 1])) {\n return nodes[idx ^ 1];\n }\n\n if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) {\n return newNode;\n }\n\n var isEditable = ownerID && ownerID === this.ownerID;\n var newBitmap = exists ? newNode ? bitmap : bitmap ^ bit : bitmap | bit;\n var newNodes = exists ? newNode ? setIn(nodes, idx, newNode, isEditable) : spliceOut(nodes, idx, isEditable) : spliceIn(nodes, idx, newNode, isEditable);\n\n if (isEditable) {\n this.bitmap = newBitmap;\n this.nodes = newNodes;\n return this;\n }\n\n return new BitmapIndexedNode(ownerID, newBitmap, newNodes);\n };\n\n function HashArrayMapNode(ownerID, count, nodes) {\n this.ownerID = ownerID;\n this.count = count;\n this.nodes = nodes;\n }\n\n HashArrayMapNode.prototype.get = function (shift, keyHash, key, notSetValue) {\n if (keyHash === undefined) {\n keyHash = hash(key);\n }\n\n var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n var node = this.nodes[idx];\n return node ? node.get(shift + SHIFT, keyHash, key, notSetValue) : notSetValue;\n };\n\n HashArrayMapNode.prototype.update = function (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n if (keyHash === undefined) {\n keyHash = hash(key);\n }\n\n var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n var removed = value === NOT_SET;\n var nodes = this.nodes;\n var node = nodes[idx];\n\n if (removed && !node) {\n return this;\n }\n\n var newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter);\n\n if (newNode === node) {\n return this;\n }\n\n var newCount = this.count;\n\n if (!node) {\n newCount++;\n } else if (!newNode) {\n newCount--;\n\n if (newCount < MIN_HASH_ARRAY_MAP_SIZE) {\n return packNodes(ownerID, nodes, newCount, idx);\n }\n }\n\n var isEditable = ownerID && ownerID === this.ownerID;\n var newNodes = setIn(nodes, idx, newNode, isEditable);\n\n if (isEditable) {\n this.count = newCount;\n this.nodes = newNodes;\n return this;\n }\n\n return new HashArrayMapNode(ownerID, newCount, newNodes);\n };\n\n function HashCollisionNode(ownerID, keyHash, entries) {\n this.ownerID = ownerID;\n this.keyHash = keyHash;\n this.entries = entries;\n }\n\n HashCollisionNode.prototype.get = function (shift, keyHash, key, notSetValue) {\n var entries = this.entries;\n\n for (var ii = 0, len = entries.length; ii < len; ii++) {\n if (is(key, entries[ii][0])) {\n return entries[ii][1];\n }\n }\n\n return notSetValue;\n };\n\n HashCollisionNode.prototype.update = function (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n if (keyHash === undefined) {\n keyHash = hash(key);\n }\n\n var removed = value === NOT_SET;\n\n if (keyHash !== this.keyHash) {\n if (removed) {\n return this;\n }\n\n SetRef(didAlter);\n SetRef(didChangeSize);\n return mergeIntoNode(this, ownerID, shift, keyHash, [key, value]);\n }\n\n var entries = this.entries;\n var idx = 0;\n\n for (var len = entries.length; idx < len; idx++) {\n if (is(key, entries[idx][0])) {\n break;\n }\n }\n\n var exists = idx < len;\n\n if (exists ? entries[idx][1] === value : removed) {\n return this;\n }\n\n SetRef(didAlter);\n (removed || !exists) && SetRef(didChangeSize);\n\n if (removed && len === 2) {\n return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]);\n }\n\n var isEditable = ownerID && ownerID === this.ownerID;\n var newEntries = isEditable ? entries : arrCopy(entries);\n\n if (exists) {\n if (removed) {\n idx === len - 1 ? newEntries.pop() : newEntries[idx] = newEntries.pop();\n } else {\n newEntries[idx] = [key, value];\n }\n } else {\n newEntries.push([key, value]);\n }\n\n if (isEditable) {\n this.entries = newEntries;\n return this;\n }\n\n return new HashCollisionNode(ownerID, this.keyHash, newEntries);\n };\n\n function ValueNode(ownerID, keyHash, entry) {\n this.ownerID = ownerID;\n this.keyHash = keyHash;\n this.entry = entry;\n }\n\n ValueNode.prototype.get = function (shift, keyHash, key, notSetValue) {\n return is(key, this.entry[0]) ? this.entry[1] : notSetValue;\n };\n\n ValueNode.prototype.update = function (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n var removed = value === NOT_SET;\n var keyMatch = is(key, this.entry[0]);\n\n if (keyMatch ? value === this.entry[1] : removed) {\n return this;\n }\n\n SetRef(didAlter);\n\n if (removed) {\n SetRef(didChangeSize);\n return; // undefined\n }\n\n if (keyMatch) {\n if (ownerID && ownerID === this.ownerID) {\n this.entry[1] = value;\n return this;\n }\n\n return new ValueNode(ownerID, this.keyHash, [key, value]);\n }\n\n SetRef(didChangeSize);\n return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]);\n }; // #pragma Iterators\n\n\n ArrayMapNode.prototype.iterate = HashCollisionNode.prototype.iterate = function (fn, reverse) {\n var entries = this.entries;\n\n for (var ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) {\n if (fn(entries[reverse ? maxIndex - ii : ii]) === false) {\n return false;\n }\n }\n };\n\n BitmapIndexedNode.prototype.iterate = HashArrayMapNode.prototype.iterate = function (fn, reverse) {\n var nodes = this.nodes;\n\n for (var ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) {\n var node = nodes[reverse ? maxIndex - ii : ii];\n\n if (node && node.iterate(fn, reverse) === false) {\n return false;\n }\n }\n };\n\n ValueNode.prototype.iterate = function (fn, reverse) {\n return fn(this.entry);\n };\n\n createClass(MapIterator, Iterator);\n\n function MapIterator(map, type, reverse) {\n this._type = type;\n this._reverse = reverse;\n this._stack = map._root && mapIteratorFrame(map._root);\n }\n\n MapIterator.prototype.next = function () {\n var type = this._type;\n var stack = this._stack;\n\n while (stack) {\n var node = stack.node;\n var index = stack.index++;\n var maxIndex;\n\n if (node.entry) {\n if (index === 0) {\n return mapIteratorValue(type, node.entry);\n }\n } else if (node.entries) {\n maxIndex = node.entries.length - 1;\n\n if (index <= maxIndex) {\n return mapIteratorValue(type, node.entries[this._reverse ? maxIndex - index : index]);\n }\n } else {\n maxIndex = node.nodes.length - 1;\n\n if (index <= maxIndex) {\n var subNode = node.nodes[this._reverse ? maxIndex - index : index];\n\n if (subNode) {\n if (subNode.entry) {\n return mapIteratorValue(type, subNode.entry);\n }\n\n stack = this._stack = mapIteratorFrame(subNode, stack);\n }\n\n continue;\n }\n }\n\n stack = this._stack = this._stack.__prev;\n }\n\n return iteratorDone();\n };\n\n function mapIteratorValue(type, entry) {\n return iteratorValue(type, entry[0], entry[1]);\n }\n\n function mapIteratorFrame(node, prev) {\n return {\n node: node,\n index: 0,\n __prev: prev\n };\n }\n\n function makeMap(size, root, ownerID, hash) {\n var map = Object.create(MapPrototype);\n map.size = size;\n map._root = root;\n map.__ownerID = ownerID;\n map.__hash = hash;\n map.__altered = false;\n return map;\n }\n\n var EMPTY_MAP;\n\n function emptyMap() {\n return EMPTY_MAP || (EMPTY_MAP = makeMap(0));\n }\n\n function updateMap(map, k, v) {\n var newRoot;\n var newSize;\n\n if (!map._root) {\n if (v === NOT_SET) {\n return map;\n }\n\n newSize = 1;\n newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]);\n } else {\n var didChangeSize = MakeRef(CHANGE_LENGTH);\n var didAlter = MakeRef(DID_ALTER);\n newRoot = updateNode(map._root, map.__ownerID, 0, undefined, k, v, didChangeSize, didAlter);\n\n if (!didAlter.value) {\n return map;\n }\n\n newSize = map.size + (didChangeSize.value ? v === NOT_SET ? -1 : 1 : 0);\n }\n\n if (map.__ownerID) {\n map.size = newSize;\n map._root = newRoot;\n map.__hash = undefined;\n map.__altered = true;\n return map;\n }\n\n return newRoot ? makeMap(newSize, newRoot) : emptyMap();\n }\n\n function updateNode(node, ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n if (!node) {\n if (value === NOT_SET) {\n return node;\n }\n\n SetRef(didAlter);\n SetRef(didChangeSize);\n return new ValueNode(ownerID, keyHash, [key, value]);\n }\n\n return node.update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter);\n }\n\n function isLeafNode(node) {\n return node.constructor === ValueNode || node.constructor === HashCollisionNode;\n }\n\n function mergeIntoNode(node, ownerID, shift, keyHash, entry) {\n if (node.keyHash === keyHash) {\n return new HashCollisionNode(ownerID, keyHash, [node.entry, entry]);\n }\n\n var idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK;\n var idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n var newNode;\n var nodes = idx1 === idx2 ? [mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry)] : (newNode = new ValueNode(ownerID, keyHash, entry), idx1 < idx2 ? [node, newNode] : [newNode, node]);\n return new BitmapIndexedNode(ownerID, 1 << idx1 | 1 << idx2, nodes);\n }\n\n function createNodes(ownerID, entries, key, value) {\n if (!ownerID) {\n ownerID = new OwnerID();\n }\n\n var node = new ValueNode(ownerID, hash(key), [key, value]);\n\n for (var ii = 0; ii < entries.length; ii++) {\n var entry = entries[ii];\n node = node.update(ownerID, 0, undefined, entry[0], entry[1]);\n }\n\n return node;\n }\n\n function packNodes(ownerID, nodes, count, excluding) {\n var bitmap = 0;\n var packedII = 0;\n var packedNodes = new Array(count);\n\n for (var ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) {\n var node = nodes[ii];\n\n if (node !== undefined && ii !== excluding) {\n bitmap |= bit;\n packedNodes[packedII++] = node;\n }\n }\n\n return new BitmapIndexedNode(ownerID, bitmap, packedNodes);\n }\n\n function expandNodes(ownerID, nodes, bitmap, including, node) {\n var count = 0;\n var expandedNodes = new Array(SIZE);\n\n for (var ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) {\n expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined;\n }\n\n expandedNodes[including] = node;\n return new HashArrayMapNode(ownerID, count + 1, expandedNodes);\n }\n\n function mergeIntoMapWith(map, merger, iterables) {\n var iters = [];\n\n for (var ii = 0; ii < iterables.length; ii++) {\n var value = iterables[ii];\n var iter = KeyedIterable(value);\n\n if (!isIterable(value)) {\n iter = iter.map(function (v) {\n return fromJS(v);\n });\n }\n\n iters.push(iter);\n }\n\n return mergeIntoCollectionWith(map, merger, iters);\n }\n\n function deepMerger(existing, value, key) {\n return existing && existing.mergeDeep && isIterable(value) ? existing.mergeDeep(value) : is(existing, value) ? existing : value;\n }\n\n function deepMergerWith(merger) {\n return function (existing, value, key) {\n if (existing && existing.mergeDeepWith && isIterable(value)) {\n return existing.mergeDeepWith(merger, value);\n }\n\n var nextValue = merger(existing, value, key);\n return is(existing, nextValue) ? existing : nextValue;\n };\n }\n\n function mergeIntoCollectionWith(collection, merger, iters) {\n iters = iters.filter(function (x) {\n return x.size !== 0;\n });\n\n if (iters.length === 0) {\n return collection;\n }\n\n if (collection.size === 0 && !collection.__ownerID && iters.length === 1) {\n return collection.constructor(iters[0]);\n }\n\n return collection.withMutations(function (collection) {\n var mergeIntoMap = merger ? function (value, key) {\n collection.update(key, NOT_SET, function (existing) {\n return existing === NOT_SET ? value : merger(existing, value, key);\n });\n } : function (value, key) {\n collection.set(key, value);\n };\n\n for (var ii = 0; ii < iters.length; ii++) {\n iters[ii].forEach(mergeIntoMap);\n }\n });\n }\n\n function updateInDeepMap(existing, keyPathIter, notSetValue, updater) {\n var isNotSet = existing === NOT_SET;\n var step = keyPathIter.next();\n\n if (step.done) {\n var existingValue = isNotSet ? notSetValue : existing;\n var newValue = updater(existingValue);\n return newValue === existingValue ? existing : newValue;\n }\n\n invariant(isNotSet || existing && existing.set, 'invalid keyPath');\n var key = step.value;\n var nextExisting = isNotSet ? NOT_SET : existing.get(key, NOT_SET);\n var nextUpdated = updateInDeepMap(nextExisting, keyPathIter, notSetValue, updater);\n return nextUpdated === nextExisting ? existing : nextUpdated === NOT_SET ? existing.remove(key) : (isNotSet ? emptyMap() : existing).set(key, nextUpdated);\n }\n\n function popCount(x) {\n x = x - (x >> 1 & 0x55555555);\n x = (x & 0x33333333) + (x >> 2 & 0x33333333);\n x = x + (x >> 4) & 0x0f0f0f0f;\n x = x + (x >> 8);\n x = x + (x >> 16);\n return x & 0x7f;\n }\n\n function setIn(array, idx, val, canEdit) {\n var newArray = canEdit ? array : arrCopy(array);\n newArray[idx] = val;\n return newArray;\n }\n\n function spliceIn(array, idx, val, canEdit) {\n var newLen = array.length + 1;\n\n if (canEdit && idx + 1 === newLen) {\n array[idx] = val;\n return array;\n }\n\n var newArray = new Array(newLen);\n var after = 0;\n\n for (var ii = 0; ii < newLen; ii++) {\n if (ii === idx) {\n newArray[ii] = val;\n after = -1;\n } else {\n newArray[ii] = array[ii + after];\n }\n }\n\n return newArray;\n }\n\n function spliceOut(array, idx, canEdit) {\n var newLen = array.length - 1;\n\n if (canEdit && idx === newLen) {\n array.pop();\n return array;\n }\n\n var newArray = new Array(newLen);\n var after = 0;\n\n for (var ii = 0; ii < newLen; ii++) {\n if (ii === idx) {\n after = 1;\n }\n\n newArray[ii] = array[ii + after];\n }\n\n return newArray;\n }\n\n var MAX_ARRAY_MAP_SIZE = SIZE / 4;\n var MAX_BITMAP_INDEXED_SIZE = SIZE / 2;\n var MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4;\n createClass(List, IndexedCollection); // @pragma Construction\n\n function List(value) {\n var empty = emptyList();\n\n if (value === null || value === undefined) {\n return empty;\n }\n\n if (isList(value)) {\n return value;\n }\n\n var iter = IndexedIterable(value);\n var size = iter.size;\n\n if (size === 0) {\n return empty;\n }\n\n assertNotInfinite(size);\n\n if (size > 0 && size < SIZE) {\n return makeList(0, size, SHIFT, null, new VNode(iter.toArray()));\n }\n\n return empty.withMutations(function (list) {\n list.setSize(size);\n iter.forEach(function (v, i) {\n return list.set(i, v);\n });\n });\n }\n\n List.of = function ()\n /*...values*/\n {\n return this(arguments);\n };\n\n List.prototype.toString = function () {\n return this.__toString('List [', ']');\n }; // @pragma Access\n\n\n List.prototype.get = function (index, notSetValue) {\n index = wrapIndex(this, index);\n\n if (index >= 0 && index < this.size) {\n index += this._origin;\n var node = listNodeFor(this, index);\n return node && node.array[index & MASK];\n }\n\n return notSetValue;\n }; // @pragma Modification\n\n\n List.prototype.set = function (index, value) {\n return updateList(this, index, value);\n };\n\n List.prototype.remove = function (index) {\n return !this.has(index) ? this : index === 0 ? this.shift() : index === this.size - 1 ? this.pop() : this.splice(index, 1);\n };\n\n List.prototype.insert = function (index, value) {\n return this.splice(index, 0, value);\n };\n\n List.prototype.clear = function () {\n if (this.size === 0) {\n return this;\n }\n\n if (this.__ownerID) {\n this.size = this._origin = this._capacity = 0;\n this._level = SHIFT;\n this._root = this._tail = null;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n\n return emptyList();\n };\n\n List.prototype.push = function ()\n /*...values*/\n {\n var values = arguments;\n var oldSize = this.size;\n return this.withMutations(function (list) {\n setListBounds(list, 0, oldSize + values.length);\n\n for (var ii = 0; ii < values.length; ii++) {\n list.set(oldSize + ii, values[ii]);\n }\n });\n };\n\n List.prototype.pop = function () {\n return setListBounds(this, 0, -1);\n };\n\n List.prototype.unshift = function ()\n /*...values*/\n {\n var values = arguments;\n return this.withMutations(function (list) {\n setListBounds(list, -values.length);\n\n for (var ii = 0; ii < values.length; ii++) {\n list.set(ii, values[ii]);\n }\n });\n };\n\n List.prototype.shift = function () {\n return setListBounds(this, 1);\n }; // @pragma Composition\n\n\n List.prototype.merge = function ()\n /*...iters*/\n {\n return mergeIntoListWith(this, undefined, arguments);\n };\n\n List.prototype.mergeWith = function (merger) {\n var iters = SLICE$0.call(arguments, 1);\n return mergeIntoListWith(this, merger, iters);\n };\n\n List.prototype.mergeDeep = function ()\n /*...iters*/\n {\n return mergeIntoListWith(this, deepMerger, arguments);\n };\n\n List.prototype.mergeDeepWith = function (merger) {\n var iters = SLICE$0.call(arguments, 1);\n return mergeIntoListWith(this, deepMergerWith(merger), iters);\n };\n\n List.prototype.setSize = function (size) {\n return setListBounds(this, 0, size);\n }; // @pragma Iteration\n\n\n List.prototype.slice = function (begin, end) {\n var size = this.size;\n\n if (wholeSlice(begin, end, size)) {\n return this;\n }\n\n return setListBounds(this, resolveBegin(begin, size), resolveEnd(end, size));\n };\n\n List.prototype.__iterator = function (type, reverse) {\n var index = 0;\n var values = iterateList(this, reverse);\n return new Iterator(function () {\n var value = values();\n return value === DONE ? iteratorDone() : iteratorValue(type, index++, value);\n });\n };\n\n List.prototype.__iterate = function (fn, reverse) {\n var index = 0;\n var values = iterateList(this, reverse);\n var value;\n\n while ((value = values()) !== DONE) {\n if (fn(value, index++, this) === false) {\n break;\n }\n }\n\n return index;\n };\n\n List.prototype.__ensureOwner = function (ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n\n if (!ownerID) {\n this.__ownerID = ownerID;\n return this;\n }\n\n return makeList(this._origin, this._capacity, this._level, this._root, this._tail, ownerID, this.__hash);\n };\n\n function isList(maybeList) {\n return !!(maybeList && maybeList[IS_LIST_SENTINEL]);\n }\n\n List.isList = isList;\n var IS_LIST_SENTINEL = '@@__IMMUTABLE_LIST__@@';\n var ListPrototype = List.prototype;\n ListPrototype[IS_LIST_SENTINEL] = true;\n ListPrototype[DELETE] = ListPrototype.remove;\n ListPrototype.setIn = MapPrototype.setIn;\n ListPrototype.deleteIn = ListPrototype.removeIn = MapPrototype.removeIn;\n ListPrototype.update = MapPrototype.update;\n ListPrototype.updateIn = MapPrototype.updateIn;\n ListPrototype.mergeIn = MapPrototype.mergeIn;\n ListPrototype.mergeDeepIn = MapPrototype.mergeDeepIn;\n ListPrototype.withMutations = MapPrototype.withMutations;\n ListPrototype.asMutable = MapPrototype.asMutable;\n ListPrototype.asImmutable = MapPrototype.asImmutable;\n ListPrototype.wasAltered = MapPrototype.wasAltered;\n\n function VNode(array, ownerID) {\n this.array = array;\n this.ownerID = ownerID;\n } // TODO: seems like these methods are very similar\n\n\n VNode.prototype.removeBefore = function (ownerID, level, index) {\n if (index === level ? 1 << level : 0 || this.array.length === 0) {\n return this;\n }\n\n var originIndex = index >>> level & MASK;\n\n if (originIndex >= this.array.length) {\n return new VNode([], ownerID);\n }\n\n var removingFirst = originIndex === 0;\n var newChild;\n\n if (level > 0) {\n var oldChild = this.array[originIndex];\n newChild = oldChild && oldChild.removeBefore(ownerID, level - SHIFT, index);\n\n if (newChild === oldChild && removingFirst) {\n return this;\n }\n }\n\n if (removingFirst && !newChild) {\n return this;\n }\n\n var editable = editableVNode(this, ownerID);\n\n if (!removingFirst) {\n for (var ii = 0; ii < originIndex; ii++) {\n editable.array[ii] = undefined;\n }\n }\n\n if (newChild) {\n editable.array[originIndex] = newChild;\n }\n\n return editable;\n };\n\n VNode.prototype.removeAfter = function (ownerID, level, index) {\n if (index === (level ? 1 << level : 0) || this.array.length === 0) {\n return this;\n }\n\n var sizeIndex = index - 1 >>> level & MASK;\n\n if (sizeIndex >= this.array.length) {\n return this;\n }\n\n var newChild;\n\n if (level > 0) {\n var oldChild = this.array[sizeIndex];\n newChild = oldChild && oldChild.removeAfter(ownerID, level - SHIFT, index);\n\n if (newChild === oldChild && sizeIndex === this.array.length - 1) {\n return this;\n }\n }\n\n var editable = editableVNode(this, ownerID);\n editable.array.splice(sizeIndex + 1);\n\n if (newChild) {\n editable.array[sizeIndex] = newChild;\n }\n\n return editable;\n };\n\n var DONE = {};\n\n function iterateList(list, reverse) {\n var left = list._origin;\n var right = list._capacity;\n var tailPos = getTailOffset(right);\n var tail = list._tail;\n return iterateNodeOrLeaf(list._root, list._level, 0);\n\n function iterateNodeOrLeaf(node, level, offset) {\n return level === 0 ? iterateLeaf(node, offset) : iterateNode(node, level, offset);\n }\n\n function iterateLeaf(node, offset) {\n var array = offset === tailPos ? tail && tail.array : node && node.array;\n var from = offset > left ? 0 : left - offset;\n var to = right - offset;\n\n if (to > SIZE) {\n to = SIZE;\n }\n\n return function () {\n if (from === to) {\n return DONE;\n }\n\n var idx = reverse ? --to : from++;\n return array && array[idx];\n };\n }\n\n function iterateNode(node, level, offset) {\n var values;\n var array = node && node.array;\n var from = offset > left ? 0 : left - offset >> level;\n var to = (right - offset >> level) + 1;\n\n if (to > SIZE) {\n to = SIZE;\n }\n\n return function () {\n do {\n if (values) {\n var value = values();\n\n if (value !== DONE) {\n return value;\n }\n\n values = null;\n }\n\n if (from === to) {\n return DONE;\n }\n\n var idx = reverse ? --to : from++;\n values = iterateNodeOrLeaf(array && array[idx], level - SHIFT, offset + (idx << level));\n } while (true);\n };\n }\n }\n\n function makeList(origin, capacity, level, root, tail, ownerID, hash) {\n var list = Object.create(ListPrototype);\n list.size = capacity - origin;\n list._origin = origin;\n list._capacity = capacity;\n list._level = level;\n list._root = root;\n list._tail = tail;\n list.__ownerID = ownerID;\n list.__hash = hash;\n list.__altered = false;\n return list;\n }\n\n var EMPTY_LIST;\n\n function emptyList() {\n return EMPTY_LIST || (EMPTY_LIST = makeList(0, 0, SHIFT));\n }\n\n function updateList(list, index, value) {\n index = wrapIndex(list, index);\n\n if (index !== index) {\n return list;\n }\n\n if (index >= list.size || index < 0) {\n return list.withMutations(function (list) {\n index < 0 ? setListBounds(list, index).set(0, value) : setListBounds(list, 0, index + 1).set(index, value);\n });\n }\n\n index += list._origin;\n var newTail = list._tail;\n var newRoot = list._root;\n var didAlter = MakeRef(DID_ALTER);\n\n if (index >= getTailOffset(list._capacity)) {\n newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter);\n } else {\n newRoot = updateVNode(newRoot, list.__ownerID, list._level, index, value, didAlter);\n }\n\n if (!didAlter.value) {\n return list;\n }\n\n if (list.__ownerID) {\n list._root = newRoot;\n list._tail = newTail;\n list.__hash = undefined;\n list.__altered = true;\n return list;\n }\n\n return makeList(list._origin, list._capacity, list._level, newRoot, newTail);\n }\n\n function updateVNode(node, ownerID, level, index, value, didAlter) {\n var idx = index >>> level & MASK;\n var nodeHas = node && idx < node.array.length;\n\n if (!nodeHas && value === undefined) {\n return node;\n }\n\n var newNode;\n\n if (level > 0) {\n var lowerNode = node && node.array[idx];\n var newLowerNode = updateVNode(lowerNode, ownerID, level - SHIFT, index, value, didAlter);\n\n if (newLowerNode === lowerNode) {\n return node;\n }\n\n newNode = editableVNode(node, ownerID);\n newNode.array[idx] = newLowerNode;\n return newNode;\n }\n\n if (nodeHas && node.array[idx] === value) {\n return node;\n }\n\n SetRef(didAlter);\n newNode = editableVNode(node, ownerID);\n\n if (value === undefined && idx === newNode.array.length - 1) {\n newNode.array.pop();\n } else {\n newNode.array[idx] = value;\n }\n\n return newNode;\n }\n\n function editableVNode(node, ownerID) {\n if (ownerID && node && ownerID === node.ownerID) {\n return node;\n }\n\n return new VNode(node ? node.array.slice() : [], ownerID);\n }\n\n function listNodeFor(list, rawIndex) {\n if (rawIndex >= getTailOffset(list._capacity)) {\n return list._tail;\n }\n\n if (rawIndex < 1 << list._level + SHIFT) {\n var node = list._root;\n var level = list._level;\n\n while (node && level > 0) {\n node = node.array[rawIndex >>> level & MASK];\n level -= SHIFT;\n }\n\n return node;\n }\n }\n\n function setListBounds(list, begin, end) {\n // Sanitize begin & end using this shorthand for ToInt32(argument)\n // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n if (begin !== undefined) {\n begin = begin | 0;\n }\n\n if (end !== undefined) {\n end = end | 0;\n }\n\n var owner = list.__ownerID || new OwnerID();\n var oldOrigin = list._origin;\n var oldCapacity = list._capacity;\n var newOrigin = oldOrigin + begin;\n var newCapacity = end === undefined ? oldCapacity : end < 0 ? oldCapacity + end : oldOrigin + end;\n\n if (newOrigin === oldOrigin && newCapacity === oldCapacity) {\n return list;\n } // If it's going to end after it starts, it's empty.\n\n\n if (newOrigin >= newCapacity) {\n return list.clear();\n }\n\n var newLevel = list._level;\n var newRoot = list._root; // New origin might need creating a higher root.\n\n var offsetShift = 0;\n\n while (newOrigin + offsetShift < 0) {\n newRoot = new VNode(newRoot && newRoot.array.length ? [undefined, newRoot] : [], owner);\n newLevel += SHIFT;\n offsetShift += 1 << newLevel;\n }\n\n if (offsetShift) {\n newOrigin += offsetShift;\n oldOrigin += offsetShift;\n newCapacity += offsetShift;\n oldCapacity += offsetShift;\n }\n\n var oldTailOffset = getTailOffset(oldCapacity);\n var newTailOffset = getTailOffset(newCapacity); // New size might need creating a higher root.\n\n while (newTailOffset >= 1 << newLevel + SHIFT) {\n newRoot = new VNode(newRoot && newRoot.array.length ? [newRoot] : [], owner);\n newLevel += SHIFT;\n } // Locate or create the new tail.\n\n\n var oldTail = list._tail;\n var newTail = newTailOffset < oldTailOffset ? listNodeFor(list, newCapacity - 1) : newTailOffset > oldTailOffset ? new VNode([], owner) : oldTail; // Merge Tail into tree.\n\n if (oldTail && newTailOffset > oldTailOffset && newOrigin < oldCapacity && oldTail.array.length) {\n newRoot = editableVNode(newRoot, owner);\n var node = newRoot;\n\n for (var level = newLevel; level > SHIFT; level -= SHIFT) {\n var idx = oldTailOffset >>> level & MASK;\n node = node.array[idx] = editableVNode(node.array[idx], owner);\n }\n\n node.array[oldTailOffset >>> SHIFT & MASK] = oldTail;\n } // If the size has been reduced, there's a chance the tail needs to be trimmed.\n\n\n if (newCapacity < oldCapacity) {\n newTail = newTail && newTail.removeAfter(owner, 0, newCapacity);\n } // If the new origin is within the tail, then we do not need a root.\n\n\n if (newOrigin >= newTailOffset) {\n newOrigin -= newTailOffset;\n newCapacity -= newTailOffset;\n newLevel = SHIFT;\n newRoot = null;\n newTail = newTail && newTail.removeBefore(owner, 0, newOrigin); // Otherwise, if the root has been trimmed, garbage collect.\n } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) {\n offsetShift = 0; // Identify the new top root node of the subtree of the old root.\n\n while (newRoot) {\n var beginIndex = newOrigin >>> newLevel & MASK;\n\n if (beginIndex !== newTailOffset >>> newLevel & MASK) {\n break;\n }\n\n if (beginIndex) {\n offsetShift += (1 << newLevel) * beginIndex;\n }\n\n newLevel -= SHIFT;\n newRoot = newRoot.array[beginIndex];\n } // Trim the new sides of the new root.\n\n\n if (newRoot && newOrigin > oldOrigin) {\n newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift);\n }\n\n if (newRoot && newTailOffset < oldTailOffset) {\n newRoot = newRoot.removeAfter(owner, newLevel, newTailOffset - offsetShift);\n }\n\n if (offsetShift) {\n newOrigin -= offsetShift;\n newCapacity -= offsetShift;\n }\n }\n\n if (list.__ownerID) {\n list.size = newCapacity - newOrigin;\n list._origin = newOrigin;\n list._capacity = newCapacity;\n list._level = newLevel;\n list._root = newRoot;\n list._tail = newTail;\n list.__hash = undefined;\n list.__altered = true;\n return list;\n }\n\n return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail);\n }\n\n function mergeIntoListWith(list, merger, iterables) {\n var iters = [];\n var maxSize = 0;\n\n for (var ii = 0; ii < iterables.length; ii++) {\n var value = iterables[ii];\n var iter = IndexedIterable(value);\n\n if (iter.size > maxSize) {\n maxSize = iter.size;\n }\n\n if (!isIterable(value)) {\n iter = iter.map(function (v) {\n return fromJS(v);\n });\n }\n\n iters.push(iter);\n }\n\n if (maxSize > list.size) {\n list = list.setSize(maxSize);\n }\n\n return mergeIntoCollectionWith(list, merger, iters);\n }\n\n function getTailOffset(size) {\n return size < SIZE ? 0 : size - 1 >>> SHIFT << SHIFT;\n }\n\n createClass(OrderedMap, Map); // @pragma Construction\n\n function OrderedMap(value) {\n return value === null || value === undefined ? emptyOrderedMap() : isOrderedMap(value) ? value : emptyOrderedMap().withMutations(function (map) {\n var iter = KeyedIterable(value);\n assertNotInfinite(iter.size);\n iter.forEach(function (v, k) {\n return map.set(k, v);\n });\n });\n }\n\n OrderedMap.of = function ()\n /*...values*/\n {\n return this(arguments);\n };\n\n OrderedMap.prototype.toString = function () {\n return this.__toString('OrderedMap {', '}');\n }; // @pragma Access\n\n\n OrderedMap.prototype.get = function (k, notSetValue) {\n var index = this._map.get(k);\n\n return index !== undefined ? this._list.get(index)[1] : notSetValue;\n }; // @pragma Modification\n\n\n OrderedMap.prototype.clear = function () {\n if (this.size === 0) {\n return this;\n }\n\n if (this.__ownerID) {\n this.size = 0;\n\n this._map.clear();\n\n this._list.clear();\n\n return this;\n }\n\n return emptyOrderedMap();\n };\n\n OrderedMap.prototype.set = function (k, v) {\n return updateOrderedMap(this, k, v);\n };\n\n OrderedMap.prototype.remove = function (k) {\n return updateOrderedMap(this, k, NOT_SET);\n };\n\n OrderedMap.prototype.wasAltered = function () {\n return this._map.wasAltered() || this._list.wasAltered();\n };\n\n OrderedMap.prototype.__iterate = function (fn, reverse) {\n var this$0 = this;\n return this._list.__iterate(function (entry) {\n return entry && fn(entry[1], entry[0], this$0);\n }, reverse);\n };\n\n OrderedMap.prototype.__iterator = function (type, reverse) {\n return this._list.fromEntrySeq().__iterator(type, reverse);\n };\n\n OrderedMap.prototype.__ensureOwner = function (ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n\n var newMap = this._map.__ensureOwner(ownerID);\n\n var newList = this._list.__ensureOwner(ownerID);\n\n if (!ownerID) {\n this.__ownerID = ownerID;\n this._map = newMap;\n this._list = newList;\n return this;\n }\n\n return makeOrderedMap(newMap, newList, ownerID, this.__hash);\n };\n\n function isOrderedMap(maybeOrderedMap) {\n return isMap(maybeOrderedMap) && isOrdered(maybeOrderedMap);\n }\n\n OrderedMap.isOrderedMap = isOrderedMap;\n OrderedMap.prototype[IS_ORDERED_SENTINEL] = true;\n OrderedMap.prototype[DELETE] = OrderedMap.prototype.remove;\n\n function makeOrderedMap(map, list, ownerID, hash) {\n var omap = Object.create(OrderedMap.prototype);\n omap.size = map ? map.size : 0;\n omap._map = map;\n omap._list = list;\n omap.__ownerID = ownerID;\n omap.__hash = hash;\n return omap;\n }\n\n var EMPTY_ORDERED_MAP;\n\n function emptyOrderedMap() {\n return EMPTY_ORDERED_MAP || (EMPTY_ORDERED_MAP = makeOrderedMap(emptyMap(), emptyList()));\n }\n\n function updateOrderedMap(omap, k, v) {\n var map = omap._map;\n var list = omap._list;\n var i = map.get(k);\n var has = i !== undefined;\n var newMap;\n var newList;\n\n if (v === NOT_SET) {\n // removed\n if (!has) {\n return omap;\n }\n\n if (list.size >= SIZE && list.size >= map.size * 2) {\n newList = list.filter(function (entry, idx) {\n return entry !== undefined && i !== idx;\n });\n newMap = newList.toKeyedSeq().map(function (entry) {\n return entry[0];\n }).flip().toMap();\n\n if (omap.__ownerID) {\n newMap.__ownerID = newList.__ownerID = omap.__ownerID;\n }\n } else {\n newMap = map.remove(k);\n newList = i === list.size - 1 ? list.pop() : list.set(i, undefined);\n }\n } else {\n if (has) {\n if (v === list.get(i)[1]) {\n return omap;\n }\n\n newMap = map;\n newList = list.set(i, [k, v]);\n } else {\n newMap = map.set(k, list.size);\n newList = list.set(list.size, [k, v]);\n }\n }\n\n if (omap.__ownerID) {\n omap.size = newMap.size;\n omap._map = newMap;\n omap._list = newList;\n omap.__hash = undefined;\n return omap;\n }\n\n return makeOrderedMap(newMap, newList);\n }\n\n createClass(ToKeyedSequence, KeyedSeq);\n\n function ToKeyedSequence(indexed, useKeys) {\n this._iter = indexed;\n this._useKeys = useKeys;\n this.size = indexed.size;\n }\n\n ToKeyedSequence.prototype.get = function (key, notSetValue) {\n return this._iter.get(key, notSetValue);\n };\n\n ToKeyedSequence.prototype.has = function (key) {\n return this._iter.has(key);\n };\n\n ToKeyedSequence.prototype.valueSeq = function () {\n return this._iter.valueSeq();\n };\n\n ToKeyedSequence.prototype.reverse = function () {\n var this$0 = this;\n var reversedSequence = reverseFactory(this, true);\n\n if (!this._useKeys) {\n reversedSequence.valueSeq = function () {\n return this$0._iter.toSeq().reverse();\n };\n }\n\n return reversedSequence;\n };\n\n ToKeyedSequence.prototype.map = function (mapper, context) {\n var this$0 = this;\n var mappedSequence = mapFactory(this, mapper, context);\n\n if (!this._useKeys) {\n mappedSequence.valueSeq = function () {\n return this$0._iter.toSeq().map(mapper, context);\n };\n }\n\n return mappedSequence;\n };\n\n ToKeyedSequence.prototype.__iterate = function (fn, reverse) {\n var this$0 = this;\n var ii;\n return this._iter.__iterate(this._useKeys ? function (v, k) {\n return fn(v, k, this$0);\n } : (ii = reverse ? resolveSize(this) : 0, function (v) {\n return fn(v, reverse ? --ii : ii++, this$0);\n }), reverse);\n };\n\n ToKeyedSequence.prototype.__iterator = function (type, reverse) {\n if (this._useKeys) {\n return this._iter.__iterator(type, reverse);\n }\n\n var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n\n var ii = reverse ? resolveSize(this) : 0;\n return new Iterator(function () {\n var step = iterator.next();\n return step.done ? step : iteratorValue(type, reverse ? --ii : ii++, step.value, step);\n });\n };\n\n ToKeyedSequence.prototype[IS_ORDERED_SENTINEL] = true;\n createClass(ToIndexedSequence, IndexedSeq);\n\n function ToIndexedSequence(iter) {\n this._iter = iter;\n this.size = iter.size;\n }\n\n ToIndexedSequence.prototype.includes = function (value) {\n return this._iter.includes(value);\n };\n\n ToIndexedSequence.prototype.__iterate = function (fn, reverse) {\n var this$0 = this;\n var iterations = 0;\n return this._iter.__iterate(function (v) {\n return fn(v, iterations++, this$0);\n }, reverse);\n };\n\n ToIndexedSequence.prototype.__iterator = function (type, reverse) {\n var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n\n var iterations = 0;\n return new Iterator(function () {\n var step = iterator.next();\n return step.done ? step : iteratorValue(type, iterations++, step.value, step);\n });\n };\n\n createClass(ToSetSequence, SetSeq);\n\n function ToSetSequence(iter) {\n this._iter = iter;\n this.size = iter.size;\n }\n\n ToSetSequence.prototype.has = function (key) {\n return this._iter.includes(key);\n };\n\n ToSetSequence.prototype.__iterate = function (fn, reverse) {\n var this$0 = this;\n return this._iter.__iterate(function (v) {\n return fn(v, v, this$0);\n }, reverse);\n };\n\n ToSetSequence.prototype.__iterator = function (type, reverse) {\n var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n\n return new Iterator(function () {\n var step = iterator.next();\n return step.done ? step : iteratorValue(type, step.value, step.value, step);\n });\n };\n\n createClass(FromEntriesSequence, KeyedSeq);\n\n function FromEntriesSequence(entries) {\n this._iter = entries;\n this.size = entries.size;\n }\n\n FromEntriesSequence.prototype.entrySeq = function () {\n return this._iter.toSeq();\n };\n\n FromEntriesSequence.prototype.__iterate = function (fn, reverse) {\n var this$0 = this;\n return this._iter.__iterate(function (entry) {\n // Check if entry exists first so array access doesn't throw for holes\n // in the parent iteration.\n if (entry) {\n validateEntry(entry);\n var indexedIterable = isIterable(entry);\n return fn(indexedIterable ? entry.get(1) : entry[1], indexedIterable ? entry.get(0) : entry[0], this$0);\n }\n }, reverse);\n };\n\n FromEntriesSequence.prototype.__iterator = function (type, reverse) {\n var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n\n return new Iterator(function () {\n while (true) {\n var step = iterator.next();\n\n if (step.done) {\n return step;\n }\n\n var entry = step.value; // Check if entry exists first so array access doesn't throw for holes\n // in the parent iteration.\n\n if (entry) {\n validateEntry(entry);\n var indexedIterable = isIterable(entry);\n return iteratorValue(type, indexedIterable ? entry.get(0) : entry[0], indexedIterable ? entry.get(1) : entry[1], step);\n }\n }\n });\n };\n\n ToIndexedSequence.prototype.cacheResult = ToKeyedSequence.prototype.cacheResult = ToSetSequence.prototype.cacheResult = FromEntriesSequence.prototype.cacheResult = cacheResultThrough;\n\n function flipFactory(iterable) {\n var flipSequence = makeSequence(iterable);\n flipSequence._iter = iterable;\n flipSequence.size = iterable.size;\n\n flipSequence.flip = function () {\n return iterable;\n };\n\n flipSequence.reverse = function () {\n var reversedSequence = iterable.reverse.apply(this); // super.reverse()\n\n reversedSequence.flip = function () {\n return iterable.reverse();\n };\n\n return reversedSequence;\n };\n\n flipSequence.has = function (key) {\n return iterable.includes(key);\n };\n\n flipSequence.includes = function (key) {\n return iterable.has(key);\n };\n\n flipSequence.cacheResult = cacheResultThrough;\n\n flipSequence.__iterateUncached = function (fn, reverse) {\n var this$0 = this;\n return iterable.__iterate(function (v, k) {\n return fn(k, v, this$0) !== false;\n }, reverse);\n };\n\n flipSequence.__iteratorUncached = function (type, reverse) {\n if (type === ITERATE_ENTRIES) {\n var iterator = iterable.__iterator(type, reverse);\n\n return new Iterator(function () {\n var step = iterator.next();\n\n if (!step.done) {\n var k = step.value[0];\n step.value[0] = step.value[1];\n step.value[1] = k;\n }\n\n return step;\n });\n }\n\n return iterable.__iterator(type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES, reverse);\n };\n\n return flipSequence;\n }\n\n function mapFactory(iterable, mapper, context) {\n var mappedSequence = makeSequence(iterable);\n mappedSequence.size = iterable.size;\n\n mappedSequence.has = function (key) {\n return iterable.has(key);\n };\n\n mappedSequence.get = function (key, notSetValue) {\n var v = iterable.get(key, NOT_SET);\n return v === NOT_SET ? notSetValue : mapper.call(context, v, key, iterable);\n };\n\n mappedSequence.__iterateUncached = function (fn, reverse) {\n var this$0 = this;\n return iterable.__iterate(function (v, k, c) {\n return fn(mapper.call(context, v, k, c), k, this$0) !== false;\n }, reverse);\n };\n\n mappedSequence.__iteratorUncached = function (type, reverse) {\n var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n\n return new Iterator(function () {\n var step = iterator.next();\n\n if (step.done) {\n return step;\n }\n\n var entry = step.value;\n var key = entry[0];\n return iteratorValue(type, key, mapper.call(context, entry[1], key, iterable), step);\n });\n };\n\n return mappedSequence;\n }\n\n function reverseFactory(iterable, useKeys) {\n var reversedSequence = makeSequence(iterable);\n reversedSequence._iter = iterable;\n reversedSequence.size = iterable.size;\n\n reversedSequence.reverse = function () {\n return iterable;\n };\n\n if (iterable.flip) {\n reversedSequence.flip = function () {\n var flipSequence = flipFactory(iterable);\n\n flipSequence.reverse = function () {\n return iterable.flip();\n };\n\n return flipSequence;\n };\n }\n\n reversedSequence.get = function (key, notSetValue) {\n return iterable.get(useKeys ? key : -1 - key, notSetValue);\n };\n\n reversedSequence.has = function (key) {\n return iterable.has(useKeys ? key : -1 - key);\n };\n\n reversedSequence.includes = function (value) {\n return iterable.includes(value);\n };\n\n reversedSequence.cacheResult = cacheResultThrough;\n\n reversedSequence.__iterate = function (fn, reverse) {\n var this$0 = this;\n return iterable.__iterate(function (v, k) {\n return fn(v, k, this$0);\n }, !reverse);\n };\n\n reversedSequence.__iterator = function (type, reverse) {\n return iterable.__iterator(type, !reverse);\n };\n\n return reversedSequence;\n }\n\n function filterFactory(iterable, predicate, context, useKeys) {\n var filterSequence = makeSequence(iterable);\n\n if (useKeys) {\n filterSequence.has = function (key) {\n var v = iterable.get(key, NOT_SET);\n return v !== NOT_SET && !!predicate.call(context, v, key, iterable);\n };\n\n filterSequence.get = function (key, notSetValue) {\n var v = iterable.get(key, NOT_SET);\n return v !== NOT_SET && predicate.call(context, v, key, iterable) ? v : notSetValue;\n };\n }\n\n filterSequence.__iterateUncached = function (fn, reverse) {\n var this$0 = this;\n var iterations = 0;\n\n iterable.__iterate(function (v, k, c) {\n if (predicate.call(context, v, k, c)) {\n iterations++;\n return fn(v, useKeys ? k : iterations - 1, this$0);\n }\n }, reverse);\n\n return iterations;\n };\n\n filterSequence.__iteratorUncached = function (type, reverse) {\n var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n\n var iterations = 0;\n return new Iterator(function () {\n while (true) {\n var step = iterator.next();\n\n if (step.done) {\n return step;\n }\n\n var entry = step.value;\n var key = entry[0];\n var value = entry[1];\n\n if (predicate.call(context, value, key, iterable)) {\n return iteratorValue(type, useKeys ? key : iterations++, value, step);\n }\n }\n });\n };\n\n return filterSequence;\n }\n\n function countByFactory(iterable, grouper, context) {\n var groups = Map().asMutable();\n\n iterable.__iterate(function (v, k) {\n groups.update(grouper.call(context, v, k, iterable), 0, function (a) {\n return a + 1;\n });\n });\n\n return groups.asImmutable();\n }\n\n function groupByFactory(iterable, grouper, context) {\n var isKeyedIter = isKeyed(iterable);\n var groups = (isOrdered(iterable) ? OrderedMap() : Map()).asMutable();\n\n iterable.__iterate(function (v, k) {\n groups.update(grouper.call(context, v, k, iterable), function (a) {\n return a = a || [], a.push(isKeyedIter ? [k, v] : v), a;\n });\n });\n\n var coerce = iterableClass(iterable);\n return groups.map(function (arr) {\n return reify(iterable, coerce(arr));\n });\n }\n\n function sliceFactory(iterable, begin, end, useKeys) {\n var originalSize = iterable.size; // Sanitize begin & end using this shorthand for ToInt32(argument)\n // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n\n if (begin !== undefined) {\n begin = begin | 0;\n }\n\n if (end !== undefined) {\n if (end === Infinity) {\n end = originalSize;\n } else {\n end = end | 0;\n }\n }\n\n if (wholeSlice(begin, end, originalSize)) {\n return iterable;\n }\n\n var resolvedBegin = resolveBegin(begin, originalSize);\n var resolvedEnd = resolveEnd(end, originalSize); // begin or end will be NaN if they were provided as negative numbers and\n // this iterable's size is unknown. In that case, cache first so there is\n // a known size and these do not resolve to NaN.\n\n if (resolvedBegin !== resolvedBegin || resolvedEnd !== resolvedEnd) {\n return sliceFactory(iterable.toSeq().cacheResult(), begin, end, useKeys);\n } // Note: resolvedEnd is undefined when the original sequence's length is\n // unknown and this slice did not supply an end and should contain all\n // elements after resolvedBegin.\n // In that case, resolvedSize will be NaN and sliceSize will remain undefined.\n\n\n var resolvedSize = resolvedEnd - resolvedBegin;\n var sliceSize;\n\n if (resolvedSize === resolvedSize) {\n sliceSize = resolvedSize < 0 ? 0 : resolvedSize;\n }\n\n var sliceSeq = makeSequence(iterable); // If iterable.size is undefined, the size of the realized sliceSeq is\n // unknown at this point unless the number of items to slice is 0\n\n sliceSeq.size = sliceSize === 0 ? sliceSize : iterable.size && sliceSize || undefined;\n\n if (!useKeys && isSeq(iterable) && sliceSize >= 0) {\n sliceSeq.get = function (index, notSetValue) {\n index = wrapIndex(this, index);\n return index >= 0 && index < sliceSize ? iterable.get(index + resolvedBegin, notSetValue) : notSetValue;\n };\n }\n\n sliceSeq.__iterateUncached = function (fn, reverse) {\n var this$0 = this;\n\n if (sliceSize === 0) {\n return 0;\n }\n\n if (reverse) {\n return this.cacheResult().__iterate(fn, reverse);\n }\n\n var skipped = 0;\n var isSkipping = true;\n var iterations = 0;\n\n iterable.__iterate(function (v, k) {\n if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) {\n iterations++;\n return fn(v, useKeys ? k : iterations - 1, this$0) !== false && iterations !== sliceSize;\n }\n });\n\n return iterations;\n };\n\n sliceSeq.__iteratorUncached = function (type, reverse) {\n if (sliceSize !== 0 && reverse) {\n return this.cacheResult().__iterator(type, reverse);\n } // Don't bother instantiating parent iterator if taking 0.\n\n\n var iterator = sliceSize !== 0 && iterable.__iterator(type, reverse);\n\n var skipped = 0;\n var iterations = 0;\n return new Iterator(function () {\n while (skipped++ < resolvedBegin) {\n iterator.next();\n }\n\n if (++iterations > sliceSize) {\n return iteratorDone();\n }\n\n var step = iterator.next();\n\n if (useKeys || type === ITERATE_VALUES) {\n return step;\n } else if (type === ITERATE_KEYS) {\n return iteratorValue(type, iterations - 1, undefined, step);\n } else {\n return iteratorValue(type, iterations - 1, step.value[1], step);\n }\n });\n };\n\n return sliceSeq;\n }\n\n function takeWhileFactory(iterable, predicate, context) {\n var takeSequence = makeSequence(iterable);\n\n takeSequence.__iterateUncached = function (fn, reverse) {\n var this$0 = this;\n\n if (reverse) {\n return this.cacheResult().__iterate(fn, reverse);\n }\n\n var iterations = 0;\n\n iterable.__iterate(function (v, k, c) {\n return predicate.call(context, v, k, c) && ++iterations && fn(v, k, this$0);\n });\n\n return iterations;\n };\n\n takeSequence.__iteratorUncached = function (type, reverse) {\n var this$0 = this;\n\n if (reverse) {\n return this.cacheResult().__iterator(type, reverse);\n }\n\n var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n\n var iterating = true;\n return new Iterator(function () {\n if (!iterating) {\n return iteratorDone();\n }\n\n var step = iterator.next();\n\n if (step.done) {\n return step;\n }\n\n var entry = step.value;\n var k = entry[0];\n var v = entry[1];\n\n if (!predicate.call(context, v, k, this$0)) {\n iterating = false;\n return iteratorDone();\n }\n\n return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step);\n });\n };\n\n return takeSequence;\n }\n\n function skipWhileFactory(iterable, predicate, context, useKeys) {\n var skipSequence = makeSequence(iterable);\n\n skipSequence.__iterateUncached = function (fn, reverse) {\n var this$0 = this;\n\n if (reverse) {\n return this.cacheResult().__iterate(fn, reverse);\n }\n\n var isSkipping = true;\n var iterations = 0;\n\n iterable.__iterate(function (v, k, c) {\n if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) {\n iterations++;\n return fn(v, useKeys ? k : iterations - 1, this$0);\n }\n });\n\n return iterations;\n };\n\n skipSequence.__iteratorUncached = function (type, reverse) {\n var this$0 = this;\n\n if (reverse) {\n return this.cacheResult().__iterator(type, reverse);\n }\n\n var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n\n var skipping = true;\n var iterations = 0;\n return new Iterator(function () {\n var step, k, v;\n\n do {\n step = iterator.next();\n\n if (step.done) {\n if (useKeys || type === ITERATE_VALUES) {\n return step;\n } else if (type === ITERATE_KEYS) {\n return iteratorValue(type, iterations++, undefined, step);\n } else {\n return iteratorValue(type, iterations++, step.value[1], step);\n }\n }\n\n var entry = step.value;\n k = entry[0];\n v = entry[1];\n skipping && (skipping = predicate.call(context, v, k, this$0));\n } while (skipping);\n\n return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step);\n });\n };\n\n return skipSequence;\n }\n\n function concatFactory(iterable, values) {\n var isKeyedIterable = isKeyed(iterable);\n var iters = [iterable].concat(values).map(function (v) {\n if (!isIterable(v)) {\n v = isKeyedIterable ? keyedSeqFromValue(v) : indexedSeqFromValue(Array.isArray(v) ? v : [v]);\n } else if (isKeyedIterable) {\n v = KeyedIterable(v);\n }\n\n return v;\n }).filter(function (v) {\n return v.size !== 0;\n });\n\n if (iters.length === 0) {\n return iterable;\n }\n\n if (iters.length === 1) {\n var singleton = iters[0];\n\n if (singleton === iterable || isKeyedIterable && isKeyed(singleton) || isIndexed(iterable) && isIndexed(singleton)) {\n return singleton;\n }\n }\n\n var concatSeq = new ArraySeq(iters);\n\n if (isKeyedIterable) {\n concatSeq = concatSeq.toKeyedSeq();\n } else if (!isIndexed(iterable)) {\n concatSeq = concatSeq.toSetSeq();\n }\n\n concatSeq = concatSeq.flatten(true);\n concatSeq.size = iters.reduce(function (sum, seq) {\n if (sum !== undefined) {\n var size = seq.size;\n\n if (size !== undefined) {\n return sum + size;\n }\n }\n }, 0);\n return concatSeq;\n }\n\n function flattenFactory(iterable, depth, useKeys) {\n var flatSequence = makeSequence(iterable);\n\n flatSequence.__iterateUncached = function (fn, reverse) {\n var iterations = 0;\n var stopped = false;\n\n function flatDeep(iter, currentDepth) {\n var this$0 = this;\n\n iter.__iterate(function (v, k) {\n if ((!depth || currentDepth < depth) && isIterable(v)) {\n flatDeep(v, currentDepth + 1);\n } else if (fn(v, useKeys ? k : iterations++, this$0) === false) {\n stopped = true;\n }\n\n return !stopped;\n }, reverse);\n }\n\n flatDeep(iterable, 0);\n return iterations;\n };\n\n flatSequence.__iteratorUncached = function (type, reverse) {\n var iterator = iterable.__iterator(type, reverse);\n\n var stack = [];\n var iterations = 0;\n return new Iterator(function () {\n while (iterator) {\n var step = iterator.next();\n\n if (step.done !== false) {\n iterator = stack.pop();\n continue;\n }\n\n var v = step.value;\n\n if (type === ITERATE_ENTRIES) {\n v = v[1];\n }\n\n if ((!depth || stack.length < depth) && isIterable(v)) {\n stack.push(iterator);\n iterator = v.__iterator(type, reverse);\n } else {\n return useKeys ? step : iteratorValue(type, iterations++, v, step);\n }\n }\n\n return iteratorDone();\n });\n };\n\n return flatSequence;\n }\n\n function flatMapFactory(iterable, mapper, context) {\n var coerce = iterableClass(iterable);\n return iterable.toSeq().map(function (v, k) {\n return coerce(mapper.call(context, v, k, iterable));\n }).flatten(true);\n }\n\n function interposeFactory(iterable, separator) {\n var interposedSequence = makeSequence(iterable);\n interposedSequence.size = iterable.size && iterable.size * 2 - 1;\n\n interposedSequence.__iterateUncached = function (fn, reverse) {\n var this$0 = this;\n var iterations = 0;\n\n iterable.__iterate(function (v, k) {\n return (!iterations || fn(separator, iterations++, this$0) !== false) && fn(v, iterations++, this$0) !== false;\n }, reverse);\n\n return iterations;\n };\n\n interposedSequence.__iteratorUncached = function (type, reverse) {\n var iterator = iterable.__iterator(ITERATE_VALUES, reverse);\n\n var iterations = 0;\n var step;\n return new Iterator(function () {\n if (!step || iterations % 2) {\n step = iterator.next();\n\n if (step.done) {\n return step;\n }\n }\n\n return iterations % 2 ? iteratorValue(type, iterations++, separator) : iteratorValue(type, iterations++, step.value, step);\n });\n };\n\n return interposedSequence;\n }\n\n function sortFactory(iterable, comparator, mapper) {\n if (!comparator) {\n comparator = defaultComparator;\n }\n\n var isKeyedIterable = isKeyed(iterable);\n var index = 0;\n var entries = iterable.toSeq().map(function (v, k) {\n return [k, v, index++, mapper ? mapper(v, k, iterable) : v];\n }).toArray();\n entries.sort(function (a, b) {\n return comparator(a[3], b[3]) || a[2] - b[2];\n }).forEach(isKeyedIterable ? function (v, i) {\n entries[i].length = 2;\n } : function (v, i) {\n entries[i] = v[1];\n });\n return isKeyedIterable ? KeyedSeq(entries) : isIndexed(iterable) ? IndexedSeq(entries) : SetSeq(entries);\n }\n\n function maxFactory(iterable, comparator, mapper) {\n if (!comparator) {\n comparator = defaultComparator;\n }\n\n if (mapper) {\n var entry = iterable.toSeq().map(function (v, k) {\n return [v, mapper(v, k, iterable)];\n }).reduce(function (a, b) {\n return maxCompare(comparator, a[1], b[1]) ? b : a;\n });\n return entry && entry[0];\n } else {\n return iterable.reduce(function (a, b) {\n return maxCompare(comparator, a, b) ? b : a;\n });\n }\n }\n\n function maxCompare(comparator, a, b) {\n var comp = comparator(b, a); // b is considered the new max if the comparator declares them equal, but\n // they are not equal and b is in fact a nullish value.\n\n return comp === 0 && b !== a && (b === undefined || b === null || b !== b) || comp > 0;\n }\n\n function zipWithFactory(keyIter, zipper, iters) {\n var zipSequence = makeSequence(keyIter);\n zipSequence.size = new ArraySeq(iters).map(function (i) {\n return i.size;\n }).min(); // Note: this a generic base implementation of __iterate in terms of\n // __iterator which may be more generically useful in the future.\n\n zipSequence.__iterate = function (fn, reverse) {\n /* generic:\n var iterator = this.__iterator(ITERATE_ENTRIES, reverse);\n var step;\n var iterations = 0;\n while (!(step = iterator.next()).done) {\n iterations++;\n if (fn(step.value[1], step.value[0], this) === false) {\n break;\n }\n }\n return iterations;\n */\n // indexed:\n var iterator = this.__iterator(ITERATE_VALUES, reverse);\n\n var step;\n var iterations = 0;\n\n while (!(step = iterator.next()).done) {\n if (fn(step.value, iterations++, this) === false) {\n break;\n }\n }\n\n return iterations;\n };\n\n zipSequence.__iteratorUncached = function (type, reverse) {\n var iterators = iters.map(function (i) {\n return i = Iterable(i), getIterator(reverse ? i.reverse() : i);\n });\n var iterations = 0;\n var isDone = false;\n return new Iterator(function () {\n var steps;\n\n if (!isDone) {\n steps = iterators.map(function (i) {\n return i.next();\n });\n isDone = steps.some(function (s) {\n return s.done;\n });\n }\n\n if (isDone) {\n return iteratorDone();\n }\n\n return iteratorValue(type, iterations++, zipper.apply(null, steps.map(function (s) {\n return s.value;\n })));\n });\n };\n\n return zipSequence;\n } // #pragma Helper Functions\n\n\n function reify(iter, seq) {\n return isSeq(iter) ? seq : iter.constructor(seq);\n }\n\n function validateEntry(entry) {\n if (entry !== Object(entry)) {\n throw new TypeError('Expected [K, V] tuple: ' + entry);\n }\n }\n\n function resolveSize(iter) {\n assertNotInfinite(iter.size);\n return ensureSize(iter);\n }\n\n function iterableClass(iterable) {\n return isKeyed(iterable) ? KeyedIterable : isIndexed(iterable) ? IndexedIterable : SetIterable;\n }\n\n function makeSequence(iterable) {\n return Object.create((isKeyed(iterable) ? KeyedSeq : isIndexed(iterable) ? IndexedSeq : SetSeq).prototype);\n }\n\n function cacheResultThrough() {\n if (this._iter.cacheResult) {\n this._iter.cacheResult();\n\n this.size = this._iter.size;\n return this;\n } else {\n return Seq.prototype.cacheResult.call(this);\n }\n }\n\n function defaultComparator(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n }\n\n function forceIterator(keyPath) {\n var iter = getIterator(keyPath);\n\n if (!iter) {\n // Array might not be iterable in this environment, so we need a fallback\n // to our wrapped type.\n if (!isArrayLike(keyPath)) {\n throw new TypeError('Expected iterable or array-like: ' + keyPath);\n }\n\n iter = getIterator(Iterable(keyPath));\n }\n\n return iter;\n }\n\n createClass(Record, KeyedCollection);\n\n function Record(defaultValues, name) {\n var hasInitialized;\n\n var RecordType = function Record(values) {\n if (values instanceof RecordType) {\n return values;\n }\n\n if (!(this instanceof RecordType)) {\n return new RecordType(values);\n }\n\n if (!hasInitialized) {\n hasInitialized = true;\n var keys = Object.keys(defaultValues);\n setProps(RecordTypePrototype, keys);\n RecordTypePrototype.size = keys.length;\n RecordTypePrototype._name = name;\n RecordTypePrototype._keys = keys;\n RecordTypePrototype._defaultValues = defaultValues;\n }\n\n this._map = Map(values);\n };\n\n var RecordTypePrototype = RecordType.prototype = Object.create(RecordPrototype);\n RecordTypePrototype.constructor = RecordType;\n return RecordType;\n }\n\n Record.prototype.toString = function () {\n return this.__toString(recordName(this) + ' {', '}');\n }; // @pragma Access\n\n\n Record.prototype.has = function (k) {\n return this._defaultValues.hasOwnProperty(k);\n };\n\n Record.prototype.get = function (k, notSetValue) {\n if (!this.has(k)) {\n return notSetValue;\n }\n\n var defaultVal = this._defaultValues[k];\n return this._map ? this._map.get(k, defaultVal) : defaultVal;\n }; // @pragma Modification\n\n\n Record.prototype.clear = function () {\n if (this.__ownerID) {\n this._map && this._map.clear();\n return this;\n }\n\n var RecordType = this.constructor;\n return RecordType._empty || (RecordType._empty = makeRecord(this, emptyMap()));\n };\n\n Record.prototype.set = function (k, v) {\n if (!this.has(k)) {\n throw new Error('Cannot set unknown key \"' + k + '\" on ' + recordName(this));\n }\n\n if (this._map && !this._map.has(k)) {\n var defaultVal = this._defaultValues[k];\n\n if (v === defaultVal) {\n return this;\n }\n }\n\n var newMap = this._map && this._map.set(k, v);\n\n if (this.__ownerID || newMap === this._map) {\n return this;\n }\n\n return makeRecord(this, newMap);\n };\n\n Record.prototype.remove = function (k) {\n if (!this.has(k)) {\n return this;\n }\n\n var newMap = this._map && this._map.remove(k);\n\n if (this.__ownerID || newMap === this._map) {\n return this;\n }\n\n return makeRecord(this, newMap);\n };\n\n Record.prototype.wasAltered = function () {\n return this._map.wasAltered();\n };\n\n Record.prototype.__iterator = function (type, reverse) {\n var this$0 = this;\n return KeyedIterable(this._defaultValues).map(function (_, k) {\n return this$0.get(k);\n }).__iterator(type, reverse);\n };\n\n Record.prototype.__iterate = function (fn, reverse) {\n var this$0 = this;\n return KeyedIterable(this._defaultValues).map(function (_, k) {\n return this$0.get(k);\n }).__iterate(fn, reverse);\n };\n\n Record.prototype.__ensureOwner = function (ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n\n var newMap = this._map && this._map.__ensureOwner(ownerID);\n\n if (!ownerID) {\n this.__ownerID = ownerID;\n this._map = newMap;\n return this;\n }\n\n return makeRecord(this, newMap, ownerID);\n };\n\n var RecordPrototype = Record.prototype;\n RecordPrototype[DELETE] = RecordPrototype.remove;\n RecordPrototype.deleteIn = RecordPrototype.removeIn = MapPrototype.removeIn;\n RecordPrototype.merge = MapPrototype.merge;\n RecordPrototype.mergeWith = MapPrototype.mergeWith;\n RecordPrototype.mergeIn = MapPrototype.mergeIn;\n RecordPrototype.mergeDeep = MapPrototype.mergeDeep;\n RecordPrototype.mergeDeepWith = MapPrototype.mergeDeepWith;\n RecordPrototype.mergeDeepIn = MapPrototype.mergeDeepIn;\n RecordPrototype.setIn = MapPrototype.setIn;\n RecordPrototype.update = MapPrototype.update;\n RecordPrototype.updateIn = MapPrototype.updateIn;\n RecordPrototype.withMutations = MapPrototype.withMutations;\n RecordPrototype.asMutable = MapPrototype.asMutable;\n RecordPrototype.asImmutable = MapPrototype.asImmutable;\n\n function makeRecord(likeRecord, map, ownerID) {\n var record = Object.create(Object.getPrototypeOf(likeRecord));\n record._map = map;\n record.__ownerID = ownerID;\n return record;\n }\n\n function recordName(record) {\n return record._name || record.constructor.name || 'Record';\n }\n\n function setProps(prototype, names) {\n try {\n names.forEach(setProp.bind(undefined, prototype));\n } catch (error) {// Object.defineProperty failed. Probably IE8.\n }\n }\n\n function setProp(prototype, name) {\n Object.defineProperty(prototype, name, {\n get: function get() {\n return this.get(name);\n },\n set: function set(value) {\n invariant(this.__ownerID, 'Cannot set on an immutable record.');\n this.set(name, value);\n }\n });\n }\n\n createClass(Set, SetCollection); // @pragma Construction\n\n function Set(value) {\n return value === null || value === undefined ? emptySet() : isSet(value) && !isOrdered(value) ? value : emptySet().withMutations(function (set) {\n var iter = SetIterable(value);\n assertNotInfinite(iter.size);\n iter.forEach(function (v) {\n return set.add(v);\n });\n });\n }\n\n Set.of = function ()\n /*...values*/\n {\n return this(arguments);\n };\n\n Set.fromKeys = function (value) {\n return this(KeyedIterable(value).keySeq());\n };\n\n Set.prototype.toString = function () {\n return this.__toString('Set {', '}');\n }; // @pragma Access\n\n\n Set.prototype.has = function (value) {\n return this._map.has(value);\n }; // @pragma Modification\n\n\n Set.prototype.add = function (value) {\n return updateSet(this, this._map.set(value, true));\n };\n\n Set.prototype.remove = function (value) {\n return updateSet(this, this._map.remove(value));\n };\n\n Set.prototype.clear = function () {\n return updateSet(this, this._map.clear());\n }; // @pragma Composition\n\n\n Set.prototype.union = function () {\n var iters = SLICE$0.call(arguments, 0);\n iters = iters.filter(function (x) {\n return x.size !== 0;\n });\n\n if (iters.length === 0) {\n return this;\n }\n\n if (this.size === 0 && !this.__ownerID && iters.length === 1) {\n return this.constructor(iters[0]);\n }\n\n return this.withMutations(function (set) {\n for (var ii = 0; ii < iters.length; ii++) {\n SetIterable(iters[ii]).forEach(function (value) {\n return set.add(value);\n });\n }\n });\n };\n\n Set.prototype.intersect = function () {\n var iters = SLICE$0.call(arguments, 0);\n\n if (iters.length === 0) {\n return this;\n }\n\n iters = iters.map(function (iter) {\n return SetIterable(iter);\n });\n var originalSet = this;\n return this.withMutations(function (set) {\n originalSet.forEach(function (value) {\n if (!iters.every(function (iter) {\n return iter.includes(value);\n })) {\n set.remove(value);\n }\n });\n });\n };\n\n Set.prototype.subtract = function () {\n var iters = SLICE$0.call(arguments, 0);\n\n if (iters.length === 0) {\n return this;\n }\n\n iters = iters.map(function (iter) {\n return SetIterable(iter);\n });\n var originalSet = this;\n return this.withMutations(function (set) {\n originalSet.forEach(function (value) {\n if (iters.some(function (iter) {\n return iter.includes(value);\n })) {\n set.remove(value);\n }\n });\n });\n };\n\n Set.prototype.merge = function () {\n return this.union.apply(this, arguments);\n };\n\n Set.prototype.mergeWith = function (merger) {\n var iters = SLICE$0.call(arguments, 1);\n return this.union.apply(this, iters);\n };\n\n Set.prototype.sort = function (comparator) {\n // Late binding\n return OrderedSet(sortFactory(this, comparator));\n };\n\n Set.prototype.sortBy = function (mapper, comparator) {\n // Late binding\n return OrderedSet(sortFactory(this, comparator, mapper));\n };\n\n Set.prototype.wasAltered = function () {\n return this._map.wasAltered();\n };\n\n Set.prototype.__iterate = function (fn, reverse) {\n var this$0 = this;\n return this._map.__iterate(function (_, k) {\n return fn(k, k, this$0);\n }, reverse);\n };\n\n Set.prototype.__iterator = function (type, reverse) {\n return this._map.map(function (_, k) {\n return k;\n }).__iterator(type, reverse);\n };\n\n Set.prototype.__ensureOwner = function (ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n\n var newMap = this._map.__ensureOwner(ownerID);\n\n if (!ownerID) {\n this.__ownerID = ownerID;\n this._map = newMap;\n return this;\n }\n\n return this.__make(newMap, ownerID);\n };\n\n function isSet(maybeSet) {\n return !!(maybeSet && maybeSet[IS_SET_SENTINEL]);\n }\n\n Set.isSet = isSet;\n var IS_SET_SENTINEL = '@@__IMMUTABLE_SET__@@';\n var SetPrototype = Set.prototype;\n SetPrototype[IS_SET_SENTINEL] = true;\n SetPrototype[DELETE] = SetPrototype.remove;\n SetPrototype.mergeDeep = SetPrototype.merge;\n SetPrototype.mergeDeepWith = SetPrototype.mergeWith;\n SetPrototype.withMutations = MapPrototype.withMutations;\n SetPrototype.asMutable = MapPrototype.asMutable;\n SetPrototype.asImmutable = MapPrototype.asImmutable;\n SetPrototype.__empty = emptySet;\n SetPrototype.__make = makeSet;\n\n function updateSet(set, newMap) {\n if (set.__ownerID) {\n set.size = newMap.size;\n set._map = newMap;\n return set;\n }\n\n return newMap === set._map ? set : newMap.size === 0 ? set.__empty() : set.__make(newMap);\n }\n\n function makeSet(map, ownerID) {\n var set = Object.create(SetPrototype);\n set.size = map ? map.size : 0;\n set._map = map;\n set.__ownerID = ownerID;\n return set;\n }\n\n var EMPTY_SET;\n\n function emptySet() {\n return EMPTY_SET || (EMPTY_SET = makeSet(emptyMap()));\n }\n\n createClass(OrderedSet, Set); // @pragma Construction\n\n function OrderedSet(value) {\n return value === null || value === undefined ? emptyOrderedSet() : isOrderedSet(value) ? value : emptyOrderedSet().withMutations(function (set) {\n var iter = SetIterable(value);\n assertNotInfinite(iter.size);\n iter.forEach(function (v) {\n return set.add(v);\n });\n });\n }\n\n OrderedSet.of = function ()\n /*...values*/\n {\n return this(arguments);\n };\n\n OrderedSet.fromKeys = function (value) {\n return this(KeyedIterable(value).keySeq());\n };\n\n OrderedSet.prototype.toString = function () {\n return this.__toString('OrderedSet {', '}');\n };\n\n function isOrderedSet(maybeOrderedSet) {\n return isSet(maybeOrderedSet) && isOrdered(maybeOrderedSet);\n }\n\n OrderedSet.isOrderedSet = isOrderedSet;\n var OrderedSetPrototype = OrderedSet.prototype;\n OrderedSetPrototype[IS_ORDERED_SENTINEL] = true;\n OrderedSetPrototype.__empty = emptyOrderedSet;\n OrderedSetPrototype.__make = makeOrderedSet;\n\n function makeOrderedSet(map, ownerID) {\n var set = Object.create(OrderedSetPrototype);\n set.size = map ? map.size : 0;\n set._map = map;\n set.__ownerID = ownerID;\n return set;\n }\n\n var EMPTY_ORDERED_SET;\n\n function emptyOrderedSet() {\n return EMPTY_ORDERED_SET || (EMPTY_ORDERED_SET = makeOrderedSet(emptyOrderedMap()));\n }\n\n createClass(Stack, IndexedCollection); // @pragma Construction\n\n function Stack(value) {\n return value === null || value === undefined ? emptyStack() : isStack(value) ? value : emptyStack().unshiftAll(value);\n }\n\n Stack.of = function ()\n /*...values*/\n {\n return this(arguments);\n };\n\n Stack.prototype.toString = function () {\n return this.__toString('Stack [', ']');\n }; // @pragma Access\n\n\n Stack.prototype.get = function (index, notSetValue) {\n var head = this._head;\n index = wrapIndex(this, index);\n\n while (head && index--) {\n head = head.next;\n }\n\n return head ? head.value : notSetValue;\n };\n\n Stack.prototype.peek = function () {\n return this._head && this._head.value;\n }; // @pragma Modification\n\n\n Stack.prototype.push = function ()\n /*...values*/\n {\n if (arguments.length === 0) {\n return this;\n }\n\n var newSize = this.size + arguments.length;\n var head = this._head;\n\n for (var ii = arguments.length - 1; ii >= 0; ii--) {\n head = {\n value: arguments[ii],\n next: head\n };\n }\n\n if (this.__ownerID) {\n this.size = newSize;\n this._head = head;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n\n return makeStack(newSize, head);\n };\n\n Stack.prototype.pushAll = function (iter) {\n iter = IndexedIterable(iter);\n\n if (iter.size === 0) {\n return this;\n }\n\n assertNotInfinite(iter.size);\n var newSize = this.size;\n var head = this._head;\n iter.reverse().forEach(function (value) {\n newSize++;\n head = {\n value: value,\n next: head\n };\n });\n\n if (this.__ownerID) {\n this.size = newSize;\n this._head = head;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n\n return makeStack(newSize, head);\n };\n\n Stack.prototype.pop = function () {\n return this.slice(1);\n };\n\n Stack.prototype.unshift = function ()\n /*...values*/\n {\n return this.push.apply(this, arguments);\n };\n\n Stack.prototype.unshiftAll = function (iter) {\n return this.pushAll(iter);\n };\n\n Stack.prototype.shift = function () {\n return this.pop.apply(this, arguments);\n };\n\n Stack.prototype.clear = function () {\n if (this.size === 0) {\n return this;\n }\n\n if (this.__ownerID) {\n this.size = 0;\n this._head = undefined;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n\n return emptyStack();\n };\n\n Stack.prototype.slice = function (begin, end) {\n if (wholeSlice(begin, end, this.size)) {\n return this;\n }\n\n var resolvedBegin = resolveBegin(begin, this.size);\n var resolvedEnd = resolveEnd(end, this.size);\n\n if (resolvedEnd !== this.size) {\n // super.slice(begin, end);\n return IndexedCollection.prototype.slice.call(this, begin, end);\n }\n\n var newSize = this.size - resolvedBegin;\n var head = this._head;\n\n while (resolvedBegin--) {\n head = head.next;\n }\n\n if (this.__ownerID) {\n this.size = newSize;\n this._head = head;\n this.__hash = undefined;\n this.__altered = true;\n return this;\n }\n\n return makeStack(newSize, head);\n }; // @pragma Mutability\n\n\n Stack.prototype.__ensureOwner = function (ownerID) {\n if (ownerID === this.__ownerID) {\n return this;\n }\n\n if (!ownerID) {\n this.__ownerID = ownerID;\n this.__altered = false;\n return this;\n }\n\n return makeStack(this.size, this._head, ownerID, this.__hash);\n }; // @pragma Iteration\n\n\n Stack.prototype.__iterate = function (fn, reverse) {\n if (reverse) {\n return this.reverse().__iterate(fn);\n }\n\n var iterations = 0;\n var node = this._head;\n\n while (node) {\n if (fn(node.value, iterations++, this) === false) {\n break;\n }\n\n node = node.next;\n }\n\n return iterations;\n };\n\n Stack.prototype.__iterator = function (type, reverse) {\n if (reverse) {\n return this.reverse().__iterator(type);\n }\n\n var iterations = 0;\n var node = this._head;\n return new Iterator(function () {\n if (node) {\n var value = node.value;\n node = node.next;\n return iteratorValue(type, iterations++, value);\n }\n\n return iteratorDone();\n });\n };\n\n function isStack(maybeStack) {\n return !!(maybeStack && maybeStack[IS_STACK_SENTINEL]);\n }\n\n Stack.isStack = isStack;\n var IS_STACK_SENTINEL = '@@__IMMUTABLE_STACK__@@';\n var StackPrototype = Stack.prototype;\n StackPrototype[IS_STACK_SENTINEL] = true;\n StackPrototype.withMutations = MapPrototype.withMutations;\n StackPrototype.asMutable = MapPrototype.asMutable;\n StackPrototype.asImmutable = MapPrototype.asImmutable;\n StackPrototype.wasAltered = MapPrototype.wasAltered;\n\n function makeStack(size, head, ownerID, hash) {\n var map = Object.create(StackPrototype);\n map.size = size;\n map._head = head;\n map.__ownerID = ownerID;\n map.__hash = hash;\n map.__altered = false;\n return map;\n }\n\n var EMPTY_STACK;\n\n function emptyStack() {\n return EMPTY_STACK || (EMPTY_STACK = makeStack(0));\n }\n /**\n * Contributes additional methods to a constructor\n */\n\n\n function mixin(ctor, methods) {\n var keyCopier = function keyCopier(key) {\n ctor.prototype[key] = methods[key];\n };\n\n Object.keys(methods).forEach(keyCopier);\n Object.getOwnPropertySymbols && Object.getOwnPropertySymbols(methods).forEach(keyCopier);\n return ctor;\n }\n\n Iterable.Iterator = Iterator;\n mixin(Iterable, {\n // ### Conversion to other types\n toArray: function toArray() {\n assertNotInfinite(this.size);\n var array = new Array(this.size || 0);\n\n this.valueSeq().__iterate(function (v, i) {\n array[i] = v;\n });\n\n return array;\n },\n toIndexedSeq: function toIndexedSeq() {\n return new ToIndexedSequence(this);\n },\n toJS: function toJS() {\n return this.toSeq().map(function (value) {\n return value && typeof value.toJS === 'function' ? value.toJS() : value;\n }).__toJS();\n },\n toJSON: function toJSON() {\n return this.toSeq().map(function (value) {\n return value && typeof value.toJSON === 'function' ? value.toJSON() : value;\n }).__toJS();\n },\n toKeyedSeq: function toKeyedSeq() {\n return new ToKeyedSequence(this, true);\n },\n toMap: function toMap() {\n // Use Late Binding here to solve the circular dependency.\n return Map(this.toKeyedSeq());\n },\n toObject: function toObject() {\n assertNotInfinite(this.size);\n var object = {};\n\n this.__iterate(function (v, k) {\n object[k] = v;\n });\n\n return object;\n },\n toOrderedMap: function toOrderedMap() {\n // Use Late Binding here to solve the circular dependency.\n return OrderedMap(this.toKeyedSeq());\n },\n toOrderedSet: function toOrderedSet() {\n // Use Late Binding here to solve the circular dependency.\n return OrderedSet(isKeyed(this) ? this.valueSeq() : this);\n },\n toSet: function toSet() {\n // Use Late Binding here to solve the circular dependency.\n return Set(isKeyed(this) ? this.valueSeq() : this);\n },\n toSetSeq: function toSetSeq() {\n return new ToSetSequence(this);\n },\n toSeq: function toSeq() {\n return isIndexed(this) ? this.toIndexedSeq() : isKeyed(this) ? this.toKeyedSeq() : this.toSetSeq();\n },\n toStack: function toStack() {\n // Use Late Binding here to solve the circular dependency.\n return Stack(isKeyed(this) ? this.valueSeq() : this);\n },\n toList: function toList() {\n // Use Late Binding here to solve the circular dependency.\n return List(isKeyed(this) ? this.valueSeq() : this);\n },\n // ### Common JavaScript methods and properties\n toString: function toString() {\n return '[Iterable]';\n },\n __toString: function __toString(head, tail) {\n if (this.size === 0) {\n return head + tail;\n }\n\n return head + ' ' + this.toSeq().map(this.__toStringMapper).join(', ') + ' ' + tail;\n },\n // ### ES6 Collection methods (ES6 Array and Map)\n concat: function concat() {\n var values = SLICE$0.call(arguments, 0);\n return reify(this, concatFactory(this, values));\n },\n includes: function includes(searchValue) {\n return this.some(function (value) {\n return is(value, searchValue);\n });\n },\n entries: function entries() {\n return this.__iterator(ITERATE_ENTRIES);\n },\n every: function every(predicate, context) {\n assertNotInfinite(this.size);\n var returnValue = true;\n\n this.__iterate(function (v, k, c) {\n if (!predicate.call(context, v, k, c)) {\n returnValue = false;\n return false;\n }\n });\n\n return returnValue;\n },\n filter: function filter(predicate, context) {\n return reify(this, filterFactory(this, predicate, context, true));\n },\n find: function find(predicate, context, notSetValue) {\n var entry = this.findEntry(predicate, context);\n return entry ? entry[1] : notSetValue;\n },\n forEach: function forEach(sideEffect, context) {\n assertNotInfinite(this.size);\n return this.__iterate(context ? sideEffect.bind(context) : sideEffect);\n },\n join: function join(separator) {\n assertNotInfinite(this.size);\n separator = separator !== undefined ? '' + separator : ',';\n var joined = '';\n var isFirst = true;\n\n this.__iterate(function (v) {\n isFirst ? isFirst = false : joined += separator;\n joined += v !== null && v !== undefined ? v.toString() : '';\n });\n\n return joined;\n },\n keys: function keys() {\n return this.__iterator(ITERATE_KEYS);\n },\n map: function map(mapper, context) {\n return reify(this, mapFactory(this, mapper, context));\n },\n reduce: function reduce(reducer, initialReduction, context) {\n assertNotInfinite(this.size);\n var reduction;\n var useFirst;\n\n if (arguments.length < 2) {\n useFirst = true;\n } else {\n reduction = initialReduction;\n }\n\n this.__iterate(function (v, k, c) {\n if (useFirst) {\n useFirst = false;\n reduction = v;\n } else {\n reduction = reducer.call(context, reduction, v, k, c);\n }\n });\n\n return reduction;\n },\n reduceRight: function reduceRight(reducer, initialReduction, context) {\n var reversed = this.toKeyedSeq().reverse();\n return reversed.reduce.apply(reversed, arguments);\n },\n reverse: function reverse() {\n return reify(this, reverseFactory(this, true));\n },\n slice: function slice(begin, end) {\n return reify(this, sliceFactory(this, begin, end, true));\n },\n some: function some(predicate, context) {\n return !this.every(not(predicate), context);\n },\n sort: function sort(comparator) {\n return reify(this, sortFactory(this, comparator));\n },\n values: function values() {\n return this.__iterator(ITERATE_VALUES);\n },\n // ### More sequential methods\n butLast: function butLast() {\n return this.slice(0, -1);\n },\n isEmpty: function isEmpty() {\n return this.size !== undefined ? this.size === 0 : !this.some(function () {\n return true;\n });\n },\n count: function count(predicate, context) {\n return ensureSize(predicate ? this.toSeq().filter(predicate, context) : this);\n },\n countBy: function countBy(grouper, context) {\n return countByFactory(this, grouper, context);\n },\n equals: function equals(other) {\n return deepEqual(this, other);\n },\n entrySeq: function entrySeq() {\n var iterable = this;\n\n if (iterable._cache) {\n // We cache as an entries array, so we can just return the cache!\n return new ArraySeq(iterable._cache);\n }\n\n var entriesSequence = iterable.toSeq().map(entryMapper).toIndexedSeq();\n\n entriesSequence.fromEntrySeq = function () {\n return iterable.toSeq();\n };\n\n return entriesSequence;\n },\n filterNot: function filterNot(predicate, context) {\n return this.filter(not(predicate), context);\n },\n findEntry: function findEntry(predicate, context, notSetValue) {\n var found = notSetValue;\n\n this.__iterate(function (v, k, c) {\n if (predicate.call(context, v, k, c)) {\n found = [k, v];\n return false;\n }\n });\n\n return found;\n },\n findKey: function findKey(predicate, context) {\n var entry = this.findEntry(predicate, context);\n return entry && entry[0];\n },\n findLast: function findLast(predicate, context, notSetValue) {\n return this.toKeyedSeq().reverse().find(predicate, context, notSetValue);\n },\n findLastEntry: function findLastEntry(predicate, context, notSetValue) {\n return this.toKeyedSeq().reverse().findEntry(predicate, context, notSetValue);\n },\n findLastKey: function findLastKey(predicate, context) {\n return this.toKeyedSeq().reverse().findKey(predicate, context);\n },\n first: function first() {\n return this.find(returnTrue);\n },\n flatMap: function flatMap(mapper, context) {\n return reify(this, flatMapFactory(this, mapper, context));\n },\n flatten: function flatten(depth) {\n return reify(this, flattenFactory(this, depth, true));\n },\n fromEntrySeq: function fromEntrySeq() {\n return new FromEntriesSequence(this);\n },\n get: function get(searchKey, notSetValue) {\n return this.find(function (_, key) {\n return is(key, searchKey);\n }, undefined, notSetValue);\n },\n getIn: function getIn(searchKeyPath, notSetValue) {\n var nested = this; // Note: in an ES6 environment, we would prefer:\n // for (var key of searchKeyPath) {\n\n var iter = forceIterator(searchKeyPath);\n var step;\n\n while (!(step = iter.next()).done) {\n var key = step.value;\n nested = nested && nested.get ? nested.get(key, NOT_SET) : NOT_SET;\n\n if (nested === NOT_SET) {\n return notSetValue;\n }\n }\n\n return nested;\n },\n groupBy: function groupBy(grouper, context) {\n return groupByFactory(this, grouper, context);\n },\n has: function has(searchKey) {\n return this.get(searchKey, NOT_SET) !== NOT_SET;\n },\n hasIn: function hasIn(searchKeyPath) {\n return this.getIn(searchKeyPath, NOT_SET) !== NOT_SET;\n },\n isSubset: function isSubset(iter) {\n iter = typeof iter.includes === 'function' ? iter : Iterable(iter);\n return this.every(function (value) {\n return iter.includes(value);\n });\n },\n isSuperset: function isSuperset(iter) {\n iter = typeof iter.isSubset === 'function' ? iter : Iterable(iter);\n return iter.isSubset(this);\n },\n keyOf: function keyOf(searchValue) {\n return this.findKey(function (value) {\n return is(value, searchValue);\n });\n },\n keySeq: function keySeq() {\n return this.toSeq().map(keyMapper).toIndexedSeq();\n },\n last: function last() {\n return this.toSeq().reverse().first();\n },\n lastKeyOf: function lastKeyOf(searchValue) {\n return this.toKeyedSeq().reverse().keyOf(searchValue);\n },\n max: function max(comparator) {\n return maxFactory(this, comparator);\n },\n maxBy: function maxBy(mapper, comparator) {\n return maxFactory(this, comparator, mapper);\n },\n min: function min(comparator) {\n return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator);\n },\n minBy: function minBy(mapper, comparator) {\n return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator, mapper);\n },\n rest: function rest() {\n return this.slice(1);\n },\n skip: function skip(amount) {\n return this.slice(Math.max(0, amount));\n },\n skipLast: function skipLast(amount) {\n return reify(this, this.toSeq().reverse().skip(amount).reverse());\n },\n skipWhile: function skipWhile(predicate, context) {\n return reify(this, skipWhileFactory(this, predicate, context, true));\n },\n skipUntil: function skipUntil(predicate, context) {\n return this.skipWhile(not(predicate), context);\n },\n sortBy: function sortBy(mapper, comparator) {\n return reify(this, sortFactory(this, comparator, mapper));\n },\n take: function take(amount) {\n return this.slice(0, Math.max(0, amount));\n },\n takeLast: function takeLast(amount) {\n return reify(this, this.toSeq().reverse().take(amount).reverse());\n },\n takeWhile: function takeWhile(predicate, context) {\n return reify(this, takeWhileFactory(this, predicate, context));\n },\n takeUntil: function takeUntil(predicate, context) {\n return this.takeWhile(not(predicate), context);\n },\n valueSeq: function valueSeq() {\n return this.toIndexedSeq();\n },\n // ### Hashable Object\n hashCode: function hashCode() {\n return this.__hash || (this.__hash = hashIterable(this));\n } // ### Internal\n // abstract __iterate(fn, reverse)\n // abstract __iterator(type, reverse)\n\n }); // var IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';\n // var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';\n // var IS_INDEXED_SENTINEL = '@@__IMMUTABLE_INDEXED__@@';\n // var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@';\n\n var IterablePrototype = Iterable.prototype;\n IterablePrototype[IS_ITERABLE_SENTINEL] = true;\n IterablePrototype[ITERATOR_SYMBOL] = IterablePrototype.values;\n IterablePrototype.__toJS = IterablePrototype.toArray;\n IterablePrototype.__toStringMapper = quoteString;\n\n IterablePrototype.inspect = IterablePrototype.toSource = function () {\n return this.toString();\n };\n\n IterablePrototype.chain = IterablePrototype.flatMap;\n IterablePrototype.contains = IterablePrototype.includes;\n mixin(KeyedIterable, {\n // ### More sequential methods\n flip: function flip() {\n return reify(this, flipFactory(this));\n },\n mapEntries: function mapEntries(mapper, context) {\n var this$0 = this;\n var iterations = 0;\n return reify(this, this.toSeq().map(function (v, k) {\n return mapper.call(context, [k, v], iterations++, this$0);\n }).fromEntrySeq());\n },\n mapKeys: function mapKeys(mapper, context) {\n var this$0 = this;\n return reify(this, this.toSeq().flip().map(function (k, v) {\n return mapper.call(context, k, v, this$0);\n }).flip());\n }\n });\n var KeyedIterablePrototype = KeyedIterable.prototype;\n KeyedIterablePrototype[IS_KEYED_SENTINEL] = true;\n KeyedIterablePrototype[ITERATOR_SYMBOL] = IterablePrototype.entries;\n KeyedIterablePrototype.__toJS = IterablePrototype.toObject;\n\n KeyedIterablePrototype.__toStringMapper = function (v, k) {\n return JSON.stringify(k) + ': ' + quoteString(v);\n };\n\n mixin(IndexedIterable, {\n // ### Conversion to other types\n toKeyedSeq: function toKeyedSeq() {\n return new ToKeyedSequence(this, false);\n },\n // ### ES6 Collection methods (ES6 Array and Map)\n filter: function filter(predicate, context) {\n return reify(this, filterFactory(this, predicate, context, false));\n },\n findIndex: function findIndex(predicate, context) {\n var entry = this.findEntry(predicate, context);\n return entry ? entry[0] : -1;\n },\n indexOf: function indexOf(searchValue) {\n var key = this.keyOf(searchValue);\n return key === undefined ? -1 : key;\n },\n lastIndexOf: function lastIndexOf(searchValue) {\n var key = this.lastKeyOf(searchValue);\n return key === undefined ? -1 : key;\n },\n reverse: function reverse() {\n return reify(this, reverseFactory(this, false));\n },\n slice: function slice(begin, end) {\n return reify(this, sliceFactory(this, begin, end, false));\n },\n splice: function splice(index, removeNum\n /*, ...values*/\n ) {\n var numArgs = arguments.length;\n removeNum = Math.max(removeNum | 0, 0);\n\n if (numArgs === 0 || numArgs === 2 && !removeNum) {\n return this;\n } // If index is negative, it should resolve relative to the size of the\n // collection. However size may be expensive to compute if not cached, so\n // only call count() if the number is in fact negative.\n\n\n index = resolveBegin(index, index < 0 ? this.count() : this.size);\n var spliced = this.slice(0, index);\n return reify(this, numArgs === 1 ? spliced : spliced.concat(arrCopy(arguments, 2), this.slice(index + removeNum)));\n },\n // ### More collection methods\n findLastIndex: function findLastIndex(predicate, context) {\n var entry = this.findLastEntry(predicate, context);\n return entry ? entry[0] : -1;\n },\n first: function first() {\n return this.get(0);\n },\n flatten: function flatten(depth) {\n return reify(this, flattenFactory(this, depth, false));\n },\n get: function get(index, notSetValue) {\n index = wrapIndex(this, index);\n return index < 0 || this.size === Infinity || this.size !== undefined && index > this.size ? notSetValue : this.find(function (_, key) {\n return key === index;\n }, undefined, notSetValue);\n },\n has: function has(index) {\n index = wrapIndex(this, index);\n return index >= 0 && (this.size !== undefined ? this.size === Infinity || index < this.size : this.indexOf(index) !== -1);\n },\n interpose: function interpose(separator) {\n return reify(this, interposeFactory(this, separator));\n },\n interleave: function interleave()\n /*...iterables*/\n {\n var iterables = [this].concat(arrCopy(arguments));\n var zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, iterables);\n var interleaved = zipped.flatten(true);\n\n if (zipped.size) {\n interleaved.size = zipped.size * iterables.length;\n }\n\n return reify(this, interleaved);\n },\n keySeq: function keySeq() {\n return Range(0, this.size);\n },\n last: function last() {\n return this.get(-1);\n },\n skipWhile: function skipWhile(predicate, context) {\n return reify(this, skipWhileFactory(this, predicate, context, false));\n },\n zip: function zip()\n /*, ...iterables */\n {\n var iterables = [this].concat(arrCopy(arguments));\n return reify(this, zipWithFactory(this, defaultZipper, iterables));\n },\n zipWith: function zipWith(zipper\n /*, ...iterables */\n ) {\n var iterables = arrCopy(arguments);\n iterables[0] = this;\n return reify(this, zipWithFactory(this, zipper, iterables));\n }\n });\n IndexedIterable.prototype[IS_INDEXED_SENTINEL] = true;\n IndexedIterable.prototype[IS_ORDERED_SENTINEL] = true;\n mixin(SetIterable, {\n // ### ES6 Collection methods (ES6 Array and Map)\n get: function get(value, notSetValue) {\n return this.has(value) ? value : notSetValue;\n },\n includes: function includes(value) {\n return this.has(value);\n },\n // ### More sequential methods\n keySeq: function keySeq() {\n return this.valueSeq();\n }\n });\n SetIterable.prototype.has = IterablePrototype.includes;\n SetIterable.prototype.contains = SetIterable.prototype.includes; // Mixin subclasses\n\n mixin(KeyedSeq, KeyedIterable.prototype);\n mixin(IndexedSeq, IndexedIterable.prototype);\n mixin(SetSeq, SetIterable.prototype);\n mixin(KeyedCollection, KeyedIterable.prototype);\n mixin(IndexedCollection, IndexedIterable.prototype);\n mixin(SetCollection, SetIterable.prototype); // #pragma Helper functions\n\n function keyMapper(v, k) {\n return k;\n }\n\n function entryMapper(v, k) {\n return [k, v];\n }\n\n function not(predicate) {\n return function () {\n return !predicate.apply(this, arguments);\n };\n }\n\n function neg(predicate) {\n return function () {\n return -predicate.apply(this, arguments);\n };\n }\n\n function quoteString(value) {\n return typeof value === 'string' ? JSON.stringify(value) : String(value);\n }\n\n function defaultZipper() {\n return arrCopy(arguments);\n }\n\n function defaultNegComparator(a, b) {\n return a < b ? 1 : a > b ? -1 : 0;\n }\n\n function hashIterable(iterable) {\n if (iterable.size === Infinity) {\n return 0;\n }\n\n var ordered = isOrdered(iterable);\n var keyed = isKeyed(iterable);\n var h = ordered ? 1 : 0;\n\n var size = iterable.__iterate(keyed ? ordered ? function (v, k) {\n h = 31 * h + hashMerge(hash(v), hash(k)) | 0;\n } : function (v, k) {\n h = h + hashMerge(hash(v), hash(k)) | 0;\n } : ordered ? function (v) {\n h = 31 * h + hash(v) | 0;\n } : function (v) {\n h = h + hash(v) | 0;\n });\n\n return murmurHashOfSize(size, h);\n }\n\n function murmurHashOfSize(size, h) {\n h = imul(h, 0xCC9E2D51);\n h = imul(h << 15 | h >>> -15, 0x1B873593);\n h = imul(h << 13 | h >>> -13, 5);\n h = (h + 0xE6546B64 | 0) ^ size;\n h = imul(h ^ h >>> 16, 0x85EBCA6B);\n h = imul(h ^ h >>> 13, 0xC2B2AE35);\n h = smi(h ^ h >>> 16);\n return h;\n }\n\n function hashMerge(a, b) {\n return a ^ b + 0x9E3779B9 + (a << 6) + (a >> 2) | 0; // int\n }\n\n var Immutable = {\n Iterable: Iterable,\n Seq: Seq,\n Collection: Collection,\n Map: Map,\n OrderedMap: OrderedMap,\n List: List,\n Stack: Stack,\n Set: Set,\n OrderedSet: OrderedSet,\n Record: Record,\n Range: Range,\n Repeat: Repeat,\n is: is,\n fromJS: fromJS\n };\n return Immutable;\n});","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar freeGlobal = require('./_freeGlobal');\n/** Detect free variable `self`. */\n\n\nvar freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = freeGlobal || freeSelf || Function('return this')();\nmodule.exports = root;","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\nmodule.exports = isArray;","module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};","var simpleIsEqual = function simpleIsEqual(a, b) {\n return a === b;\n};\n\nfunction index(resultFn, isEqual) {\n if (isEqual === void 0) {\n isEqual = simpleIsEqual;\n }\n\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n\n var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) {\n return isEqual(newArg, lastArgs[index], index);\n };\n\n var result = function result() {\n for (var _len = arguments.length, newArgs = new Array(_len), _key = 0; _key < _len; _key++) {\n newArgs[_key] = arguments[_key];\n }\n\n if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) {\n return lastResult;\n }\n\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n };\n\n return result;\n}\n\nexport default index;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && _typeof(value) == 'object';\n}\n\nmodule.exports = isObjectLike;","/*!\n * is-plain-object \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n'use strict';\n\nvar isObject = require('isobject');\n\nfunction isObjectObject(o) {\n return isObject(o) === true && Object.prototype.toString.call(o) === '[object Object]';\n}\n\nmodule.exports = function isPlainObject(o) {\n var ctor, prot;\n if (isObjectObject(o) === false) return false; // If has modified constructor\n\n ctor = o.constructor;\n if (typeof ctor !== 'function') return false; // If has modified prototype\n\n prot = ctor.prototype;\n if (isObjectObject(prot) === false) return false; // If constructor does not have an Object-specific method\n\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n } // Most likely a plain Object\n\n\n return true;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = _typeof(value);\n\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n\n\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;","var _Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n/** `Object#toString` result references. */\n\n\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n/** Built-in value references. */\n\nvar symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n}\n\nmodule.exports = baseGetTag;","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","/**\n * Module dependencies.\n */\nvar getDocument = require('get-document');\n/**\n * Module exports.\n */\n\n\nmodule.exports = getWindow;\n\nvar needsIEFallback = require('./needs-ie-fallback');\n/**\n * Returns `true` if `w` is a Window object, or `false` otherwise.\n *\n * @param {Mixed} w - Window object, maybe\n * @return {Boolean}\n * @private\n */\n\n\nfunction isWindow(w) {\n return w && w.window === w;\n}\n/**\n * Returns the `window` object associated with the given `node`, which may be\n * a DOM element, the Window object, a Selection, a Range. Basically any DOM\n * object that references the Window in some way, this function will find it.\n *\n * @param {Mixed} node - DOM node, selection, or range in which to find the `window` object\n * @return {Window} the `window` object associated with `node`\n * @public\n */\n\n\nfunction getWindow(node) {\n if (isWindow(node)) {\n return node;\n }\n\n var doc = getDocument(node);\n\n if (needsIEFallback) {\n // In IE 6-8, only the variable 'window' can be used to connect events (others\n // may be only copies).\n doc.parentWindow.execScript('document._parentWindow = window;', 'Javascript');\n var win = doc._parentWindow; // to prevent memory leak, unset it after use\n // another possibility is to add an onUnload handler,\n // (which seems overkill to @liucougar)\n\n doc._parentWindow = null;\n return win;\n } else {\n // standards-compliant and newer IE\n return doc.defaultView || doc.parentWindow;\n }\n}","var root = require('./_root');\n/** Built-in value references. */\n\n\nvar _Symbol = root.Symbol;\nmodule.exports = _Symbol;","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n\n\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n\n\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n\n return object;\n}\n\nmodule.exports = copyObject;","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `ListCache`.\n\n\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\nmodule.exports = ListCache;","var eq = require('./eq');\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n\n\nfunction assocIndexOf(array, key) {\n var length = array.length;\n\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n\n return -1;\n}\n\nmodule.exports = assocIndexOf;","var getNative = require('./_getNative');\n/* Built-in method references that are verified to be native. */\n\n\nvar nativeCreate = getNative(Object, 'create');\nmodule.exports = nativeCreate;","var isKeyable = require('./_isKeyable');\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n\n\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n}\n\nmodule.exports = getMapData;","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n/** `Object#toString` result references. */\n\n\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\nvar dataViewTag = '[object DataView]';\n/** Used to detect maps, sets, and weakmaps. */\n\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\nvar getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n\nif (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function getTag(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n\n case mapCtorString:\n return mapTag;\n\n case promiseCtorString:\n return promiseTag;\n\n case setCtorString:\n return setTag;\n\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n\n return result;\n };\n}\n\nmodule.exports = getTag;","var isSymbol = require('./isSymbol');\n/** Used as references for various `Number` constants. */\n\n\nvar INFINITY = 1 / 0;\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n}\n\nmodule.exports = toKey;","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n\n\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n\n\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar symbolTag = '[object Symbol]';\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n\nfunction isSymbol(value) {\n return _typeof(value) == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag;\n}\n\nmodule.exports = isSymbol;","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function (value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar freeGlobal = require('./_freeGlobal');\n/** Detect free variable `exports`. */\n\n\nvar freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n/** Detect free variable `module`. */\n\nvar freeModule = freeExports && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n/** Detect the popular CommonJS extension `module.exports`. */\n\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n/** Detect free variable `process` from Node.js. */\n\nvar freeProcess = moduleExports && freeGlobal.process;\n/** Used to access faster Node.js helpers. */\n\nvar nodeUtil = function () {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n } // Legacy `process.binding('util')` for Node.js < 10.\n\n\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}();\n\nmodule.exports = nodeUtil;","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n return value === proto;\n}\n\nmodule.exports = isPrototype;","var overArg = require('./_overArg');\n/** Built-in value references. */\n\n\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\nmodule.exports = getPrototype;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar Map = getNative(root, 'Map');\nmodule.exports = Map;","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Built-in value references. */\n\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n\nvar getSymbols = !nativeGetSymbols ? stubArray : function (object) {\n if (object == null) {\n return [];\n }\n\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function (symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\nmodule.exports = getSymbols;","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n\n\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;","var Uint8Array = require('./_Uint8Array');\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n\n\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar root = require('./_root'),\n stubFalse = require('./stubFalse');\n/** Detect free variable `exports`. */\n\n\nvar freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n/** Detect free variable `module`. */\n\nvar freeModule = freeExports && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n/** Detect the popular CommonJS extension `module.exports`. */\n\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n/** Built-in value references. */\n\nvar Buffer = moduleExports ? root.Buffer : undefined;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n\nvar isBuffer = nativeIsBuffer || stubFalse;\nmodule.exports = isBuffer;","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || value !== value && other !== other;\n}\n\nmodule.exports = eq;","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `MapCache`.\n\n\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\nmodule.exports = MapCache;","var defineProperty = require('./_defineProperty');\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n\n\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Built-in value references. */\n\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n\nvar isArguments = baseIsArguments(function () {\n return arguments;\n}()) ? baseIsArguments : function (value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n};\nmodule.exports = isArguments;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/** Used to detect unsigned integer values. */\n\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n\nfunction isIndex(value, length) {\n var type = _typeof(value);\n\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n}\n\nmodule.exports = isIndex;","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n\n return result;\n}\n\nmodule.exports = arrayMap;","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n} // Add methods to `Stack`.\n\n\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\nmodule.exports = Stack;","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n\n return array;\n}\n\nmodule.exports = arrayPush;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n/** Used to match property names within property paths. */\n\n\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n\n var type = _typeof(value);\n\n if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) {\n return true;\n }\n\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);\n}\n\nmodule.exports = isKey;","var baseToString = require('./_baseToString');\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined && !(key in object)) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;","\"use strict\";\n\nfunction _typeof2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\n\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n/**\n * Colors.\n */\n\nexports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n// eslint-disable-next-line complexity\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n return true;\n } // Internet Explorer and Edge do not support colors.\n\n\n if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n return false;\n } // Is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\n\n return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773\n typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\n\nfunction formatArgs(args) {\n args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);\n\n if (!this.useColors) {\n return;\n }\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit'); // The final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function (match) {\n if (match === '%%') {\n return;\n }\n\n index++;\n\n if (match === '%c') {\n // We only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n args.splice(lastC, 0, c);\n}\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\n\nfunction log() {\n var _console; // This hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n\n\n return (typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);\n}\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\n\nfunction save(namespaces) {\n try {\n if (namespaces) {\n exports.storage.setItem('debug', namespaces);\n } else {\n exports.storage.removeItem('debug');\n }\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\n\nfunction load() {\n var r;\n\n try {\n r = exports.storage.getItem('debug');\n } catch (error) {} // Swallow\n // XXX (@Qix-) should we be logging these?\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\n\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\n\nfunction localstorage() {\n try {\n // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n // The Browser also has localStorage in the global context.\n return localStorage;\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n\nmodule.exports = require('./common')(exports);\nvar formatters = module.exports.formatters;\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n try {\n return JSON.stringify(v);\n } catch (error) {\n return '[UnexpectedJSONParseError]: ' + error.message;\n }\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global && global.Object === Object && global;\nmodule.exports = freeGlobal;","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.\n isIndex(key, length)))) {\n result.push(key);\n }\n }\n\n return result;\n}\n\nmodule.exports = arrayLikeKeys;","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n/** `Object#toString` result references. */\n\n\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n } // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n\n\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n\n try {\n return func + '';\n } catch (e) {}\n }\n\n return '';\n}\n\nmodule.exports = toSource;","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n\n\nfunction baseGet(object, path) {\n path = castPath(path, object);\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n\n return index && index == length ? object : undefined;\n}\n\nmodule.exports = baseGet;","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\n\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function (object) {\n var result = [];\n\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n\n return result;\n};\nmodule.exports = getSymbolsIn;","'use strict';\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = String(R.source);\n var rf = R.flags;\n var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n/* Node.js helper references. */\n\n\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\nmodule.exports = isTypedArray;","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;","var root = require('./_root');\n/** Built-in value references. */\n\n\nvar Uint8Array = root.Uint8Array;\nmodule.exports = Uint8Array;","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n\n\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n\n object = object[key];\n }\n\n if (result || ++index != length) {\n return result;\n }\n\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n/** Used to compose bitmasks for cloning. */\n\n\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n/** `Object#toString` result references. */\n\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n/** Used to identify `toStringTag` values supported by `_.clone`. */\n\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n\n if (result !== undefined) {\n return result;\n }\n\n if (!isObject(value)) {\n return value;\n }\n\n var isArr = isArray(value);\n\n if (isArr) {\n result = initCloneArray(value);\n\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n\n if (tag == objectTag || tag == argsTag || isFunc && !object) {\n result = isFlat || isFunc ? {} : initCloneObject(value);\n\n if (!isDeep) {\n return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n\n result = initCloneByTag(value, tag, isDeep);\n }\n } // Check for circular references and return its corresponding clone.\n\n\n stack || (stack = new Stack());\n var stacked = stack.get(value);\n\n if (stacked) {\n return stacked;\n }\n\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function (subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function (subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function (subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n } // Recursively populate clone (susceptible to call stack limits).\n\n\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;","var getNative = require('./_getNative');\n\nvar defineProperty = function () {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}();\n\nmodule.exports = defineProperty;","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n array || (array = Array(length));\n\n while (++index < length) {\n array[index] = source[index];\n }\n\n return array;\n}\n\nmodule.exports = copyArray;","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n\n\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;","var basePick = require('./_basePick'),\n flatRest = require('./_flatRest');\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n\n\nvar pick = flatRest(function (object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\nmodule.exports = pick;","\"use strict\";\n\nfunction _typeof2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n}\n/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\n\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n/**\n * Colors.\n */\n\nexports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n// eslint-disable-next-line complexity\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n return true;\n } // Internet Explorer and Edge do not support colors.\n\n\n if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n return false;\n } // Is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\n\n return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773\n typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\n\nfunction formatArgs(args) {\n args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);\n\n if (!this.useColors) {\n return;\n }\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit'); // The final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function (match) {\n if (match === '%%') {\n return;\n }\n\n index++;\n\n if (match === '%c') {\n // We only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n args.splice(lastC, 0, c);\n}\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\n\nfunction log() {\n var _console; // This hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n\n\n return (typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);\n}\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\n\nfunction save(namespaces) {\n try {\n if (namespaces) {\n exports.storage.setItem('debug', namespaces);\n } else {\n exports.storage.removeItem('debug');\n }\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\n\nfunction load() {\n var r;\n\n try {\n r = exports.storage.getItem('debug');\n } catch (error) {} // Swallow\n // XXX (@Qix-) should we be logging these?\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\n\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\n\nfunction localstorage() {\n try {\n // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n // The Browser also has localStorage in the global context.\n return localStorage;\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n\nmodule.exports = require('./common')(exports);\nvar formatters = module.exports.formatters;\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n try {\n return JSON.stringify(v);\n } catch (error) {\n return '[UnexpectedJSONParseError]: ' + error.message;\n }\n};","var _Symbol = require('./_Symbol');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString = objectProto.toString;\n/** Built-in value references. */\n\nvar symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n\n return result;\n}\n\nmodule.exports = getRawTag;","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString = objectProto.toString;\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n\n return result;\n}\n\nmodule.exports = baseTimes;","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar argsTag = '[object Arguments]';\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n/** Used to identify `toStringTag` values of typed arrays. */\n\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n\n var result = [];\n\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n\n return result;\n}\n\nmodule.exports = baseKeys;","var overArg = require('./_overArg');\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\n\nvar nativeKeys = overArg(Object.keys, Object);\nmodule.exports = nativeKeys;","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar objectTag = '[object Object]';\n/** Used for built-in method references. */\n\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Used to infer the `Object` constructor. */\n\nvar objectCtorString = funcToString.call(Object);\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n\n var proto = getPrototype(value);\n\n if (proto === null) {\n return true;\n }\n\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;","var assocIndexOf = require('./_assocIndexOf');\n/** Used for built-in method references. */\n\n\nvar arrayProto = Array.prototype;\n/** Built-in value references. */\n\nvar splice = arrayProto.splice;\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n\n var lastIndex = data.length - 1;\n\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;","var assocIndexOf = require('./_assocIndexOf');\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n\n\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n\n return this;\n}\n\nmodule.exports = listCacheSet;","var ListCache = require('./_ListCache');\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n\n\nfunction stackClear() {\n this.__data__ = new ListCache();\n this.size = 0;\n}\n\nmodule.exports = stackClear;","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n/** Used as the size to enable large array optimizations. */\n\n\nvar LARGE_ARRAY_SIZE = 200;\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n\nfunction stackSet(key, value) {\n var data = this.__data__;\n\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n\n if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n\n data = this.__data__ = new MapCache(pairs);\n }\n\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n\n\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n/** Used to detect host constructors (Safari). */\n\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n/** Used for built-in method references. */\n\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n/** Used to resolve the decompiled source of functions. */\n\nvar funcToString = funcProto.toString;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/** Used to detect if a method is native. */\n\nvar reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;","var coreJsData = require('./_coreJsData');\n/** Used to detect methods masquerading as native. */\n\n\nvar maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n}();\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n\n\nfunction isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\n\nmodule.exports = isMasked;","var root = require('./_root');\n/** Used to detect overreaching core-js shims. */\n\n\nvar coreJsData = root['__core-js_shared__'];\nmodule.exports = coreJsData;","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n\n\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n}\n\nmodule.exports = mapCacheClear;","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n\n\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n} // Add methods to `Hash`.\n\n\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\nmodule.exports = Hash;","var nativeCreate = require('./_nativeCreate');\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n\n\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;","var nativeCreate = require('./_nativeCreate');\n/** Used to stand-in for `undefined` hash values. */\n\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\nfunction hashGet(key) {\n var data = this.__data__;\n\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;","var nativeCreate = require('./_nativeCreate');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;","var nativeCreate = require('./_nativeCreate');\n/** Used to stand-in for `undefined` hash values. */\n\n\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;","var getMapData = require('./_getMapData');\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\n\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = _typeof(value);\n\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n}\n\nmodule.exports = isKeyable;","var getMapData = require('./_getMapData');\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n\n\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;","var getMapData = require('./_getMapData');\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n\n\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;","var getMapData = require('./_getMapData');\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n\n\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n\n return result;\n}\n\nmodule.exports = arrayFilter;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar DataView = getNative(root, 'DataView');\nmodule.exports = DataView;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar Promise = getNative(root, 'Promise');\nmodule.exports = Promise;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar Set = getNative(root, 'Set');\nmodule.exports = Set;","var getNative = require('./_getNative'),\n root = require('./_root');\n/* Built-in method references that are verified to be native. */\n\n\nvar WeakMap = getNative(root, 'WeakMap');\nmodule.exports = WeakMap;","var memoizeCapped = require('./_memoizeCapped');\n/** Used to match property names within property paths. */\n\n\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n/** Used to match backslashes in property paths. */\n\nvar reEscapeChar = /\\\\(\\\\)?/g;\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n\nvar stringToPath = memoizeCapped(function (string) {\n var result = [];\n\n if (string.charCodeAt(0) === 46\n /* . */\n ) {\n result.push('');\n }\n\n string.replace(rePropName, function (match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match);\n });\n return result;\n});\nmodule.exports = stringToPath;","var memoize = require('./memoize');\n/** Used as the maximum memoize cache size. */\n\n\nvar MAX_MEMOIZE_SIZE = 500;\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n\nfunction memoizeCapped(func) {\n var result = memoize(func, function (key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n\n return key;\n });\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;","var MapCache = require('./_MapCache');\n/** Error message constants. */\n\n\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || resolver != null && typeof resolver != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n var memoized = function memoized() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n\n memoized.cache = new (memoize.Cache || MapCache)();\n return memoized;\n} // Expose `MapCache`.\n\n\nmemoize.Cache = MapCache;\nmodule.exports = memoize;","var _Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n/** Used as references for various `Number` constants. */\n\n\nvar INFINITY = 1 / 0;\n/** Used to convert symbols to primitives and strings. */\n\nvar symbolProto = _Symbol ? _Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n}\n\nmodule.exports = baseToString;","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n\n\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n\n return array;\n}\n\nmodule.exports = arrayEach;","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n\n\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n\n\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n/** Used for built-in method references. */\n\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n\n return result;\n}\n\nmodule.exports = baseKeysIn;","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n\n return result;\n}\n\nmodule.exports = nativeKeysIn;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar root = require('./_root');\n/** Detect free variable `exports`. */\n\n\nvar freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n/** Detect free variable `module`. */\n\nvar freeModule = freeExports && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n/** Detect the popular CommonJS extension `module.exports`. */\n\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n/** Built-in value references. */\n\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n\n\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n\n\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length); // Add properties assigned by `RegExp#exec`.\n\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n\n return result;\n}\n\nmodule.exports = initCloneArray;","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n/** `Object#toString` result references. */\n\n\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag:\n case float64Tag:\n case int8Tag:\n case int16Tag:\n case int32Tag:\n case uint8Tag:\n case uint8ClampedTag:\n case uint16Tag:\n case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor();\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor();\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n\n\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;","var _Symbol = require('./_Symbol');\n/** Used to convert symbols to primitives and strings. */\n\n\nvar symbolProto = _Symbol ? _Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n\n\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n\n\nfunction initCloneObject(object) {\n return typeof object.constructor == 'function' && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};\n}\n\nmodule.exports = initCloneObject;","var isObject = require('./isObject');\n/** Built-in value references. */\n\n\nvar objectCreate = Object.create;\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n\nvar baseCreate = function () {\n function object() {}\n\n return function (proto) {\n if (!isObject(proto)) {\n return {};\n }\n\n if (objectCreate) {\n return objectCreate(proto);\n }\n\n object.prototype = proto;\n var result = new object();\n object.prototype = undefined;\n return result;\n };\n}();\n\nmodule.exports = baseCreate;","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n/* Node.js helper references. */\n\n\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\nmodule.exports = isMap;","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar mapTag = '[object Map]';\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n/* Node.js helper references. */\n\n\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\nmodule.exports = isSet;","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n/** `Object#toString` result references. */\n\n\nvar setTag = '[object Set]';\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * Constants.\n */\n\nvar IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\nvar MODIFIERS = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey'\n};\nvar ALIASES = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta'\n};\nvar CODES = {\n backspace: 8,\n tab: 9,\n enter: 13,\n shift: 16,\n control: 17,\n alt: 18,\n pause: 19,\n capslock: 20,\n escape: 27,\n ' ': 32,\n pageup: 33,\n pagedown: 34,\n end: 35,\n home: 36,\n arrowleft: 37,\n arrowup: 38,\n arrowright: 39,\n arrowdown: 40,\n insert: 45,\n delete: 46,\n meta: 91,\n numlock: 144,\n scrolllock: 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n '\\'': 222\n};\n\nfor (var f = 1; f < 20; f++) {\n CODES['f' + f] = 111 + f;\n}\n/**\n * Is hotkey?\n */\n\n\nfunction isHotkey(hotkey, options, event) {\n if (options && !('byKey' in options)) {\n event = options;\n options = null;\n }\n\n if (!Array.isArray(hotkey)) {\n hotkey = [hotkey];\n }\n\n var array = hotkey.map(function (string) {\n return parseHotkey(string, options);\n });\n\n var check = function check(e) {\n return array.some(function (object) {\n return compareHotkey(object, e);\n });\n };\n\n var ret = event == null ? check : check(event);\n return ret;\n}\n\nfunction isCodeHotkey(hotkey, event) {\n return isHotkey(hotkey, event);\n}\n\nfunction isKeyHotkey(hotkey, event) {\n return isHotkey(hotkey, {\n byKey: true\n }, event);\n}\n/**\n * Parse.\n */\n\n\nfunction parseHotkey(hotkey, options) {\n var byKey = options && options.byKey;\n var ret = {}; // Special case to handle the `+` key since we use it as a separator.\n\n hotkey = hotkey.replace('++', '+add');\n var values = hotkey.split('+');\n var length = values.length; // Ensure that all the modifiers are set to false unless the hotkey has them.\n\n for (var k in MODIFIERS) {\n ret[MODIFIERS[k]] = false;\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = values[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var value = _step.value;\n var optional = value.endsWith('?') && value.length > 1;\n\n if (optional) {\n value = value.slice(0, -1);\n }\n\n var name = toKeyName(value);\n var modifier = MODIFIERS[name];\n\n if (length === 1 || !modifier) {\n if (byKey) {\n ret.key = name;\n } else {\n ret.which = toKeyCode(value);\n }\n }\n\n if (modifier) {\n ret[modifier] = optional ? null : true;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return ret;\n}\n/**\n * Compare.\n */\n\n\nfunction compareHotkey(object, event) {\n for (var key in object) {\n var expected = object[key];\n var actual = void 0;\n\n if (expected == null) {\n continue;\n }\n\n if (key === 'key' && event.key != null) {\n actual = event.key.toLowerCase();\n } else if (key === 'which') {\n actual = expected === 91 && event.which === 93 ? 91 : event.which;\n } else {\n actual = event[key];\n }\n\n if (actual == null && expected === false) {\n continue;\n }\n\n if (actual !== expected) {\n return false;\n }\n }\n\n return true;\n}\n/**\n * Utils.\n */\n\n\nfunction toKeyCode(name) {\n name = toKeyName(name);\n var code = CODES[name] || name.toUpperCase().charCodeAt(0);\n return code;\n}\n\nfunction toKeyName(name) {\n name = name.toLowerCase();\n name = ALIASES[name] || name;\n return name;\n}\n/**\n * Export.\n */\n\n\nexports.default = isHotkey;\nexports.isHotkey = isHotkey;\nexports.isCodeHotkey = isCodeHotkey;\nexports.isKeyHotkey = isKeyHotkey;\nexports.parseHotkey = parseHotkey;\nexports.compareHotkey = compareHotkey;\nexports.toKeyCode = toKeyCode;\nexports.toKeyName = toKeyName;","import createEmotion from 'create-emotion';\nvar context = typeof global !== 'undefined' ? global : {};\n\nvar _createEmotion = createEmotion(context),\n flush = _createEmotion.flush,\n hydrate = _createEmotion.hydrate,\n cx = _createEmotion.cx,\n merge = _createEmotion.merge,\n getRegisteredStyles = _createEmotion.getRegisteredStyles,\n injectGlobal = _createEmotion.injectGlobal,\n keyframes = _createEmotion.keyframes,\n css = _createEmotion.css,\n sheet = _createEmotion.sheet,\n caches = _createEmotion.caches;\n\nexport { flush, hydrate, cx, merge, getRegisteredStyles, injectGlobal, keyframes, css, sheet, caches };","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * Constants.\n */\n\nvar IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\nvar MODIFIERS = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey'\n};\nvar ALIASES = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta'\n};\nvar CODES = {\n backspace: 8,\n tab: 9,\n enter: 13,\n shift: 16,\n control: 17,\n alt: 18,\n pause: 19,\n capslock: 20,\n escape: 27,\n ' ': 32,\n pageup: 33,\n pagedown: 34,\n end: 35,\n home: 36,\n arrowleft: 37,\n arrowup: 38,\n arrowright: 39,\n arrowdown: 40,\n insert: 45,\n delete: 46,\n meta: 91,\n numlock: 144,\n scrolllock: 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n '\\'': 222\n};\n\nfor (var f = 1; f < 20; f++) {\n CODES['f' + f] = 111 + f;\n}\n/**\n * Is hotkey?\n */\n\n\nfunction isHotkey(hotkey, options, event) {\n if (options && !('byKey' in options)) {\n event = options;\n options = null;\n }\n\n if (!Array.isArray(hotkey)) {\n hotkey = [hotkey];\n }\n\n var array = hotkey.map(function (string) {\n return parseHotkey(string, options);\n });\n\n var check = function check(e) {\n return array.some(function (object) {\n return compareHotkey(object, e);\n });\n };\n\n var ret = event == null ? check : check(event);\n return ret;\n}\n\nfunction isCodeHotkey(hotkey, event) {\n return isHotkey(hotkey, event);\n}\n\nfunction isKeyHotkey(hotkey, event) {\n return isHotkey(hotkey, {\n byKey: true\n }, event);\n}\n/**\n * Parse.\n */\n\n\nfunction parseHotkey(hotkey, options) {\n var byKey = options && options.byKey;\n var ret = {}; // Special case to handle the `+` key since we use it as a separator.\n\n hotkey = hotkey.replace('++', '+add');\n var values = hotkey.split('+');\n var length = values.length; // Ensure that all the modifiers are set to false unless the hotkey has them.\n\n for (var k in MODIFIERS) {\n ret[MODIFIERS[k]] = false;\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = values[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var value = _step.value;\n var optional = value.endsWith('?');\n\n if (optional) {\n value = value.slice(0, -1);\n }\n\n var name = toKeyName(value);\n var modifier = MODIFIERS[name];\n\n if (length === 1 || !modifier) {\n if (byKey) {\n ret.key = name;\n } else {\n ret.which = toKeyCode(value);\n }\n }\n\n if (modifier) {\n ret[modifier] = optional ? null : true;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return ret;\n}\n/**\n * Compare.\n */\n\n\nfunction compareHotkey(object, event) {\n for (var key in object) {\n var expected = object[key];\n var actual = void 0;\n\n if (expected == null) {\n continue;\n }\n\n if (key === 'key') {\n actual = event.key.toLowerCase();\n } else if (key === 'which') {\n actual = expected === 91 && event.which === 93 ? 91 : event.which;\n } else {\n actual = event[key];\n }\n\n if (actual == null && expected === false) {\n continue;\n }\n\n if (actual !== expected) {\n return false;\n }\n }\n\n return true;\n}\n/**\n * Utils.\n */\n\n\nfunction toKeyCode(name) {\n name = toKeyName(name);\n var code = CODES[name] || name.toUpperCase().charCodeAt(0);\n return code;\n}\n\nfunction toKeyName(name) {\n name = name.toLowerCase();\n name = ALIASES[name] || name;\n return name;\n}\n/**\n * Export.\n */\n\n\nexports.default = isHotkey;\nexports.isHotkey = isHotkey;\nexports.isCodeHotkey = isCodeHotkey;\nexports.isKeyHotkey = isKeyHotkey;\nexports.parseHotkey = parseHotkey;\nexports.compareHotkey = compareHotkey;\nexports.toKeyCode = toKeyCode;\nexports.toKeyName = toKeyName;","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : length + start;\n }\n\n end = end > length ? length : end;\n\n if (end < 0) {\n end += length;\n }\n\n length = start > end ? 0 : end - start >>> 0;\n start >>>= 0;\n var result = Array(length);\n\n while (++index < length) {\n result[index] = array[index + start];\n }\n\n return result;\n}\n\nmodule.exports = baseSlice;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*! https://mths.be/esrever v0.2.0 by @mathias */\n;\n\n(function (root) {\n // Detect free variables `exports`\n var freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports; // Detect free variable `module`\n\n var freeModule = (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && module.exports == freeExports && module; // Detect free variable `global`, from Node.js or Browserified code,\n // and use it as `root`\n\n var freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global;\n\n if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n root = freeGlobal;\n }\n /*--------------------------------------------------------------------------*/\n\n\n var regexSymbolWithCombiningMarks = /([\\0-\\u02FF\\u0370-\\u1AAF\\u1B00-\\u1DBF\\u1E00-\\u20CF\\u2100-\\uD7FF\\uE000-\\uFE1F\\uFE30-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])([\\u0300-\\u036F\\u1AB0-\\u1AFF\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F]+)/g;\n var regexSurrogatePair = /([\\uD800-\\uDBFF])([\\uDC00-\\uDFFF])/g;\n\n var reverse = function reverse(string) {\n // Step 1: deal with combining marks and astral symbols (surrogate pairs)\n string = string // Swap symbols with their combining marks so the combining marks go first\n .replace(regexSymbolWithCombiningMarks, function ($0, $1, $2) {\n // Reverse the combining marks so they will end up in the same order\n // later on (after another round of reversing)\n return reverse($2) + $1;\n }) // Swap high and low surrogates so the low surrogates go first\n .replace(regexSurrogatePair, '$2$1'); // Step 2: reverse the code units in the string\n\n var result = '';\n var index = string.length;\n\n while (index--) {\n result += string.charAt(index);\n }\n\n return result;\n };\n /*--------------------------------------------------------------------------*/\n\n\n var esrever = {\n 'version': '0.2.0',\n 'reverse': reverse\n }; // Some AMD build optimizers, like r.js, check for specific condition patterns\n // like the following:\n\n if (typeof define == 'function' && _typeof(define.amd) == 'object' && define.amd) {\n define(function () {\n return esrever;\n });\n } else if (freeExports && !freeExports.nodeType) {\n if (freeModule) {\n // in Node.js, io.js, or RingoJS v0.8.0+\n freeModule.exports = esrever;\n } else {\n // in Narwhal or RingoJS v0.7.0-\n for (var key in esrever) {\n esrever.hasOwnProperty(key) && (freeExports[key] = esrever[key]);\n }\n }\n } else {\n // in Rhino or a web browser\n root.esrever = esrever;\n }\n})(this);","var arrayMap = require('./_arrayMap'),\n baseClone = require('./_baseClone'),\n baseUnset = require('./_baseUnset'),\n castPath = require('./_castPath'),\n copyObject = require('./_copyObject'),\n customOmitClone = require('./_customOmitClone'),\n flatRest = require('./_flatRest'),\n getAllKeysIn = require('./_getAllKeysIn');\n/** Used to compose bitmasks for cloning. */\n\n\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n\nvar omit = flatRest(function (object, paths) {\n var result = {};\n\n if (object == null) {\n return result;\n }\n\n var isDeep = false;\n paths = arrayMap(paths, function (path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n\n var length = paths.length;\n\n while (length--) {\n baseUnset(result, paths[length]);\n }\n\n return result;\n});\nmodule.exports = omit;","/**\n * This is a straight rip-off of the React.js ReactPropTypes.js proptype validators,\n * modified to make it possible to validate Immutable.js data.\n * ImmutableTypes.listOf is patterned after React.PropTypes.arrayOf, but for Immutable.List\n * ImmutableTypes.shape is based on React.PropTypes.shape, but for any Immutable.Iterable\n */\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar Immutable = require(\"immutable\");\n\nvar ANONYMOUS = \"<>\";\nvar ImmutablePropTypes;\n\nif (process.env.NODE_ENV !== \"production\") {\n ImmutablePropTypes = {\n listOf: createListOfTypeChecker,\n mapOf: createMapOfTypeChecker,\n orderedMapOf: createOrderedMapOfTypeChecker,\n setOf: createSetOfTypeChecker,\n orderedSetOf: createOrderedSetOfTypeChecker,\n stackOf: createStackOfTypeChecker,\n iterableOf: createIterableOfTypeChecker,\n recordOf: createRecordOfTypeChecker,\n shape: createShapeChecker,\n contains: createShapeChecker,\n mapContains: createMapContainsChecker,\n orderedMapContains: createOrderedMapContainsChecker,\n // Primitive Types\n list: createImmutableTypeChecker(\"List\", Immutable.List.isList),\n map: createImmutableTypeChecker(\"Map\", Immutable.Map.isMap),\n orderedMap: createImmutableTypeChecker(\"OrderedMap\", Immutable.OrderedMap.isOrderedMap),\n set: createImmutableTypeChecker(\"Set\", Immutable.Set.isSet),\n orderedSet: createImmutableTypeChecker(\"OrderedSet\", Immutable.OrderedSet.isOrderedSet),\n stack: createImmutableTypeChecker(\"Stack\", Immutable.Stack.isStack),\n seq: createImmutableTypeChecker(\"Seq\", Immutable.Seq.isSeq),\n record: createImmutableTypeChecker(\"Record\", function (isRecord) {\n return isRecord instanceof Immutable.Record;\n }),\n iterable: createImmutableTypeChecker(\"Iterable\", Immutable.Iterable.isIterable)\n };\n} else {\n var productionTypeChecker = function productionTypeChecker() {\n invariant(false, \"ImmutablePropTypes type checking code is stripped in production.\");\n };\n\n productionTypeChecker.isRequired = productionTypeChecker;\n\n var getProductionTypeChecker = function getProductionTypeChecker() {\n return productionTypeChecker;\n };\n\n ImmutablePropTypes = {\n listOf: getProductionTypeChecker,\n mapOf: getProductionTypeChecker,\n orderedMapOf: getProductionTypeChecker,\n setOf: getProductionTypeChecker,\n orderedSetOf: getProductionTypeChecker,\n stackOf: getProductionTypeChecker,\n iterableOf: getProductionTypeChecker,\n recordOf: getProductionTypeChecker,\n shape: getProductionTypeChecker,\n contains: getProductionTypeChecker,\n mapContains: getProductionTypeChecker,\n orderedMapContains: getProductionTypeChecker,\n // Primitive Types\n list: productionTypeChecker,\n map: productionTypeChecker,\n orderedMap: productionTypeChecker,\n set: productionTypeChecker,\n orderedSet: productionTypeChecker,\n stack: productionTypeChecker,\n seq: productionTypeChecker,\n record: productionTypeChecker,\n iterable: productionTypeChecker\n };\n}\n\nImmutablePropTypes.iterable.indexed = createIterableSubclassTypeChecker(\"Indexed\", Immutable.Iterable.isIndexed);\nImmutablePropTypes.iterable.keyed = createIterableSubclassTypeChecker(\"Keyed\", Immutable.Iterable.isKeyed);\n\nfunction getPropType(propValue) {\n var propType = _typeof(propValue);\n\n if (Array.isArray(propValue)) {\n return \"array\";\n }\n\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return \"object\";\n }\n\n if (propValue instanceof Immutable.Iterable) {\n return \"Immutable.\" + propValue.toSource().split(\" \")[0];\n }\n\n return propType;\n}\n\nfunction createChainableTypeChecker(validate) {\n function checkType(isRequired, props, propName, componentName, location, propFullName) {\n for (var _len = arguments.length, rest = Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {\n rest[_key - 6] = arguments[_key];\n }\n\n propFullName = propFullName || propName;\n componentName = componentName || ANONYMOUS;\n\n if (props[propName] == null) {\n var locationName = location;\n\n if (isRequired) {\n return new Error(\"Required \" + locationName + \" `\" + propFullName + \"` was not specified in \" + (\"`\" + componentName + \"`.\"));\n }\n } else {\n return validate.apply(undefined, [props, propName, componentName, location, propFullName].concat(rest));\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n return chainedCheckType;\n}\n\nfunction createImmutableTypeChecker(immutableClassName, immutableClassTypeValidator) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n\n if (!immutableClassTypeValidator(propValue)) {\n var propType = getPropType(propValue);\n return new Error(\"Invalid \" + location + \" `\" + propFullName + \"` of type `\" + propType + \"` \" + (\"supplied to `\" + componentName + \"`, expected `\" + immutableClassName + \"`.\"));\n }\n\n return null;\n }\n\n return createChainableTypeChecker(validate);\n}\n\nfunction createIterableSubclassTypeChecker(subclassName, validator) {\n return createImmutableTypeChecker(\"Iterable.\" + subclassName, function (propValue) {\n return Immutable.Iterable.isIterable(propValue) && validator(propValue);\n });\n}\n\nfunction createIterableTypeChecker(typeChecker, immutableClassName, immutableClassTypeValidator) {\n function validate(props, propName, componentName, location, propFullName) {\n for (var _len = arguments.length, rest = Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) {\n rest[_key - 5] = arguments[_key];\n }\n\n var propValue = props[propName];\n\n if (!immutableClassTypeValidator(propValue)) {\n var locationName = location;\n var propType = getPropType(propValue);\n return new Error(\"Invalid \" + locationName + \" `\" + propFullName + \"` of type \" + (\"`\" + propType + \"` supplied to `\" + componentName + \"`, expected an Immutable.js \" + immutableClassName + \".\"));\n }\n\n if (typeof typeChecker !== \"function\") {\n return new Error(\"Invalid typeChecker supplied to `\" + componentName + \"` \" + (\"for propType `\" + propFullName + \"`, expected a function.\"));\n }\n\n var propValues = propValue.valueSeq().toArray();\n\n for (var i = 0, len = propValues.length; i < len; i++) {\n var error = typeChecker.apply(undefined, [propValues, i, componentName, location, \"\" + propFullName + \"[\" + i + \"]\"].concat(rest));\n\n if (error instanceof Error) {\n return error;\n }\n }\n }\n\n return createChainableTypeChecker(validate);\n}\n\nfunction createKeysTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n for (var _len = arguments.length, rest = Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) {\n rest[_key - 5] = arguments[_key];\n }\n\n var propValue = props[propName];\n\n if (typeof typeChecker !== \"function\") {\n return new Error(\"Invalid keysTypeChecker (optional second argument) supplied to `\" + componentName + \"` \" + (\"for propType `\" + propFullName + \"`, expected a function.\"));\n }\n\n var keys = propValue.keySeq().toArray();\n\n for (var i = 0, len = keys.length; i < len; i++) {\n var error = typeChecker.apply(undefined, [keys, i, componentName, location, \"\" + propFullName + \" -> key(\" + keys[i] + \")\"].concat(rest));\n\n if (error instanceof Error) {\n return error;\n }\n }\n }\n\n return createChainableTypeChecker(validate);\n}\n\nfunction createListOfTypeChecker(typeChecker) {\n return createIterableTypeChecker(typeChecker, \"List\", Immutable.List.isList);\n}\n\nfunction createMapOfTypeCheckerFactory(valuesTypeChecker, keysTypeChecker, immutableClassName, immutableClassTypeValidator) {\n function validate() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return createIterableTypeChecker(valuesTypeChecker, immutableClassName, immutableClassTypeValidator).apply(undefined, args) || keysTypeChecker && createKeysTypeChecker(keysTypeChecker).apply(undefined, args);\n }\n\n return createChainableTypeChecker(validate);\n}\n\nfunction createMapOfTypeChecker(valuesTypeChecker, keysTypeChecker) {\n return createMapOfTypeCheckerFactory(valuesTypeChecker, keysTypeChecker, \"Map\", Immutable.Map.isMap);\n}\n\nfunction createOrderedMapOfTypeChecker(valuesTypeChecker, keysTypeChecker) {\n return createMapOfTypeCheckerFactory(valuesTypeChecker, keysTypeChecker, \"OrderedMap\", Immutable.OrderedMap.isOrderedMap);\n}\n\nfunction createSetOfTypeChecker(typeChecker) {\n return createIterableTypeChecker(typeChecker, \"Set\", Immutable.Set.isSet);\n}\n\nfunction createOrderedSetOfTypeChecker(typeChecker) {\n return createIterableTypeChecker(typeChecker, \"OrderedSet\", Immutable.OrderedSet.isOrderedSet);\n}\n\nfunction createStackOfTypeChecker(typeChecker) {\n return createIterableTypeChecker(typeChecker, \"Stack\", Immutable.Stack.isStack);\n}\n\nfunction createIterableOfTypeChecker(typeChecker) {\n return createIterableTypeChecker(typeChecker, \"Iterable\", Immutable.Iterable.isIterable);\n}\n\nfunction createRecordOfTypeChecker(recordKeys) {\n function validate(props, propName, componentName, location, propFullName) {\n for (var _len = arguments.length, rest = Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) {\n rest[_key - 5] = arguments[_key];\n }\n\n var propValue = props[propName];\n\n if (!(propValue instanceof Immutable.Record)) {\n var propType = getPropType(propValue);\n var locationName = location;\n return new Error(\"Invalid \" + locationName + \" `\" + propFullName + \"` of type `\" + propType + \"` \" + (\"supplied to `\" + componentName + \"`, expected an Immutable.js Record.\"));\n }\n\n for (var key in recordKeys) {\n var checker = recordKeys[key];\n\n if (!checker) {\n continue;\n }\n\n var mutablePropValue = propValue.toObject();\n var error = checker.apply(undefined, [mutablePropValue, key, componentName, location, \"\" + propFullName + \".\" + key].concat(rest));\n\n if (error) {\n return error;\n }\n }\n }\n\n return createChainableTypeChecker(validate);\n} // there is some irony in the fact that shapeTypes is a standard hash and not an immutable collection\n\n\nfunction createShapeTypeChecker(shapeTypes) {\n var immutableClassName = arguments[1] === undefined ? \"Iterable\" : arguments[1];\n var immutableClassTypeValidator = arguments[2] === undefined ? Immutable.Iterable.isIterable : arguments[2];\n\n function validate(props, propName, componentName, location, propFullName) {\n for (var _len = arguments.length, rest = Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) {\n rest[_key - 5] = arguments[_key];\n }\n\n var propValue = props[propName];\n\n if (!immutableClassTypeValidator(propValue)) {\n var propType = getPropType(propValue);\n var locationName = location;\n return new Error(\"Invalid \" + locationName + \" `\" + propFullName + \"` of type `\" + propType + \"` \" + (\"supplied to `\" + componentName + \"`, expected an Immutable.js \" + immutableClassName + \".\"));\n }\n\n var mutablePropValue = propValue.toObject();\n\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n\n if (!checker) {\n continue;\n }\n\n var error = checker.apply(undefined, [mutablePropValue, key, componentName, location, \"\" + propFullName + \".\" + key].concat(rest));\n\n if (error) {\n return error;\n }\n }\n }\n\n return createChainableTypeChecker(validate);\n}\n\nfunction createShapeChecker(shapeTypes) {\n return createShapeTypeChecker(shapeTypes);\n}\n\nfunction createMapContainsChecker(shapeTypes) {\n return createShapeTypeChecker(shapeTypes, \"Map\", Immutable.Map.isMap);\n}\n\nfunction createOrderedMapContainsChecker(shapeTypes) {\n return createShapeTypeChecker(shapeTypes, \"OrderedMap\", Immutable.OrderedMap.isOrderedMap);\n}\n\nmodule.exports = ImmutablePropTypes;","'use strict';\n\nexports.atob = self.atob.bind(self);\nexports.btoa = self.btoa.bind(self);","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n\n\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;","var $ = require('../internals/export');\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\n\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar $freeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n freeze: function freeze(it) {\n return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;\n }\n});\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","'use strict';\n\nvar GROUP_LEFT_TO_RIGHT, GROUP_RIGHT_TO_LEFT, EXPRESSION_LEFT_TO_RIGHT, EXPRESSION_RIGHT_TO_LEFT;\n/*\n * Character ranges of left-to-right characters.\n */\n\nGROUP_LEFT_TO_RIGHT = \"A-Za-z\\xC0-\\xD6\\xD8-\\xF6\" + \"\\xF8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF\\u200E\\u2C00-\\uFB1C\" + \"\\uFE00-\\uFE6F\\uFEFD-\\uFFFF\";\n/*\n * Character ranges of right-to-left characters.\n */\n\nGROUP_RIGHT_TO_LEFT = \"\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC\";\n/*\n * Expression to match a left-to-right string.\n *\n * Matches the start of a string, followed by zero or\n * more non-right-to-left characters, followed by a\n * left-to-right character.\n */\n\nEXPRESSION_LEFT_TO_RIGHT = new RegExp('^[^' + GROUP_RIGHT_TO_LEFT + ']*[' + GROUP_LEFT_TO_RIGHT + ']');\n/*\n * Expression to match a right-to-left string.\n *\n * Matches the start of a string, followed by zero or\n * more non-left-to-right characters, followed by a\n * right-to-left character.\n */\n\nEXPRESSION_RIGHT_TO_LEFT = new RegExp('^[^' + GROUP_LEFT_TO_RIGHT + ']*[' + GROUP_RIGHT_TO_LEFT + ']');\n/**\n * Detect the direction of text.\n *\n * @param {string} value - value to stringify and check.\n * @return {string} - One of `\"rtl\"`, `\"ltr\"`, or\n * `\"neutral\"`.\n */\n\nfunction direction(value) {\n value = value.toString();\n\n if (EXPRESSION_RIGHT_TO_LEFT.test(value)) {\n return 'rtl';\n }\n\n if (EXPRESSION_LEFT_TO_RIGHT.test(value)) {\n return 'ltr';\n }\n\n return 'neutral';\n}\n/*\n * Expose `direction`.\n */\n\n\nmodule.exports = direction;","function isBackward(selection) {\n var startNode = selection.anchorNode;\n var startOffset = selection.anchorOffset;\n var endNode = selection.focusNode;\n var endOffset = selection.focusOffset;\n var position = startNode.compareDocumentPosition(endNode);\n return !(position === 4 || position === 0 && startOffset < endOffset);\n}\n\nmodule.exports = isBackward;","var debounce = require('./debounce'),\n isObject = require('./isObject');\n/** Error message constants. */\n\n\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module['exports'] = factory() : typeof define === 'function' && define['amd'] ? define(factory()) : window['stylisRuleSheet'] = factory();\n})(function () {\n 'use strict';\n\n return function (insertRule) {\n var delimiter = '/*|*/';\n var needle = delimiter + '}';\n\n function toSheet(block) {\n if (block) try {\n insertRule(block + '}');\n } catch (e) {}\n }\n\n return function ruleSheet(context, content, selectors, parents, line, column, length, ns, depth, at) {\n switch (context) {\n // property\n case 1:\n // @import\n if (depth === 0 && content.charCodeAt(0) === 64) return insertRule(content + ';'), '';\n break;\n // selector\n\n case 2:\n if (ns === 0) return content + delimiter;\n break;\n // at-rule\n\n case 3:\n switch (ns) {\n // @font-face, @page\n case 102:\n case 112:\n return insertRule(selectors[0] + content), '';\n\n default:\n return content + (at === 0 ? delimiter : '');\n }\n\n case -2:\n content.split(needle).forEach(toSheet);\n }\n };\n };\n});","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\nexport default unitlessKeys;","/* eslint-disable */\n// murmurhash2 via https://github.com/garycourt/murmurhash-js/blob/master/murmurhash2_gc.js\nfunction murmurhash2_32_gc(str) {\n var l = str.length,\n h = l ^ l,\n i = 0,\n k;\n\n while (l >= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n k ^= k >>> 24;\n k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16) ^ k;\n l -= 4;\n ++i;\n }\n\n switch (l) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n }\n\n h ^= h >>> 13;\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n h ^= h >>> 15;\n return (h >>> 0).toString(36);\n}\n\nexport default murmurhash2_32_gc;","function stylis_min(W) {\n function M(d, c, e, h, a) {\n for (var m = 0, b = 0, v = 0, n = 0, q, g, x = 0, K = 0, k, u = k = q = 0, l = 0, r = 0, I = 0, t = 0, B = e.length, J = B - 1, y, f = '', p = '', F = '', G = '', C; l < B;) {\n g = e.charCodeAt(l);\n l === J && 0 !== b + n + v + m && (0 !== b && (g = 47 === b ? 10 : 47), n = v = m = 0, B++, J++);\n\n if (0 === b + n + v + m) {\n if (l === J && (0 < r && (f = f.replace(N, '')), 0 < f.trim().length)) {\n switch (g) {\n case 32:\n case 9:\n case 59:\n case 13:\n case 10:\n break;\n\n default:\n f += e.charAt(l);\n }\n\n g = 59;\n }\n\n switch (g) {\n case 123:\n f = f.trim();\n q = f.charCodeAt(0);\n k = 1;\n\n for (t = ++l; l < B;) {\n switch (g = e.charCodeAt(l)) {\n case 123:\n k++;\n break;\n\n case 125:\n k--;\n break;\n\n case 47:\n switch (g = e.charCodeAt(l + 1)) {\n case 42:\n case 47:\n a: {\n for (u = l + 1; u < J; ++u) {\n switch (e.charCodeAt(u)) {\n case 47:\n if (42 === g && 42 === e.charCodeAt(u - 1) && l + 2 !== u) {\n l = u + 1;\n break a;\n }\n\n break;\n\n case 10:\n if (47 === g) {\n l = u + 1;\n break a;\n }\n\n }\n }\n\n l = u;\n }\n\n }\n\n break;\n\n case 91:\n g++;\n\n case 40:\n g++;\n\n case 34:\n case 39:\n for (; l++ < J && e.charCodeAt(l) !== g;) {}\n\n }\n\n if (0 === k) break;\n l++;\n }\n\n k = e.substring(t, l);\n 0 === q && (q = (f = f.replace(ca, '').trim()).charCodeAt(0));\n\n switch (q) {\n case 64:\n 0 < r && (f = f.replace(N, ''));\n g = f.charCodeAt(1);\n\n switch (g) {\n case 100:\n case 109:\n case 115:\n case 45:\n r = c;\n break;\n\n default:\n r = O;\n }\n\n k = M(c, r, k, g, a + 1);\n t = k.length;\n 0 < A && (r = X(O, f, I), C = H(3, k, r, c, D, z, t, g, a, h), f = r.join(''), void 0 !== C && 0 === (t = (k = C.trim()).length) && (g = 0, k = ''));\n if (0 < t) switch (g) {\n case 115:\n f = f.replace(da, ea);\n\n case 100:\n case 109:\n case 45:\n k = f + '{' + k + '}';\n break;\n\n case 107:\n f = f.replace(fa, '$1 $2');\n k = f + '{' + k + '}';\n k = 1 === w || 2 === w && L('@' + k, 3) ? '@-webkit-' + k + '@' + k : '@' + k;\n break;\n\n default:\n k = f + k, 112 === h && (k = (p += k, ''));\n } else k = '';\n break;\n\n default:\n k = M(c, X(c, f, I), k, h, a + 1);\n }\n\n F += k;\n k = I = r = u = q = 0;\n f = '';\n g = e.charCodeAt(++l);\n break;\n\n case 125:\n case 59:\n f = (0 < r ? f.replace(N, '') : f).trim();\n if (1 < (t = f.length)) switch (0 === u && (q = f.charCodeAt(0), 45 === q || 96 < q && 123 > q) && (t = (f = f.replace(' ', ':')).length), 0 < A && void 0 !== (C = H(1, f, c, d, D, z, p.length, h, a, h)) && 0 === (t = (f = C.trim()).length) && (f = '\\x00\\x00'), q = f.charCodeAt(0), g = f.charCodeAt(1), q) {\n case 0:\n break;\n\n case 64:\n if (105 === g || 99 === g) {\n G += f + e.charAt(l);\n break;\n }\n\n default:\n 58 !== f.charCodeAt(t - 1) && (p += P(f, q, g, f.charCodeAt(2)));\n }\n I = r = u = q = 0;\n f = '';\n g = e.charCodeAt(++l);\n }\n }\n\n switch (g) {\n case 13:\n case 10:\n 47 === b ? b = 0 : 0 === 1 + q && 107 !== h && 0 < f.length && (r = 1, f += '\\x00');\n 0 < A * Y && H(0, f, c, d, D, z, p.length, h, a, h);\n z = 1;\n D++;\n break;\n\n case 59:\n case 125:\n if (0 === b + n + v + m) {\n z++;\n break;\n }\n\n default:\n z++;\n y = e.charAt(l);\n\n switch (g) {\n case 9:\n case 32:\n if (0 === n + m + b) switch (x) {\n case 44:\n case 58:\n case 9:\n case 32:\n y = '';\n break;\n\n default:\n 32 !== g && (y = ' ');\n }\n break;\n\n case 0:\n y = '\\\\0';\n break;\n\n case 12:\n y = '\\\\f';\n break;\n\n case 11:\n y = '\\\\v';\n break;\n\n case 38:\n 0 === n + b + m && (r = I = 1, y = '\\f' + y);\n break;\n\n case 108:\n if (0 === n + b + m + E && 0 < u) switch (l - u) {\n case 2:\n 112 === x && 58 === e.charCodeAt(l - 3) && (E = x);\n\n case 8:\n 111 === K && (E = K);\n }\n break;\n\n case 58:\n 0 === n + b + m && (u = l);\n break;\n\n case 44:\n 0 === b + v + n + m && (r = 1, y += '\\r');\n break;\n\n case 34:\n case 39:\n 0 === b && (n = n === g ? 0 : 0 === n ? g : n);\n break;\n\n case 91:\n 0 === n + b + v && m++;\n break;\n\n case 93:\n 0 === n + b + v && m--;\n break;\n\n case 41:\n 0 === n + b + m && v--;\n break;\n\n case 40:\n if (0 === n + b + m) {\n if (0 === q) switch (2 * x + 3 * K) {\n case 533:\n break;\n\n default:\n q = 1;\n }\n v++;\n }\n\n break;\n\n case 64:\n 0 === b + v + n + m + u + k && (k = 1);\n break;\n\n case 42:\n case 47:\n if (!(0 < n + m + v)) switch (b) {\n case 0:\n switch (2 * g + 3 * e.charCodeAt(l + 1)) {\n case 235:\n b = 47;\n break;\n\n case 220:\n t = l, b = 42;\n }\n\n break;\n\n case 42:\n 47 === g && 42 === x && t + 2 !== l && (33 === e.charCodeAt(t + 2) && (p += e.substring(t, l + 1)), y = '', b = 0);\n }\n }\n\n 0 === b && (f += y);\n }\n\n K = x;\n x = g;\n l++;\n }\n\n t = p.length;\n\n if (0 < t) {\n r = c;\n if (0 < A && (C = H(2, p, r, d, D, z, t, h, a, h), void 0 !== C && 0 === (p = C).length)) return G + p + F;\n p = r.join(',') + '{' + p + '}';\n\n if (0 !== w * E) {\n 2 !== w || L(p, 2) || (E = 0);\n\n switch (E) {\n case 111:\n p = p.replace(ha, ':-moz-$1') + p;\n break;\n\n case 112:\n p = p.replace(Q, '::-webkit-input-$1') + p.replace(Q, '::-moz-$1') + p.replace(Q, ':-ms-input-$1') + p;\n }\n\n E = 0;\n }\n }\n\n return G + p + F;\n }\n\n function X(d, c, e) {\n var h = c.trim().split(ia);\n c = h;\n var a = h.length,\n m = d.length;\n\n switch (m) {\n case 0:\n case 1:\n var b = 0;\n\n for (d = 0 === m ? '' : d[0] + ' '; b < a; ++b) {\n c[b] = Z(d, c[b], e, m).trim();\n }\n\n break;\n\n default:\n var v = b = 0;\n\n for (c = []; b < a; ++b) {\n for (var n = 0; n < m; ++n) {\n c[v++] = Z(d[n] + ' ', h[b], e, m).trim();\n }\n }\n\n }\n\n return c;\n }\n\n function Z(d, c, e) {\n var h = c.charCodeAt(0);\n 33 > h && (h = (c = c.trim()).charCodeAt(0));\n\n switch (h) {\n case 38:\n return c.replace(F, '$1' + d.trim());\n\n case 58:\n return d.trim() + c.replace(F, '$1' + d.trim());\n\n default:\n if (0 < 1 * e && 0 < c.indexOf('\\f')) return c.replace(F, (58 === d.charCodeAt(0) ? '' : '$1') + d.trim());\n }\n\n return d + c;\n }\n\n function P(d, c, e, h) {\n var a = d + ';',\n m = 2 * c + 3 * e + 4 * h;\n\n if (944 === m) {\n d = a.indexOf(':', 9) + 1;\n var b = a.substring(d, a.length - 1).trim();\n b = a.substring(0, d).trim() + b + ';';\n return 1 === w || 2 === w && L(b, 1) ? '-webkit-' + b + b : b;\n }\n\n if (0 === w || 2 === w && !L(a, 1)) return a;\n\n switch (m) {\n case 1015:\n return 97 === a.charCodeAt(10) ? '-webkit-' + a + a : a;\n\n case 951:\n return 116 === a.charCodeAt(3) ? '-webkit-' + a + a : a;\n\n case 963:\n return 110 === a.charCodeAt(5) ? '-webkit-' + a + a : a;\n\n case 1009:\n if (100 !== a.charCodeAt(4)) break;\n\n case 969:\n case 942:\n return '-webkit-' + a + a;\n\n case 978:\n return '-webkit-' + a + '-moz-' + a + a;\n\n case 1019:\n case 983:\n return '-webkit-' + a + '-moz-' + a + '-ms-' + a + a;\n\n case 883:\n if (45 === a.charCodeAt(8)) return '-webkit-' + a + a;\n if (0 < a.indexOf('image-set(', 11)) return a.replace(ja, '$1-webkit-$2') + a;\n break;\n\n case 932:\n if (45 === a.charCodeAt(4)) switch (a.charCodeAt(5)) {\n case 103:\n return '-webkit-box-' + a.replace('-grow', '') + '-webkit-' + a + '-ms-' + a.replace('grow', 'positive') + a;\n\n case 115:\n return '-webkit-' + a + '-ms-' + a.replace('shrink', 'negative') + a;\n\n case 98:\n return '-webkit-' + a + '-ms-' + a.replace('basis', 'preferred-size') + a;\n }\n return '-webkit-' + a + '-ms-' + a + a;\n\n case 964:\n return '-webkit-' + a + '-ms-flex-' + a + a;\n\n case 1023:\n if (99 !== a.charCodeAt(8)) break;\n b = a.substring(a.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify');\n return '-webkit-box-pack' + b + '-webkit-' + a + '-ms-flex-pack' + b + a;\n\n case 1005:\n return ka.test(a) ? a.replace(aa, ':-webkit-') + a.replace(aa, ':-moz-') + a : a;\n\n case 1e3:\n b = a.substring(13).trim();\n c = b.indexOf('-') + 1;\n\n switch (b.charCodeAt(0) + b.charCodeAt(c)) {\n case 226:\n b = a.replace(G, 'tb');\n break;\n\n case 232:\n b = a.replace(G, 'tb-rl');\n break;\n\n case 220:\n b = a.replace(G, 'lr');\n break;\n\n default:\n return a;\n }\n\n return '-webkit-' + a + '-ms-' + b + a;\n\n case 1017:\n if (-1 === a.indexOf('sticky', 9)) break;\n\n case 975:\n c = (a = d).length - 10;\n b = (33 === a.charCodeAt(c) ? a.substring(0, c) : a).substring(d.indexOf(':', 7) + 1).trim();\n\n switch (m = b.charCodeAt(0) + (b.charCodeAt(7) | 0)) {\n case 203:\n if (111 > b.charCodeAt(8)) break;\n\n case 115:\n a = a.replace(b, '-webkit-' + b) + ';' + a;\n break;\n\n case 207:\n case 102:\n a = a.replace(b, '-webkit-' + (102 < m ? 'inline-' : '') + 'box') + ';' + a.replace(b, '-webkit-' + b) + ';' + a.replace(b, '-ms-' + b + 'box') + ';' + a;\n }\n\n return a + ';';\n\n case 938:\n if (45 === a.charCodeAt(5)) switch (a.charCodeAt(6)) {\n case 105:\n return b = a.replace('-items', ''), '-webkit-' + a + '-webkit-box-' + b + '-ms-flex-' + b + a;\n\n case 115:\n return '-webkit-' + a + '-ms-flex-item-' + a.replace(ba, '') + a;\n\n default:\n return '-webkit-' + a + '-ms-flex-line-pack' + a.replace('align-content', '').replace(ba, '') + a;\n }\n break;\n\n case 973:\n case 989:\n if (45 !== a.charCodeAt(3) || 122 === a.charCodeAt(4)) break;\n\n case 931:\n case 953:\n if (!0 === la.test(d)) return 115 === (b = d.substring(d.indexOf(':') + 1)).charCodeAt(0) ? P(d.replace('stretch', 'fill-available'), c, e, h).replace(':fill-available', ':stretch') : a.replace(b, '-webkit-' + b) + a.replace(b, '-moz-' + b.replace('fill-', '')) + a;\n break;\n\n case 962:\n if (a = '-webkit-' + a + (102 === a.charCodeAt(5) ? '-ms-' + a : '') + a, 211 === e + h && 105 === a.charCodeAt(13) && 0 < a.indexOf('transform', 10)) return a.substring(0, a.indexOf(';', 27) + 1).replace(ma, '$1-webkit-$2') + a;\n }\n\n return a;\n }\n\n function L(d, c) {\n var e = d.indexOf(1 === c ? ':' : '{'),\n h = d.substring(0, 3 !== c ? e : 10);\n e = d.substring(e + 1, d.length - 1);\n return R(2 !== c ? h : h.replace(na, '$1'), e, c);\n }\n\n function ea(d, c) {\n var e = P(c, c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2));\n return e !== c + ';' ? e.replace(oa, ' or ($1)').substring(4) : '(' + c + ')';\n }\n\n function H(d, c, e, h, a, m, b, v, n, q) {\n for (var g = 0, x = c, w; g < A; ++g) {\n switch (w = S[g].call(B, d, x, e, h, a, m, b, v, n, q)) {\n case void 0:\n case !1:\n case !0:\n case null:\n break;\n\n default:\n x = w;\n }\n }\n\n if (x !== c) return x;\n }\n\n function T(d) {\n switch (d) {\n case void 0:\n case null:\n A = S.length = 0;\n break;\n\n default:\n switch (d.constructor) {\n case Array:\n for (var c = 0, e = d.length; c < e; ++c) {\n T(d[c]);\n }\n\n break;\n\n case Function:\n S[A++] = d;\n break;\n\n case Boolean:\n Y = !!d | 0;\n }\n\n }\n\n return T;\n }\n\n function U(d) {\n d = d.prefix;\n void 0 !== d && (R = null, d ? 'function' !== typeof d ? w = 1 : (w = 2, R = d) : w = 0);\n return U;\n }\n\n function B(d, c) {\n var e = d;\n 33 > e.charCodeAt(0) && (e = e.trim());\n V = e;\n e = [V];\n\n if (0 < A) {\n var h = H(-1, c, e, e, D, z, 0, 0, 0, 0);\n void 0 !== h && 'string' === typeof h && (c = h);\n }\n\n var a = M(O, e, c, 0, 0);\n 0 < A && (h = H(-2, a, e, e, D, z, a.length, 0, 0, 0), void 0 !== h && (a = h));\n V = '';\n E = 0;\n z = D = 1;\n return a;\n }\n\n var ca = /^\\0+/g,\n N = /[\\0\\r\\f]/g,\n aa = /: */g,\n ka = /zoo|gra/,\n ma = /([,: ])(transform)/g,\n ia = /,\\r+?/g,\n F = /([\\t\\r\\n ])*\\f?&/g,\n fa = /@(k\\w+)\\s*(\\S*)\\s*/,\n Q = /::(place)/g,\n ha = /:(read-only)/g,\n G = /[svh]\\w+-[tblr]{2}/,\n da = /\\(\\s*(.*)\\s*\\)/g,\n oa = /([\\s\\S]*?);/g,\n ba = /-self|flex-/g,\n na = /[^]*?(:[rp][el]a[\\w-]+)[^]*/,\n la = /stretch|:\\s*\\w+\\-(?:conte|avail)/,\n ja = /([^-])(image-set\\()/,\n z = 1,\n D = 1,\n E = 0,\n w = 1,\n O = [],\n S = [],\n A = 0,\n R = null,\n Y = 0,\n V = '';\n B.use = T;\n B.set = U;\n void 0 !== W && U(W);\n return B;\n}\n\nexport default stylis_min;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport memoize from '@emotion/memoize';\nimport unitless from '@emotion/unitless';\nimport hashString from '@emotion/hash';\nimport Stylis from '@emotion/stylis';\nimport stylisRuleSheet from 'stylis-rule-sheet';\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar processStyleName = memoize(function (styleName) {\n return styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n if (value == null || typeof value === 'boolean') {\n return '';\n }\n\n if (unitless[key] !== 1 && key.charCodeAt(1) !== 45 && // custom properties\n !isNaN(value) && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(attr|calc|counters?|url)\\(/;\n var contentValues = ['normal', 'none', 'counter', 'open-quote', 'close-quote', 'no-open-quote', 'no-close-quote', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n console.error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n return oldProcessStyleValue(key, value);\n };\n}\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (_typeof(arg)) {\n case 'boolean':\n break;\n\n case 'function':\n if (process.env.NODE_ENV !== 'production') {\n console.error('Passing functions to cx is deprecated and will be removed in the next major version of Emotion.\\n' + 'Please call the function before passing it to cx.');\n }\n\n toAdd = classnames([arg()]);\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nvar isBrowser = typeof document !== 'undefined';\n/*\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n- 'polyfills' on server side\n\n// usage\n\nimport StyleSheet from 'glamor/lib/sheet'\nlet styleSheet = new StyleSheet()\n\nstyleSheet.inject()\n- 'injects' the stylesheet into the page (or into memory if on server)\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\n\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction makeStyleTag(opts) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', opts.key || '');\n\n if (opts.nonce !== undefined) {\n tag.setAttribute('nonce', opts.nonce);\n }\n\n tag.appendChild(document.createTextNode('')) // $FlowFixMe\n ;\n (opts.container !== undefined ? opts.container : document.head).appendChild(tag);\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n function StyleSheet(options) {\n this.isSpeedy = process.env.NODE_ENV === 'production'; // the big drawback here is that the css won't be editable in devtools\n\n this.tags = [];\n this.ctr = 0;\n this.opts = options;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.inject = function inject() {\n if (this.injected) {\n throw new Error('already injected!');\n }\n\n this.tags[0] = makeStyleTag(this.opts);\n this.injected = true;\n };\n\n _proto.speedy = function speedy(bool) {\n if (this.ctr !== 0) {\n // cannot change speedy mode after inserting any rule to sheet. Either call speedy(${bool}) earlier in your app, or call flush() before speedy(${bool})\n throw new Error(\"cannot change speedy now\");\n }\n\n this.isSpeedy = !!bool;\n };\n\n _proto.insert = function insert(rule, sourceMap) {\n // this is the ultrafast version, works across browsers\n if (this.isSpeedy) {\n var tag = this.tags[this.tags.length - 1];\n var sheet = sheetForTag(tag);\n\n try {\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('illegal rule', rule); // eslint-disable-line no-console\n }\n }\n } else {\n var _tag = makeStyleTag(this.opts);\n\n this.tags.push(_tag);\n\n _tag.appendChild(document.createTextNode(rule + (sourceMap || '')));\n }\n\n this.ctr++;\n\n if (this.ctr % 65000 === 0) {\n this.tags.push(makeStyleTag(this.opts));\n }\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0; // todo - look for remnants in document.styleSheets\n\n this.injected = false;\n };\n\n return StyleSheet;\n}();\n\nfunction createEmotion(context, options) {\n if (context.__SECRET_EMOTION__ !== undefined) {\n return context.__SECRET_EMOTION__;\n }\n\n if (options === undefined) options = {};\n var key = options.key || 'css';\n\n if (process.env.NODE_ENV !== 'production') {\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var current;\n\n function insertRule(rule) {\n current += rule;\n\n if (isBrowser) {\n sheet.insert(rule, currentSourceMap);\n }\n }\n\n var insertionPlugin = stylisRuleSheet(insertRule);\n var stylisOptions;\n\n if (options.prefix !== undefined) {\n stylisOptions = {\n prefix: options.prefix\n };\n }\n\n var caches = {\n registered: {},\n inserted: {},\n nonce: options.nonce,\n key: key\n };\n var sheet = new StyleSheet(options);\n\n if (isBrowser) {\n // 🚀\n sheet.inject();\n }\n\n var stylis = new Stylis(stylisOptions);\n stylis.use(options.stylisPlugins)(insertionPlugin);\n var currentSourceMap = '';\n\n function handleInterpolation(interpolation, couldBeSelectorInterpolation) {\n if (interpolation == null) {\n return '';\n }\n\n switch (_typeof(interpolation)) {\n case 'boolean':\n return '';\n\n case 'function':\n if (interpolation.__emotion_styles !== undefined) {\n var selector = interpolation.toString();\n\n if (selector === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n }\n\n return selector;\n }\n\n if (this === undefined && process.env.NODE_ENV !== 'production') {\n console.error('Interpolating functions in css calls is deprecated and will be removed in the next major version of Emotion.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n return handleInterpolation.call(this, this === undefined ? interpolation() : // $FlowFixMe\n interpolation(this.mergedProps, this.context), couldBeSelectorInterpolation);\n\n case 'object':\n return createStringFromObject.call(this, interpolation);\n\n default:\n var cached = caches.registered[interpolation];\n return couldBeSelectorInterpolation === false && cached !== undefined ? cached : interpolation;\n }\n }\n\n var objectToStringCache = new WeakMap();\n\n function createStringFromObject(obj) {\n if (objectToStringCache.has(obj)) {\n // $FlowFixMe\n return objectToStringCache.get(obj);\n }\n\n var string = '';\n\n if (Array.isArray(obj)) {\n obj.forEach(function (interpolation) {\n string += handleInterpolation.call(this, interpolation, false);\n }, this);\n } else {\n Object.keys(obj).forEach(function (key) {\n if (_typeof(obj[key]) !== 'object') {\n if (caches.registered[obj[key]] !== undefined) {\n string += key + \"{\" + caches.registered[obj[key]] + \"}\";\n } else {\n string += processStyleName(key) + \":\" + processStyleValue(key, obj[key]) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n }\n\n if (Array.isArray(obj[key]) && typeof obj[key][0] === 'string' && caches.registered[obj[key][0]] === undefined) {\n obj[key].forEach(function (value) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value) + \";\";\n });\n } else {\n string += key + \"{\" + handleInterpolation.call(this, obj[key], false) + \"}\";\n }\n }\n }, this);\n }\n\n objectToStringCache.set(obj, string);\n return string;\n }\n\n var name;\n var stylesWithLabel;\n var labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*;/g;\n\n var createClassName = function createClassName(styles, identifierName) {\n return hashString(styles + identifierName) + identifierName;\n };\n\n if (process.env.NODE_ENV !== 'production') {\n var oldCreateClassName = createClassName;\n var sourceMappingUrlPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n\n createClassName = function createClassName(styles, identifierName) {\n return oldCreateClassName(styles.replace(sourceMappingUrlPattern, function (sourceMap) {\n currentSourceMap = sourceMap;\n return '';\n }), identifierName);\n };\n }\n\n var createStyles = function createStyles(strings) {\n var stringMode = true;\n var styles = '';\n var identifierName = '';\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation.call(this, strings, false);\n } else {\n styles += strings[0];\n }\n\n for (var _len = arguments.length, interpolations = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n interpolations[_key - 1] = arguments[_key];\n }\n\n interpolations.forEach(function (interpolation, i) {\n styles += handleInterpolation.call(this, interpolation, styles.charCodeAt(styles.length - 1) === 46 // .\n );\n\n if (stringMode === true && strings[i + 1] !== undefined) {\n styles += strings[i + 1];\n }\n }, this);\n stylesWithLabel = styles;\n styles = styles.replace(labelPattern, function (match, p1) {\n identifierName += \"-\" + p1;\n return '';\n });\n name = createClassName(styles, identifierName);\n return styles;\n };\n\n if (process.env.NODE_ENV !== 'production') {\n var oldStylis = stylis;\n\n stylis = function stylis(selector, styles) {\n oldStylis(selector, styles);\n currentSourceMap = '';\n };\n }\n\n function insert(scope, styles) {\n if (caches.inserted[name] === undefined) {\n current = '';\n stylis(scope, styles);\n caches.inserted[name] = current;\n }\n }\n\n var css = function css() {\n var styles = createStyles.apply(this, arguments);\n var selector = key + \"-\" + name;\n\n if (caches.registered[selector] === undefined) {\n caches.registered[selector] = stylesWithLabel;\n }\n\n insert(\".\" + selector, styles);\n return selector;\n };\n\n var keyframes = function keyframes() {\n var styles = createStyles.apply(this, arguments);\n var animation = \"animation-\" + name;\n insert('', \"@keyframes \" + animation + \"{\" + styles + \"}\");\n return animation;\n };\n\n var injectGlobal = function injectGlobal() {\n var styles = createStyles.apply(this, arguments);\n insert('', styles);\n };\n\n function getRegisteredStyles(registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (caches.registered[className] !== undefined) {\n registeredStyles.push(className);\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n }\n\n function merge(className, sourceMap) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles, sourceMap);\n }\n\n function cx() {\n for (var _len2 = arguments.length, classNames = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n classNames[_key2] = arguments[_key2];\n }\n\n return merge(classnames(classNames));\n }\n\n function hydrateSingleId(id) {\n caches.inserted[id] = true;\n }\n\n function hydrate(ids) {\n ids.forEach(hydrateSingleId);\n }\n\n function flush() {\n if (isBrowser) {\n sheet.flush();\n sheet.inject();\n }\n\n caches.inserted = {};\n caches.registered = {};\n }\n\n if (isBrowser) {\n var chunks = document.querySelectorAll(\"[data-emotion-\" + key + \"]\");\n Array.prototype.forEach.call(chunks, function (node) {\n // $FlowFixMe\n sheet.tags[0].parentNode.insertBefore(node, sheet.tags[0]); // $FlowFixMe\n\n node.getAttribute(\"data-emotion-\" + key).split(' ').forEach(hydrateSingleId);\n });\n }\n\n var emotion = {\n flush: flush,\n hydrate: hydrate,\n cx: cx,\n merge: merge,\n getRegisteredStyles: getRegisteredStyles,\n injectGlobal: injectGlobal,\n keyframes: keyframes,\n css: css,\n sheet: sheet,\n caches: caches\n };\n context.__SECRET_EMOTION__ = emotion;\n return emotion;\n}\n\nexport default createEmotion;","/*!\n * isobject \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nmodule.exports = function isObject(val) {\n return val != null && _typeof(val) === 'object' && Array.isArray(val) === false;\n};","var castPath = require('./_castPath'),\n last = require('./last'),\n parent = require('./_parent'),\n toKey = require('./_toKey');\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n\n\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;","var baseGet = require('./_baseGet'),\n baseSlice = require('./_baseSlice');\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n\n\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;","var isPlainObject = require('./isPlainObject');\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n\n\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;","var baseFlatten = require('./_baseFlatten');\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n\n\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n\n\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n\n return result;\n}\n\nmodule.exports = baseFlatten;","var _Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n/** Built-in value references. */\n\n\nvar spreadableSymbol = _Symbol ? _Symbol.isConcatSpreadable : undefined;\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;","var apply = require('./_apply');\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\n\nvar nativeMax = Math.max;\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? func.length - 1 : start, 0);\n return function () {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n\n index = -1;\n var otherArgs = Array(start + 1);\n\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0:\n return func.call(thisArg);\n\n case 1:\n return func.call(thisArg, args[0]);\n\n case 2:\n return func.call(thisArg, args[0], args[1]);\n\n case 3:\n return func.call(thisArg, args[0], args[1], args[2]);\n }\n\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n\n\nvar setToString = shortOut(baseSetToString);\nmodule.exports = setToString;","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n\n\nvar baseSetToString = !defineProperty ? identity : function (func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\nmodule.exports = baseSetToString;","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function () {\n return value;\n };\n}\n\nmodule.exports = constant;","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeNow = Date.now;\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n return function () {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n lastCalled = stamp;\n\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;","var basePickBy = require('./_basePickBy'),\n hasIn = require('./hasIn');\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n\n\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function (value, path) {\n return hasIn(object, path);\n });\n}\n\nmodule.exports = basePick;","var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n\n\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n\n return result;\n}\n\nmodule.exports = basePickBy;","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n\n\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n\n path = castPath(path, object);\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n\n if (newValue === undefined) {\n newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {};\n }\n }\n\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n\n return object;\n}\n\nmodule.exports = baseSet;","\"use strict\";\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n createDebug.debug = createDebug;\n createDebug.default = createDebug;\n createDebug.coerce = coerce;\n createDebug.disable = disable;\n createDebug.enable = enable;\n createDebug.enabled = enabled;\n createDebug.humanize = require('ms');\n Object.keys(env).forEach(function (key) {\n createDebug[key] = env[key];\n });\n /**\n * Active `debug` instances.\n */\n\n createDebug.instances = [];\n /**\n * The currently active debug mode names, and names to skip.\n */\n\n createDebug.names = [];\n createDebug.skips = [];\n /**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\n createDebug.formatters = {};\n /**\n * Selects a color for a debug namespace\n * @param {String} namespace The namespace string for the for the debug instance to be colored\n * @return {Number|String} An ANSI color code for the given namespace\n * @api private\n */\n\n function selectColor(namespace) {\n var hash = 0;\n\n for (var i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n }\n\n createDebug.selectColor = selectColor;\n /**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\n function createDebug(namespace) {\n var prevTime;\n\n function debug() {\n // Disabled?\n if (!debug.enabled) {\n return;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var self = debug; // Set `diff` timestamp\n\n var curr = Number(new Date());\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n args[0] = createDebug.coerce(args[0]);\n\n if (typeof args[0] !== 'string') {\n // Anything else let's inspect with %O\n args.unshift('%O');\n } // Apply any `formatters` transformations\n\n\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n // If we encounter an escaped % then don't increase the array index\n if (match === '%%') {\n return match;\n }\n\n index++;\n var formatter = createDebug.formatters[format];\n\n if (typeof formatter === 'function') {\n var val = args[index];\n match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format`\n\n args.splice(index, 1);\n index--;\n }\n\n return match;\n }); // Apply env-specific formatting (colors, etc.)\n\n createDebug.formatArgs.call(self, args);\n var logFn = self.log || createDebug.log;\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = createDebug.enabled(namespace);\n debug.useColors = createDebug.useColors();\n debug.color = selectColor(namespace);\n debug.destroy = destroy;\n debug.extend = extend; // Debug.formatArgs = formatArgs;\n // debug.rawLog = rawLog;\n // env-specific initialization logic for debug instances\n\n if (typeof createDebug.init === 'function') {\n createDebug.init(debug);\n }\n\n createDebug.instances.push(debug);\n return debug;\n }\n\n function destroy() {\n var index = createDebug.instances.indexOf(this);\n\n if (index !== -1) {\n createDebug.instances.splice(index, 1);\n return true;\n }\n\n return false;\n }\n\n function extend(namespace, delimiter) {\n return createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n }\n /**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\n\n function enable(namespaces) {\n createDebug.save(namespaces);\n createDebug.names = [];\n createDebug.skips = [];\n var i;\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (i = 0; i < len; i++) {\n if (!split[i]) {\n // ignore empty strings\n continue;\n }\n\n namespaces = split[i].replace(/\\*/g, '.*?');\n\n if (namespaces[0] === '-') {\n createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n createDebug.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n\n for (i = 0; i < createDebug.instances.length; i++) {\n var instance = createDebug.instances[i];\n instance.enabled = createDebug.enabled(instance.namespace);\n }\n }\n /**\n * Disable debug output.\n *\n * @api public\n */\n\n\n function disable() {\n createDebug.enable('');\n }\n /**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\n\n function enabled(name) {\n if (name[name.length - 1] === '*') {\n return true;\n }\n\n var i;\n var len;\n\n for (i = 0, len = createDebug.skips.length; i < len; i++) {\n if (createDebug.skips[i].test(name)) {\n return false;\n }\n }\n\n for (i = 0, len = createDebug.names.length; i < len; i++) {\n if (createDebug.names[i].test(name)) {\n return true;\n }\n }\n\n return false;\n }\n /**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\n\n function coerce(val) {\n if (val instanceof Error) {\n return val.stack || val.message;\n }\n\n return val;\n }\n\n createDebug.enable(createDebug.load());\n return createDebug;\n}\n\nmodule.exports = setup;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * Helpers.\n */\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n\n var type = _typeof(val);\n\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n\n throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));\n};\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\n\nfunction parse(str) {\n str = String(str);\n\n if (str.length > 100) {\n return;\n }\n\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);\n\n if (!match) {\n return;\n }\n\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n\n default:\n return undefined;\n }\n}\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n\n return ms + 'ms';\n}\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n\n return ms + ' ms';\n}\n/**\n * Pluralization helper.\n */\n\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}","'use strict';\nvar $ = require('../internals/export');\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n toJSON: function toJSON() {\n return URL.prototype.toString.call(this);\n }\n});\n","\"use strict\";\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n createDebug.debug = createDebug;\n createDebug.default = createDebug;\n createDebug.coerce = coerce;\n createDebug.disable = disable;\n createDebug.enable = enable;\n createDebug.enabled = enabled;\n createDebug.humanize = require('ms');\n Object.keys(env).forEach(function (key) {\n createDebug[key] = env[key];\n });\n /**\n * Active `debug` instances.\n */\n\n createDebug.instances = [];\n /**\n * The currently active debug mode names, and names to skip.\n */\n\n createDebug.names = [];\n createDebug.skips = [];\n /**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\n createDebug.formatters = {};\n /**\n * Selects a color for a debug namespace\n * @param {String} namespace The namespace string for the for the debug instance to be colored\n * @return {Number|String} An ANSI color code for the given namespace\n * @api private\n */\n\n function selectColor(namespace) {\n var hash = 0;\n\n for (var i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n }\n\n createDebug.selectColor = selectColor;\n /**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\n function createDebug(namespace) {\n var prevTime;\n\n function debug() {\n // Disabled?\n if (!debug.enabled) {\n return;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var self = debug; // Set `diff` timestamp\n\n var curr = Number(new Date());\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n args[0] = createDebug.coerce(args[0]);\n\n if (typeof args[0] !== 'string') {\n // Anything else let's inspect with %O\n args.unshift('%O');\n } // Apply any `formatters` transformations\n\n\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n // If we encounter an escaped % then don't increase the array index\n if (match === '%%') {\n return match;\n }\n\n index++;\n var formatter = createDebug.formatters[format];\n\n if (typeof formatter === 'function') {\n var val = args[index];\n match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format`\n\n args.splice(index, 1);\n index--;\n }\n\n return match;\n }); // Apply env-specific formatting (colors, etc.)\n\n createDebug.formatArgs.call(self, args);\n var logFn = self.log || createDebug.log;\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = createDebug.enabled(namespace);\n debug.useColors = createDebug.useColors();\n debug.color = selectColor(namespace);\n debug.destroy = destroy;\n debug.extend = extend; // Debug.formatArgs = formatArgs;\n // debug.rawLog = rawLog;\n // env-specific initialization logic for debug instances\n\n if (typeof createDebug.init === 'function') {\n createDebug.init(debug);\n }\n\n createDebug.instances.push(debug);\n return debug;\n }\n\n function destroy() {\n var index = createDebug.instances.indexOf(this);\n\n if (index !== -1) {\n createDebug.instances.splice(index, 1);\n return true;\n }\n\n return false;\n }\n\n function extend(namespace, delimiter) {\n return createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n }\n /**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\n\n function enable(namespaces) {\n createDebug.save(namespaces);\n createDebug.names = [];\n createDebug.skips = [];\n var i;\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (i = 0; i < len; i++) {\n if (!split[i]) {\n // ignore empty strings\n continue;\n }\n\n namespaces = split[i].replace(/\\*/g, '.*?');\n\n if (namespaces[0] === '-') {\n createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n createDebug.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n\n for (i = 0; i < createDebug.instances.length; i++) {\n var instance = createDebug.instances[i];\n instance.enabled = createDebug.enabled(instance.namespace);\n }\n }\n /**\n * Disable debug output.\n *\n * @api public\n */\n\n\n function disable() {\n createDebug.enable('');\n }\n /**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\n\n function enabled(name) {\n if (name[name.length - 1] === '*') {\n return true;\n }\n\n var i;\n var len;\n\n for (i = 0, len = createDebug.skips.length; i < len; i++) {\n if (createDebug.skips[i].test(name)) {\n return false;\n }\n }\n\n for (i = 0, len = createDebug.names.length; i < len; i++) {\n if (createDebug.names[i].test(name)) {\n return true;\n }\n }\n\n return false;\n }\n /**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\n\n function coerce(val) {\n if (val instanceof Error) {\n return val.stack || val.message;\n }\n\n return val;\n }\n\n createDebug.enable(createDebug.load());\n return createDebug;\n}\n\nmodule.exports = setup;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * Helpers.\n */\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n\n var type = _typeof(val);\n\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n\n throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));\n};\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\n\nfunction parse(str) {\n str = String(str);\n\n if (str.length > 100) {\n return;\n }\n\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);\n\n if (!match) {\n return;\n }\n\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n\n default:\n return undefined;\n }\n}\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n\n return ms + 'ms';\n}\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n\n return ms + ' ms';\n}\n/**\n * Pluralization helper.\n */\n\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}","/**\n * Module exports.\n */\nmodule.exports = getDocument; // defined by w3c\n\nvar DOCUMENT_NODE = 9;\n/**\n * Returns `true` if `w` is a Document object, or `false` otherwise.\n *\n * @param {?} d - Document object, maybe\n * @return {Boolean}\n * @private\n */\n\nfunction isDocument(d) {\n return d && d.nodeType === DOCUMENT_NODE;\n}\n/**\n * Returns the `document` object associated with the given `node`, which may be\n * a DOM element, the Window object, a Selection, a Range. Basically any DOM\n * object that references the Document in some way, this function will find it.\n *\n * @param {Mixed} node - DOM node, selection, or range in which to find the `document` object\n * @return {Document} the `document` object associated with `node`\n * @public\n */\n\n\nfunction getDocument(node) {\n if (isDocument(node)) {\n return node;\n } else if (isDocument(node.ownerDocument)) {\n return node.ownerDocument;\n } else if (isDocument(node.document)) {\n return node.document;\n } else if (node.parentNode) {\n return getDocument(node.parentNode); // Range support\n } else if (node.commonAncestorContainer) {\n return getDocument(node.commonAncestorContainer);\n } else if (node.startContainer) {\n return getDocument(node.startContainer); // Selection support\n } else if (node.anchorNode) {\n return getDocument(node.anchorNode);\n }\n}","// this is a browser-only module. There is a non-browser equivalent in the same\n// directory. This is done using a `package.json` browser field.\n// old-IE fallback logic: http://stackoverflow.com/a/10260692\nmodule.exports = !!document.attachEvent && window !== document.parentWindow;","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n/** Error message constants. */\n\n\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n wait = toNumber(wait) || 0;\n\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time; // Start the timer for the trailing edge.\n\n timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.\n\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = now();\n\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n } // Restart the timer.\n\n\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n\n return result;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;","var root = require('./_root');\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n\n\nvar now = function now() {\n return root.Date.now();\n};\n\nmodule.exports = now;","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n/** Used as references for various `Number` constants. */\n\n\nvar NAN = 0 / 0;\n/** Used to detect bad signed hexadecimal string values. */\n\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n/** Used to detect binary string values. */\n\nvar reIsBinary = /^0b[01]+$/i;\n/** Used to detect octal string values. */\n\nvar reIsOctal = /^0o[0-7]+$/i;\n/** Built-in method references without a dependency on `root`. */\n\nvar freeParseInt = parseInt;\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n\n if (isSymbol(value)) {\n return NAN;\n }\n\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? other + '' : other;\n }\n\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n}\n\nmodule.exports = toNumber;","var trimmedEndIndex = require('./_trimmedEndIndex');\n/** Used to match leading whitespace. */\n\n\nvar reTrimStart = /^\\s+/;\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n\nfunction baseTrim(string) {\n return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string;\n}\n\nmodule.exports = baseTrim;","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n\n return index;\n}\n\nmodule.exports = trimmedEndIndex;","/**\n * Expose `isUrl`.\n */\nmodule.exports = isUrl;\n/**\n * RegExps.\n * A URL must match #1 and then at least one of #2/#3.\n * Use two levels of REs to avoid REDOS.\n */\n\nvar protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\nvar localhostDomainRE = /^localhost[\\:?\\d]*(?:[^\\:?\\d]\\S*)?$/;\nvar nonLocalhostDomainRE = /^[^\\s\\.]+\\.\\S{2,}$/;\n/**\n * Loosely validate a URL `string`.\n *\n * @param {String} string\n * @return {Boolean}\n */\n\nfunction isUrl(string) {\n if (typeof string !== 'string') {\n return false;\n }\n\n var match = string.match(protocolAndDomainRE);\n\n if (!match) {\n return false;\n }\n\n var everythingAfterProtocol = match[1];\n\n if (!everythingAfterProtocol) {\n return false;\n }\n\n if (localhostDomainRE.test(everythingAfterProtocol) || nonLocalhostDomainRE.test(everythingAfterProtocol)) {\n return true;\n }\n\n return false;\n}","var hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar defineProperty = require('../internals/object-define-property').f;\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar METADATA = uid('meta');\nvar id = 0;\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + ++id, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar meta = module.exports = {\n REQUIRED: false,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","/**\n * A `warning` helper, modeled after Facebook's and the `tiny-invariant` library.\n *\n * @param {Mixed} condition\n * @param {String} message\n */\nfunction warning(condition) {\n var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n if (condition) return;\n var isProduction = \"development\" === 'production';\n var log = console.warn || console.log; // eslint-disable-line no-console\n\n if (isProduction) {\n log('Warning');\n } else {\n log('Warning: ' + message);\n }\n}\n\nexport default warning;","function _typeof2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nimport isPlainObject from 'is-plain-object';\nimport { Map as Map$1, List, Record, Set, OrderedSet, is, Stack } from 'immutable';\nimport warning from 'slate-dev-warning';\nimport { reverse } from 'esrever';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport Debug from 'debug';\nimport direction from 'direction';\n/**\n * Mix in an `Interface` to a `Class`.\n *\n * @param {Class} Class\n * @param {Class} Interface\n */\n\nfunction mixin(Interface, Classes) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = Classes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var Class = _step.value;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = Object.getOwnPropertyNames(Interface)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var name = _step2.value;\n if (Class.hasOwnProperty(name)) continue;\n var desc = Object.getOwnPropertyDescriptor(Interface, name);\n Object.defineProperty(Class, name, desc);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = Object.getOwnPropertyNames(Interface.prototype)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var _name = _step3.value;\n if (Class.prototype.hasOwnProperty(_name)) continue;\n var desc = Object.getOwnPropertyDescriptor(Interface.prototype, _name);\n Object.defineProperty(Class.prototype, _name, desc);\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n/**\n * An auto-incrementing index for generating keys.\n *\n * @type {Number}\n */\n\n\nvar n = void 0;\n/**\n * The global key generating function.\n *\n * @type {Function}\n */\n\nvar generate = void 0;\n/**\n * Create a key, using a provided key if available.\n *\n * @param {String|Void} key\n * @return {String}\n */\n\nfunction create(key) {\n if (key == null) {\n return generate();\n }\n\n if (typeof key === 'string') {\n return key;\n }\n\n throw new Error('Keys must be strings, but you passed: ' + key);\n}\n/**\n * Set a different unique ID generating `function`.\n *\n * @param {Function} func\n */\n\n\nfunction setGenerator(func) {\n generate = func;\n}\n/**\n * Reset the key generating function to its initial state.\n */\n\n\nfunction resetGenerator() {\n n = 0;\n\n generate = function generate() {\n return '' + n++;\n };\n}\n/**\n * Set the initial state.\n */\n\n\nresetGenerator();\n/**\n * Export.\n *\n * @type {Object}\n */\n\nvar KeyUtils = {\n create: create,\n setGenerator: setGenerator,\n resetGenerator: resetGenerator\n};\n/**\n * Slate-specific model types.\n *\n * @type {Object}\n */\n\nvar MODEL_TYPES = {\n BLOCK: '@@__SLATE_BLOCK__@@',\n CHANGE: '@@__SLATE_CHANGE__@@',\n DECORATION: '@@__SLATE_DECORATION__@@',\n DOCUMENT: '@@__SLATE_DOCUMENT__@@',\n HISTORY: '@@__SLATE_HISTORY__@@',\n INLINE: '@@__SLATE_INLINE__@@',\n LEAF: '@@__SLATE_LEAF__@@',\n MARK: '@@__SLATE_MARK__@@',\n OPERATION: '@@__SLATE_OPERATION__@@',\n POINT: '@@__SLATE_POINT__@@',\n RANGE: '@@__SLATE_RANGE__@@',\n SCHEMA: '@@__SLATE_SCHEMA__@@',\n SELECTION: '@@__SLATE_SELECTION__@@',\n STACK: '@@__SLATE_STACK__@@',\n TEXT: '@@__SLATE_TEXT__@@',\n VALUE: '@@__SLATE_VALUE__@@'\n /**\n * Export type identification function\n *\n * @param {string} type\n * @param {any} any\n * @return {boolean}\n */\n\n};\n\nfunction isType(type, any) {\n return !!(any && any[MODEL_TYPES[type]]);\n}\n\nvar _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n};\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar defineProperty = function defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof2(superClass));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (_typeof2(call) === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\nvar toConsumableArray = function toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n/**\n * Data.\n *\n * This isn't an immutable record, it's just a thin wrapper around `Map` so that\n * we can allow for more convenient creation.\n *\n * @type {Object}\n */\n\n\nvar Data = function () {\n function Data() {\n classCallCheck(this, Data);\n }\n\n createClass(Data, null, [{\n key: 'create',\n\n /**\n * Create a new `Data` with `attrs`.\n *\n * @param {Object|Data|Map} attrs\n * @return {Data} data\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Map$1.isMap(attrs)) {\n return attrs;\n }\n\n if (isPlainObject(attrs)) {\n return Data.fromJSON(attrs);\n }\n\n throw new Error('`Data.create` only accepts objects or maps, but you passed it: ' + attrs);\n }\n /**\n * Create a `Data` from a JSON `object`.\n *\n * @param {Object} object\n * @return {Data}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n return new Map$1(object);\n }\n /**\n * Alias `fromJS`.\n */\n\n }]);\n return Data;\n}();\n/**\n * Export.\n *\n * @type {Object}\n */\n\n\nData.fromJS = Data.fromJSON;\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\nvar DEFAULTS = {\n data: new Map$1(),\n key: undefined,\n nodes: new List()\n /**\n * Document.\n *\n * @type {Document}\n */\n\n};\n\nvar Document = function (_Record) {\n inherits(Document, _Record);\n\n function Document() {\n classCallCheck(this, Document);\n return possibleConstructorReturn(this, (Document.__proto__ || Object.getPrototypeOf(Document)).apply(this, arguments));\n }\n\n createClass(Document, [{\n key: 'toJSON',\n\n /**\n * Return a JSON representation of the document.\n *\n * @param {Object} options\n * @return {Object}\n */\n value: function toJSON() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var object = {\n object: this.object,\n data: this.data.toJSON(),\n nodes: this.nodes.toArray().map(function (n) {\n return n.toJSON(options);\n })\n };\n\n if (options.preserveKeys) {\n object.key = this.key;\n }\n\n return object;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'document';\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Document` with `attrs`.\n *\n * @param {Object|Array|List|Text} attrs\n * @return {Document}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Document.isDocument(attrs)) {\n return attrs;\n }\n\n if (List.isList(attrs) || Array.isArray(attrs)) {\n attrs = {\n nodes: attrs\n };\n }\n\n if (isPlainObject(attrs)) {\n return Document.fromJSON(attrs);\n }\n\n throw new Error('`Document.create` only accepts objects, arrays, lists or documents, but you passed it: ' + attrs);\n }\n /**\n * Create a `Document` from a JSON `object`.\n *\n * @param {Object|Document} object\n * @return {Document}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n if (Document.isDocument(object)) {\n return object;\n }\n\n var _object$data = object.data,\n data = _object$data === undefined ? {} : _object$data,\n _object$key = object.key,\n key = _object$key === undefined ? KeyUtils.create() : _object$key,\n _object$nodes = object.nodes,\n nodes = _object$nodes === undefined ? [] : _object$nodes;\n var document = new Document({\n key: key,\n data: new Map$1(data),\n nodes: Node.createList(nodes)\n });\n return document;\n }\n /**\n * Check if `any` is a `Document`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }]);\n return Document;\n}(Record(DEFAULTS));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nDocument.isDocument = isType.bind(null, 'DOCUMENT');\nDocument.prototype[MODEL_TYPES.DOCUMENT] = true;\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\nvar DEFAULTS$1 = {\n data: new Map$1(),\n key: undefined,\n nodes: new List(),\n type: undefined\n /**\n * Inline.\n *\n * @type {Inline}\n */\n\n};\n\nvar Inline = function (_Record) {\n inherits(Inline, _Record);\n\n function Inline() {\n classCallCheck(this, Inline);\n return possibleConstructorReturn(this, (Inline.__proto__ || Object.getPrototypeOf(Inline)).apply(this, arguments));\n }\n\n createClass(Inline, [{\n key: 'toJSON',\n\n /**\n * Return a JSON representation of the inline.\n *\n * @param {Object} options\n * @return {Object}\n */\n value: function toJSON() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var object = {\n object: this.object,\n type: this.type,\n data: this.data.toJSON(),\n nodes: this.nodes.toArray().map(function (n) {\n return n.toJSON(options);\n })\n };\n\n if (options.preserveKeys) {\n object.key = this.key;\n }\n\n return object;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'inline';\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Inline` with `attrs`.\n *\n * @param {Object|String|Inline} attrs\n * @return {Inline}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Inline.isInline(attrs)) {\n return attrs;\n }\n\n if (typeof attrs == 'string') {\n attrs = {\n type: attrs\n };\n }\n\n if (isPlainObject(attrs)) {\n return Inline.fromJSON(attrs);\n }\n\n throw new Error('`Inline.create` only accepts objects, strings or inlines, but you passed it: ' + attrs);\n }\n /**\n * Create a list of `Inlines` from an array.\n *\n * @param {Array|List} elements\n * @return {List}\n */\n\n }, {\n key: 'createList',\n value: function createList() {\n var elements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (List.isList(elements) || Array.isArray(elements)) {\n var list = new List(elements.map(Inline.create));\n return list;\n }\n\n throw new Error('`Inline.createList` only accepts arrays or lists, but you passed it: ' + elements);\n }\n /**\n * Create a `Inline` from a JSON `object`.\n *\n * @param {Object|Inline} object\n * @return {Inline}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n if (Inline.isInline(object)) {\n return object;\n }\n\n var _object$data = object.data,\n data = _object$data === undefined ? {} : _object$data,\n _object$key = object.key,\n key = _object$key === undefined ? KeyUtils.create() : _object$key,\n _object$nodes = object.nodes,\n nodes = _object$nodes === undefined ? [] : _object$nodes,\n type = object.type;\n\n if (typeof type != 'string') {\n throw new Error('`Inline.fromJS` requires a `type` string.');\n }\n\n var inline = new Inline({\n key: key,\n type: type,\n data: new Map$1(data),\n nodes: Node.createList(nodes)\n });\n return inline;\n }\n /**\n * Check if `any` is a `Inline`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }, {\n key: 'isInlineList',\n\n /**\n * Check if `any` is a list of inlines.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n value: function isInlineList(any) {\n return List.isList(any) && any.every(function (item) {\n return Inline.isInline(item);\n });\n }\n }]);\n return Inline;\n}(Record(DEFAULTS$1));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nInline.isInline = isType.bind(null, 'INLINE');\nInline.prototype[MODEL_TYPES.INLINE] = true;\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\nvar DEFAULTS$2 = {\n data: new Map$1(),\n type: undefined\n /**\n * Mark.\n *\n * @type {Mark}\n */\n\n};\n\nvar Mark = function (_Record) {\n inherits(Mark, _Record);\n\n function Mark() {\n classCallCheck(this, Mark);\n return possibleConstructorReturn(this, (Mark.__proto__ || Object.getPrototypeOf(Mark)).apply(this, arguments));\n }\n\n createClass(Mark, [{\n key: 'toJSON',\n\n /**\n * Return a JSON representation of the mark.\n *\n * @return {Object}\n */\n value: function toJSON() {\n var object = {\n object: this.object,\n type: this.type,\n data: this.data.toJSON()\n };\n return object;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n */\n get: function get$$1() {\n return 'mark';\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Mark` with `attrs`.\n *\n * @param {Object|Mark} attrs\n * @return {Mark}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Mark.isMark(attrs)) {\n return attrs;\n }\n\n if (typeof attrs == 'string') {\n attrs = {\n type: attrs\n };\n }\n\n if (isPlainObject(attrs)) {\n return Mark.fromJSON(attrs);\n }\n\n throw new Error('`Mark.create` only accepts objects, strings or marks, but you passed it: ' + attrs);\n }\n /**\n * Create a set of marks.\n *\n * @param {Array} elements\n * @return {Set}\n */\n\n }, {\n key: 'createSet',\n value: function createSet(elements) {\n if (Set.isSet(elements) || Array.isArray(elements)) {\n var marks = new Set(elements.map(Mark.create));\n return marks;\n }\n\n if (elements == null) {\n return Set();\n }\n\n throw new Error('`Mark.createSet` only accepts sets, arrays or null, but you passed it: ' + elements);\n }\n /**\n * Create a dictionary of settable mark properties from `attrs`.\n *\n * @param {Object|String|Mark} attrs\n * @return {Object}\n */\n\n }, {\n key: 'createProperties',\n value: function createProperties() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Mark.isMark(attrs)) {\n return {\n data: attrs.data,\n type: attrs.type\n };\n }\n\n if (typeof attrs == 'string') {\n return {\n type: attrs\n };\n }\n\n if (isPlainObject(attrs)) {\n var props = {};\n if ('type' in attrs) props.type = attrs.type;\n if ('data' in attrs) props.data = Data.create(attrs.data);\n return props;\n }\n\n throw new Error('`Mark.createProperties` only accepts objects, strings or marks, but you passed it: ' + attrs);\n }\n /**\n * Create a `Mark` from a JSON `object`.\n *\n * @param {Object} object\n * @return {Mark}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n var _object$data = object.data,\n data = _object$data === undefined ? {} : _object$data,\n type = object.type;\n\n if (typeof type != 'string') {\n throw new Error('`Mark.fromJS` requires a `type` string.');\n }\n\n var mark = new Mark({\n type: type,\n data: new Map$1(data)\n });\n return mark;\n }\n /**\n * Check if `any` is a `Mark`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }, {\n key: 'isMarkSet',\n\n /**\n * Check if `any` is a set of marks.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n value: function isMarkSet(any) {\n return Set.isSet(any) && any.every(function (item) {\n return Mark.isMark(item);\n });\n }\n }]);\n return Mark;\n}(Record(DEFAULTS$2));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nMark.isMark = isType.bind(null, 'MARK');\nMark.prototype[MODEL_TYPES.MARK] = true;\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\nvar DEFAULTS$3 = {\n marks: Set(),\n text: ''\n /**\n * Leaf.\n *\n * @type {Leaf}\n */\n\n};\n\nvar Leaf = function (_Record) {\n inherits(Leaf, _Record);\n\n function Leaf() {\n classCallCheck(this, Leaf);\n return possibleConstructorReturn(this, (Leaf.__proto__ || Object.getPrototypeOf(Leaf)).apply(this, arguments));\n }\n\n createClass(Leaf, [{\n key: 'updateMark',\n\n /**\n * Update a `mark` at leaf, replace with newMark\n *\n * @param {Mark} mark\n * @param {Mark} newMark\n * @returns {Leaf}\n */\n value: function updateMark(mark, newMark) {\n var marks = this.marks;\n if (newMark.equals(mark)) return this;\n if (!marks.has(mark)) return this;\n var newMarks = marks.withMutations(function (collection) {\n collection.remove(mark).add(newMark);\n });\n return this.set('marks', newMarks);\n }\n /**\n * Add a `mark` to the leaf.\n *\n * @param {Mark} mark\n * @returns {Text}\n */\n\n }, {\n key: 'addMark',\n value: function addMark(mark) {\n var marks = this.marks;\n return this.set('marks', marks.add(mark));\n }\n /**\n * Add a `set` of marks to the leaf.\n *\n * @param {Set} set\n * @returns {Text}\n */\n\n }, {\n key: 'addMarks',\n value: function addMarks(set$$1) {\n var marks = this.marks;\n return this.set('marks', marks.union(set$$1));\n }\n /**\n * Remove a `mark` from the leaf.\n *\n * @param {Mark} mark\n * @returns {Text}\n */\n\n }, {\n key: 'removeMark',\n value: function removeMark(mark) {\n var marks = this.marks;\n return this.set('marks', marks.remove(mark));\n }\n /**\n * Return a JSON representation of the leaf.\n *\n * @return {Object}\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var object = {\n object: this.object,\n text: this.text,\n marks: this.marks.toArray().map(function (m) {\n return m.toJSON();\n })\n };\n return object;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'leaf';\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Leaf` with `attrs`.\n *\n * @param {Object|Leaf} attrs\n * @return {Leaf}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Leaf.isLeaf(attrs)) {\n return attrs;\n }\n\n if (typeof attrs == 'string') {\n attrs = {\n text: attrs\n };\n }\n\n if (isPlainObject(attrs)) {\n return Leaf.fromJSON(attrs);\n }\n\n throw new Error('`Leaf.create` only accepts objects, strings or leaves, but you passed it: ' + attrs);\n }\n /**\n * Create a valid List of `Leaf` from `leaves`\n *\n * @param {List} leaves\n * @return {List}\n */\n\n }, {\n key: 'createLeaves',\n value: function createLeaves(leaves) {\n if (leaves.size <= 1) return leaves;\n var invalid = false; // TODO: we can make this faster with [List] and then flatten\n\n var result = List().withMutations(function (cache) {\n // Search from the leaves left end to find invalid node;\n leaves.findLast(function (leaf, index) {\n var firstLeaf = cache.first(); // If the first leaf of cache exist, check whether the first leaf is connectable with the current leaf\n\n if (firstLeaf) {\n // If marks equals, then the two leaves can be connected\n if (firstLeaf.marks.equals(leaf.marks)) {\n invalid = true;\n cache.set(0, firstLeaf.set('text', '' + leaf.text + firstLeaf.text));\n return;\n } // If the cached leaf is empty, drop the empty leaf with the upcoming leaf\n\n\n if (firstLeaf.text === '') {\n invalid = true;\n cache.set(0, leaf);\n return;\n } // If the current leaf is empty, drop the leaf\n\n\n if (leaf.text === '') {\n invalid = true;\n return;\n }\n }\n\n cache.unshift(leaf);\n });\n });\n if (!invalid) return leaves;\n return result;\n }\n /**\n * Split a list of leaves to two lists; if the leaves are valid leaves, the returned leaves are also valid\n * Corner Cases:\n * 1. if offset is smaller than 0, then return [List(), leaves]\n * 2. if offset is bigger than the text length, then return [leaves, List()]\n *\n * @param {List leaves\n * @return {Array>}\n */\n\n }, {\n key: 'splitLeaves',\n value: function splitLeaves(leaves, offset) {\n if (offset < 0) return [List(), leaves];\n\n if (leaves.size === 0) {\n return [List(), List()];\n }\n\n var endOffset = 0;\n var index = -1;\n var left = void 0,\n right = void 0;\n leaves.find(function (leaf) {\n index++;\n var startOffset = endOffset;\n var text = leaf.text;\n endOffset += text.length;\n if (endOffset < offset) return false;\n if (startOffset > offset) return false;\n var length = offset - startOffset;\n left = leaf.set('text', text.slice(0, length));\n right = leaf.set('text', text.slice(length));\n return true;\n });\n if (!left) return [leaves, List()];\n\n if (left.text === '') {\n if (index === 0) {\n return [List.of(left), leaves];\n }\n\n return [leaves.take(index), leaves.skip(index)];\n }\n\n if (right.text === '') {\n if (index === leaves.size - 1) {\n return [leaves, List.of(right)];\n }\n\n return [leaves.take(index + 1), leaves.skip(index + 1)];\n }\n\n return [leaves.take(index).push(left), leaves.skip(index + 1).unshift(right)];\n }\n /**\n * Create a `Leaf` list from `attrs`.\n *\n * @param {Array|List} attrs\n * @return {List}\n */\n\n }, {\n key: 'createList',\n value: function createList() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (List.isList(attrs) || Array.isArray(attrs)) {\n var list = new List(attrs.map(Leaf.create));\n return list;\n }\n\n throw new Error('`Leaf.createList` only accepts arrays or lists, but you passed it: ' + attrs);\n }\n /**\n * Create a `Leaf` from a JSON `object`.\n *\n * @param {Object} object\n * @return {Leaf}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n var _object$text = object.text,\n text = _object$text === undefined ? '' : _object$text,\n _object$marks = object.marks,\n marks = _object$marks === undefined ? [] : _object$marks;\n var leaf = new Leaf({\n text: text,\n marks: Set(marks.map(Mark.fromJSON))\n });\n return leaf;\n }\n /**\n * Check if `any` is a `Leaf`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }, {\n key: 'isLeafList',\n\n /**\n * Check if `any` is a list of leaves.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n value: function isLeafList(any) {\n return List.isList(any) && any.every(function (item) {\n return Leaf.isLeaf(item);\n });\n }\n }]);\n return Leaf;\n}(Record(DEFAULTS$3));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nLeaf.isLeaf = isType.bind(null, 'LEAF');\nLeaf.prototype[MODEL_TYPES.LEAF] = true;\n/**\n * GLOBAL: True if memoization should is enabled.\n *\n * @type {Boolean}\n */\n\nvar ENABLED = true;\n/**\n * GLOBAL: Changing this cache key will clear all previous cached results.\n *\n * @type {Number}\n */\n\nvar CACHE_KEY = 0;\n/**\n * The leaf node of a cache tree. Used to support variable argument length. A\n * unique object, so that native Maps will key it by reference.\n *\n * @type {Object}\n */\n\nvar LEAF = {};\n/**\n * A value to represent a memoized undefined value. Allows efficient value\n * retrieval using Map.get only.\n *\n * @type {Object}\n */\n\nvar UNDEFINED = {};\n/**\n * Default value for unset keys in native Maps\n *\n * @type {Undefined}\n */\n\nvar UNSET = undefined;\n/**\n * Memoize all of the `properties` on a `object`.\n *\n * @param {Object} object\n * @param {Array} properties\n * @return {Record}\n */\n\nfunction memoize(object, properties) {\n var _loop = function _loop(property) {\n var original = object[property];\n\n if (!original) {\n throw new Error(\"Object does not have a property named \\\"\" + property + \"\\\".\");\n }\n\n object[property] = function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n } // If memoization is disabled, call into the original method.\n\n\n if (!ENABLED) return original.apply(this, args); // If the cache key is different, previous caches must be cleared.\n\n if (CACHE_KEY !== this.__cache_key) {\n this.__cache_key = CACHE_KEY;\n this.__cache = new Map(); // eslint-disable-line no-undef,no-restricted-globals\n\n this.__cache_no_args = {};\n }\n\n if (!this.__cache) {\n this.__cache = new Map(); // eslint-disable-line no-undef,no-restricted-globals\n }\n\n if (!this.__cache_no_args) {\n this.__cache_no_args = {};\n }\n\n var takesArguments = args.length !== 0;\n var cachedValue = void 0;\n var keys = void 0;\n\n if (takesArguments) {\n keys = [property].concat(args);\n cachedValue = getIn(this.__cache, keys);\n } else {\n cachedValue = this.__cache_no_args[property];\n } // If we've got a result already, return it.\n\n\n if (cachedValue !== UNSET) {\n return cachedValue === UNDEFINED ? undefined : cachedValue;\n } // Otherwise calculate what it should be once and cache it.\n\n\n var value = original.apply(this, args);\n var v = value === undefined ? UNDEFINED : value;\n\n if (takesArguments) {\n this.__cache = setIn(this.__cache, keys, v);\n } else {\n this.__cache_no_args[property] = v;\n }\n\n return value;\n };\n };\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = properties[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var property = _step.value;\n\n _loop(property);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n/**\n * Get a value at a key path in a tree of Map.\n *\n * If not set, returns UNSET.\n * If the set value is undefined, returns UNDEFINED.\n *\n * @param {Map} map\n * @param {Array} keys\n * @return {Any|UNSET|UNDEFINED}\n */\n\n\nfunction getIn(map, keys) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = keys[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var key = _step2.value;\n map = map.get(key);\n if (map === UNSET) return UNSET;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return map.get(LEAF);\n}\n/**\n * Set a value at a key path in a tree of Map, creating Maps on the go.\n *\n * @param {Map} map\n * @param {Array} keys\n * @param {Any} value\n * @return {Map}\n */\n\n\nfunction setIn(map, keys, value) {\n var parent = map;\n var child = void 0;\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = keys[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var key = _step3.value;\n child = parent.get(key); // If the path was not created yet...\n\n if (child === UNSET) {\n child = new Map(); // eslint-disable-line no-undef,no-restricted-globals\n\n parent.set(key, child);\n }\n\n parent = child;\n } // The whole path has been created, so set the value to the bottom most map.\n\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n child.set(LEAF, value);\n return map;\n}\n/**\n * In DEV mode, clears the previously memoized values, globally.\n *\n * @return {Void}\n */\n\n\nfunction resetMemoization() {\n CACHE_KEY++;\n\n if (CACHE_KEY >= Number.MAX_SAFE_INTEGER) {\n CACHE_KEY = 0;\n }\n}\n/**\n * In DEV mode, enable or disable the use of memoize values, globally.\n *\n * @param {Boolean} enabled\n * @return {Void}\n */\n\n\nfunction useMemoization(enabled) {\n ENABLED = enabled;\n}\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\n\nvar DEFAULTS$4 = {\n leaves: List(),\n key: undefined\n /**\n * Text.\n *\n * @type {Text}\n */\n\n};\n\nvar Text = function (_Record) {\n inherits(Text, _Record);\n\n function Text() {\n classCallCheck(this, Text);\n return possibleConstructorReturn(this, (Text.__proto__ || Object.getPrototypeOf(Text)).apply(this, arguments));\n }\n\n createClass(Text, [{\n key: 'searchLeafAtOffset',\n\n /**\n * Find the 'first' leaf at offset; By 'first' the alorighthm prefers `endOffset === offset` than `startOffset === offset`\n * Corner Cases:\n * 1. if offset is negative, return the first leaf;\n * 2. if offset is larger than text length, the leaf is null, startOffset, endOffset and index is of the last leaf\n *\n * @param {number}\n * @returns {Object}\n * @property {number} startOffset\n * @property {number} endOffset\n * @property {number} index\n * @property {Leaf} leaf\n */\n value: function searchLeafAtOffset(offset) {\n var endOffset = 0;\n var startOffset = 0;\n var index = -1;\n var leaf = this.leaves.find(function (l) {\n index++;\n startOffset = endOffset;\n endOffset = startOffset + l.text.length;\n return endOffset >= offset;\n });\n return {\n leaf: leaf,\n endOffset: endOffset,\n index: index,\n startOffset: startOffset\n };\n }\n /**\n * Add a `mark` at `index` and `length`.\n *\n * @param {Number} index\n * @param {Number} length\n * @param {Mark} mark\n * @return {Text}\n */\n\n }, {\n key: 'addMark',\n value: function addMark(index, length, mark) {\n var marks = Set.of(mark);\n return this.addMarks(index, length, marks);\n }\n /**\n * Add a `set` of marks at `index` and `length`.\n * Corner Cases:\n * 1. If empty text, and if length === 0 and index === 0, will make sure the text contain an empty leaf with the given mark.\n *\n * @param {Number} index\n * @param {Number} length\n * @param {Set} set\n * @return {Text}\n */\n\n }, {\n key: 'addMarks',\n value: function addMarks(index, length, set$$1) {\n if (this.text === '' && length === 0 && index === 0) {\n var _leaves = this.leaves;\n\n var first = _leaves.first();\n\n if (!first) {\n return this.set('leaves', List.of(Leaf.fromJSON({\n text: '',\n marks: set$$1\n })));\n }\n\n var newFirst = first.addMarks(set$$1);\n if (newFirst === first) return this;\n return this.set('leaves', List.of(newFirst));\n }\n\n if (this.text === '') return this;\n if (length === 0) return this;\n if (index >= this.text.length) return this;\n\n var _Leaf$splitLeaves = Leaf.splitLeaves(this.leaves, index),\n _Leaf$splitLeaves2 = slicedToArray(_Leaf$splitLeaves, 2),\n before = _Leaf$splitLeaves2[0],\n bundle = _Leaf$splitLeaves2[1];\n\n var _Leaf$splitLeaves3 = Leaf.splitLeaves(bundle, length),\n _Leaf$splitLeaves4 = slicedToArray(_Leaf$splitLeaves3, 2),\n middle = _Leaf$splitLeaves4[0],\n after = _Leaf$splitLeaves4[1];\n\n var leaves = before.concat(middle.map(function (x) {\n return x.addMarks(set$$1);\n }), after);\n return this.setLeaves(leaves);\n }\n /**\n * Derive the leaves for a list of `decorations`.\n *\n * @param {Array|Void} decorations (optional)\n * @return {List}\n */\n\n }, {\n key: 'getLeaves',\n value: function getLeaves() {\n var _this2 = this;\n\n var decorations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var leaves = this.leaves;\n if (leaves.size === 0) return List.of(Leaf.create({}));\n if (!decorations || decorations.length === 0) return leaves;\n if (this.text.length === 0) return leaves;\n var key = this.key;\n decorations.forEach(function (dec) {\n var start = dec.start,\n end = dec.end,\n mark = dec.mark;\n var hasStart = start.key == key;\n var hasEnd = end.key == key;\n\n if (hasStart && hasEnd) {\n var index = hasStart ? start.offset : 0;\n var length = hasEnd ? end.offset - index : _this2.text.length - index;\n if (length < 1) return;\n if (index >= _this2.text.length) return;\n\n if (index !== 0 || length < _this2.text.length) {\n var _Leaf$splitLeaves5 = Leaf.splitLeaves(leaves, index),\n _Leaf$splitLeaves6 = slicedToArray(_Leaf$splitLeaves5, 2),\n before = _Leaf$splitLeaves6[0],\n bundle = _Leaf$splitLeaves6[1];\n\n var _Leaf$splitLeaves7 = Leaf.splitLeaves(bundle, length),\n _Leaf$splitLeaves8 = slicedToArray(_Leaf$splitLeaves7, 2),\n middle = _Leaf$splitLeaves8[0],\n after = _Leaf$splitLeaves8[1];\n\n leaves = before.concat(middle.map(function (x) {\n return x.addMark(mark);\n }), after);\n return;\n }\n }\n\n leaves = leaves.map(function (x) {\n return x.addMark(mark);\n });\n });\n if (leaves === this.leaves) return leaves;\n return Leaf.createLeaves(leaves);\n }\n /**\n * Get all of the active marks on between two offsets\n * Corner Cases:\n * 1. if startOffset is equal or bigger than endOffset, then return Set();\n * 2. If no text is selected between start and end, then return Set()\n *\n * @return {Set}\n */\n\n }, {\n key: 'getActiveMarksBetweenOffsets',\n value: function getActiveMarksBetweenOffsets(startOffset, endOffset) {\n if (startOffset <= 0 && endOffset >= this.text.length) {\n return this.getActiveMarks();\n }\n\n if (startOffset >= endOffset) return Set(); // For empty text in a paragraph, use getActiveMarks;\n\n if (this.text === '') return this.getActiveMarks();\n var result = null;\n var leafEnd = 0;\n this.leaves.forEach(function (leaf) {\n var leafStart = leafEnd;\n leafEnd = leafStart + leaf.text.length;\n if (leafEnd <= startOffset) return;\n if (leafStart >= endOffset) return false;\n\n if (!result) {\n result = leaf.marks;\n return;\n }\n\n result = result.intersect(leaf.marks);\n if (result && result.size === 0) return false;\n return false;\n });\n return result || Set();\n }\n /**\n * Get all of the active marks on the text\n *\n * @return {Set}\n */\n\n }, {\n key: 'getActiveMarks',\n value: function getActiveMarks() {\n var _this3 = this;\n\n if (this.leaves.size === 0) return Set();\n var result = this.leaves.first().marks;\n if (result.size === 0) return result;\n return result.withMutations(function (x) {\n _this3.leaves.forEach(function (c) {\n x.intersect(c.marks);\n if (x.size === 0) return false;\n });\n });\n }\n /**\n * Get all of the marks on between two offsets\n * Corner Cases:\n * 1. if startOffset is equal or bigger than endOffset, then return Set();\n * 2. If no text is selected between start and end, then return Set()\n *\n * @return {OrderedSet}\n */\n\n }, {\n key: 'getMarksBetweenOffsets',\n value: function getMarksBetweenOffsets(startOffset, endOffset) {\n if (startOffset <= 0 && endOffset >= this.text.length) {\n return this.getMarks();\n }\n\n if (startOffset >= endOffset) return Set(); // For empty text in a paragraph, use getActiveMarks;\n\n if (this.text === '') return this.getActiveMarks();\n var result = null;\n var leafEnd = 0;\n this.leaves.forEach(function (leaf) {\n var leafStart = leafEnd;\n leafEnd = leafStart + leaf.text.length;\n if (leafEnd <= startOffset) return;\n if (leafStart >= endOffset) return false;\n\n if (!result) {\n result = leaf.marks;\n return;\n }\n\n result = result.union(leaf.marks);\n });\n return result || Set();\n }\n /**\n * Get all of the marks on the text.\n *\n * @return {OrderedSet}\n */\n\n }, {\n key: 'getMarks',\n value: function getMarks() {\n var array = this.getMarksAsArray();\n return new OrderedSet(array);\n }\n /**\n * Get all of the marks on the text as an array\n *\n * @return {Array}\n */\n\n }, {\n key: 'getMarksAsArray',\n value: function getMarksAsArray() {\n if (this.leaves.size === 0) return [];\n var first = this.leaves.first().marks;\n if (this.leaves.size === 1) return first.toArray();\n var result = [];\n this.leaves.forEach(function (leaf) {\n result.push(leaf.marks.toArray());\n });\n return Array.prototype.concat.apply(first.toArray(), result);\n }\n /**\n * Get the marks on the text at `index`.\n * Corner Cases:\n * 1. if no text is before the index, and index !== 0, then return Set()\n * 2. (for insert after split node or mark at range) if index === 0, and text === '', then return the leaf.marks\n * 3. if index === 0, text !== '', return Set()\n *\n *\n * @param {Number} index\n * @return {Set}\n */\n\n }, {\n key: 'getMarksAtIndex',\n value: function getMarksAtIndex(index) {\n var _searchLeafAtOffset = this.searchLeafAtOffset(index),\n leaf = _searchLeafAtOffset.leaf;\n\n if (!leaf) return Set();\n return leaf.marks;\n }\n /**\n * Insert `text` at `index`.\n *\n * @param {Numbder} offset\n * @param {String} text\n * @param {Set} marks (optional)\n * @return {Text}\n */\n\n }, {\n key: 'insertText',\n value: function insertText(offset, text, marks) {\n if (this.text === '') {\n return this.set('leaves', List.of(Leaf.create({\n text: text,\n marks: marks\n })));\n }\n\n if (text.length === 0) return this;\n if (!marks) marks = Set();\n\n var _searchLeafAtOffset2 = this.searchLeafAtOffset(offset),\n startOffset = _searchLeafAtOffset2.startOffset,\n leaf = _searchLeafAtOffset2.leaf,\n index = _searchLeafAtOffset2.index;\n\n var delta = offset - startOffset;\n var beforeText = leaf.text.slice(0, delta);\n var afterText = leaf.text.slice(delta);\n var leaves = this.leaves;\n\n if (leaf.marks.equals(marks)) {\n return this.set('leaves', leaves.set(index, leaf.set('text', beforeText + text + afterText)));\n }\n\n var nextLeaves = leaves.splice(index, 1, leaf.set('text', beforeText), Leaf.create({\n text: text,\n marks: marks\n }), leaf.set('text', afterText));\n return this.setLeaves(nextLeaves);\n }\n /**\n * Remove a `mark` at `index` and `length`.\n *\n * @param {Number} index\n * @param {Number} length\n * @param {Mark} mark\n * @return {Text}\n */\n\n }, {\n key: 'removeMark',\n value: function removeMark(index, length, mark) {\n if (this.text === '' && index === 0 && length === 0) {\n var first = this.leaves.first();\n if (!first) return this;\n var newFirst = first.removeMark(mark);\n if (newFirst === first) return this;\n return this.set('leaves', List.of(newFirst));\n }\n\n if (length <= 0) return this;\n if (index >= this.text.length) return this;\n\n var _Leaf$splitLeaves9 = Leaf.splitLeaves(this.leaves, index),\n _Leaf$splitLeaves10 = slicedToArray(_Leaf$splitLeaves9, 2),\n before = _Leaf$splitLeaves10[0],\n bundle = _Leaf$splitLeaves10[1];\n\n var _Leaf$splitLeaves11 = Leaf.splitLeaves(bundle, length),\n _Leaf$splitLeaves12 = slicedToArray(_Leaf$splitLeaves11, 2),\n middle = _Leaf$splitLeaves12[0],\n after = _Leaf$splitLeaves12[1];\n\n var leaves = before.concat(middle.map(function (x) {\n return x.removeMark(mark);\n }), after);\n return this.setLeaves(leaves);\n }\n /**\n * Remove text from the text node at `start` for `length`.\n *\n * @param {Number} start\n * @param {Number} length\n * @return {Text}\n */\n\n }, {\n key: 'removeText',\n value: function removeText(start, length) {\n if (length <= 0) return this;\n if (start >= this.text.length) return this; // PERF: For simple backspace, we can operate directly on the leaf\n\n if (length === 1) {\n var _searchLeafAtOffset3 = this.searchLeafAtOffset(start + 1),\n leaf = _searchLeafAtOffset3.leaf,\n index = _searchLeafAtOffset3.index,\n startOffset = _searchLeafAtOffset3.startOffset;\n\n var offset = start - startOffset;\n\n if (leaf) {\n if (leaf.text.length === 1) {\n var _leaves2 = this.leaves.remove(index);\n\n return this.setLeaves(_leaves2);\n }\n\n var beforeText = leaf.text.slice(0, offset);\n var afterText = leaf.text.slice(offset + length);\n var text = beforeText + afterText;\n\n if (text.length > 0) {\n return this.set('leaves', this.leaves.set(index, leaf.set('text', text)));\n }\n }\n }\n\n var _Leaf$splitLeaves13 = Leaf.splitLeaves(this.leaves, start),\n _Leaf$splitLeaves14 = slicedToArray(_Leaf$splitLeaves13, 2),\n before = _Leaf$splitLeaves14[0],\n bundle = _Leaf$splitLeaves14[1];\n\n var after = Leaf.splitLeaves(bundle, length)[1];\n var leaves = Leaf.createLeaves(before.concat(after));\n\n if (leaves.size === 1) {\n var first = leaves.first();\n\n if (first.text === '') {\n return this.set('leaves', List.of(first.set('marks', this.getActiveMarks())));\n }\n }\n\n return this.set('leaves', leaves);\n }\n /**\n * Return a JSON representation of the text.\n *\n * @param {Object} options\n * @return {Object}\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var object = {\n object: this.object,\n leaves: this.getLeaves().toArray().map(function (r) {\n return r.toJSON();\n })\n };\n\n if (options.preserveKeys) {\n object.key = this.key;\n }\n\n return object;\n }\n /**\n * Update a `mark` at `index` and `length` with `properties`.\n *\n * @param {Number} index\n * @param {Number} length\n * @param {Mark} mark\n * @param {Object} properties\n * @return {Text}\n */\n\n }, {\n key: 'updateMark',\n value: function updateMark(index, length, mark, properties) {\n var newMark = mark.merge(properties);\n\n if (this.text === '' && length === 0 && index === 0) {\n var _leaves3 = this.leaves;\n\n var first = _leaves3.first();\n\n if (!first) return this;\n var newFirst = first.updateMark(mark, newMark);\n if (newFirst === first) return this;\n return this.set('leaves', List.of(newFirst));\n }\n\n if (length <= 0) return this;\n if (index >= this.text.length) return this;\n\n var _Leaf$splitLeaves15 = Leaf.splitLeaves(this.leaves, index),\n _Leaf$splitLeaves16 = slicedToArray(_Leaf$splitLeaves15, 2),\n before = _Leaf$splitLeaves16[0],\n bundle = _Leaf$splitLeaves16[1];\n\n var _Leaf$splitLeaves17 = Leaf.splitLeaves(bundle, length),\n _Leaf$splitLeaves18 = slicedToArray(_Leaf$splitLeaves17, 2),\n middle = _Leaf$splitLeaves18[0],\n after = _Leaf$splitLeaves18[1];\n\n var leaves = before.concat(middle.map(function (x) {\n return x.updateMark(mark, newMark);\n }), after);\n return this.setLeaves(leaves);\n }\n /**\n * Split this text and return two different texts\n * @param {Number} position\n * @returns {Array}\n */\n\n }, {\n key: 'splitText',\n value: function splitText(offset) {\n var splitted = Leaf.splitLeaves(this.leaves, offset);\n var one = this.set('leaves', splitted[0]);\n var two = this.set('leaves', splitted[1]).regenerateKey();\n return [one, two];\n }\n /**\n * merge this text and another text at the end\n * @param {Text} text\n * @returns {Text}\n */\n\n }, {\n key: 'mergeText',\n value: function mergeText(text) {\n var leaves = this.leaves.concat(text.leaves);\n return this.setLeaves(leaves);\n }\n /**\n * Set leaves with normalized `leaves`\n *\n * @param {Schema} schema\n * @returns {Text|Null}\n */\n\n }, {\n key: 'setLeaves',\n value: function setLeaves(leaves) {\n var result = Leaf.createLeaves(leaves);\n\n if (result.size === 1) {\n var first = result.first();\n\n if (!first.marks || first.marks.size === 0) {\n if (first.text === '') {\n return this.set('leaves', List());\n }\n }\n }\n\n return this.set('leaves', Leaf.createLeaves(leaves));\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'text';\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Text` with `attrs`.\n *\n * @param {Object|Array|List|String|Text} attrs\n * @return {Text}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n if (Text.isText(attrs)) {\n return attrs;\n }\n\n if (typeof attrs == 'string') {\n attrs = {\n leaves: [{\n text: attrs\n }]\n };\n }\n\n if (isPlainObject(attrs)) {\n if (attrs.text) {\n var _attrs = attrs,\n text = _attrs.text,\n marks = _attrs.marks,\n key = _attrs.key;\n attrs = {\n key: key,\n leaves: [{\n text: text,\n marks: marks\n }]\n };\n }\n\n return Text.fromJSON(attrs);\n }\n\n throw new Error('`Text.create` only accepts objects, arrays, strings or texts, but you passed it: ' + attrs);\n }\n /**\n * Create a list of `Texts` from `elements`.\n *\n * @param {Array|List} elements\n * @return {List}\n */\n\n }, {\n key: 'createList',\n value: function createList() {\n var elements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (List.isList(elements) || Array.isArray(elements)) {\n var list = new List(elements.map(Text.create));\n return list;\n }\n\n throw new Error('`Text.createList` only accepts arrays or lists, but you passed it: ' + elements);\n }\n /**\n * Create a `Text` from a JSON `object`.\n *\n * @param {Object|Text} object\n * @return {Text}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n if (Text.isText(object)) {\n return object;\n }\n\n var _object$key = object.key,\n key = _object$key === undefined ? KeyUtils.create() : _object$key;\n var leaves = object.leaves;\n\n if (!leaves) {\n if (object.ranges) {\n warning(false, 'As of slate@0.27.0, the `ranges` property of Slate objects has been renamed to `leaves`.');\n leaves = object.ranges;\n } else {\n leaves = List();\n }\n }\n\n if (Array.isArray(leaves)) {\n leaves = List(leaves.map(function (x) {\n return Leaf.create(x);\n }));\n } else if (List.isList(leaves)) {\n leaves = leaves.map(function (x) {\n return Leaf.create(x);\n });\n } else {\n throw new Error('leaves must be either Array or Immutable.List');\n }\n\n var node = new Text({\n leaves: Leaf.createLeaves(leaves),\n key: key\n });\n return node;\n }\n /**\n * Check if `any` is a `Text`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }, {\n key: 'isTextList',\n\n /**\n * Check if `any` is a list of texts.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n value: function isTextList(any) {\n return List.isList(any) && any.every(function (item) {\n return Text.isText(item);\n });\n }\n }]);\n return Text;\n}(Record(DEFAULTS$4));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nText.isText = isType.bind(null, 'TEXT');\nText.prototype[MODEL_TYPES.TEXT] = true;\n/**\n * Memoize read methods.\n */\n\nmemoize(Text.prototype, ['getActiveMarks', 'getMarks', 'getMarksAsArray']);\n/**\n * A pseudo-model that is used for its static methods only.\n *\n * @type {Node}\n */\n\nvar Node = function () {\n function Node() {\n classCallCheck(this, Node);\n }\n\n createClass(Node, null, [{\n key: 'create',\n\n /**\n * Create a new `Node` with `attrs`.\n *\n * @param {Object|Node} attrs\n * @return {Node}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Node.isNode(attrs)) {\n return attrs;\n }\n\n if (isPlainObject(attrs)) {\n var object = attrs.object;\n\n if (!object && attrs.kind) {\n warning(false, 'As of slate@0.32.0, the `kind` property of Slate objects has been renamed to `object`.');\n object = attrs.kind;\n }\n\n switch (object) {\n case 'block':\n return Block.create(attrs);\n\n case 'document':\n return Document.create(attrs);\n\n case 'inline':\n return Inline.create(attrs);\n\n case 'text':\n return Text.create(attrs);\n\n default:\n {\n throw new Error('`Node.create` requires a `object` string.');\n }\n }\n }\n\n throw new Error('`Node.create` only accepts objects or nodes but you passed it: ' + attrs);\n }\n /**\n * Create a list of `Nodes` from an array.\n *\n * @param {Array} elements\n * @return {List}\n */\n\n }, {\n key: 'createList',\n value: function createList() {\n var elements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (List.isList(elements) || Array.isArray(elements)) {\n var list = List(elements.map(Node.create));\n return list;\n }\n\n throw new Error('`Node.createList` only accepts lists or arrays, but you passed it: ' + elements);\n }\n /**\n * Create a dictionary of settable node properties from `attrs`.\n *\n * @param {Object|String|Node} attrs\n * @return {Object}\n */\n\n }, {\n key: 'createProperties',\n value: function createProperties() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Block.isBlock(attrs) || Inline.isInline(attrs)) {\n return {\n data: attrs.data,\n type: attrs.type\n };\n }\n\n if (typeof attrs == 'string') {\n return {\n type: attrs\n };\n }\n\n if (isPlainObject(attrs)) {\n var props = {};\n if ('type' in attrs) props.type = attrs.type;\n if ('data' in attrs) props.data = Data.create(attrs.data);\n return props;\n }\n\n throw new Error('`Node.createProperties` only accepts objects, strings, blocks or inlines, but you passed it: ' + attrs);\n }\n /**\n * Create a `Node` from a JSON `value`.\n *\n * @param {Object} value\n * @return {Node}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(value) {\n var object = value.object;\n\n if (!object && value.kind) {\n warning(false, 'As of slate@0.32.0, the `kind` property of Slate objects has been renamed to `object`.');\n object = value.kind;\n }\n\n switch (object) {\n case 'block':\n return Block.fromJSON(value);\n\n case 'document':\n return Document.fromJSON(value);\n\n case 'inline':\n return Inline.fromJSON(value);\n\n case 'text':\n return Text.fromJSON(value);\n\n default:\n {\n throw new Error('`Node.fromJSON` requires an `object` of either \\'block\\', \\'document\\', \\'inline\\' or \\'text\\', but you passed: ' + value);\n }\n }\n }\n /**\n * Check if `any` is a `Node`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }, {\n key: 'isNode',\n value: function isNode(any) {\n return !!['BLOCK', 'DOCUMENT', 'INLINE', 'TEXT'].find(function (type) {\n return isType(type, any);\n });\n }\n /**\n * Check if `any` is a list of nodes.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }, {\n key: 'isNodeList',\n value: function isNodeList(any) {\n return List.isList(any) && any.every(function (item) {\n return Node.isNode(item);\n });\n }\n }]);\n return Node;\n}();\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\n\nvar DEFAULTS$5 = {\n data: new Map$1(),\n key: undefined,\n nodes: new List(),\n type: undefined\n /**\n * Block.\n *\n * @type {Block}\n */\n\n};\n\nvar Block = function (_Record) {\n inherits(Block, _Record);\n\n function Block() {\n classCallCheck(this, Block);\n return possibleConstructorReturn(this, (Block.__proto__ || Object.getPrototypeOf(Block)).apply(this, arguments));\n }\n\n createClass(Block, [{\n key: 'toJSON',\n\n /**\n * Return a JSON representation of the block.\n *\n * @param {Object} options\n * @return {Object}\n */\n value: function toJSON() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var object = {\n object: this.object,\n type: this.type,\n data: this.data.toJSON(),\n nodes: this.nodes.toArray().map(function (n) {\n return n.toJSON(options);\n })\n };\n\n if (options.preserveKeys) {\n object.key = this.key;\n }\n\n return object;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'block';\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Block` from `attrs`.\n *\n * @param {Object|String|Block} attrs\n * @return {Block}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Block.isBlock(attrs)) {\n return attrs;\n }\n\n if (typeof attrs == 'string') {\n attrs = {\n type: attrs\n };\n }\n\n if (isPlainObject(attrs)) {\n return Block.fromJSON(attrs);\n }\n\n throw new Error('`Block.create` only accepts objects, strings or blocks, but you passed it: ' + attrs);\n }\n /**\n * Create a list of `Blocks` from `attrs`.\n *\n * @param {Array|List} attrs\n * @return {List}\n */\n\n }, {\n key: 'createList',\n value: function createList() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (List.isList(attrs) || Array.isArray(attrs)) {\n var list = new List(attrs.map(Block.create));\n return list;\n }\n\n throw new Error('`Block.createList` only accepts arrays or lists, but you passed it: ' + attrs);\n }\n /**\n * Create a `Block` from a JSON `object`.\n *\n * @param {Object|Block} object\n * @return {Block}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n if (Block.isBlock(object)) {\n return object;\n }\n\n var _object$data = object.data,\n data = _object$data === undefined ? {} : _object$data,\n _object$key = object.key,\n key = _object$key === undefined ? KeyUtils.create() : _object$key,\n _object$nodes = object.nodes,\n nodes = _object$nodes === undefined ? [] : _object$nodes,\n type = object.type;\n\n if (typeof type != 'string') {\n throw new Error('`Block.fromJSON` requires a `type` string.');\n }\n\n var block = new Block({\n key: key,\n type: type,\n data: Map$1(data),\n nodes: Node.createList(nodes)\n });\n return block;\n }\n /**\n * Check if `any` is a `Block`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }, {\n key: 'isBlockList',\n\n /**\n * Check if `any` is a block list.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n value: function isBlockList(any) {\n return List.isList(any) && any.every(function (item) {\n return Block.isBlock(item);\n });\n }\n }]);\n return Block;\n}(Record(DEFAULTS$5));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nBlock.isBlock = isType.bind(null, 'BLOCK');\nBlock.prototype[MODEL_TYPES.BLOCK] = true;\n/**\n * Changes.\n *\n * @type {Object}\n */\n\nvar Changes = {};\n/**\n * Mix in the changes that pass through to their at-range equivalents because\n * they don't have any effect on the selection.\n */\n\nvar PROXY_TRANSFORMS = ['deleteBackward', 'deleteCharBackward', 'deleteLineBackward', 'deleteWordBackward', 'deleteForward', 'deleteCharForward', 'deleteWordForward', 'deleteLineForward', 'setBlocks', 'setInlines', 'splitInline', 'unwrapBlock', 'unwrapInline', 'wrapBlock', 'wrapInline'];\nPROXY_TRANSFORMS.forEach(function (method) {\n Changes[method] = function (change) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var value = change.value;\n var selection = value.selection;\n var methodAtRange = method + 'AtRange';\n change[methodAtRange].apply(change, [selection].concat(args));\n\n if (method.match(/Backward$/)) {\n change.moveToStart();\n } else if (method.match(/Forward$/)) {\n change.moveToEnd();\n }\n };\n});\n/**\n * Add a `mark` to the characters in the current selection.\n *\n * @param {Change} change\n * @param {Mark} mark\n */\n\nChanges.addMark = function (change, mark) {\n mark = Mark.create(mark);\n var value = change.value;\n var document = value.document,\n selection = value.selection;\n\n if (selection.isExpanded) {\n change.addMarkAtRange(selection, mark);\n } else if (selection.marks) {\n var marks = selection.marks.add(mark);\n var sel = selection.set('marks', marks);\n change.select(sel);\n } else {\n var _marks = document.getActiveMarksAtRange(selection).add(mark);\n\n var _sel = selection.set('marks', _marks);\n\n change.select(_sel);\n }\n};\n/**\n * Add a list of `marks` to the characters in the current selection.\n *\n * @param {Change} change\n * @param {Mark} mark\n */\n\n\nChanges.addMarks = function (change, marks) {\n marks.forEach(function (mark) {\n return change.addMark(mark);\n });\n};\n/**\n * Delete at the current selection.\n *\n * @param {Change} change\n */\n\n\nChanges.delete = function (change) {\n var value = change.value;\n var selection = value.selection;\n change.deleteAtRange(selection); // Ensure that the selection is collapsed to the start, because in certain\n // cases when deleting across inline nodes, when splitting the inline node the\n // end point of the selection will end up after the split point.\n\n change.moveToStart();\n};\n/**\n * Insert a `block` at the current selection.\n *\n * @param {Change} change\n * @param {String|Object|Block} block\n */\n\n\nChanges.insertBlock = function (change, block) {\n block = Block.create(block);\n var value = change.value;\n var selection = value.selection;\n change.insertBlockAtRange(selection, block); // If the node was successfully inserted, update the selection.\n\n var node = change.value.document.getNode(block.key);\n if (node) change.moveToEndOfNode(node);\n};\n/**\n * Insert a `fragment` at the current selection.\n *\n * @param {Change} change\n * @param {Document} fragment\n */\n\n\nChanges.insertFragment = function (change, fragment) {\n if (!fragment.nodes.size) return;\n var value = change.value;\n var _value = value,\n document = _value.document,\n selection = _value.selection;\n var start = selection.start,\n end = selection.end;\n var _value2 = value,\n startText = _value2.startText,\n endText = _value2.endText,\n startInline = _value2.startInline;\n var lastText = fragment.getLastText();\n var lastInline = fragment.getClosestInline(lastText.key);\n var firstChild = fragment.nodes.first();\n var lastChild = fragment.nodes.last();\n var keys = document.getTexts().map(function (text) {\n return text.key;\n });\n var isAppending = !startInline || start.isAtStartOfNode(startText) || end.isAtStartOfNode(startText) || start.isAtEndOfNode(endText) || end.isAtEndOfNode(endText);\n var isInserting = firstChild.hasBlockChildren() || lastChild.hasBlockChildren();\n change.insertFragmentAtRange(selection, fragment);\n value = change.value;\n document = value.document;\n var newTexts = document.getTexts().filter(function (n) {\n return !keys.includes(n.key);\n });\n var newText = isAppending ? newTexts.last() : newTexts.takeLast(2).first();\n\n if (newText && (lastInline || isInserting)) {\n change.select(selection.moveToEndOfNode(newText));\n } else if (newText) {\n change.select(selection.moveToStartOfNode(newText).moveForward(lastText.text.length));\n } else {\n change.select(selection.moveToStart().moveForward(lastText.text.length));\n }\n};\n/**\n * Insert an `inline` at the current selection.\n *\n * @param {Change} change\n * @param {String|Object|Inline} inline\n */\n\n\nChanges.insertInline = function (change, inline) {\n inline = Inline.create(inline);\n var value = change.value;\n var selection = value.selection;\n change.insertInlineAtRange(selection, inline); // If the node was successfully inserted, update the selection.\n\n var node = change.value.document.getNode(inline.key);\n if (node) change.moveToEndOfNode(node);\n};\n/**\n * Insert a string of `text` with optional `marks` at the current selection.\n *\n * @param {Change} change\n * @param {String} text\n * @param {Set} marks (optional)\n */\n\n\nChanges.insertText = function (change, text, marks) {\n var value = change.value;\n var document = value.document,\n selection = value.selection;\n marks = marks || selection.marks || document.getInsertMarksAtRange(selection);\n change.insertTextAtRange(selection, text, marks); // If the text was successfully inserted, and the selection had marks on it,\n // unset the selection's marks.\n\n if (selection.marks && document != change.value.document) {\n change.select({\n marks: null\n });\n }\n};\n/**\n * Remove a `mark` from the characters in the current selection.\n *\n * @param {Change} change\n * @param {Mark} mark\n */\n\n\nChanges.removeMark = function (change, mark) {\n mark = Mark.create(mark);\n var value = change.value;\n var document = value.document,\n selection = value.selection;\n\n if (selection.isExpanded) {\n change.removeMarkAtRange(selection, mark);\n } else if (selection.marks) {\n var marks = selection.marks.remove(mark);\n var sel = selection.set('marks', marks);\n change.select(sel);\n } else {\n var _marks2 = document.getActiveMarksAtRange(selection).remove(mark);\n\n var _sel2 = selection.set('marks', _marks2);\n\n change.select(_sel2);\n }\n};\n/**\n * Replace an `oldMark` with a `newMark` in the characters in the current selection.\n *\n * @param {Change} change\n * @param {Mark} oldMark\n * @param {Mark} newMark\n */\n\n\nChanges.replaceMark = function (change, oldMark, newMark) {\n change.removeMark(oldMark);\n change.addMark(newMark);\n};\n/**\n * Split the block node at the current selection, to optional `depth`.\n *\n * @param {Change} change\n * @param {Number} depth (optional)\n */\n\n\nChanges.splitBlock = function (change) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var value = change.value;\n var selection = value.selection,\n document = value.document;\n var marks = selection.marks || document.getInsertMarksAtRange(selection);\n change.splitBlockAtRange(selection, depth).moveToEnd();\n\n if (marks && marks.size !== 0) {\n change.select({\n marks: marks\n });\n }\n};\n/**\n * Add or remove a `mark` from the characters in the current selection,\n * depending on whether it's already there.\n *\n * @param {Change} change\n * @param {Mark} mark\n */\n\n\nChanges.toggleMark = function (change, mark) {\n mark = Mark.create(mark);\n var value = change.value;\n var exists = value.activeMarks.has(mark);\n\n if (exists) {\n change.removeMark(mark);\n } else {\n change.addMark(mark);\n }\n};\n/**\n * Wrap the current selection with prefix/suffix.\n *\n * @param {Change} change\n * @param {String} prefix\n * @param {String} suffix\n */\n\n\nChanges.wrapText = function (change, prefix) {\n var suffix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : prefix;\n var value = change.value;\n var selection = value.selection;\n change.wrapTextAtRange(selection, prefix, suffix); // If the selection was collapsed, it will have moved the start offset too.\n\n if (selection.isCollapsed) {\n change.moveStartBackward(prefix.length);\n } // Adding the suffix will have pushed the end of the selection further on, so\n // we need to move it back to account for this.\n\n\n change.moveEndBackward(suffix.length); // There's a chance that the selection points moved \"through\" each other,\n // resulting in a now-incorrect selection direction.\n\n if (selection.isForward != change.value.selection.isForward) {\n change.flip();\n }\n};\n/**\n * Surrogate pair start and end points.\n *\n * @type {Number}\n */\n\n\nvar SURROGATE_START = 0xd800;\nvar SURROGATE_END = 0xdfff;\n/**\n * A regex to match space characters.\n *\n * @type {RegExp}\n */\n\nvar SPACE = /\\s/;\n/**\n * A regex to match chameleon characters, that count as word characters as long\n * as they are inside of a word.\n *\n * @type {RegExp}\n */\n\nvar CHAMELEON = /['\\u2018\\u2019]/;\n/**\n * A regex that matches punctuation.\n *\n * @type {RegExp}\n */\n\nvar PUNCTUATION = /[\\u0021-\\u0023\\u0025-\\u002A\\u002C-\\u002F\\u003A\\u003B\\u003F\\u0040\\u005B-\\u005D\\u005F\\u007B\\u007D\\u00A1\\u00A7\\u00AB\\u00B6\\u00B7\\u00BB\\u00BF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E3B\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/;\n/**\n * Is a character `code` in a surrogate character.\n *\n * @param {Number} code\n * @return {Boolean}\n */\n\nfunction isSurrogate(code) {\n return SURROGATE_START <= code && code <= SURROGATE_END;\n}\n/**\n * Is a character a word character? Needs the `remaining` characters too.\n *\n * @param {String} char\n * @param {String|Void} remaining\n * @return {Boolean}\n */\n\n\nfunction isWord(char, remaining) {\n if (SPACE.test(char)) return false; // If it's a chameleon character, recurse to see if the next one is or not.\n\n if (CHAMELEON.test(char)) {\n var next = remaining.charAt(0);\n var length = getCharLength(next);\n next = remaining.slice(0, length);\n var rest = remaining.slice(length);\n if (isWord(next, rest)) return true;\n }\n\n if (PUNCTUATION.test(char)) return false;\n return true;\n}\n/**\n * Get the length of a `character`.\n *\n * @param {String} char\n * @return {Number}\n */\n\n\nfunction getCharLength(char) {\n return isSurrogate(char.charCodeAt(0)) ? 2 : 1;\n}\n/**\n * Get the offset to the end of the first character in `text`.\n *\n * @param {String} text\n * @return {Number}\n */\n\n\nfunction getCharOffset(text) {\n var char = text.charAt(0);\n return getCharLength(char);\n}\n/**\n * Get the offset to the end of the character before an `offset` in `text`.\n *\n * @param {String} text\n * @param {Number} offset\n * @return {Number}\n */\n\n\nfunction getCharOffsetBackward(text, offset) {\n text = text.slice(0, offset);\n text = reverse(text);\n return getCharOffset(text);\n}\n/**\n * Get the offset to the end of the character after an `offset` in `text`.\n *\n * @param {String} text\n * @param {Number} offset\n * @return {Number}\n */\n\n\nfunction getCharOffsetForward(text, offset) {\n text = text.slice(offset);\n return getCharOffset(text);\n}\n/**\n * Get the offset to the end of the first word in `text`.\n *\n * @param {String} text\n * @return {Number}\n */\n\n\nfunction getWordOffset(text) {\n var length = 0;\n var i = 0;\n var started = false;\n var char = void 0;\n\n while (char = text.charAt(i)) {\n var l = getCharLength(char);\n char = text.slice(i, i + l);\n var rest = text.slice(i + l);\n\n if (isWord(char, rest)) {\n started = true;\n length += l;\n } else if (!started) {\n length += l;\n } else {\n break;\n }\n\n i += l;\n }\n\n return length;\n}\n/**\n * Get the offset to the end of the word before an `offset` in `text`.\n *\n * @param {String} text\n * @param {Number} offset\n * @return {Number}\n */\n\n\nfunction getWordOffsetBackward(text, offset) {\n text = text.slice(0, offset);\n text = reverse(text);\n var o = getWordOffset(text);\n return o;\n}\n/**\n * Get the offset to the end of the word after an `offset` in `text`.\n *\n * @param {String} text\n * @param {Number} offset\n * @return {Number}\n */\n\n\nfunction getWordOffsetForward(text, offset) {\n text = text.slice(offset);\n var o = getWordOffset(text);\n return o;\n}\n/**\n * Export.\n *\n * @type {Object}\n */\n\n\nvar TextUtils = {\n getCharLength: getCharLength,\n getCharOffset: getCharOffset,\n getCharOffsetBackward: getCharOffsetBackward,\n getCharOffsetForward: getCharOffsetForward,\n getWordOffset: getWordOffset,\n getWordOffsetBackward: getWordOffsetBackward,\n getWordOffsetForward: getWordOffsetForward,\n isSurrogate: isSurrogate,\n isWord: isWord\n};\n/**\n * Changes.\n *\n * @type {Object}\n */\n\nvar Changes$1 = {};\n/**\n * Add a new `mark` to the characters at `range`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Mixed} mark\n */\n\nChanges$1.addMarkAtRange = function (change, range, mark) {\n if (range.isCollapsed) return;\n var value = change.value;\n var document = value.document;\n var start = range.start,\n end = range.end;\n var texts = document.getTextsAtRange(range);\n change.withoutNormalizing(function () {\n texts.forEach(function (node) {\n var key = node.key;\n var index = 0;\n var length = node.text.length;\n if (key == start.key) index = start.offset;\n if (key == end.key) length = end.offset;\n if (key == start.key && key == end.key) length = end.offset - start.offset;\n change.addMarkByKey(key, index, length, mark);\n });\n });\n};\n/**\n * Add a list of `marks` to the characters at `range`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Array} mark\n */\n\n\nChanges$1.addMarksAtRange = function (change, range, marks) {\n marks.forEach(function (mark) {\n return change.addMarkAtRange(range, mark);\n });\n};\n/**\n * Delete everything in a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n */\n\n\nChanges$1.deleteAtRange = function (change, range) {\n // Snapshot the selection, which creates an extra undo save point, so that\n // when you undo a delete, the expanded selection will be retained.\n change.snapshotSelection();\n var value = change.value;\n var start = range.start,\n end = range.end;\n var startKey = start.key;\n var startOffset = start.offset;\n var endKey = end.key;\n var endOffset = end.offset;\n var document = value.document,\n schema = value.schema;\n var isStartVoid = document.hasVoidParent(startKey, schema);\n var isEndVoid = document.hasVoidParent(endKey, schema);\n var startBlock = document.getClosestBlock(startKey, schema);\n var endBlock = document.getClosestBlock(endKey, schema); // Check if we have a \"hanging\" selection case where the even though the\n // selection extends into the start of the end node, we actually want to\n // ignore that for UX reasons.\n\n var isHanging = startOffset == 0 && endOffset == 0 && isStartVoid == false && startKey == startBlock.getFirstText().key && endKey == endBlock.getFirstText().key; // If it's a hanging selection, nudge it back to end in the previous text.\n\n if (isHanging && isEndVoid) {\n var prevText = document.getPreviousText(endKey);\n endKey = prevText.key;\n endOffset = prevText.text.length;\n isEndVoid = document.hasVoidParent(endKey, schema);\n }\n\n change.withoutNormalizing(function () {\n // If the start node is inside a void node, remove the void node and update\n // the starting point to be right after it, continuously until the start point\n // is not a void, or until the entire range is handled.\n while (isStartVoid) {\n var startVoid = document.getClosestVoid(startKey, schema);\n var nextText = document.getNextText(startKey);\n change.removeNodeByKey(startVoid.key); // If the start and end keys are the same, we're done.\n\n if (startKey == endKey) return; // If there is no next text node, we're done.\n\n if (!nextText) return; // Continue...\n\n document = change.value.document;\n startKey = nextText.key;\n startOffset = 0;\n isStartVoid = document.hasVoidParent(startKey, schema);\n } // If the end node is inside a void node, do the same thing but backwards. But\n // we don't need any aborting checks because if we've gotten this far there\n // must be a non-void node that will exit the loop.\n\n\n while (isEndVoid) {\n var endVoid = document.getClosestVoid(endKey, schema);\n\n var _prevText = document.getPreviousText(endKey);\n\n change.removeNodeByKey(endVoid.key); // Continue...\n\n document = change.value.document;\n endKey = _prevText.key;\n endOffset = _prevText.text.length;\n isEndVoid = document.hasVoidParent(endKey, schema);\n } // If the start and end key are the same, and it was a hanging selection, we\n // can just remove the entire block.\n\n\n if (startKey == endKey && isHanging) {\n change.removeNodeByKey(startBlock.key);\n return;\n } else if (startKey == endKey) {\n // Otherwise, if it wasn't hanging, we're inside a single text node, so we can\n // simply remove the text in the range.\n var index = startOffset;\n var length = endOffset - startOffset;\n change.removeTextByKey(startKey, index, length);\n return;\n } else {\n // Otherwise, we need to recursively remove text and nodes inside the start\n // block after the start offset and inside the end block before the end\n // offset. Then remove any blocks that are in between the start and end\n // blocks. Then finally merge the start and end nodes.\n startBlock = document.getClosestBlock(startKey);\n endBlock = document.getClosestBlock(endKey);\n var startText = document.getNode(startKey);\n var endText = document.getNode(endKey);\n var startLength = startText.text.length - startOffset;\n var endLength = endOffset;\n var ancestor = document.getCommonAncestor(startKey, endKey);\n var startChild = ancestor.getFurthestAncestor(startKey);\n var endChild = ancestor.getFurthestAncestor(endKey);\n var startParent = document.getParent(startBlock.key);\n var startParentIndex = startParent.nodes.indexOf(startBlock);\n var endParentIndex = startParent.nodes.indexOf(endBlock);\n var child = void 0; // Iterate through all of the nodes in the tree after the start text node\n // but inside the end child, and remove them.\n\n child = startText;\n\n while (child.key != startChild.key) {\n var parent = document.getParent(child.key);\n\n var _index = parent.nodes.indexOf(child);\n\n var afters = parent.nodes.slice(_index + 1);\n afters.reverse().forEach(function (node) {\n change.removeNodeByKey(node.key);\n });\n child = parent;\n } // Remove all of the middle children.\n\n\n var startChildIndex = ancestor.nodes.indexOf(startChild);\n var endChildIndex = ancestor.nodes.indexOf(endChild);\n var middles = ancestor.nodes.slice(startChildIndex + 1, endChildIndex);\n middles.reverse().forEach(function (node) {\n change.removeNodeByKey(node.key);\n }); // Remove the nodes before the end text node in the tree.\n\n child = endText;\n\n while (child.key != endChild.key) {\n var _parent = document.getParent(child.key);\n\n var _index2 = _parent.nodes.indexOf(child);\n\n var befores = _parent.nodes.slice(0, _index2);\n\n befores.reverse().forEach(function (node) {\n change.removeNodeByKey(node.key);\n });\n child = _parent;\n } // Remove any overlapping text content from the leaf text nodes.\n\n\n if (startLength != 0) {\n change.removeTextByKey(startKey, startOffset, startLength);\n }\n\n if (endLength != 0) {\n change.removeTextByKey(endKey, 0, endOffset);\n } // If the start and end blocks aren't the same, move and merge the end block\n // into the start block.\n\n\n if (startBlock.key != endBlock.key) {\n document = change.value.document;\n var lonely = document.getFurthestOnlyChildAncestor(endBlock.key); // Move the end block to be right after the start block.\n\n if (endParentIndex != startParentIndex + 1) {\n change.moveNodeByKey(endBlock.key, startParent.key, startParentIndex + 1);\n } // If the selection is hanging, just remove the start block, otherwise\n // merge the end block into it.\n\n\n if (isHanging) {\n change.removeNodeByKey(startBlock.key);\n } else {\n change.mergeNodeByKey(endBlock.key);\n } // If nested empty blocks are left over above the end block, remove them.\n\n\n if (lonely) {\n change.removeNodeByKey(lonely.key);\n }\n }\n }\n });\n};\n/**\n * Delete backward until the character boundary at a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n */\n\n\nChanges$1.deleteCharBackwardAtRange = function (change, range) {\n var value = change.value;\n var document = value.document;\n var start = range.start;\n var startBlock = document.getClosestBlock(start.key);\n var offset = startBlock.getOffset(start.key);\n var o = offset + start.offset;\n var text = startBlock.text;\n var n = TextUtils.getCharOffsetBackward(text, o);\n change.deleteBackwardAtRange(range, n);\n};\n/**\n * Delete backward until the line boundary at a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n */\n\n\nChanges$1.deleteLineBackwardAtRange = function (change, range) {\n var value = change.value;\n var document = value.document;\n var start = range.start;\n var startBlock = document.getClosestBlock(start.key);\n var offset = startBlock.getOffset(start.key);\n var o = offset + start.offset;\n change.deleteBackwardAtRange(range, o);\n};\n/**\n * Delete backward until the word boundary at a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n */\n\n\nChanges$1.deleteWordBackwardAtRange = function (change, range) {\n var value = change.value;\n var document = value.document;\n var start = range.start;\n var startBlock = document.getClosestBlock(start.key);\n var offset = startBlock.getOffset(start.key);\n var o = offset + start.offset;\n var text = startBlock.text;\n var n = o === 0 ? 1 : TextUtils.getWordOffsetBackward(text, o);\n change.deleteBackwardAtRange(range, n);\n};\n/**\n * Delete backward `n` characters at a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Number} n (optional)\n */\n\n\nChanges$1.deleteBackwardAtRange = function (change, range) {\n var n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n if (n === 0) return;\n var value = change.value;\n var document = value.document,\n schema = value.schema;\n var _range = range,\n start = _range.start,\n focus = _range.focus; // If the range is expanded, perform a regular delete instead.\n\n if (range.isExpanded) {\n change.deleteAtRange(range);\n return;\n }\n\n var voidParent = document.getClosestVoid(start.key, schema); // If there is a void parent, delete it.\n\n if (voidParent) {\n change.removeNodeByKey(voidParent.key);\n return;\n }\n\n var block = document.getClosestBlock(start.key); // If the closest is not void, but empty, remove it\n\n if (block && !schema.isVoid(block) && block.text === '' && document.nodes.size !== 1) {\n change.removeNodeByKey(block.key);\n return;\n } // If the range is at the start of the document, abort.\n\n\n if (start.isAtStartOfNode(document)) {\n return;\n } // If the range is at the start of the text node, we need to figure out what\n // is behind it to know how to delete...\n\n\n var text = document.getDescendant(start.key);\n\n if (start.isAtStartOfNode(text)) {\n var prev = document.getPreviousText(text.key);\n var prevBlock = document.getClosestBlock(prev.key);\n var prevVoid = document.getClosestVoid(prev.key, schema); // If the previous text node has a void parent, remove it.\n\n if (prevVoid) {\n change.removeNodeByKey(prevVoid.key);\n return;\n } // If we're deleting by one character and the previous text node is not\n // inside the current block, we need to merge the two blocks together.\n\n\n if (n == 1 && prevBlock != block) {\n range = range.moveAnchorTo(prev.key, prev.text.length);\n change.deleteAtRange(range);\n return;\n }\n } // If the focus offset is farther than the number of characters to delete,\n // just remove the characters backwards inside the current node.\n\n\n if (n < focus.offset) {\n range = range.moveFocusBackward(n);\n change.deleteAtRange(range);\n return;\n } // Otherwise, we need to see how many nodes backwards to go.\n\n\n var node = text;\n var offset = 0;\n var traversed = focus.offset;\n\n while (n > traversed) {\n node = document.getPreviousText(node.key);\n var next = traversed + node.text.length;\n\n if (n <= next) {\n offset = next - n;\n break;\n } else {\n traversed = next;\n }\n }\n\n range = range.moveAnchorTo(node.key, offset);\n change.deleteAtRange(range);\n};\n/**\n * Delete forward until the character boundary at a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n */\n\n\nChanges$1.deleteCharForwardAtRange = function (change, range) {\n var value = change.value;\n var document = value.document;\n var start = range.start;\n var startBlock = document.getClosestBlock(start.key);\n var offset = startBlock.getOffset(start.key);\n var o = offset + start.offset;\n var text = startBlock.text;\n var n = TextUtils.getCharOffsetForward(text, o);\n change.deleteForwardAtRange(range, n);\n};\n/**\n * Delete forward until the line boundary at a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n */\n\n\nChanges$1.deleteLineForwardAtRange = function (change, range) {\n var value = change.value;\n var document = value.document;\n var start = range.start;\n var startBlock = document.getClosestBlock(start.key);\n var offset = startBlock.getOffset(start.key);\n var o = offset + start.offset;\n change.deleteForwardAtRange(range, startBlock.text.length - o);\n};\n/**\n * Delete forward until the word boundary at a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n */\n\n\nChanges$1.deleteWordForwardAtRange = function (change, range) {\n var value = change.value;\n var document = value.document;\n var start = range.start;\n var startBlock = document.getClosestBlock(start.key);\n var offset = startBlock.getOffset(start.key);\n var o = offset + start.offset;\n var text = startBlock.text;\n var n = TextUtils.getWordOffsetForward(text, o);\n change.deleteForwardAtRange(range, n);\n};\n/**\n * Delete forward `n` characters at a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Number} n (optional)\n */\n\n\nChanges$1.deleteForwardAtRange = function (change, range) {\n var n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n if (n === 0) return;\n var value = change.value;\n var document = value.document,\n schema = value.schema;\n var _range2 = range,\n start = _range2.start,\n focus = _range2.focus; // If the range is expanded, perform a regular delete instead.\n\n if (range.isExpanded) {\n change.deleteAtRange(range);\n return;\n }\n\n var voidParent = document.getClosestVoid(start.key, schema); // If the node has a void parent, delete it.\n\n if (voidParent) {\n change.removeNodeByKey(voidParent.key);\n return;\n }\n\n var block = document.getClosestBlock(start.key); // If the closest is not void, but empty, remove it\n\n if (block && !schema.isVoid(block) && block.text === '' && document.nodes.size !== 1) {\n var nextBlock = document.getNextBlock(block.key);\n change.removeNodeByKey(block.key);\n\n if (nextBlock && nextBlock.key) {\n change.moveToStartOfNode(nextBlock);\n }\n\n return;\n } // If the range is at the start of the document, abort.\n\n\n if (start.isAtEndOfNode(document)) {\n return;\n } // If the range is at the start of the text node, we need to figure out what\n // is behind it to know how to delete...\n\n\n var text = document.getDescendant(start.key);\n\n if (start.isAtEndOfNode(text)) {\n var next = document.getNextText(text.key);\n\n var _nextBlock = document.getClosestBlock(next.key);\n\n var nextVoid = document.getClosestVoid(next.key, schema); // If the next text node has a void parent, remove it.\n\n if (nextVoid) {\n change.removeNodeByKey(nextVoid.key);\n return;\n } // If we're deleting by one character and the previous text node is not\n // inside the current block, we need to merge the two blocks together.\n\n\n if (n == 1 && _nextBlock != block) {\n range = range.moveFocusTo(next.key, 0);\n change.deleteAtRange(range);\n return;\n }\n } // If the remaining characters to the end of the node is greater than or equal\n // to the number of characters to delete, just remove the characters forwards\n // inside the current node.\n\n\n if (n <= text.text.length - focus.offset) {\n range = range.moveFocusForward(n);\n change.deleteAtRange(range);\n return;\n } // Otherwise, we need to see how many nodes forwards to go.\n\n\n var node = text;\n var offset = focus.offset;\n var traversed = text.text.length - focus.offset;\n\n while (n > traversed) {\n node = document.getNextText(node.key);\n\n var _next = traversed + node.text.length;\n\n if (n <= _next) {\n offset = n - traversed;\n break;\n } else {\n traversed = _next;\n }\n }\n\n range = range.moveFocusTo(node.key, offset);\n change.deleteAtRange(range);\n};\n/**\n * Insert a `block` node at `range`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Block|String|Object} block\n */\n\n\nChanges$1.insertBlockAtRange = function (change, range, block) {\n block = Block.create(block);\n\n if (range.isExpanded) {\n change.deleteAtRange(range);\n range = range.moveToStart();\n }\n\n var value = change.value;\n var document = value.document,\n schema = value.schema;\n var _range3 = range,\n start = _range3.start;\n var startKey = start.key;\n var startOffset = start.offset;\n var startBlock = document.getClosestBlock(startKey);\n var startInline = document.getClosestInline(startKey);\n var parent = document.getParent(startBlock.key);\n var index = parent.nodes.indexOf(startBlock);\n\n if (schema.isVoid(startBlock)) {\n var extra = start.isAtEndOfNode(startBlock) ? 1 : 0;\n change.insertNodeByKey(parent.key, index + extra, block);\n } else if (!startInline && startBlock.text === '') {\n change.insertNodeByKey(parent.key, index + 1, block);\n } else if (start.isAtStartOfNode(startBlock)) {\n change.insertNodeByKey(parent.key, index, block);\n } else if (start.isAtEndOfNode(startBlock)) {\n change.insertNodeByKey(parent.key, index + 1, block);\n } else {\n if (startInline && schema.isVoid(startInline)) {\n var atEnd = start.isAtEndOfNode(startInline);\n var siblingText = atEnd ? document.getNextText(startKey) : document.getPreviousText(startKey);\n var splitRange = atEnd ? range.moveToStartOfNode(siblingText) : range.moveToEndOfNode(siblingText);\n startKey = splitRange.start.key;\n startOffset = splitRange.start.offset;\n }\n\n change.withoutNormalizing(function () {\n change.splitDescendantsByKey(startBlock.key, startKey, startOffset);\n change.insertNodeByKey(parent.key, index + 1, block);\n });\n }\n};\n/**\n * Insert a `fragment` at a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Document} fragment\n */\n\n\nChanges$1.insertFragmentAtRange = function (change, range, fragment) {\n change.withoutNormalizing(function () {\n // If the range is expanded, delete it first.\n if (range.isExpanded) {\n change.deleteAtRange(range);\n\n if (change.value.document.getDescendant(range.start.key)) {\n range = range.moveToStart();\n } else {\n range = range.moveTo(range.end.key, 0).normalize(change.value.document);\n }\n } // If the fragment is empty, there's nothing to do after deleting.\n\n\n if (!fragment.nodes.size) return; // Regenerate the keys for all of the fragments nodes, so that they're\n // guaranteed not to collide with the existing keys in the document. Otherwise\n // they will be rengerated automatically and we won't have an easy way to\n // reference them.\n\n fragment = fragment.mapDescendants(function (child) {\n return child.regenerateKey();\n }); // Calculate a few things...\n\n var _range4 = range,\n start = _range4.start;\n var value = change.value;\n var schema = value.schema;\n var document = value.document;\n var startText = document.getDescendant(start.key);\n var startBlock = document.getClosestBlock(startText.key);\n var startChild = startBlock.getFurthestAncestor(startText.key);\n var isAtStart = start.isAtStartOfNode(startBlock);\n var parent = document.getParent(startBlock.key);\n var index = parent.nodes.indexOf(startBlock);\n var blocks = fragment.getBlocks();\n var firstChild = fragment.nodes.first();\n var lastChild = fragment.nodes.last();\n var firstBlock = blocks.first();\n var lastBlock = blocks.last(); // If the fragment only contains a void block, use `insertBlock` instead.\n\n if (firstBlock === lastBlock && schema.isVoid(firstBlock)) {\n change.insertBlockAtRange(range, firstBlock);\n return;\n } // If the fragment starts or ends with single nested block, (e.g., table),\n // do not merge this fragment with existing blocks.\n\n\n if (firstChild.hasBlockChildren() || lastChild.hasBlockChildren()) {\n fragment.nodes.reverse().forEach(function (node) {\n change.insertBlockAtRange(range, node);\n });\n return;\n } // If the first and last block aren't the same, we need to insert all of the\n // nodes after the fragment's first block at the index.\n\n\n if (firstBlock != lastBlock) {\n var lonelyParent = fragment.getFurthest(firstBlock.key, function (p) {\n return p.nodes.size == 1;\n });\n var lonelyChild = lonelyParent || firstBlock;\n var startIndex = parent.nodes.indexOf(startBlock);\n fragment = fragment.removeNode(lonelyChild.key);\n fragment.nodes.forEach(function (node, i) {\n var newIndex = startIndex + i + 1;\n change.insertNodeByKey(parent.key, newIndex, node);\n });\n } // Check if we need to split the node.\n\n\n if (start.offset != 0) {\n change.splitDescendantsByKey(startChild.key, start.key, start.offset);\n } // Update our variables with the new value.\n\n\n document = change.value.document;\n startText = document.getDescendant(start.key);\n startBlock = document.getClosestBlock(start.key);\n startChild = startBlock.getFurthestAncestor(startText.key); // If the first and last block aren't the same, we need to move any of the\n // starting block's children after the split into the last block of the\n // fragment, which has already been inserted.\n\n if (firstBlock != lastBlock) {\n var nextChild = isAtStart ? startChild : startBlock.getNextSibling(startChild.key);\n var nextNodes = nextChild ? startBlock.nodes.skipUntil(function (n) {\n return n.key == nextChild.key;\n }) : List();\n var lastIndex = lastBlock.nodes.size;\n nextNodes.forEach(function (node, i) {\n var newIndex = lastIndex + i;\n change.moveNodeByKey(node.key, lastBlock.key, newIndex);\n });\n } // If the starting block is empty, we replace it entirely with the first block\n // of the fragment, since this leads to a more expected behavior for the user.\n\n\n if (!schema.isVoid(startBlock) && startBlock.text === '') {\n change.removeNodeByKey(startBlock.key);\n change.insertNodeByKey(parent.key, index, firstBlock);\n } else {\n // Otherwise, we maintain the starting block, and insert all of the first\n // block's inline nodes into it at the split point.\n var inlineChild = startBlock.getFurthestAncestor(startText.key);\n var inlineIndex = startBlock.nodes.indexOf(inlineChild);\n firstBlock.nodes.forEach(function (inline, i) {\n var o = start.offset == 0 ? 0 : 1;\n var newIndex = inlineIndex + i + o;\n change.insertNodeByKey(startBlock.key, newIndex, inline);\n });\n }\n });\n};\n/**\n * Insert an `inline` node at `range`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Inline|String|Object} inline\n */\n\n\nChanges$1.insertInlineAtRange = function (change, range, inline) {\n inline = Inline.create(inline);\n change.withoutNormalizing(function () {\n if (range.isExpanded) {\n change.deleteAtRange(range);\n range = range.moveToStart();\n }\n\n var value = change.value;\n var document = value.document,\n schema = value.schema;\n var _range5 = range,\n start = _range5.start;\n var parent = document.getParent(start.key);\n var startText = document.assertDescendant(start.key);\n var index = parent.nodes.indexOf(startText);\n if (schema.isVoid(parent)) return;\n change.splitNodeByKey(start.key, start.offset);\n change.insertNodeByKey(parent.key, index + 1, inline);\n });\n};\n/**\n * Insert `text` at a `range`, with optional `marks`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {String} text\n * @param {Set} marks (optional)\n */\n\n\nChanges$1.insertTextAtRange = function (change, range, text, marks) {\n var value = change.value;\n var document = value.document,\n schema = value.schema;\n var start = range.start;\n var key = start.key;\n var offset = start.offset;\n var parent = document.getParent(start.key);\n\n if (schema.isVoid(parent)) {\n return;\n }\n\n change.withoutNormalizing(function () {\n if (range.isExpanded) {\n change.deleteAtRange(range); // Update range start after delete\n\n if (change.value.selection.start.key !== key) {\n key = change.value.selection.start.key;\n offset = change.value.selection.start.offset;\n }\n }\n\n change.insertTextByKey(key, offset, text, marks);\n });\n};\n/**\n * Remove an existing `mark` to the characters at `range`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Mark|String} mark (optional)\n */\n\n\nChanges$1.removeMarkAtRange = function (change, range, mark) {\n if (range.isCollapsed) return;\n var value = change.value;\n var document = value.document;\n var texts = document.getTextsAtRange(range);\n var start = range.start,\n end = range.end;\n change.withoutNormalizing(function () {\n texts.forEach(function (node) {\n var key = node.key;\n var index = 0;\n var length = node.text.length;\n if (key == start.key) index = start.offset;\n if (key == end.key) length = end.offset;\n if (key == start.key && key == end.key) length = end.offset - start.offset;\n change.removeMarkByKey(key, index, length, mark);\n });\n });\n};\n/**\n * Set the `properties` of block nodes in a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Object|String} properties\n */\n\n\nChanges$1.setBlocksAtRange = function (change, range, properties) {\n var value = change.value;\n var document = value.document,\n schema = value.schema;\n var blocks = document.getBlocksAtRange(range);\n var start = range.start,\n end = range.end,\n isCollapsed = range.isCollapsed;\n var isStartVoid = document.hasVoidParent(start.key, schema);\n var startBlock = document.getClosestBlock(start.key);\n var endBlock = document.getClosestBlock(end.key); // Check if we have a \"hanging\" selection case where the even though the\n // selection extends into the start of the end node, we actually want to\n // ignore that for UX reasons.\n\n var isHanging = isCollapsed == false && start.offset == 0 && end.offset == 0 && isStartVoid == false && start.key == startBlock.getFirstText().key && end.key == endBlock.getFirstText().key; // If it's a hanging selection, ignore the last block.\n\n var sets = isHanging ? blocks.slice(0, -1) : blocks;\n change.withoutNormalizing(function () {\n sets.forEach(function (block) {\n change.setNodeByKey(block.key, properties);\n });\n });\n};\n/**\n * Set the `properties` of inline nodes in a `range`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Object|String} properties\n */\n\n\nChanges$1.setInlinesAtRange = function (change, range, properties) {\n var value = change.value;\n var document = value.document;\n var inlines = document.getInlinesAtRange(range);\n change.withoutNormalizing(function () {\n inlines.forEach(function (inline) {\n change.setNodeByKey(inline.key, properties);\n });\n });\n};\n/**\n * Split the block nodes at a `range`, to optional `height`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Number} height (optional)\n */\n\n\nChanges$1.splitBlockAtRange = function (change, range) {\n var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var _range6 = range,\n start = _range6.start,\n end = _range6.end;\n var value = change.value;\n var _value = value,\n document = _value.document;\n var node = document.assertDescendant(start.key);\n var parent = document.getClosestBlock(node.key);\n var h = 0;\n\n while (parent && parent.object == 'block' && h < height) {\n node = parent;\n parent = document.getClosestBlock(parent.key);\n h++;\n }\n\n change.withoutNormalizing(function () {\n change.splitDescendantsByKey(node.key, start.key, start.offset);\n value = change.value;\n document = value.document;\n\n if (range.isExpanded) {\n if (range.isBackward) range = range.flip();\n var nextBlock = document.getNextBlock(node.key);\n range = range.moveAnchorToStartOfNode(nextBlock);\n range = range.setFocus(range.focus.setPath(null));\n\n if (start.key === end.key) {\n range = range.moveFocusTo(range.anchor.key, end.offset - start.offset);\n }\n\n range = document.resolveRange(range);\n change.deleteAtRange(range);\n }\n });\n};\n/**\n * Split the inline nodes at a `range`, to optional `height`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Number} height (optional)\n */\n\n\nChanges$1.splitInlineAtRange = function (change, range) {\n var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Infinity;\n\n if (range.isExpanded) {\n change.deleteAtRange(range);\n range = range.moveToStart();\n }\n\n var _range7 = range,\n start = _range7.start;\n var value = change.value;\n var document = value.document;\n var node = document.assertDescendant(start.key);\n var parent = document.getClosestInline(node.key);\n var h = 0;\n\n while (parent && parent.object == 'inline' && h < height) {\n node = parent;\n parent = document.getClosestInline(parent.key);\n h++;\n }\n\n change.splitDescendantsByKey(node.key, start.key, start.offset);\n};\n/**\n * Add or remove a `mark` from the characters at `range`, depending on whether\n * it's already there.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Mixed} mark\n */\n\n\nChanges$1.toggleMarkAtRange = function (change, range, mark) {\n if (range.isCollapsed) return;\n mark = Mark.create(mark);\n var value = change.value;\n var document = value.document;\n var marks = document.getActiveMarksAtRange(range);\n var exists = marks.some(function (m) {\n return m.equals(mark);\n });\n\n if (exists) {\n change.removeMarkAtRange(range, mark);\n } else {\n change.addMarkAtRange(range, mark);\n }\n};\n/**\n * Unwrap all of the block nodes in a `range` from a block with `properties`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {String|Object} properties\n */\n\n\nChanges$1.unwrapBlockAtRange = function (change, range, properties) {\n properties = Node.createProperties(properties);\n var value = change.value;\n var document = value.document;\n var blocks = document.getBlocksAtRange(range);\n var wrappers = blocks.map(function (block) {\n return document.getClosest(block.key, function (parent) {\n if (parent.object != 'block') return false;\n if (properties.type != null && parent.type != properties.type) return false;\n if (properties.data != null && !parent.data.isSuperset(properties.data)) return false;\n return true;\n });\n }).filter(function (exists) {\n return exists;\n }).toOrderedSet().toList();\n change.withoutNormalizing(function () {\n wrappers.forEach(function (block) {\n var first = block.nodes.first();\n var last = block.nodes.last();\n var parent = document.getParent(block.key);\n var index = parent.nodes.indexOf(block);\n var children = block.nodes.filter(function (child) {\n return blocks.some(function (b) {\n return child == b || child.hasDescendant(b.key);\n });\n });\n var firstMatch = children.first();\n var lastMatch = children.last();\n\n if (first == firstMatch && last == lastMatch) {\n block.nodes.forEach(function (child, i) {\n change.moveNodeByKey(child.key, parent.key, index + i);\n });\n change.removeNodeByKey(block.key);\n } else if (last == lastMatch) {\n block.nodes.skipUntil(function (n) {\n return n == firstMatch;\n }).forEach(function (child, i) {\n change.moveNodeByKey(child.key, parent.key, index + 1 + i);\n });\n } else if (first == firstMatch) {\n block.nodes.takeUntil(function (n) {\n return n == lastMatch;\n }).push(lastMatch).forEach(function (child, i) {\n change.moveNodeByKey(child.key, parent.key, index + i);\n });\n } else {\n var firstText = firstMatch.getFirstText();\n change.splitDescendantsByKey(block.key, firstText.key, 0);\n document = change.value.document;\n children.forEach(function (child, i) {\n if (i == 0) {\n var extra = child;\n child = document.getNextBlock(child.key);\n change.removeNodeByKey(extra.key);\n }\n\n change.moveNodeByKey(child.key, parent.key, index + 1 + i);\n });\n }\n });\n });\n};\n/**\n * Unwrap the inline nodes in a `range` from an inline with `properties`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {String|Object} properties\n */\n\n\nChanges$1.unwrapInlineAtRange = function (change, range, properties) {\n properties = Node.createProperties(properties);\n var value = change.value;\n var document = value.document;\n var texts = document.getTextsAtRange(range);\n var inlines = texts.map(function (text) {\n return document.getClosest(text.key, function (parent) {\n if (parent.object != 'inline') return false;\n if (properties.type != null && parent.type != properties.type) return false;\n if (properties.data != null && !parent.data.isSuperset(properties.data)) return false;\n return true;\n });\n }).filter(function (exists) {\n return exists;\n }).toOrderedSet().toList();\n change.withoutNormalizing(function () {\n inlines.forEach(function (inline) {\n var parent = change.value.document.getParent(inline.key);\n var index = parent.nodes.indexOf(inline);\n inline.nodes.forEach(function (child, i) {\n change.moveNodeByKey(child.key, parent.key, index + i);\n });\n change.removeNodeByKey(inline.key);\n });\n });\n};\n/**\n * Wrap all of the blocks in a `range` in a new `block`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Block|Object|String} block\n */\n\n\nChanges$1.wrapBlockAtRange = function (change, range, block) {\n block = Block.create(block);\n block = block.set('nodes', block.nodes.clear());\n var value = change.value;\n var document = value.document;\n var blocks = document.getBlocksAtRange(range);\n var firstblock = blocks.first();\n var lastblock = blocks.last();\n var parent = void 0,\n siblings = void 0,\n index = void 0; // If there is only one block in the selection then we know the parent and\n // siblings.\n\n if (blocks.length === 1) {\n parent = document.getParent(firstblock.key);\n siblings = blocks;\n } else {\n // Determine closest shared parent to all blocks in selection.\n parent = document.getClosest(firstblock.key, function (p1) {\n return !!document.getClosest(lastblock.key, function (p2) {\n return p1 == p2;\n });\n });\n } // If no shared parent could be found then the parent is the document.\n\n\n if (parent == null) parent = document; // Create a list of direct children siblings of parent that fall in the\n // selection.\n\n if (siblings == null) {\n var indexes = parent.nodes.reduce(function (ind, node, i) {\n if (node == firstblock || node.hasDescendant(firstblock.key)) ind[0] = i;\n if (node == lastblock || node.hasDescendant(lastblock.key)) ind[1] = i;\n return ind;\n }, []);\n index = indexes[0];\n siblings = parent.nodes.slice(indexes[0], indexes[1] + 1);\n } // Get the index to place the new wrapped node at.\n\n\n if (index == null) {\n index = parent.nodes.indexOf(siblings.first());\n }\n\n change.withoutNormalizing(function () {\n // Inject the new block node into the parent.\n change.insertNodeByKey(parent.key, index, block); // Move the sibling nodes into the new block node.\n\n siblings.forEach(function (node, i) {\n change.moveNodeByKey(node.key, block.key, i);\n });\n });\n};\n/**\n * Wrap the text and inlines in a `range` in a new `inline`.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {Inline|Object|String} inline\n */\n\n\nChanges$1.wrapInlineAtRange = function (change, range, inline) {\n var value = change.value;\n var document = value.document,\n schema = value.schema;\n var start = range.start,\n end = range.end;\n\n if (range.isCollapsed) {\n // Wrapping an inline void\n var inlineParent = document.getClosestInline(start.key);\n\n if (!schema.isVoid(inlineParent)) {\n return;\n }\n\n return change.wrapInlineByKey(inlineParent.key, inline);\n }\n\n inline = Inline.create(inline);\n inline = inline.set('nodes', inline.nodes.clear());\n var blocks = document.getBlocksAtRange(range);\n var startBlock = document.getClosestBlock(start.key);\n var endBlock = document.getClosestBlock(end.key);\n var startInline = document.getClosestInline(start.key);\n var endInline = document.getClosestInline(end.key);\n var startChild = startBlock.getFurthestAncestor(start.key);\n var endChild = endBlock.getFurthestAncestor(end.key);\n change.withoutNormalizing(function () {\n if (!startInline || startInline != endInline) {\n change.splitDescendantsByKey(endChild.key, end.key, end.offset);\n change.splitDescendantsByKey(startChild.key, start.key, start.offset);\n }\n\n document = change.value.document;\n startBlock = document.getDescendant(startBlock.key);\n endBlock = document.getDescendant(endBlock.key);\n startChild = startBlock.getFurthestAncestor(start.key);\n endChild = endBlock.getFurthestAncestor(end.key);\n var startIndex = startBlock.nodes.indexOf(startChild);\n var endIndex = endBlock.nodes.indexOf(endChild);\n\n if (startInline && startInline == endInline) {\n var text = startBlock.getTextsAtRange(range).get(0).splitText(start.offset)[1].splitText(end.offset - start.offset)[0];\n inline = inline.set('nodes', List([text]));\n change.insertInlineAtRange(range, inline);\n var inlinekey = inline.getFirstText().key;\n var rng = {\n anchor: {\n key: inlinekey,\n offset: 0\n },\n focus: {\n key: inlinekey,\n offset: end.offset - start.offset\n },\n isFocused: true\n };\n change.select(rng);\n } else if (startBlock == endBlock) {\n document = change.value.document;\n startBlock = document.getClosestBlock(start.key);\n startChild = startBlock.getFurthestAncestor(start.key);\n var startInner = document.getNextSibling(startChild.key);\n var startInnerIndex = startBlock.nodes.indexOf(startInner);\n var endInner = start.key == end.key ? startInner : startBlock.getFurthestAncestor(end.key);\n var inlines = startBlock.nodes.skipUntil(function (n) {\n return n == startInner;\n }).takeUntil(function (n) {\n return n == endInner;\n }).push(endInner);\n var node = inline.regenerateKey();\n change.insertNodeByKey(startBlock.key, startInnerIndex, node);\n inlines.forEach(function (child, i) {\n change.moveNodeByKey(child.key, node.key, i);\n });\n } else {\n var startInlines = startBlock.nodes.slice(startIndex + 1);\n var endInlines = endBlock.nodes.slice(0, endIndex + 1);\n var startNode = inline.regenerateKey();\n var endNode = inline.regenerateKey();\n change.insertNodeByKey(startBlock.key, startIndex + 1, startNode);\n change.insertNodeByKey(endBlock.key, endIndex, endNode);\n startInlines.forEach(function (child, i) {\n change.moveNodeByKey(child.key, startNode.key, i);\n });\n endInlines.forEach(function (child, i) {\n change.moveNodeByKey(child.key, endNode.key, i);\n });\n blocks.slice(1, -1).forEach(function (block) {\n var node = inline.regenerateKey();\n change.insertNodeByKey(block.key, 0, node);\n block.nodes.forEach(function (child, i) {\n change.moveNodeByKey(child.key, node.key, i);\n });\n });\n }\n });\n};\n/**\n * Wrap the text in a `range` in a prefix/suffix.\n *\n * @param {Change} change\n * @param {Range} range\n * @param {String} prefix\n * @param {String} suffix (optional)\n */\n\n\nChanges$1.wrapTextAtRange = function (change, range, prefix) {\n var suffix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : prefix;\n var start = range.start,\n end = range.end;\n var startRange = range.moveToStart();\n var endRange = range.moveToEnd();\n\n if (start.key == end.key) {\n endRange = endRange.moveForward(prefix.length);\n }\n\n change.withoutNormalizing(function () {\n change.insertTextAtRange(startRange, prefix, []);\n change.insertTextAtRange(endRange, suffix, []);\n });\n};\n/**\n * Compare paths `path` and `b` to see which is before or after.\n *\n * @param {List} path\n * @param {List} b\n * @return {Number|Null}\n */\n\n\nfunction compare(path, target) {\n // PERF: if the paths are not the same size we can exit early.\n if (path.size !== target.size) return null;\n\n for (var i = 0; i < path.size; i++) {\n var pv = path.get(i);\n var tv = target.get(i); // If the path's value is ever less than the target's, it's before.\n\n if (pv < tv) return -1; // If the target's value is ever less than the path's, it's after.\n\n if (pv > tv) return 1;\n } // Otherwise they were equal the whole way, it's the same.\n\n\n return 0;\n}\n/**\n * Create a path from `attrs`.\n *\n * @param {Array|List} attrs\n * @return {List}\n */\n\n\nfunction create$1(attrs) {\n if (attrs == null) {\n return null;\n }\n\n if (List.isList(attrs)) {\n return attrs;\n }\n\n if (Array.isArray(attrs)) {\n return List(attrs);\n }\n\n throw new Error('Paths can only be created from arrays or lists, but you passed: ' + attrs);\n}\n/**\n * Crop paths `a` and `b` to an equal size, defaulting to the shortest.\n *\n * @param {List} a\n * @param {List} b\n */\n\n\nfunction crop(a, b) {\n var size = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : min(a, b);\n var ca = a.slice(0, size);\n var cb = b.slice(0, size);\n return [ca, cb];\n}\n/**\n * Decrement a `path` by `n` at `index`, defaulting to the last index.\n *\n * @param {List} path\n * @param {Number} n\n * @param {Number} index\n */\n\n\nfunction decrement(path) {\n var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : path.size - 1;\n return increment(path, 0 - n, index);\n}\n/**\n * Increment a `path` by `n` at `index`, defaulting to the last index.\n *\n * @param {List} path\n * @param {Number} n\n * @param {Number} index\n */\n\n\nfunction increment(path) {\n var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : path.size - 1;\n var value = path.get(index);\n var newValue = value + n;\n var newPath = path.set(index, newValue);\n return newPath;\n}\n/**\n * Is a `path` above another `target` path?\n *\n * @param {List} path\n * @param {List} target\n * @return {Boolean}\n */\n\n\nfunction isAbove(path, target) {\n var _crop = crop(path, target),\n _crop2 = slicedToArray(_crop, 2),\n p = _crop2[0],\n t = _crop2[1];\n\n return path.size < target.size && compare(p, t) === 0;\n}\n/**\n * Is a `path` after another `target` path in a document?\n *\n * @param {List} path\n * @param {List} target\n * @return {Boolean}\n */\n\n\nfunction isAfter(path, target) {\n var _crop3 = crop(path, target),\n _crop4 = slicedToArray(_crop3, 2),\n p = _crop4[0],\n t = _crop4[1];\n\n return compare(p, t) === 1;\n}\n/**\n * Is a `path` before another `target` path in a document?\n *\n * @param {List} path\n * @param {List} target\n * @return {Boolean}\n */\n\n\nfunction isBefore(path, target) {\n var _crop5 = crop(path, target),\n _crop6 = slicedToArray(_crop5, 2),\n p = _crop6[0],\n t = _crop6[1];\n\n return compare(p, t) === -1;\n}\n/**\n * Is a `path` equal to another `target` path in a document?\n *\n * @param {List} path\n * @param {List} target\n * @return {Boolean}\n */\n\n\nfunction isEqual(path, target) {\n return path.equals(target);\n}\n/**\n * Is a `path` a sibling of a `target` path?\n *\n * @param {List} path\n * @param {List} target\n * @return {Boolean}\n */\n\n\nfunction isSibling(path, target) {\n if (path.size !== target.size) return false;\n var p = path.butLast();\n var t = target.butLast();\n return p.equals(t);\n}\n/**\n * Lift a `path` to refer to its parent.\n *\n * @param {List} path\n * @return {Array}\n */\n\n\nfunction lift(path) {\n var parent = path.slice(0, -1);\n return parent;\n}\n/**\n * Get the maximum length of paths `a` and `b`.\n *\n * @param {List} path\n * @param {List} path\n * @return {Number}\n */\n\n\nfunction max(a, b) {\n var n = Math.max(a.size, b.size);\n return n;\n}\n/**\n * Get the minimum length of paths `a` and `b`.\n *\n * @param {List} path\n * @param {List} path\n * @return {Number}\n */\n\n\nfunction min(a, b) {\n var n = Math.min(a.size, b.size);\n return n;\n}\n/**\n * Get the common ancestor path of path `a` and path `b`.\n *\n * @param {List} a\n * @param {List} b\n * @return {List}\n */\n\n\nfunction relate(a, b) {\n var array = [];\n\n for (var i = 0; i < a.size && i < b.size; i++) {\n var av = a.get(i);\n var bv = b.get(i); // If the values aren't equal, they've diverged and don't share an ancestor.\n\n if (av !== bv) break; // Otherwise, the current value is still a common ancestor.\n\n array.push(av);\n }\n\n var path = create$1(array);\n return path;\n}\n/**\n * Export.\n *\n * @type {Object}\n */\n\n\nvar PathUtils = {\n compare: compare,\n create: create$1,\n crop: crop,\n decrement: decrement,\n increment: increment,\n isAbove: isAbove,\n isAfter: isAfter,\n isBefore: isBefore,\n isEqual: isEqual,\n isSibling: isSibling,\n lift: lift,\n max: max,\n min: min,\n relate: relate\n};\n/**\n * Changes.\n *\n * @type {Object}\n */\n\nvar Changes$2 = {};\n/**\n * Add mark to text at `offset` and `length` in node by `path`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Number} offset\n * @param {Number} length\n * @param {Mixed} mark\n */\n\nChanges$2.addMarkByPath = function (change, path, offset, length, mark) {\n mark = Mark.create(mark);\n var value = change.value;\n var document = value.document;\n var node = document.assertNode(path);\n var leaves = node.getLeaves();\n var operations = [];\n var bx = offset;\n var by = offset + length;\n var o = 0;\n leaves.forEach(function (leaf) {\n var ax = o;\n var ay = ax + leaf.text.length;\n o += leaf.text.length; // If the leaf doesn't overlap with the operation, continue on.\n\n if (ay < bx || by < ax) return; // If the leaf already has the mark, continue on.\n\n if (leaf.marks.has(mark)) return; // Otherwise, determine which offset and characters overlap.\n\n var start = Math.max(ax, bx);\n var end = Math.min(ay, by);\n operations.push({\n type: 'add_mark',\n value: value,\n path: path,\n offset: start,\n length: end - start,\n mark: mark\n });\n });\n change.applyOperations(operations);\n};\n/**\n * Insert a `fragment` at `index` in a node by `path`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Number} index\n * @param {Fragment} fragment\n */\n\n\nChanges$2.insertFragmentByPath = function (change, path, index, fragment) {\n fragment.nodes.forEach(function (node, i) {\n change.insertNodeByPath(path, index + i, node);\n });\n};\n/**\n * Insert a `node` at `index` in a node by `path`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Number} index\n * @param {Node} node\n */\n\n\nChanges$2.insertNodeByPath = function (change, path, index, node) {\n var value = change.value;\n change.applyOperation({\n type: 'insert_node',\n value: value,\n path: path.concat(index),\n node: node\n });\n};\n/**\n * Insert `text` at `offset` in node by `path`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Number} offset\n * @param {String} text\n * @param {Set} marks (optional)\n */\n\n\nChanges$2.insertTextByPath = function (change, path, offset, text, marks) {\n var value = change.value;\n var document = value.document;\n var node = document.assertNode(path);\n marks = marks || node.getMarksAtIndex(offset);\n change.applyOperation({\n type: 'insert_text',\n value: value,\n path: path,\n offset: offset,\n text: text,\n marks: marks\n });\n};\n/**\n * Merge a node by `path` with the previous node.\n *\n * @param {Change} change\n * @param {Array} path\n */\n\n\nChanges$2.mergeNodeByPath = function (change, path) {\n var value = change.value;\n var document = value.document;\n var original = document.getDescendant(path);\n var previous = document.getPreviousSibling(path);\n\n if (!previous) {\n throw new Error('Unable to merge node with path \"' + path + '\", because it has no previous sibling.');\n }\n\n var position = previous.object == 'text' ? previous.text.length : previous.nodes.size;\n change.applyOperation({\n type: 'merge_node',\n value: value,\n path: path,\n position: position,\n // for undos to succeed we only need the type and data because\n // these are the only properties that get changed in the merge operation\n properties: {\n type: original.type,\n data: original.data\n },\n target: null\n });\n};\n/**\n * Move a node by `path` to a new parent by `newPath` and `index`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {String} newPath\n * @param {Number} index\n */\n\n\nChanges$2.moveNodeByPath = function (change, path, newPath, newIndex) {\n var value = change.value;\n change.applyOperation({\n type: 'move_node',\n value: value,\n path: path,\n newPath: newPath.concat(newIndex)\n });\n};\n/**\n * Remove mark from text at `offset` and `length` in node by `path`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Number} offset\n * @param {Number} length\n * @param {Mark} mark\n */\n\n\nChanges$2.removeMarkByPath = function (change, path, offset, length, mark) {\n mark = Mark.create(mark);\n var value = change.value;\n var document = value.document;\n var node = document.assertNode(path);\n var leaves = node.getLeaves();\n var operations = [];\n var bx = offset;\n var by = offset + length;\n var o = 0;\n leaves.forEach(function (leaf) {\n var ax = o;\n var ay = ax + leaf.text.length;\n o += leaf.text.length; // If the leaf doesn't overlap with the operation, continue on.\n\n if (ay < bx || by < ax) return; // If the leaf already has the mark, continue on.\n\n if (!leaf.marks.has(mark)) return; // Otherwise, determine which offset and characters overlap.\n\n var start = Math.max(ax, bx);\n var end = Math.min(ay, by);\n operations.push({\n type: 'remove_mark',\n value: value,\n path: path,\n offset: start,\n length: end - start,\n mark: mark\n });\n });\n change.applyOperations(operations);\n};\n/**\n * Remove all `marks` from node by `path`.\n *\n * @param {Change} change\n * @param {Array} path\n */\n\n\nChanges$2.removeAllMarksByPath = function (change, path) {\n var state = change.state;\n var document = state.document;\n var node = document.assertNode(path);\n var texts = node.object === 'text' ? [node] : node.getTextsAsArray();\n texts.forEach(function (text) {\n text.getMarksAsArray().forEach(function (mark) {\n change.removeMarkByKey(text.key, 0, text.text.length, mark);\n });\n });\n};\n/**\n * Remove a node by `path`.\n *\n * @param {Change} change\n * @param {Array} path\n */\n\n\nChanges$2.removeNodeByPath = function (change, path) {\n var value = change.value;\n var document = value.document;\n var node = document.assertNode(path);\n change.applyOperation({\n type: 'remove_node',\n value: value,\n path: path,\n node: node\n });\n};\n/**\n * Remove text at `offset` and `length` in node by `path`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Number} offset\n * @param {Number} length\n */\n\n\nChanges$2.removeTextByPath = function (change, path, offset, length) {\n var value = change.value;\n var document = value.document;\n var node = document.assertNode(path);\n var leaves = node.getLeaves();\n var text = node.text;\n var removals = [];\n var bx = offset;\n var by = offset + length;\n var o = 0;\n leaves.forEach(function (leaf) {\n var ax = o;\n var ay = ax + leaf.text.length;\n o += leaf.text.length; // If the leaf doesn't overlap with the removal, continue on.\n\n if (ay < bx || by < ax) return; // Otherwise, determine which offset and characters overlap.\n\n var start = Math.max(ax, bx);\n var end = Math.min(ay, by);\n var string = text.slice(start, end);\n removals.push({\n type: 'remove_text',\n value: value,\n path: path,\n offset: start,\n text: string,\n marks: leaf.marks\n });\n }); // Apply in reverse order, so subsequent removals don't impact previous ones.\n\n change.applyOperations(removals.reverse());\n};\n/**\n`* Replace a `node` with another `node`\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Object|Node} node\n */\n\n\nChanges$2.replaceNodeByPath = function (change, path, newNode) {\n newNode = Node.create(newNode);\n var index = path.last();\n var parentPath = PathUtils.lift(path);\n change.withoutNormalizing(function () {\n change.removeNodeByPath(path);\n change.insertNodeByPath(parentPath, index, newNode);\n });\n};\n/**\n * Replace A Length of Text with another string or text\n * @param {Change} change\n * @param {String} key\n * @param {Number} offset\n * @param {Number} length\n * @param {string} text\n * @param {Set} marks (optional)\n */\n\n\nChanges$2.replaceTextByPath = function (change, path, offset, length, text, marks) {\n var document = change.value.document;\n var node = document.assertNode(path);\n\n if (length + offset > node.text.length) {\n length = node.text.length - offset;\n }\n\n var range = document.createRange({\n anchor: {\n path: path,\n offset: offset\n },\n focus: {\n path: path,\n offset: offset + length\n }\n });\n var activeMarks = document.getActiveMarksAtRange(range);\n change.withoutNormalizing(function () {\n change.removeTextByPath(path, offset, length);\n\n if (!marks) {\n // Do not use mark at index when marks and activeMarks are both empty\n marks = activeMarks ? activeMarks : [];\n } else if (activeMarks) {\n // Do not use `has` because we may want to reset marks like font-size with\n // an updated data;\n activeMarks = activeMarks.filter(function (activeMark) {\n return !marks.find(function (m) {\n return activeMark.type === m.type;\n });\n });\n marks = activeMarks.merge(marks);\n }\n\n change.insertTextByPath(path, offset, text, marks);\n });\n};\n/**\n * Set `properties` on mark on text at `offset` and `length` in node by `path`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Number} offset\n * @param {Number} length\n * @param {Mark} mark\n */\n\n\nChanges$2.setMarkByPath = function (change, path, offset, length, mark, properties) {\n mark = Mark.create(mark);\n properties = Mark.createProperties(properties);\n var value = change.value;\n change.applyOperation({\n type: 'set_mark',\n value: value,\n path: path,\n offset: offset,\n length: length,\n mark: mark,\n properties: properties\n });\n};\n/**\n * Set `properties` on a node by `path`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Object|String} properties\n */\n\n\nChanges$2.setNodeByPath = function (change, path, properties) {\n properties = Node.createProperties(properties);\n var value = change.value;\n var document = value.document;\n var node = document.assertNode(path);\n change.applyOperation({\n type: 'set_node',\n value: value,\n path: path,\n node: node,\n properties: properties\n });\n};\n/**\n * Insert `text` at `offset` in node by `path`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {String} text\n * @param {Set} marks (optional)\n */\n\n\nChanges$2.setTextByPath = function (change, path, text, marks) {\n var value = change.value;\n var document = value.document;\n var node = document.assertNode(path);\n var end = node.text.length;\n change.replaceTextByPath(path, 0, end, text, marks);\n};\n/**\n * Split a node by `path` at `position`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Number} position\n * @param {Object} options\n */\n\n\nChanges$2.splitNodeByPath = function (change, path, position) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _options$target = options.target,\n target = _options$target === undefined ? null : _options$target;\n var value = change.value;\n var document = value.document;\n var node = document.getDescendant(path);\n change.applyOperation({\n type: 'split_node',\n value: value,\n path: path,\n position: position,\n target: target,\n properties: {\n type: node.type,\n data: node.data\n }\n });\n};\n/**\n * Split a node deeply down the tree by `path`, `textPath` and `textOffset`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Array} textPath\n * @param {Number} textOffset\n */\n\n\nChanges$2.splitDescendantsByPath = function (change, path, textPath, textOffset) {\n if (path.equals(textPath)) {\n change.splitNodeByPath(textPath, textOffset);\n return;\n }\n\n var value = change.value;\n var document = value.document;\n var node = document.assertNode(path);\n var text = document.assertNode(textPath);\n var ancestors = document.getAncestors(textPath);\n var nodes = ancestors.skipUntil(function (a) {\n return a.key == node.key;\n }).reverse().unshift(text);\n var previous = void 0;\n var index = void 0;\n change.withoutNormalizing(function () {\n nodes.forEach(function (n) {\n var prevIndex = index == null ? null : index;\n index = previous ? n.nodes.indexOf(previous) + 1 : textOffset;\n previous = n;\n change.splitNodeByKey(n.key, index, {\n target: prevIndex\n });\n });\n });\n};\n/**\n * Unwrap content from an inline parent with `properties`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Object|String} properties\n */\n\n\nChanges$2.unwrapInlineByPath = function (change, path, properties) {\n var value = change.value;\n var document = value.document,\n selection = value.selection;\n var node = document.assertNode(path);\n var first = node.getFirstText();\n var last = node.getLastText();\n var range = selection.moveToRangeOfNode(first, last);\n change.unwrapInlineAtRange(range, properties);\n};\n/**\n * Unwrap content from a block parent with `properties`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Object|String} properties\n */\n\n\nChanges$2.unwrapBlockByPath = function (change, path, properties) {\n var value = change.value;\n var document = value.document,\n selection = value.selection;\n var node = document.assertNode(path);\n var first = node.getFirstText();\n var last = node.getLastText();\n var range = selection.moveToRangeOfNode(first, last);\n change.unwrapBlockAtRange(range, properties);\n};\n/**\n * Unwrap a single node from its parent.\n *\n * If the node is surrounded with siblings, its parent will be\n * split. If the node is the only child, the parent is removed, and\n * simply replaced by the node itself. Cannot unwrap a root node.\n *\n * @param {Change} change\n * @param {Array} path\n */\n\n\nChanges$2.unwrapNodeByPath = function (change, path) {\n var value = change.value;\n var document = value.document;\n document.assertNode(path);\n var parentPath = PathUtils.lift(path);\n var parent = document.assertNode(parentPath);\n var index = path.last();\n var parentIndex = parentPath.last();\n var grandPath = PathUtils.lift(parentPath);\n var isFirst = index === 0;\n var isLast = index === parent.nodes.size - 1;\n change.withoutNormalizing(function () {\n if (parent.nodes.size === 1) {\n change.moveNodeByPath(path, grandPath, parentIndex + 1);\n change.removeNodeByPath(parentPath);\n } else if (isFirst) {\n change.moveNodeByPath(path, grandPath, parentIndex);\n } else if (isLast) {\n change.moveNodeByPath(path, grandPath, parentIndex + 1);\n } else {\n var updatedPath = PathUtils.increment(path, 1, parentPath.size - 1);\n updatedPath = updatedPath.set(updatedPath.size - 1, 0);\n change.splitNodeByPath(parentPath, index);\n change.moveNodeByPath(updatedPath, grandPath, parentIndex + 1);\n }\n });\n};\n/**\n * Wrap a node in a block with `properties`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Block|Object|String} block\n */\n\n\nChanges$2.wrapBlockByPath = function (change, path, block) {\n block = Block.create(block);\n block = block.set('nodes', block.nodes.clear());\n var parentPath = PathUtils.lift(path);\n var index = path.last();\n var newPath = PathUtils.increment(path);\n change.withoutNormalizing(function () {\n change.insertNodeByPath(parentPath, index, block);\n change.moveNodeByPath(newPath, path, 0);\n });\n};\n/**\n * Wrap a node in an inline with `properties`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Block|Object|String} inline\n */\n\n\nChanges$2.wrapInlineByPath = function (change, path, inline) {\n inline = Inline.create(inline);\n inline = inline.set('nodes', inline.nodes.clear());\n var parentPath = PathUtils.lift(path);\n var index = path.last();\n var newPath = PathUtils.increment(path);\n change.withoutNormalizing(function () {\n change.insertNodeByPath(parentPath, index, inline);\n change.moveNodeByPath(newPath, path, 0);\n });\n};\n/**\n * Wrap a node by `path` with `node`.\n *\n * @param {Change} change\n * @param {Array} path\n * @param {Node|Object} node\n */\n\n\nChanges$2.wrapNodeByPath = function (change, path, node) {\n node = Node.create(node);\n\n if (node.object === 'block') {\n change.wrapBlockByPath(path, node);\n } else if (node.object === 'inline') {\n change.wrapInlineByPath(path, node);\n }\n};\n/**\n * Mix in `*ByKey` variants.\n */\n\n\nvar CHANGES = ['addMark', 'insertFragment', 'insertNode', 'insertText', 'mergeNode', 'removeMark', 'removeAllMarks', 'removeNode', 'setText', 'replaceText', 'removeText', 'replaceNode', 'setMark', 'setNode', 'splitNode', 'unwrapInline', 'unwrapBlock', 'unwrapNode', 'wrapBlock', 'wrapInline', 'wrapNode'];\n\nvar _loop = function _loop(method) {\n Changes$2[method + 'ByKey'] = function (change, key) {\n for (var _len3 = arguments.length, args = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n args[_key3 - 2] = arguments[_key3];\n }\n\n var value = change.value;\n var document = value.document;\n var path = document.assertPath(key);\n change[method + 'ByPath'].apply(change, [path].concat(args));\n };\n};\n\nvar _iteratorNormalCompletion = true;\nvar _didIteratorError = false;\nvar _iteratorError = undefined;\n\ntry {\n for (var _iterator = CHANGES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var method = _step.value;\n\n _loop(method);\n } // Moving nodes takes two keys, so it's slightly different.\n\n} catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n} finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n}\n\nChanges$2.moveNodeByKey = function (change, key, newKey) {\n for (var _len = arguments.length, args = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n args[_key - 3] = arguments[_key];\n }\n\n var value = change.value;\n var document = value.document;\n var path = document.assertPath(key);\n var newPath = document.assertPath(newKey);\n change.moveNodeByPath.apply(change, [path, newPath].concat(args));\n}; // Splitting descendants takes two keys, so it's slightly different.\n\n\nChanges$2.splitDescendantsByKey = function (change, key, textKey) {\n for (var _len2 = arguments.length, args = Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {\n args[_key2 - 3] = arguments[_key2];\n }\n\n var value = change.value;\n var document = value.document;\n var path = document.assertPath(key);\n var textPath = document.assertPath(textKey);\n change.splitDescendantsByPath.apply(change, [path, textPath].concat(args));\n};\n/**\n * Changes.\n *\n * @type {Object}\n */\n\n\nvar Changes$3 = {};\n/**\n * Redo to the next value in the history.\n *\n * @param {Change} change\n */\n\nChanges$3.redo = function (change) {\n var value = change.value;\n var _value = value,\n history = _value.history;\n if (!history) return;\n var _history = history,\n undos = _history.undos,\n redos = _history.redos;\n var next = redos.peek();\n if (!next) return; // Shift the next value into the undo stack.\n\n redos = redos.pop();\n undos = undos.push(next); // Replay the next operations.\n\n next.forEach(function (op) {\n var _op = op,\n type = _op.type,\n properties = _op.properties; // When the operation mutates the selection, omit its `isFocused` value to\n // prevent the editor focus from changing during redoing.\n\n if (type == 'set_selection') {\n op = op.set('properties', omit(properties, 'isFocused'));\n }\n\n change.withoutSaving(function () {\n change.applyOperation(op);\n });\n }); // Update the history.\n\n value = change.value;\n history = history.set('undos', undos).set('redos', redos);\n value = value.set('history', history);\n change.value = value;\n};\n/**\n * Undo the previous operations in the history.\n *\n * @param {Change} change\n */\n\n\nChanges$3.undo = function (change) {\n var value = change.value;\n var _value2 = value,\n history = _value2.history;\n if (!history) return;\n var _history2 = history,\n undos = _history2.undos,\n redos = _history2.redos;\n var previous = undos.peek();\n if (!previous) return; // Shift the previous operations into the redo stack.\n\n undos = undos.pop();\n redos = redos.push(previous); // Replay the inverse of the previous operations.\n\n previous.slice().reverse().map(function (op) {\n return op.invert();\n }).forEach(function (inverse) {\n var _inverse = inverse,\n type = _inverse.type,\n properties = _inverse.properties; // When the operation mutates the selection, omit its `isFocused` value to\n // prevent the editor focus from changing during undoing.\n\n if (type == 'set_selection') {\n inverse = inverse.set('properties', omit(properties, 'isFocused'));\n }\n\n change.withoutSaving(function () {\n change.applyOperation(inverse);\n });\n }); // Update the history.\n\n value = change.value;\n history = history.set('undos', undos).set('redos', redos);\n value = value.set('history', history);\n change.value = value;\n};\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\n\nvar DEFAULTS$6 = {\n key: null,\n offset: null,\n path: null\n /**\n * Point.\n *\n * @type {Point}\n */\n\n};\n\nvar Point = function (_Record) {\n inherits(Point, _Record);\n\n function Point() {\n classCallCheck(this, Point);\n return possibleConstructorReturn(this, (Point.__proto__ || Object.getPrototypeOf(Point)).apply(this, arguments));\n }\n\n createClass(Point, [{\n key: 'isAtEndOfNode',\n\n /**\n * Check whether the point is at the end of a `node`.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n value: function isAtEndOfNode(node) {\n if (this.isUnset) return false;\n var last = node.getLastText();\n var is$$1 = this.key === last.key && this.offset === last.text.length;\n return is$$1;\n }\n /**\n * Check whether the point is at the start of a `node`.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n }, {\n key: 'isAtStartOfNode',\n value: function isAtStartOfNode(node) {\n if (this.isUnset) return false; // PERF: Do a check for a `0` offset first since it's quickest.\n\n if (this.offset != 0) return false;\n var first = node.getFirstText();\n var is$$1 = this.key === first.key;\n return is$$1;\n }\n /**\n * Check whether the point is in a `node`.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n }, {\n key: 'isInNode',\n value: function isInNode(node) {\n if (this.isUnset) return false;\n if (node.object === 'text' && node.key === this.key) return true;\n if (node.hasNode(this.key)) return true;\n return false;\n }\n /**\n * Move the point's offset backward `n` characters.\n *\n * @param {Number} n (optional)\n * @return {Point}\n */\n\n }, {\n key: 'moveBackward',\n value: function moveBackward() {\n var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n if (n === 0) return this;\n if (n < 0) return this.moveForward(-n);\n var point = this.setOffset(this.offset - n);\n return point;\n }\n /**\n * Move the point's offset forward `n` characters.\n *\n * @param {Number} n (optional)\n * @return {Point}\n */\n\n }, {\n key: 'moveForward',\n value: function moveForward() {\n var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n if (n === 0) return this;\n if (n < 0) return this.moveBackward(-n);\n var point = this.setOffset(this.offset + n);\n return point;\n }\n /**\n * Move the point's anchor point to a new `path` and `offset`.\n *\n * Optionally, the `path` can be a key string, or omitted entirely in which\n * case it would be the offset number.\n *\n * @param {List|String|Number} path\n * @param {Number} offset\n * @return {Point}\n */\n\n }, {\n key: 'moveTo',\n value: function moveTo(path) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var key = this.key;\n\n if (typeof path === 'number') {\n offset = path;\n path = this.path;\n } else if (typeof path === 'string') {\n key = path;\n path = key === this.key ? this.path : null;\n } else {\n key = path.equals(this.path) ? this.key : null;\n }\n\n var point = this.merge({\n key: key,\n path: path,\n offset: offset\n });\n return point;\n }\n /**\n * Move the point's anchor point to the start of a `node`.\n *\n * @param {Node} node\n * @return {Point}\n */\n\n }, {\n key: 'moveToStartOfNode',\n value: function moveToStartOfNode(node) {\n var first = node.getFirstText();\n var point = this.moveTo(first.key, 0);\n return point;\n }\n /**\n * Move the point's anchor point to the end of a `node`.\n *\n * @param {Node} node\n * @return {Point}\n */\n\n }, {\n key: 'moveToEndOfNode',\n value: function moveToEndOfNode(node) {\n var last = node.getLastText();\n var point = this.moveTo(last.key, last.text.length);\n return point;\n }\n /**\n * Normalize the point relative to a `node`, ensuring that its key and path\n * reference a text node, or that it gets unset.\n *\n * @param {Node} node\n * @return {Point}\n */\n\n }, {\n key: 'normalize',\n value: function normalize(node) {\n // If both the key and path are null, there's no reference to a node, so\n // make sure it is entirely unset.\n if (this.key == null && this.path == null) {\n return this.setOffset(null);\n }\n\n var key = this.key,\n offset = this.offset,\n path = this.path;\n var target = node.getNode(key || path);\n\n if (!target) {\n warning(false, \"A point's `path` or `key` invalid and was reset!\");\n var text = node.getFirstText();\n if (!text) return Point.create();\n\n var _point = this.merge({\n key: text.key,\n offset: 0,\n path: node.getPath(text.key)\n });\n\n return _point;\n }\n\n if (target.object !== 'text') {\n warning(false, 'A point should not reference a non-text node!');\n\n var _text = target.getTextAtOffset(offset);\n\n var before = target.getOffset(_text.key);\n\n var _point2 = this.merge({\n offset: offset - before,\n key: _text.key,\n path: node.getPath(_text.key)\n });\n\n return _point2;\n }\n\n if (target && path && key && key !== target.key) {\n warning(false, \"A point's `key` did not match its `path`!\");\n }\n\n var point = this.merge({\n key: target.key,\n path: path == null ? node.getPath(target.key) : path,\n offset: offset == null ? 0 : Math.min(offset, target.text.length)\n });\n return point;\n }\n /**\n * Set the point's key to a new `key`.\n *\n * @param {String} key\n * @return {Point}\n */\n\n }, {\n key: 'setKey',\n value: function setKey(key) {\n if (key !== null) {\n key = KeyUtils.create(key);\n }\n\n var point = this.set('key', key);\n return point;\n }\n /**\n * Set the point's offset to a new `offset`.\n *\n * @param {Number} offset\n * @return {Point}\n */\n\n }, {\n key: 'setOffset',\n value: function setOffset(offset) {\n var point = this.set('offset', offset);\n return point;\n }\n /**\n * Set the point's path to a new `path`.\n *\n * @param {List|Array} path\n * @return {Point}\n */\n\n }, {\n key: 'setPath',\n value: function setPath(path) {\n if (path !== null) {\n path = PathUtils.create(path);\n }\n\n var point = this.set('path', path);\n return point;\n }\n /**\n * Return a JSON representation of the point.\n *\n * @param {Object} options\n * @return {Object}\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var object = {\n object: this.object,\n key: this.key,\n offset: this.offset,\n path: this.path && this.path.toArray()\n };\n\n if (!options.preserveKeys) {\n delete object.key;\n }\n\n return object;\n }\n /**\n * Unset the point.\n *\n * @return {Point}\n */\n\n }, {\n key: 'unset',\n value: function unset() {\n return this.merge({\n key: null,\n offset: null,\n path: null\n });\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'point';\n }\n /**\n * Check whether all properties of the point are set.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'isSet',\n get: function get$$1() {\n return this.key != null && this.offset != null && this.path != null;\n }\n /**\n * Check whether any property of the point is not set.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'isUnset',\n get: function get$$1() {\n return !this.isSet;\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Point` with `attrs`.\n *\n * @param {Object|Point} attrs\n * @return {Point}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Point.isPoint(attrs)) {\n return attrs;\n }\n\n if (isPlainObject(attrs)) {\n return Point.fromJSON(attrs);\n }\n\n throw new Error('`Point.create` only accepts objects or points, but you passed it: ' + attrs);\n }\n /**\n * Create a dictionary of settable point properties from `attrs`.\n *\n * @param {Object|Point} attrs\n * @return {Object}\n */\n\n }, {\n key: 'createProperties',\n value: function createProperties() {\n var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Point.isPoint(a)) {\n return {\n key: a.key,\n offset: a.offset,\n path: a.path\n };\n }\n\n if (isPlainObject(a)) {\n var p = {};\n if ('key' in a) p.key = a.key;\n if ('offset' in a) p.offset = a.offset;\n if ('path' in a) p.path = PathUtils.create(a.path); // If only a path is set, or only a key is set, ensure that the other is\n // set to null so that it can be normalized back to the right value.\n // Otherwise we won't realize that the path and key don't match anymore.\n\n if ('path' in a && !('key' in a)) p.key = null;\n if ('key' in a && !('path' in a)) p.path = null;\n return p;\n }\n\n throw new Error('`Point.createProperties` only accepts objects or points, but you passed it: ' + a);\n }\n /**\n * Create a `Point` from a JSON `object`.\n *\n * @param {Object} object\n * @return {Point}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n var _object$key = object.key,\n key = _object$key === undefined ? null : _object$key,\n _object$offset = object.offset,\n offset = _object$offset === undefined ? null : _object$offset,\n _object$path = object.path,\n path = _object$path === undefined ? null : _object$path;\n var point = new Point({\n key: key,\n offset: offset,\n path: PathUtils.create(path)\n });\n return point;\n }\n /**\n * Check if an `obj` is a `Point`.\n *\n * @param {Any} obj\n * @return {Boolean}\n */\n\n }, {\n key: 'isPoint',\n value: function isPoint(obj) {\n return !!(obj && obj[MODEL_TYPES.POINT]);\n }\n }]);\n return Point;\n}(Record(DEFAULTS$6));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nPoint.prototype[MODEL_TYPES.POINT] = true;\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\nvar DEFAULTS$7 = {\n anchor: Point.create(),\n focus: Point.create(),\n mark: undefined\n /**\n * Decoration.\n *\n * @type {Decoration}\n */\n\n};\n\nvar Decoration = function (_Record) {\n inherits(Decoration, _Record);\n\n function Decoration() {\n classCallCheck(this, Decoration);\n return possibleConstructorReturn(this, (Decoration.__proto__ || Object.getPrototypeOf(Decoration)).apply(this, arguments));\n }\n\n createClass(Decoration, [{\n key: 'setProperties',\n\n /**\n * Set new `properties` on the decoration.\n *\n * @param {Object|Range|Selection} properties\n * @return {Range}\n */\n value: function setProperties(properties) {\n properties = Decoration.createProperties(properties);\n var _properties = properties,\n anchor = _properties.anchor,\n focus = _properties.focus,\n mark = _properties.mark;\n var props = {};\n\n if (anchor) {\n props.anchor = Point.create(anchor);\n }\n\n if (focus) {\n props.focus = Point.create(focus);\n }\n\n if (mark) {\n props.mark = Mark.create(mark);\n }\n\n var decoration = this.merge(props);\n return decoration;\n }\n /**\n * Return a JSON representation of the decoration.\n *\n * @param {Object} options\n * @return {Object}\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var object = {\n object: this.object,\n anchor: this.anchor.toJSON(options),\n focus: this.focus.toJSON(options),\n mark: this.mark.toJSON(options)\n };\n return object;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'decoration';\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Decoration` with `attrs`.\n *\n * @param {Object|Decoration} attrs\n * @return {Decoration}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Decoration.isDecoration(attrs)) {\n return attrs;\n }\n\n if (Range.isRange(attrs)) {\n return Decoration.fromJSON(Range.createProperties(attrs));\n }\n\n if (isPlainObject(attrs)) {\n return Decoration.fromJSON(attrs);\n }\n\n throw new Error('`Decoration.create` only accepts objects or decorations, but you passed it: ' + attrs);\n }\n /**\n * Create a list of `Ranges` from `elements`.\n *\n * @param {Array|List} elements\n * @return {List}\n */\n\n }, {\n key: 'createList',\n value: function createList() {\n var elements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (List.isList(elements) || Array.isArray(elements)) {\n var list = new List(elements.map(Decoration.create));\n return list;\n }\n\n throw new Error('`Decoration.createList` only accepts arrays or lists, but you passed it: ' + elements);\n }\n /**\n * Create a dictionary of settable decoration properties from `attrs`.\n *\n * @param {Object|String|Decoration} attrs\n * @return {Object}\n */\n\n }, {\n key: 'createProperties',\n value: function createProperties() {\n var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Decoration.isDecoration(a)) {\n return {\n anchor: Point.createProperties(a.anchor),\n focus: Point.createProperties(a.focus),\n mark: Mark.create(a.mark)\n };\n }\n\n if (isPlainObject(a)) {\n var p = {};\n if ('anchor' in a) p.anchor = Point.create(a.anchor);\n if ('focus' in a) p.focus = Point.create(a.focus);\n if ('mark' in a) p.mark = Mark.create(a.mark);\n return p;\n }\n\n throw new Error('`Decoration.createProperties` only accepts objects or decorations, but you passed it: ' + a);\n }\n /**\n * Create a `Decoration` from a JSON `object`.\n *\n * @param {Object} object\n * @return {Decoration}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n var anchor = object.anchor,\n focus = object.focus,\n mark = object.mark;\n\n if (!mark) {\n throw new Error('Decorations must be created with a `mark`, but you passed: ' + JSON.stringify(object));\n }\n\n var decoration = new Decoration({\n anchor: Point.fromJSON(anchor || {}),\n focus: Point.fromJSON(focus || {}),\n mark: Mark.fromJSON(mark)\n });\n return decoration;\n }\n /**\n * Check if an `obj` is a `Decoration`.\n *\n * @param {Any} obj\n * @return {Boolean}\n */\n\n }, {\n key: 'isDecoration',\n value: function isDecoration(obj) {\n return !!(obj && obj[MODEL_TYPES.DECORATION]);\n }\n }]);\n return Decoration;\n}(Record(DEFAULTS$7));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nDecoration.prototype[MODEL_TYPES.DECORATION] = true;\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\nvar DEFAULTS$8 = {\n anchor: Point.create(),\n focus: Point.create()\n /**\n * Range.\n *\n * @type {Range}\n */\n\n};\n\nvar Range = function (_Record) {\n inherits(Range, _Record);\n\n function Range() {\n classCallCheck(this, Range);\n return possibleConstructorReturn(this, (Range.__proto__ || Object.getPrototypeOf(Range)).apply(this, arguments));\n }\n\n createClass(Range, [{\n key: 'toJSON',\n\n /**\n * Return a JSON representation of the range.\n *\n * @param {Object} options\n * @return {Object}\n */\n value: function toJSON() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var object = {\n object: this.object,\n anchor: this.anchor.toJSON(options),\n focus: this.focus.toJSON(options)\n };\n return object;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'range';\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Range` with `attrs`.\n *\n * @param {Object|Range} attrs\n * @return {Range}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Range.isRange(attrs)) {\n if (attrs.object === 'range') {\n return attrs;\n } else {\n return Range.fromJSON(Range.createProperties(attrs));\n }\n }\n\n if (isPlainObject(attrs)) {\n return Range.fromJSON(attrs);\n }\n\n throw new Error('`Range.create` only accepts objects or ranges, but you passed it: ' + attrs);\n }\n /**\n * Create a list of `Ranges` from `elements`.\n *\n * @param {Array|List} elements\n * @return {List}\n */\n\n }, {\n key: 'createList',\n value: function createList() {\n var elements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (List.isList(elements) || Array.isArray(elements)) {\n var list = new List(elements.map(Range.create));\n return list;\n }\n\n throw new Error('`Range.createList` only accepts arrays or lists, but you passed it: ' + elements);\n }\n /**\n * Create a dictionary of settable range properties from `attrs`.\n *\n * @param {Object|String|Range} attrs\n * @return {Object}\n */\n\n }, {\n key: 'createProperties',\n value: function createProperties() {\n var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Range.isRange(a)) {\n return {\n anchor: Point.createProperties(a.anchor),\n focus: Point.createProperties(a.focus)\n };\n }\n\n if (isPlainObject(a)) {\n var p = {};\n if ('anchor' in a) p.anchor = Point.create(a.anchor);\n if ('focus' in a) p.focus = Point.create(a.focus);\n return p;\n }\n\n throw new Error('`Range.createProperties` only accepts objects, decorations, ranges or selections, but you passed it: ' + a);\n }\n /**\n * Create a `Range` from a JSON `object`.\n *\n * @param {Object} object\n * @return {Range}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n var anchor = object.anchor,\n focus = object.focus;\n var range = new Range({\n anchor: Point.fromJSON(anchor || {}),\n focus: Point.fromJSON(focus || {})\n });\n return range;\n }\n /**\n * Check if an `obj` is a `Range`, or is range-like.\n *\n * @param {Any} obj\n * @return {Boolean}\n */\n\n }, {\n key: 'isRange',\n value: function isRange(obj) {\n return !!(obj && obj[MODEL_TYPES.RANGE]) || Decoration.isDecoration(obj) || Selection.isSelection(obj);\n }\n }]);\n return Range;\n}(Record(DEFAULTS$8));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nRange.prototype[MODEL_TYPES.RANGE] = true;\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\nvar DEFAULTS$9 = {\n anchor: Point.create(),\n focus: Point.create(),\n isFocused: false,\n marks: null\n /**\n * Selection.\n *\n * @type {Selection}\n */\n\n};\n\nvar Selection = function (_Record) {\n inherits(Selection, _Record);\n\n function Selection() {\n classCallCheck(this, Selection);\n return possibleConstructorReturn(this, (Selection.__proto__ || Object.getPrototypeOf(Selection)).apply(this, arguments));\n }\n\n createClass(Selection, [{\n key: 'setIsFocused',\n\n /**\n * Set the `isFocused` property to a new `value`.\n *\n * @param {Boolean} value\n * @return {Selection}\n */\n value: function setIsFocused(value) {\n var selection = this.set('isFocused', value);\n return selection;\n }\n /**\n * Set the `marks` property to a new set of `marks`.\n *\n * @param {Set} marks\n * @return {Selection}\n */\n\n }, {\n key: 'setMarks',\n value: function setMarks(marks) {\n var selection = this.set('marks', marks);\n return selection;\n }\n /**\n * Set new `properties` on the selection.\n *\n * @param {Object|Range|Selection} properties\n * @return {Range}\n */\n\n }, {\n key: 'setProperties',\n value: function setProperties(properties) {\n properties = Selection.createProperties(properties);\n var _properties = properties,\n anchor = _properties.anchor,\n focus = _properties.focus,\n props = objectWithoutProperties(_properties, ['anchor', 'focus']);\n\n if (anchor) {\n props.anchor = Point.create(anchor);\n }\n\n if (focus) {\n props.focus = Point.create(focus);\n }\n\n var selection = this.merge(props);\n return selection;\n }\n /**\n * Return a JSON representation of the selection.\n *\n * @param {Object} options\n * @return {Object}\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var object = {\n object: this.object,\n anchor: this.anchor.toJSON(options),\n focus: this.focus.toJSON(options),\n isFocused: this.isFocused,\n marks: this.marks == null ? null : this.marks.toArray().map(function (m) {\n return m.toJSON();\n })\n };\n return object;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'selection';\n }\n /**\n * Check whether the selection is blurred.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'isBlurred',\n get: function get$$1() {\n return !this.isFocused;\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Selection` with `attrs`.\n *\n * @param {Object|Selection} attrs\n * @return {Selection}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Selection.isSelection(attrs)) {\n return attrs;\n }\n\n if (Range.isRange(attrs)) {\n return Selection.fromJSON(Range.createProperties(attrs));\n }\n\n if (isPlainObject(attrs)) {\n return Selection.fromJSON(attrs);\n }\n\n throw new Error('`Selection.create` only accepts objects, ranges or selections, but you passed it: ' + attrs);\n }\n /**\n * Create a dictionary of settable selection properties from `attrs`.\n *\n * @param {Object|String|Selection} attrs\n * @return {Object}\n */\n\n }, {\n key: 'createProperties',\n value: function createProperties() {\n var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Selection.isSelection(a)) {\n return {\n anchor: Point.createProperties(a.anchor),\n focus: Point.createProperties(a.focus),\n isFocused: a.isFocused,\n marks: a.marks\n };\n }\n\n if (Range.isRange(a)) {\n return {\n anchor: Point.createProperties(a.anchor),\n focus: Point.createProperties(a.focus)\n };\n }\n\n if (isPlainObject(a)) {\n var p = {};\n if ('anchor' in a) p.anchor = Point.create(a.anchor);\n if ('focus' in a) p.focus = Point.create(a.focus);\n if ('isFocused' in a) p.isFocused = a.isFocused;\n if ('marks' in a) p.marks = a.marks == null ? null : Mark.createSet(a.marks);\n return p;\n }\n\n throw new Error('`Selection.createProperties` only accepts objects, ranges or selections, but you passed it: ' + a);\n }\n /**\n * Create a `Selection` from a JSON `object`.\n *\n * @param {Object} object\n * @return {Selection}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n var anchor = object.anchor,\n focus = object.focus,\n _object$isFocused = object.isFocused,\n isFocused = _object$isFocused === undefined ? false : _object$isFocused,\n _object$marks = object.marks,\n marks = _object$marks === undefined ? null : _object$marks;\n var selection = new Selection({\n anchor: Point.fromJSON(anchor || {}),\n focus: Point.fromJSON(focus || {}),\n isFocused: isFocused,\n marks: marks == null ? null : new Set(marks.map(Mark.fromJSON))\n });\n return selection;\n }\n /**\n * Check if an `obj` is a `Selection`.\n *\n * @param {Any} obj\n * @return {Boolean}\n */\n\n }, {\n key: 'isSelection',\n value: function isSelection(obj) {\n return !!(obj && obj[MODEL_TYPES.SELECTION]);\n }\n }]);\n return Selection;\n}(Record(DEFAULTS$9));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nSelection.prototype[MODEL_TYPES.SELECTION] = true;\nvar Changes$4 = {};\n\nChanges$4.blur = function (change) {\n change.select({\n isFocused: false\n });\n};\n\nChanges$4.deselect = function (change) {\n var range = Selection.create();\n change.select(range);\n};\n\nChanges$4.focus = function (change) {\n change.select({\n isFocused: true\n });\n};\n\nChanges$4.flip = function (change) {\n change.call(proxy, 'flip');\n};\n\nChanges$4.moveAnchorBackward = function (change) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n change.call.apply(change, [pointBackward, 'anchor'].concat(args));\n};\n\nChanges$4.moveAnchorForward = function (change) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n change.call.apply(change, [pointForward, 'anchor'].concat(args));\n};\n\nChanges$4.moveAnchorTo = function (change) {\n for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n change.call.apply(change, [proxy, 'moveAnchorTo'].concat(args));\n};\n\nChanges$4.moveAnchorToEndOfBlock = function (change) {\n change.call(pointEdgeObject, 'anchor', 'end', 'block');\n};\n\nChanges$4.moveAnchorToEndOfInline = function (change) {\n change.call(pointEdgeObject, 'anchor', 'end', 'inline');\n};\n\nChanges$4.moveAnchorToEndOfDocument = function (change) {\n change.moveAnchorToEndOfNode(change.value.document).moveToAnchor();\n};\n\nChanges$4.moveAnchorToEndOfNextBlock = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'end', 'next', 'block');\n};\n\nChanges$4.moveAnchorToEndOfNextInline = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'end', 'next', 'inline');\n};\n\nChanges$4.moveAnchorToEndOfNextText = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'end', 'next', 'text');\n};\n\nChanges$4.moveAnchorToEndOfNode = function (change) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n change.call.apply(change, [proxy, 'moveAnchorToEndOfNode'].concat(args));\n};\n\nChanges$4.moveAnchorToEndOfPreviousBlock = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'end', 'previous', 'block');\n};\n\nChanges$4.moveAnchorToEndOfPreviousInline = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'end', 'previous', 'inline');\n};\n\nChanges$4.moveAnchorToEndOfPreviousText = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'end', 'previous', 'text');\n};\n\nChanges$4.moveAnchorToEndOfText = function (change) {\n change.call(pointEdgeObject, 'anchor', 'end', 'text');\n};\n\nChanges$4.moveAnchorToStartOfBlock = function (change) {\n change.call(pointEdgeObject, 'anchor', 'start', 'block');\n};\n\nChanges$4.moveAnchorToStartOfDocument = function (change) {\n change.moveAnchorToStartOfNode(change.value.document).moveToAnchor();\n};\n\nChanges$4.moveAnchorToStartOfInline = function (change) {\n change.call(pointEdgeObject, 'anchor', 'start', 'inline');\n};\n\nChanges$4.moveAnchorToStartOfNextBlock = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'start', 'next', 'block');\n};\n\nChanges$4.moveAnchorToStartOfNextInline = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'start', 'next', 'inline');\n};\n\nChanges$4.moveAnchorToStartOfNextText = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'start', 'next', 'text');\n};\n\nChanges$4.moveAnchorToStartOfNode = function (change) {\n for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n change.call.apply(change, [proxy, 'moveAnchorToStartOfNode'].concat(args));\n};\n\nChanges$4.moveAnchorToStartOfPreviousBlock = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'start', 'previous', 'block');\n};\n\nChanges$4.moveAnchorToStartOfPreviousInline = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'start', 'previous', 'inline');\n};\n\nChanges$4.moveAnchorToStartOfPreviousText = function (change) {\n change.call(pointEdgeSideObject, 'anchor', 'start', 'previous', 'text');\n};\n\nChanges$4.moveAnchorToStartOfText = function (change) {\n change.call(pointEdgeObject, 'anchor', 'start', 'text');\n};\n\nChanges$4.moveBackward = function (change) {\n var _change$moveAnchorBac;\n\n for (var _len6 = arguments.length, args = Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n\n (_change$moveAnchorBac = change.moveAnchorBackward.apply(change, args)).moveFocusBackward.apply(_change$moveAnchorBac, args);\n};\n\nChanges$4.moveEndBackward = function (change) {\n for (var _len7 = arguments.length, args = Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {\n args[_key7 - 1] = arguments[_key7];\n }\n\n change.call.apply(change, [pointBackward, 'end'].concat(args));\n};\n\nChanges$4.moveEndForward = function (change) {\n for (var _len8 = arguments.length, args = Array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) {\n args[_key8 - 1] = arguments[_key8];\n }\n\n change.call.apply(change, [pointForward, 'end'].concat(args));\n};\n\nChanges$4.moveEndTo = function (change) {\n for (var _len9 = arguments.length, args = Array(_len9 > 1 ? _len9 - 1 : 0), _key9 = 1; _key9 < _len9; _key9++) {\n args[_key9 - 1] = arguments[_key9];\n }\n\n change.call.apply(change, [proxy, 'moveEndTo'].concat(args));\n};\n\nChanges$4.moveEndToEndOfBlock = function (change) {\n change.call(pointEdgeObject, 'end', 'end', 'block');\n};\n\nChanges$4.moveEndToEndOfDocument = function (change) {\n change.moveEndToEndOfNode(change.value.document).moveToEnd();\n};\n\nChanges$4.moveEndToEndOfInline = function (change) {\n change.call(pointEdgeObject, 'end', 'end', 'inline');\n};\n\nChanges$4.moveEndToEndOfNextBlock = function (change) {\n change.call(pointEdgeSideObject, 'end', 'end', 'next', 'block');\n};\n\nChanges$4.moveEndToEndOfNextInline = function (change) {\n change.call(pointEdgeSideObject, 'end', 'end', 'next', 'inline');\n};\n\nChanges$4.moveEndToEndOfNextText = function (change) {\n change.call(pointEdgeSideObject, 'end', 'end', 'next', 'text');\n};\n\nChanges$4.moveEndToEndOfNode = function (change) {\n for (var _len10 = arguments.length, args = Array(_len10 > 1 ? _len10 - 1 : 0), _key10 = 1; _key10 < _len10; _key10++) {\n args[_key10 - 1] = arguments[_key10];\n }\n\n change.call.apply(change, [proxy, 'moveEndToEndOfNode'].concat(args));\n};\n\nChanges$4.moveEndToEndOfPreviousBlock = function (change) {\n change.call(pointEdgeSideObject, 'end', 'end', 'previous', 'block');\n};\n\nChanges$4.moveEndToEndOfPreviousInline = function (change) {\n change.call(pointEdgeSideObject, 'end', 'end', 'previous', 'inline');\n};\n\nChanges$4.moveEndToEndOfPreviousText = function (change) {\n change.call(pointEdgeSideObject, 'end', 'end', 'previous', 'text');\n};\n\nChanges$4.moveEndToEndOfText = function (change) {\n change.call(pointEdgeObject, 'end', 'end', 'text');\n};\n\nChanges$4.moveEndToStartOfBlock = function (change) {\n change.call(pointEdgeObject, 'end', 'start', 'block');\n};\n\nChanges$4.moveEndToStartOfDocument = function (change) {\n change.moveEndToStartOfNode(change.value.document).moveToEnd();\n};\n\nChanges$4.moveEndToStartOfInline = function (change) {\n change.call(pointEdgeObject, 'end', 'start', 'inline');\n};\n\nChanges$4.moveEndToStartOfNextBlock = function (change) {\n change.call(pointEdgeSideObject, 'end', 'start', 'next', 'block');\n};\n\nChanges$4.moveEndToStartOfNextInline = function (change) {\n change.call(pointEdgeSideObject, 'end', 'start', 'next', 'inline');\n};\n\nChanges$4.moveEndToStartOfNextText = function (change) {\n change.call(pointEdgeSideObject, 'end', 'start', 'next', 'text');\n};\n\nChanges$4.moveEndToStartOfNode = function (change) {\n for (var _len11 = arguments.length, args = Array(_len11 > 1 ? _len11 - 1 : 0), _key11 = 1; _key11 < _len11; _key11++) {\n args[_key11 - 1] = arguments[_key11];\n }\n\n change.call.apply(change, [proxy, 'moveEndToStartOfNode'].concat(args));\n};\n\nChanges$4.moveEndToStartOfPreviousBlock = function (change) {\n change.call(pointEdgeSideObject, 'end', 'start', 'previous', 'block');\n};\n\nChanges$4.moveEndToStartOfPreviousInline = function (change) {\n change.call(pointEdgeSideObject, 'end', 'start', 'previous', 'inline');\n};\n\nChanges$4.moveEndToStartOfPreviousText = function (change) {\n change.call(pointEdgeSideObject, 'end', 'start', 'previous', 'text');\n};\n\nChanges$4.moveEndToStartOfText = function (change) {\n change.call(pointEdgeObject, 'end', 'start', 'text');\n};\n\nChanges$4.moveFocusBackward = function (change) {\n for (var _len12 = arguments.length, args = Array(_len12 > 1 ? _len12 - 1 : 0), _key12 = 1; _key12 < _len12; _key12++) {\n args[_key12 - 1] = arguments[_key12];\n }\n\n change.call.apply(change, [pointBackward, 'focus'].concat(args));\n};\n\nChanges$4.moveFocusForward = function (change) {\n for (var _len13 = arguments.length, args = Array(_len13 > 1 ? _len13 - 1 : 0), _key13 = 1; _key13 < _len13; _key13++) {\n args[_key13 - 1] = arguments[_key13];\n }\n\n change.call.apply(change, [pointForward, 'focus'].concat(args));\n};\n\nChanges$4.moveFocusTo = function (change) {\n for (var _len14 = arguments.length, args = Array(_len14 > 1 ? _len14 - 1 : 0), _key14 = 1; _key14 < _len14; _key14++) {\n args[_key14 - 1] = arguments[_key14];\n }\n\n change.call.apply(change, [proxy, 'moveFocusTo'].concat(args));\n};\n\nChanges$4.moveFocusToEndOfBlock = function (change) {\n change.call(pointEdgeObject, 'focus', 'end', 'block');\n};\n\nChanges$4.moveFocusToEndOfDocument = function (change) {\n change.moveFocusToEndOfNode(change.value.document).moveToFocus();\n};\n\nChanges$4.moveFocusToEndOfInline = function (change) {\n change.call(pointEdgeObject, 'focus', 'end', 'inline');\n};\n\nChanges$4.moveFocusToEndOfNextBlock = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'end', 'next', 'block');\n};\n\nChanges$4.moveFocusToEndOfNextInline = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'end', 'next', 'inline');\n};\n\nChanges$4.moveFocusToEndOfNextText = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'end', 'next', 'text');\n};\n\nChanges$4.moveFocusToEndOfNode = function (change) {\n for (var _len15 = arguments.length, args = Array(_len15 > 1 ? _len15 - 1 : 0), _key15 = 1; _key15 < _len15; _key15++) {\n args[_key15 - 1] = arguments[_key15];\n }\n\n change.call.apply(change, [proxy, 'moveFocusToEndOfNode'].concat(args));\n};\n\nChanges$4.moveFocusToEndOfPreviousBlock = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'end', 'previous', 'block');\n};\n\nChanges$4.moveFocusToEndOfPreviousInline = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'end', 'previous', 'inline');\n};\n\nChanges$4.moveFocusToEndOfPreviousText = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'end', 'previous', 'text');\n};\n\nChanges$4.moveFocusToEndOfText = function (change) {\n change.call(pointEdgeObject, 'focus', 'end', 'text');\n};\n\nChanges$4.moveFocusToStartOfBlock = function (change) {\n change.call(pointEdgeObject, 'focus', 'start', 'block');\n};\n\nChanges$4.moveFocusToStartOfDocument = function (change) {\n change.moveFocusToStartOfNode(change.value.document).moveToFocus();\n};\n\nChanges$4.moveFocusToStartOfInline = function (change) {\n change.call(pointEdgeObject, 'focus', 'start', 'inline');\n};\n\nChanges$4.moveFocusToStartOfNextBlock = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'start', 'next', 'block');\n};\n\nChanges$4.moveFocusToStartOfNextInline = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'start', 'next', 'inline');\n};\n\nChanges$4.moveFocusToStartOfNextText = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'start', 'next', 'text');\n};\n\nChanges$4.moveFocusToStartOfNode = function (change) {\n for (var _len16 = arguments.length, args = Array(_len16 > 1 ? _len16 - 1 : 0), _key16 = 1; _key16 < _len16; _key16++) {\n args[_key16 - 1] = arguments[_key16];\n }\n\n change.call.apply(change, [proxy, 'moveFocusToStartOfNode'].concat(args));\n};\n\nChanges$4.moveFocusToStartOfPreviousBlock = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'start', 'previous', 'block');\n};\n\nChanges$4.moveFocusToStartOfPreviousInline = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'start', 'previous', 'inline');\n};\n\nChanges$4.moveFocusToStartOfPreviousText = function (change) {\n change.call(pointEdgeSideObject, 'focus', 'start', 'previous', 'text');\n};\n\nChanges$4.moveFocusToStartOfText = function (change) {\n change.call(pointEdgeObject, 'focus', 'start', 'text');\n};\n\nChanges$4.moveForward = function (change) {\n var _change$moveAnchorFor;\n\n for (var _len17 = arguments.length, args = Array(_len17 > 1 ? _len17 - 1 : 0), _key17 = 1; _key17 < _len17; _key17++) {\n args[_key17 - 1] = arguments[_key17];\n }\n\n (_change$moveAnchorFor = change.moveAnchorForward.apply(change, args)).moveFocusForward.apply(_change$moveAnchorFor, args);\n};\n\nChanges$4.moveStartBackward = function (change) {\n for (var _len18 = arguments.length, args = Array(_len18 > 1 ? _len18 - 1 : 0), _key18 = 1; _key18 < _len18; _key18++) {\n args[_key18 - 1] = arguments[_key18];\n }\n\n change.call.apply(change, [pointBackward, 'start'].concat(args));\n};\n\nChanges$4.moveStartForward = function (change) {\n for (var _len19 = arguments.length, args = Array(_len19 > 1 ? _len19 - 1 : 0), _key19 = 1; _key19 < _len19; _key19++) {\n args[_key19 - 1] = arguments[_key19];\n }\n\n change.call.apply(change, [pointForward, 'start'].concat(args));\n};\n\nChanges$4.moveStartTo = function (change) {\n for (var _len20 = arguments.length, args = Array(_len20 > 1 ? _len20 - 1 : 0), _key20 = 1; _key20 < _len20; _key20++) {\n args[_key20 - 1] = arguments[_key20];\n }\n\n change.call.apply(change, [proxy, 'moveStartTo'].concat(args));\n};\n\nChanges$4.moveStartToEndOfBlock = function (change) {\n change.call(pointEdgeObject, 'start', 'end', 'block');\n};\n\nChanges$4.moveStartToEndOfDocument = function (change) {\n change.moveStartToEndOfNode(change.value.document).moveToStart();\n};\n\nChanges$4.moveStartToEndOfInline = function (change) {\n change.call(pointEdgeObject, 'start', 'end', 'inline');\n};\n\nChanges$4.moveStartToEndOfNextBlock = function (change) {\n change.call(pointEdgeSideObject, 'start', 'end', 'next', 'block');\n};\n\nChanges$4.moveStartToEndOfNextInline = function (change) {\n change.call(pointEdgeSideObject, 'start', 'end', 'next', 'inline');\n};\n\nChanges$4.moveStartToEndOfNextText = function (change) {\n change.call(pointEdgeSideObject, 'start', 'end', 'next', 'text');\n};\n\nChanges$4.moveStartToEndOfNode = function (change) {\n for (var _len21 = arguments.length, args = Array(_len21 > 1 ? _len21 - 1 : 0), _key21 = 1; _key21 < _len21; _key21++) {\n args[_key21 - 1] = arguments[_key21];\n }\n\n change.call.apply(change, [proxy, 'moveStartToEndOfNode'].concat(args));\n};\n\nChanges$4.moveStartToEndOfPreviousBlock = function (change) {\n change.call(pointEdgeSideObject, 'start', 'end', 'previous', 'block');\n};\n\nChanges$4.moveStartToEndOfPreviousInline = function (change) {\n change.call(pointEdgeSideObject, 'start', 'end', 'previous', 'inline');\n};\n\nChanges$4.moveStartToEndOfPreviousText = function (change) {\n change.call(pointEdgeSideObject, 'start', 'end', 'previous', 'text');\n};\n\nChanges$4.moveStartToEndOfText = function (change) {\n change.call(pointEdgeObject, 'start', 'end', 'text');\n};\n\nChanges$4.moveStartToStartOfBlock = function (change) {\n change.call(pointEdgeObject, 'start', 'start', 'block');\n};\n\nChanges$4.moveStartToStartOfDocument = function (change) {\n change.moveStartToStartOfNode(change.value.document).moveToStart();\n};\n\nChanges$4.moveStartToStartOfInline = function (change) {\n change.call(pointEdgeObject, 'start', 'start', 'inline');\n};\n\nChanges$4.moveStartToStartOfNextBlock = function (change) {\n change.call(pointEdgeSideObject, 'start', 'start', 'next', 'block');\n};\n\nChanges$4.moveStartToStartOfNextInline = function (change) {\n change.call(pointEdgeSideObject, 'start', 'start', 'next', 'inline');\n};\n\nChanges$4.moveStartToStartOfNextText = function (change) {\n change.call(pointEdgeSideObject, 'start', 'start', 'next', 'text');\n};\n\nChanges$4.moveStartToStartOfNode = function (change) {\n for (var _len22 = arguments.length, args = Array(_len22 > 1 ? _len22 - 1 : 0), _key22 = 1; _key22 < _len22; _key22++) {\n args[_key22 - 1] = arguments[_key22];\n }\n\n change.call.apply(change, [proxy, 'moveStartToStartOfNode'].concat(args));\n};\n\nChanges$4.moveStartToStartOfPreviousBlock = function (change) {\n change.call(pointEdgeSideObject, 'start', 'start', 'previous', 'block');\n};\n\nChanges$4.moveStartToStartOfPreviousInline = function (change) {\n change.call(pointEdgeSideObject, 'start', 'start', 'previous', 'inline');\n};\n\nChanges$4.moveStartToStartOfPreviousText = function (change) {\n change.call(pointEdgeSideObject, 'start', 'start', 'previous', 'text');\n};\n\nChanges$4.moveStartToStartOfText = function (change) {\n change.call(pointEdgeObject, 'start', 'start', 'text');\n};\n\nChanges$4.moveTo = function (change) {\n for (var _len23 = arguments.length, args = Array(_len23 > 1 ? _len23 - 1 : 0), _key23 = 1; _key23 < _len23; _key23++) {\n args[_key23 - 1] = arguments[_key23];\n }\n\n change.call.apply(change, [proxy, 'moveTo'].concat(args));\n};\n\nChanges$4.moveToAnchor = function (change) {\n change.call(proxy, 'moveToAnchor');\n};\n\nChanges$4.moveToEnd = function (change) {\n change.call(proxy, 'moveToEnd');\n};\n\nChanges$4.moveToEndOfBlock = function (change) {\n change.moveEndToEndOfBlock().moveToEnd();\n};\n\nChanges$4.moveToEndOfDocument = function (change) {\n change.moveEndToEndOfNode(change.value.document).moveToEnd();\n};\n\nChanges$4.moveToEndOfInline = function (change) {\n change.moveEndToEndOfInline().moveToEnd();\n};\n\nChanges$4.moveToEndOfNextBlock = function (change) {\n change.moveEndToEndOfNextBlock().moveToEnd();\n};\n\nChanges$4.moveToEndOfNextInline = function (change) {\n change.moveEndToEndOfNextInline().moveToEnd();\n};\n\nChanges$4.moveToEndOfNextText = function (change) {\n change.moveEndToEndOfNextText().moveToEnd();\n};\n\nChanges$4.moveToEndOfNode = function (change) {\n for (var _len24 = arguments.length, args = Array(_len24 > 1 ? _len24 - 1 : 0), _key24 = 1; _key24 < _len24; _key24++) {\n args[_key24 - 1] = arguments[_key24];\n }\n\n change.call.apply(change, [proxy, 'moveToEndOfNode'].concat(args));\n};\n\nChanges$4.moveToEndOfPreviousBlock = function (change) {\n change.moveStartToEndOfPreviousBlock().moveToStart();\n};\n\nChanges$4.moveToEndOfPreviousInline = function (change) {\n change.moveStartToEndOfPreviousInline().moveToStart();\n};\n\nChanges$4.moveToEndOfPreviousText = function (change) {\n change.moveStartToEndOfPreviousText().moveToStart();\n};\n\nChanges$4.moveToEndOfText = function (change) {\n change.moveEndToEndOfText().moveToEnd();\n};\n\nChanges$4.moveToFocus = function (change) {\n change.call(proxy, 'moveToFocus');\n};\n\nChanges$4.moveToRangeOfDocument = function (change) {\n change.moveToRangeOfNode(change.value.document);\n};\n\nChanges$4.moveToRangeOfNode = function (change) {\n for (var _len25 = arguments.length, args = Array(_len25 > 1 ? _len25 - 1 : 0), _key25 = 1; _key25 < _len25; _key25++) {\n args[_key25 - 1] = arguments[_key25];\n }\n\n change.call.apply(change, [proxy, 'moveToRangeOfNode'].concat(args));\n};\n\nChanges$4.moveToStart = function (change) {\n change.call(proxy, 'moveToStart');\n};\n\nChanges$4.moveToStartOfBlock = function (change) {\n change.moveStartToStartOfBlock().moveToStart();\n};\n\nChanges$4.moveToStartOfDocument = function (change) {\n change.moveStartToStartOfNode(change.value.document).moveToStart();\n};\n\nChanges$4.moveToStartOfInline = function (change) {\n change.moveStartToStartOfInline().moveToStart();\n};\n\nChanges$4.moveToStartOfNextBlock = function (change) {\n change.moveEndToStartOfNextBlock().moveToEnd();\n};\n\nChanges$4.moveToStartOfNextInline = function (change) {\n change.moveEndToStartOfNextInline().moveToEnd();\n};\n\nChanges$4.moveToStartOfNextText = function (change) {\n change.moveEndToStartOfNextText().moveToEnd();\n};\n\nChanges$4.moveToStartOfNode = function (change) {\n for (var _len26 = arguments.length, args = Array(_len26 > 1 ? _len26 - 1 : 0), _key26 = 1; _key26 < _len26; _key26++) {\n args[_key26 - 1] = arguments[_key26];\n }\n\n change.call.apply(change, [proxy, 'moveToStartOfNode'].concat(args));\n};\n\nChanges$4.moveToStartOfPreviousBlock = function (change) {\n change.moveStartToStartOfPreviousBlock().moveToStart();\n};\n\nChanges$4.moveToStartOfPreviousInline = function (change) {\n change.moveStartToStartOfPreviousInline().moveToStart();\n};\n\nChanges$4.moveToStartOfPreviousText = function (change) {\n change.moveStartToStartOfPreviousText().moveToStart();\n};\n\nChanges$4.moveToStartOfText = function (change) {\n change.moveStartToStartOfText().moveToStart();\n};\n\nChanges$4.select = function (change, properties) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n properties = Selection.createProperties(properties);\n var _options$snapshot = options.snapshot,\n snapshot = _options$snapshot === undefined ? false : _options$snapshot;\n var value = change.value;\n var document = value.document,\n selection = value.selection;\n var props = {};\n var next = selection.setProperties(properties);\n next = document.resolveSelection(next); // Re-compute the properties, to ensure that we get their normalized values.\n\n properties = pick(next, Object.keys(properties)); // Remove any properties that are already equal to the current selection. And\n // create a dictionary of the previous values for all of the properties that\n // are being changed, for the inverse operation.\n\n for (var k in properties) {\n if (snapshot === true || !is(properties[k], selection[k])) {\n props[k] = properties[k];\n }\n } // If the selection moves, clear any marks, unless the new selection\n // properties change the marks in some way.\n\n\n if (selection.marks && !props.marks && (props.anchor || props.focus)) {\n props.marks = null;\n } // If there are no new properties to set, abort to avoid extra operations.\n\n\n if (Object.keys(props).length === 0) {\n return;\n }\n\n change.applyOperation({\n type: 'set_selection',\n value: value,\n properties: props,\n selection: selection.toJSON()\n }, snapshot ? {\n skip: false,\n merge: false\n } : {});\n};\n\nChanges$4.setAnchor = function (change) {\n for (var _len27 = arguments.length, args = Array(_len27 > 1 ? _len27 - 1 : 0), _key27 = 1; _key27 < _len27; _key27++) {\n args[_key27 - 1] = arguments[_key27];\n }\n\n change.call.apply(change, [proxy, 'setAnchor'].concat(args));\n};\n\nChanges$4.setEnd = function (change) {\n for (var _len28 = arguments.length, args = Array(_len28 > 1 ? _len28 - 1 : 0), _key28 = 1; _key28 < _len28; _key28++) {\n args[_key28 - 1] = arguments[_key28];\n }\n\n change.call.apply(change, [proxy, 'setEnd'].concat(args));\n};\n\nChanges$4.setFocus = function (change) {\n for (var _len29 = arguments.length, args = Array(_len29 > 1 ? _len29 - 1 : 0), _key29 = 1; _key29 < _len29; _key29++) {\n args[_key29 - 1] = arguments[_key29];\n }\n\n change.call.apply(change, [proxy, 'setFocus'].concat(args));\n};\n\nChanges$4.setStart = function (change) {\n for (var _len30 = arguments.length, args = Array(_len30 > 1 ? _len30 - 1 : 0), _key30 = 1; _key30 < _len30; _key30++) {\n args[_key30 - 1] = arguments[_key30];\n }\n\n change.call.apply(change, [proxy, 'setStart'].concat(args));\n};\n\nChanges$4.snapshotSelection = function (change) {\n change.select(change.value.selection, {\n snapshot: true\n });\n};\n/**\n * Helpers.\n */\n\n\nfunction proxy(change, method) {\n var _change$value$selecti;\n\n for (var _len31 = arguments.length, args = Array(_len31 > 2 ? _len31 - 2 : 0), _key31 = 2; _key31 < _len31; _key31++) {\n args[_key31 - 2] = arguments[_key31];\n }\n\n var range = (_change$value$selecti = change.value.selection)[method].apply(_change$value$selecti, args);\n\n change.select(range);\n}\n\nfunction pointEdgeObject(change, point, edge, object) {\n var Point = point.slice(0, 1).toUpperCase() + point.slice(1);\n var Edge = edge.slice(0, 1).toUpperCase() + edge.slice(1);\n var Object = object.slice(0, 1).toUpperCase() + object.slice(1);\n var method = 'move' + Point + 'To' + Edge + 'OfNode';\n var getNode = object == 'text' ? 'getNode' : 'getClosest' + Object;\n var value = change.value;\n var document = value.document,\n selection = value.selection;\n var p = selection[point];\n var node = document[getNode](p.key);\n if (!node) return;\n change[method](node);\n}\n\nfunction pointEdgeSideObject(change, point, edge, side, object) {\n var Point = point.slice(0, 1).toUpperCase() + point.slice(1);\n var Edge = edge.slice(0, 1).toUpperCase() + edge.slice(1);\n var Side = side.slice(0, 1).toUpperCase() + side.slice(1);\n var Object = object.slice(0, 1).toUpperCase() + object.slice(1);\n var method = 'move' + Point + 'To' + Edge + 'OfNode';\n var getNode = object == 'text' ? 'getNode' : 'getClosest' + Object;\n var getDirectionNode = 'get' + Side + Object;\n var value = change.value;\n var document = value.document,\n selection = value.selection;\n var p = selection[point];\n var node = document[getNode](p.key);\n if (!node) return;\n var target = document[getDirectionNode](node.key);\n if (!target) return;\n change[method](target);\n}\n\nfunction pointBackward(change, point) {\n var n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n if (n === 0) return;\n if (n < 0) return pointForward(change, point, -n);\n var Point = point.slice(0, 1).toUpperCase() + point.slice(1);\n var value = change.value;\n var document = value.document,\n selection = value.selection,\n schema = value.schema;\n var p = selection[point];\n var hasVoidParent = document.hasVoidParent(p.path, schema); // what is this?\n\n if (!hasVoidParent && p.offset - n >= 0) {\n var range = selection['move' + Point + 'Backward'](n);\n change.select(range);\n return;\n }\n\n var previous = document.getPreviousText(p.path);\n if (!previous) return;\n var block = document.getClosestBlock(p.path);\n var isInBlock = block.hasNode(previous.key);\n var isPreviousInVoid = previous && document.hasVoidParent(previous.key, schema);\n change['move' + Point + 'ToEndOfNode'](previous); // when is this called?\n\n if (!hasVoidParent && !isPreviousInVoid && isInBlock) {\n var _range = change.value.selection['move' + Point + 'Backward'](n);\n\n change.select(_range);\n }\n}\n\nfunction pointForward(change, point) {\n var n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n if (n === 0) return;\n if (n < 0) return pointBackward(change, point, -n);\n var Point = point.slice(0, 1).toUpperCase() + point.slice(1);\n var value = change.value;\n var document = value.document,\n selection = value.selection,\n schema = value.schema;\n var p = selection[point];\n var text = document.getNode(p.path);\n var hasVoidParent = document.hasVoidParent(p.path, schema); // what is this?\n\n if (!hasVoidParent && p.offset + n <= text.text.length) {\n var range = selection['move' + Point + 'Forward'](n);\n change.select(range);\n return;\n }\n\n var next = document.getNextText(p.path);\n if (!next) return;\n var block = document.getClosestBlock(p.path);\n var isInBlock = block.hasNode(next.key);\n var isNextInVoid = document.hasVoidParent(next.key, schema);\n change['move' + Point + 'ToStartOfNode'](next); // when is this called?\n\n if (!hasVoidParent && !isNextInVoid && isInBlock) {\n var _range2 = change.value.selection['move' + Point + 'Forward'](n);\n\n change.select(_range2);\n }\n}\n/**\n * Debug.\n *\n * @type {Function}\n */\n\n\nvar debug = Debug('slate:history');\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\nvar DEFAULTS$10 = {\n redos: new Stack(),\n undos: new Stack()\n /**\n * History.\n *\n * @type {History}\n */\n\n};\n\nvar History = function (_Record) {\n inherits(History, _Record);\n\n function History() {\n classCallCheck(this, History);\n return possibleConstructorReturn(this, (History.__proto__ || Object.getPrototypeOf(History)).apply(this, arguments));\n }\n\n createClass(History, [{\n key: 'save',\n\n /**\n * Save an `operation` into the history.\n *\n * @param {Object} operation\n * @param {Object} options\n * @return {History}\n */\n value: function save(operation) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var history = this;\n var _history = history,\n undos = _history.undos,\n redos = _history.redos;\n var merge = options.merge,\n skip = options.skip;\n\n if (skip) {\n return history;\n }\n\n var prevBatch = undos.peek();\n var prevOperation = prevBatch && prevBatch.last();\n\n if (merge == null) {\n merge = shouldMerge(operation, prevOperation);\n }\n\n debug('save', {\n operation: operation,\n merge: merge\n }); // If the `merge` flag is true, add the operation to the previous batch.\n\n if (merge && prevBatch) {\n var batch = prevBatch.push(operation);\n undos = undos.pop();\n undos = undos.push(batch);\n } else {\n // Otherwise, create a new batch with the operation.\n var _batch = new List([operation]);\n\n undos = undos.push(_batch);\n } // Constrain the history to 100 entries for memory's sake.\n\n\n if (undos.size > 100) {\n undos = undos.take(100);\n } // Clear the redos and update the history.\n\n\n redos = redos.clear();\n history = history.set('undos', undos).set('redos', redos);\n return history;\n }\n /**\n * Return a JSON representation of the history.\n *\n * @return {Object}\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var object = {\n object: this.object,\n redos: this.redos.toJSON(),\n undos: this.undos.toJSON()\n };\n return object;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'history';\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `History` with `attrs`.\n *\n * @param {Object|History} attrs\n * @return {History}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (History.isHistory(attrs)) {\n return attrs;\n }\n\n if (isPlainObject(attrs)) {\n return History.fromJSON(attrs);\n }\n\n throw new Error('`History.create` only accepts objects or histories, but you passed it: ' + attrs);\n }\n /**\n * Create a list of `Operations` from `operations`.\n *\n * @param {Array|List} operations\n * @return {List}\n */\n\n }, {\n key: 'createOperationsList',\n value: function createOperationsList() {\n var operations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (List.isList(operations)) {\n return operations;\n }\n\n if (Array.isArray(operations)) {\n return new List(operations);\n }\n\n throw new Error('`History.createList` only accepts arrays or lists, but you passed it: ' + operations);\n }\n /**\n * Create a `History` from a JSON `object`.\n *\n * @param {Object} object\n * @return {History}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n var _object$redos = object.redos,\n redos = _object$redos === undefined ? [] : _object$redos,\n _object$undos = object.undos,\n undos = _object$undos === undefined ? [] : _object$undos;\n var history = new History({\n redos: new Stack(redos.map(this.createOperationsList)),\n undos: new Stack(undos.map(this.createOperationsList))\n });\n return history;\n }\n /**\n * Check if `any` is a `History`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }]);\n return History;\n}(Record(DEFAULTS$10));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nHistory.isHistory = isType.bind(null, 'HISTORY');\nHistory.prototype[MODEL_TYPES.HISTORY] = true;\n/**\n * Check whether to merge a new operation `o` into the previous operation `p`.\n *\n * @param {Object} o\n * @param {Object} p\n * @return {Boolean}\n */\n\nfunction shouldMerge(o, p) {\n if (!p) return false;\n var merge = o.type == 'set_selection' && p.type == 'set_selection' || o.type == 'insert_text' && p.type == 'insert_text' && o.offset == p.offset + p.text.length && o.path.equals(p.path) || o.type == 'remove_text' && p.type == 'remove_text' && o.offset + o.text.length == p.offset && o.path.equals(p.path);\n return merge;\n}\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\n\nvar DEFAULTS$11 = {\n plugins: []\n /**\n * Stack.\n *\n * @type {Stack}\n */\n\n};\n\nvar Stack$1 = function (_Record) {\n inherits(Stack$$1, _Record);\n\n function Stack$$1() {\n classCallCheck(this, Stack$$1);\n return possibleConstructorReturn(this, (Stack$$1.__proto__ || Object.getPrototypeOf(Stack$$1)).apply(this, arguments));\n }\n\n createClass(Stack$$1, [{\n key: 'getPluginsWith',\n\n /**\n * Get all plugins with `property`.\n *\n * @param {String} property\n * @return {Array}\n */\n value: function getPluginsWith(property) {\n return this.plugins.filter(function (plugin) {\n return plugin[property] != null;\n });\n }\n /**\n * Iterate the plugins with `property`, returning the first non-null value.\n *\n * @param {String} property\n * @param {Any} ...args\n */\n\n }, {\n key: 'find',\n value: function find(property) {\n var plugins = this.getPluginsWith(property);\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = plugins[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var plugin = _step.value;\n var ret = plugin[property].apply(plugin, args);\n if (ret != null) return ret;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n /**\n * Iterate the plugins with `property`, returning all the non-null values.\n *\n * @param {String} property\n * @param {Any} ...args\n * @return {Array}\n */\n\n }, {\n key: 'map',\n value: function map(property) {\n var plugins = this.getPluginsWith(property);\n var array = [];\n\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = plugins[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var plugin = _step2.value;\n var ret = plugin[property].apply(plugin, args);\n if (ret != null) array.push(ret);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return array;\n }\n /**\n * Iterate the plugins with `property`, breaking on any a non-null values.\n *\n * @param {String} property\n * @param {Any} ...args\n */\n\n }, {\n key: 'run',\n value: function run(property) {\n var plugins = this.getPluginsWith(property);\n\n for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = plugins[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var plugin = _step3.value;\n var ret = plugin[property].apply(plugin, args);\n if (ret != null) return;\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n }\n /**\n * Iterate the plugins with `property`, reducing to a set of React children.\n *\n * @param {String} property\n * @param {Object} props\n * @param {Any} ...args\n */\n\n }, {\n key: 'render',\n value: function render(property, props) {\n for (var _len4 = arguments.length, args = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) {\n args[_key4 - 2] = arguments[_key4];\n }\n\n var plugins = this.getPluginsWith(property);\n return plugins.reduceRight(function (children, plugin) {\n if (!plugin[property]) return children;\n var ret = plugin[property].apply(plugin, [props].concat(args));\n if (ret == null) return children;\n props.children = ret;\n return ret;\n }, props.children === undefined ? null : props.children);\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'stack';\n }\n }], [{\n key: 'create',\n\n /**\n * Constructor.\n *\n * @param {Object} attrs\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _attrs$plugins = attrs.plugins,\n plugins = _attrs$plugins === undefined ? [] : _attrs$plugins;\n var stack = new Stack$$1({\n plugins: plugins\n });\n return stack;\n }\n /**\n * Check if `any` is a `Stack`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }, {\n key: 'isStack',\n value: function isStack(any) {\n return !!(any && any[MODEL_TYPES.STACK]);\n }\n }]);\n return Stack$$1;\n}(Record(DEFAULTS$11));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nStack$1.prototype[MODEL_TYPES.STACK] = true;\n/**\n * Memoize read methods.\n */\n\nmemoize(Stack$1.prototype, ['getPluginsWith']);\n/**\n * Define a Slate error.\n *\n * @type {SlateError}\n */\n\nvar SlateError = function (_Error) {\n inherits(SlateError, _Error);\n\n function SlateError(code) {\n var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n classCallCheck(this, SlateError);\n\n var _this = possibleConstructorReturn(this, (SlateError.__proto__ || Object.getPrototypeOf(SlateError)).call(this, code));\n\n _this.code = code;\n\n for (var key in attrs) {\n _this[key] = attrs[key];\n }\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_this, _this.constructor);\n } else {\n _this.stack = new Error().stack;\n }\n\n return _this;\n }\n\n return SlateError;\n}(Error);\n/**\n * Debug.\n *\n * @type {Function}\n */\n\n\nvar debug$1 = Debug('slate:schema');\n/**\n * Define the core schema rules, order-sensitive.\n *\n * @type {Array}\n */\n\nvar CORE_RULES = [// Only allow block nodes in documents.\n{\n match: {\n object: 'document'\n },\n nodes: [{\n match: {\n object: 'block'\n }\n }]\n}, // Only allow block nodes or inline and text nodes in blocks.\n{\n match: {\n object: 'block',\n first: {\n object: 'block'\n }\n },\n nodes: [{\n match: {\n object: 'block'\n }\n }]\n}, {\n match: {\n object: 'block',\n first: [{\n object: 'inline'\n }, {\n object: 'text'\n }]\n },\n nodes: [{\n match: [{\n object: 'inline'\n }, {\n object: 'text'\n }]\n }]\n}, // Only allow inline and text nodes in inlines.\n{\n match: {\n object: 'inline'\n },\n nodes: [{\n match: [{\n object: 'inline'\n }, {\n object: 'text'\n }]\n }]\n}, // Ensure that block and inline nodes have at least one text child.\n{\n match: [{\n object: 'block'\n }, {\n object: 'inline'\n }],\n nodes: [{\n min: 1\n }],\n normalize: function normalize(change, error) {\n var code = error.code,\n node = error.node;\n if (code !== 'child_required') return;\n change.insertNodeByKey(node.key, 0, Text.create(), {\n normalize: false\n });\n }\n}, // Ensure that inline nodes are surrounded by text nodes.\n{\n match: {\n object: 'block'\n },\n first: [{\n object: 'block'\n }, {\n object: 'text'\n }],\n last: [{\n object: 'block'\n }, {\n object: 'text'\n }],\n normalize: function normalize(change, error) {\n var code = error.code,\n node = error.node;\n var text = Text.create();\n var i = void 0;\n\n if (code === 'first_child_object_invalid') {\n i = 0;\n } else if (code === 'last_child_object_invalid') {\n i = node.nodes.size;\n } else {\n return;\n }\n\n change.insertNodeByKey(node.key, i, text, {\n normalize: false\n });\n }\n}, {\n match: {\n object: 'inline'\n },\n first: [{\n object: 'block'\n }, {\n object: 'text'\n }],\n last: [{\n object: 'block'\n }, {\n object: 'text'\n }],\n previous: [{\n object: 'block'\n }, {\n object: 'text'\n }],\n next: [{\n object: 'block'\n }, {\n object: 'text'\n }],\n normalize: function normalize(change, error) {\n var code = error.code,\n node = error.node,\n index = error.index;\n var text = Text.create();\n var i = void 0;\n\n if (code === 'first_child_object_invalid') {\n i = 0;\n } else if (code === 'last_child_object_invalid') {\n i = node.nodes.size;\n } else if (code === 'previous_sibling_object_invalid') {\n i = index;\n } else if (code === 'next_sibling_object_invalid') {\n i = index + 1;\n } else {\n return;\n }\n\n change.insertNodeByKey(node.key, i, text, {\n normalize: false\n });\n }\n}, // Merge adjacent text nodes.\n{\n match: {\n object: 'text'\n },\n next: [{\n object: 'block'\n }, {\n object: 'inline'\n }],\n normalize: function normalize(change, error) {\n var code = error.code,\n next = error.next;\n if (code !== 'next_sibling_object_invalid') return;\n change.mergeNodeByKey(next.key, {\n normalize: false\n });\n }\n}];\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\nvar DEFAULTS$12 = {\n stack: Stack$1.create(),\n rules: []\n /**\n * Schema.\n *\n * @type {Schema}\n */\n\n};\n\nvar Schema = function (_Record) {\n inherits(Schema, _Record);\n\n function Schema() {\n classCallCheck(this, Schema);\n return possibleConstructorReturn(this, (Schema.__proto__ || Object.getPrototypeOf(Schema)).apply(this, arguments));\n }\n\n createClass(Schema, [{\n key: 'getNodeRules',\n\n /**\n * Get the schema rules for a `node`.\n *\n * @param {Node} node\n * @return {Array}\n */\n value: function getNodeRules(node) {\n var rules = this.rules.filter(function (r) {\n return testRules(node, r.match);\n });\n return rules;\n }\n /**\n * Validate a `node` with the schema, returning an error if it's invalid.\n *\n * @param {Node} node\n * @return {Error|Void}\n */\n\n }, {\n key: 'validateNode',\n value: function validateNode(node) {\n var rules = this.getNodeRules(node);\n var failure = validateRules(node, rules, this.rules, {\n every: true\n });\n if (!failure) return;\n var error = new SlateError(failure.code, failure);\n return error;\n }\n /**\n * Test whether a `node` is valid against the schema.\n *\n * @param {Node} node\n * @return {Boolean}\n */\n\n }, {\n key: 'testNode',\n value: function testNode(node) {\n var error = this.validateNode(node);\n return !error;\n }\n /**\n * Assert that a `node` is valid against the schema.\n *\n * @param {Node} node\n * @throws\n */\n\n }, {\n key: 'assertNode',\n value: function assertNode(node) {\n var error = this.validateNode(node);\n if (error) throw error;\n }\n /**\n * Normalize a `node` with the schema, returning a function that will fix the\n * invalid node, or void if the node is valid.\n *\n * @param {Node} node\n * @return {Function|Void}\n */\n\n }, {\n key: 'normalizeNode',\n value: function normalizeNode(node) {\n var ret = this.stack.find('normalizeNode', node);\n if (ret) return ret;\n if (node.object == 'text') return;\n var error = this.validateNode(node);\n if (!error) return;\n return function (change) {\n debug$1('normalizing', {\n error: error\n });\n var rule = error.rule;\n var size = change.operations.size; // First run the user-provided `normalize` function if one exists...\n\n if (rule.normalize) {\n rule.normalize(change, error);\n } // If the `normalize` function did not add any operations to the change\n // object, it can't have normalized, so run the default one.\n\n\n if (change.operations.size === size) {\n defaultNormalize(change, error);\n }\n };\n }\n /**\n * Check if a mark is void.\n *\n * @param {Mark}\n * @return {Boolean}\n */\n\n }, {\n key: 'isAtomic',\n value: function isAtomic(mark) {\n var rule = this.rules.find(function (r) {\n return 'isAtomic' in r && testRules(mark, r.match);\n });\n return rule ? rule.isAtomic : false;\n }\n /**\n * Check if a node is void.\n *\n * @param {Node}\n * @return {Boolean}\n */\n\n }, {\n key: 'isVoid',\n value: function isVoid(node) {\n var rule = this.rules.find(function (r) {\n return 'isVoid' in r && testRules(node, r.match);\n });\n return rule ? rule.isVoid : false;\n }\n /**\n * Return a JSON representation of the schema.\n *\n * @return {Object}\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var object = {\n object: this.object,\n rules: this.rules\n };\n return object;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'schema';\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Schema` with `attrs`.\n *\n * @param {Object|Schema} attrs\n * @return {Schema}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Schema.isSchema(attrs)) {\n return attrs;\n }\n\n if (isPlainObject(attrs)) {\n return Schema.fromJSON(attrs);\n }\n\n throw new Error('`Schema.create` only accepts objects or schemas, but you passed it: ' + attrs);\n }\n /**\n * Create a `Schema` from a JSON `object`.\n *\n * @param {Object} object\n * @return {Schema}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n if (Schema.isSchema(object)) {\n return object;\n }\n\n var plugins = object.plugins ? object.plugins : [{\n schema: object\n }];\n var rules = [].concat(CORE_RULES);\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = plugins[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var plugin = _step.value;\n var _plugin$schema = plugin.schema,\n schema = _plugin$schema === undefined ? {} : _plugin$schema;\n var _schema$blocks = schema.blocks,\n blocks = _schema$blocks === undefined ? {} : _schema$blocks,\n _schema$inlines = schema.inlines,\n inlines = _schema$inlines === undefined ? {} : _schema$inlines,\n _schema$marks = schema.marks,\n marks = _schema$marks === undefined ? {} : _schema$marks;\n\n if (schema.rules) {\n rules = rules.concat(schema.rules);\n }\n\n if (schema.document) {\n rules.push(_extends({\n match: [{\n object: 'document'\n }]\n }, schema.document));\n }\n\n for (var key in blocks) {\n rules.push(_extends({\n match: [{\n object: 'block',\n type: key\n }]\n }, blocks[key]));\n }\n\n for (var _key in inlines) {\n rules.push(_extends({\n match: [{\n object: 'inline',\n type: _key\n }]\n }, inlines[_key]));\n }\n\n for (var _key2 in marks) {\n rules.push(_extends({\n match: [{\n object: 'mark',\n type: _key2\n }]\n }, marks[_key2]));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var stack = Stack$1.create({\n plugins: plugins\n });\n var ret = new Schema({\n stack: stack,\n rules: rules\n });\n return ret;\n }\n /**\n * Check if `any` is a `Schema`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }, {\n key: 'isSchema',\n value: function isSchema(any) {\n return !!(any && any[MODEL_TYPES.SCHEMA]);\n }\n }]);\n return Schema;\n}(Record(DEFAULTS$12));\n/**\n * Normalize an invalid value with `error` with default remedies.\n *\n * @param {Change} change\n * @param {SlateError} error\n */\n\n\nfunction defaultNormalize(change, error) {\n var code = error.code,\n node = error.node,\n child = error.child,\n next = error.next,\n previous = error.previous,\n key = error.key,\n mark = error.mark;\n\n switch (code) {\n case 'child_object_invalid':\n case 'child_type_invalid':\n case 'child_unknown':\n case 'first_child_object_invalid':\n case 'first_child_type_invalid':\n case 'last_child_object_invalid':\n case 'last_child_type_invalid':\n {\n return child.object === 'text' && node.object === 'block' && node.nodes.size === 1 ? change.removeNodeByKey(node.key, {\n normalize: false\n }) : change.removeNodeByKey(child.key, {\n normalize: false\n });\n }\n\n case 'previous_sibling_object_invalid':\n case 'previous_sibling_type_invalid':\n {\n return previous.object === 'text' && node.object === 'block' && node.nodes.size === 1 ? change.removeNodeByKey(node.key, {\n normalize: false\n }) : change.removeNodeByKey(previous.key, {\n normalize: false\n });\n }\n\n case 'next_sibling_object_invalid':\n case 'next_sibling_type_invalid':\n {\n return next.object === 'text' && node.object === 'block' && node.nodes.size === 1 ? change.removeNodeByKey(node.key, {\n normalize: false\n }) : change.removeNodeByKey(next.key, {\n normalize: false\n });\n }\n\n case 'child_required':\n case 'node_text_invalid':\n case 'parent_object_invalid':\n case 'parent_type_invalid':\n {\n return node.object === 'document' ? node.nodes.forEach(function (n) {\n return change.removeNodeByKey(n.key, {\n normalize: false\n });\n }) : change.removeNodeByKey(node.key, {\n normalize: false\n });\n }\n\n case 'node_data_invalid':\n {\n return node.data.get(key) === undefined && node.object !== 'document' ? change.removeNodeByKey(node.key, {\n normalize: false\n }) : change.setNodeByKey(node.key, {\n data: node.data.delete(key)\n }, {\n normalize: false\n });\n }\n\n case 'node_mark_invalid':\n {\n return node.getTexts().forEach(function (t) {\n return change.removeMarkByKey(t.key, 0, t.text.length, mark, {\n normalize: false\n });\n });\n }\n\n default:\n {\n return change.removeNodeByKey(node.key, {\n normalize: false\n });\n }\n }\n}\n/**\n * Check that an `object` matches one of a set of `rules`.\n *\n * @param {Mixed} object\n * @param {Object|Array} rules\n * @return {Boolean}\n */\n\n\nfunction testRules(object, rules) {\n var error = validateRules(object, rules);\n return !error;\n}\n/**\n * Validate that a `object` matches a `rule` object or array.\n *\n * @param {Mixed} object\n * @param {Object|Array} rule\n * @param {Array|Void} rules\n * @return {Error|Void}\n */\n\n\nfunction validateRules(object, rule, rules) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _options$every = options.every,\n every = _options$every === undefined ? false : _options$every;\n\n if (Array.isArray(rule)) {\n var array = rule.length ? rule : [{}];\n var first = void 0;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = array[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var r = _step2.value;\n\n var _error = validateRules(object, r, rules);\n\n first = first || _error;\n if (every && _error) return _error;\n if (!every && !_error) return;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return first;\n }\n\n var error = validateObject(object, rule) || validateType(object, rule) || validateData(object, rule) || validateMarks(object, rule) || validateText(object, rule) || validateFirst(object, rule) || validateLast(object, rule) || validateNodes(object, rule, rules);\n return error;\n}\n\nfunction validateObject(node, rule) {\n if (rule.object == null) return;\n if (rule.object === node.object) return;\n if (typeof rule.object === 'function' && rule.object(node.object)) return;\n return fail('node_object_invalid', {\n rule: rule,\n node: node\n });\n}\n\nfunction validateType(node, rule) {\n if (rule.type == null) return;\n if (rule.type === node.type) return;\n if (typeof rule.type === 'function' && rule.type(node.type)) return;\n return fail('node_type_invalid', {\n rule: rule,\n node: node\n });\n}\n\nfunction validateData(node, rule) {\n if (rule.data == null) return;\n if (node.data == null) return;\n\n if (typeof rule.data === 'function') {\n if (rule.data(node.data)) return;\n return fail('node_data_invalid', {\n rule: rule,\n node: node\n });\n }\n\n for (var key in rule.data) {\n var fn = rule.data[key];\n var value = node.data && node.data.get(key);\n var valid = typeof fn === 'function' ? fn(value) : fn === value;\n if (valid) continue;\n return fail('node_data_invalid', {\n rule: rule,\n node: node,\n key: key,\n value: value\n });\n }\n}\n\nfunction validateMarks(node, rule) {\n if (rule.marks == null) return;\n var marks = node.getMarks().toArray();\n\n var _loop = function _loop(mark) {\n var valid = rule.marks.some(function (def) {\n return typeof def.type === 'function' ? def.type(mark.type) : def.type === mark.type;\n });\n if (valid) return 'continue';\n return {\n v: fail('node_mark_invalid', {\n rule: rule,\n node: node,\n mark: mark\n })\n };\n };\n\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = marks[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var mark = _step3.value;\n\n var _ret = _loop(mark);\n\n switch (_ret) {\n case 'continue':\n continue;\n\n default:\n if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n}\n\nfunction validateText(node, rule) {\n if (rule.text == null) return;\n var text = node.text;\n var valid = typeof rule.text === 'function' ? rule.text(text) : rule.text.test(text);\n if (valid) return;\n return fail('node_text_invalid', {\n rule: rule,\n node: node,\n text: text\n });\n}\n\nfunction validateFirst(node, rule) {\n if (rule.first == null) return;\n var first = node.nodes.first();\n if (!first) return;\n var error = validateRules(first, rule.first);\n if (!error) return;\n error.rule = rule;\n error.node = node;\n error.child = first;\n error.code = error.code.replace('node_', 'first_child_');\n return error;\n}\n\nfunction validateLast(node, rule) {\n if (rule.last == null) return;\n var last = node.nodes.last();\n if (!last) return;\n var error = validateRules(last, rule.last);\n if (!error) return;\n error.rule = rule;\n error.node = node;\n error.child = last;\n error.code = error.code.replace('node_', 'last_child_');\n return error;\n}\n\nfunction validateNodes(node, rule) {\n var rules = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n if (node.nodes == null) return;\n var children = node.nodes.toArray();\n var defs = rule.nodes != null ? rule.nodes.slice() : [];\n var offset = void 0;\n var min = void 0;\n var index = void 0;\n var def = void 0;\n var max = void 0;\n var child = void 0;\n var previous = void 0;\n var next = void 0;\n\n function nextDef() {\n offset = offset == null ? null : 0;\n def = defs.shift();\n min = def && def.min;\n max = def && def.max;\n return !!def;\n }\n\n function nextChild() {\n index = index == null ? 0 : index + 1;\n offset = offset == null ? 0 : offset + 1;\n previous = child;\n child = children[index];\n next = children[index + 1];\n if (max != null && offset == max) nextDef();\n return !!child;\n }\n\n function rewind() {\n offset -= 1;\n index -= 1;\n }\n\n if (rule.nodes != null) {\n nextDef();\n }\n\n while (nextChild()) {\n var err = validateParent(node, child, rules) || validatePrevious(node, child, previous, index, rules) || validateNext(node, child, next, index, rules);\n if (err) return err;\n\n if (rule.nodes != null) {\n if (!def) {\n return fail('child_unknown', {\n rule: rule,\n node: node,\n child: child,\n index: index\n });\n }\n\n if (def.match) {\n var error = validateRules(child, def.match);\n\n if (error && offset >= min && nextDef()) {\n rewind();\n continue;\n }\n\n if (error) {\n error.rule = rule;\n error.node = node;\n error.child = child;\n error.index = index;\n error.code = error.code.replace('node_', 'child_');\n return error;\n }\n }\n }\n }\n\n if (rule.nodes != null) {\n while (min != null) {\n if (offset < min) {\n return fail('child_required', {\n rule: rule,\n node: node,\n index: index\n });\n }\n\n nextDef();\n }\n }\n}\n\nfunction validateParent(node, child, rules) {\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = rules[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var rule = _step4.value;\n if (rule.parent == null) continue;\n if (!testRules(child, rule.match)) continue;\n var error = validateRules(node, rule.parent);\n if (!error) continue;\n error.rule = rule;\n error.parent = node;\n error.node = child;\n error.code = error.code.replace('node_', 'parent_');\n return error;\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n}\n\nfunction validatePrevious(node, child, previous, index, rules) {\n if (!previous) return;\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = rules[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var rule = _step5.value;\n if (rule.previous == null) continue;\n if (!testRules(child, rule.match)) continue;\n var error = validateRules(previous, rule.previous);\n if (!error) continue;\n error.rule = rule;\n error.node = node;\n error.child = child;\n error.index = index;\n error.previous = previous;\n error.code = error.code.replace('node_', 'previous_sibling_');\n return error;\n }\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n}\n\nfunction validateNext(node, child, next, index, rules) {\n if (!next) return;\n var _iteratorNormalCompletion6 = true;\n var _didIteratorError6 = false;\n var _iteratorError6 = undefined;\n\n try {\n for (var _iterator6 = rules[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n var rule = _step6.value;\n if (rule.next == null) continue;\n if (!testRules(child, rule.match)) continue;\n var error = validateRules(next, rule.next);\n if (!error) continue;\n error.rule = rule;\n error.node = node;\n error.child = child;\n error.index = index;\n error.next = next;\n error.code = error.code.replace('node_', 'next_sibling_');\n return error;\n }\n } catch (err) {\n _didIteratorError6 = true;\n _iteratorError6 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion6 && _iterator6.return) {\n _iterator6.return();\n }\n } finally {\n if (_didIteratorError6) {\n throw _iteratorError6;\n }\n }\n }\n}\n/**\n * Create an interim failure object with `code` and `attrs`.\n *\n * @param {String} code\n * @param {Object} attrs\n * @return {Object}\n */\n\n\nfunction fail(code, attrs) {\n return _extends({\n code: code\n }, attrs);\n}\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nSchema.prototype[MODEL_TYPES.SCHEMA] = true;\n/**\n * Default properties.\n *\n * @type {Object}\n */\n\nvar DEFAULTS$13 = {\n data: Map$1(),\n decorations: List(),\n document: Document.create(),\n history: History.create(),\n schema: Schema.create(),\n selection: Selection.create()\n /**\n * Value.\n *\n * @type {Value}\n */\n\n};\n\nvar Value = function (_Record) {\n inherits(Value, _Record);\n\n function Value() {\n classCallCheck(this, Value);\n return possibleConstructorReturn(this, (Value.__proto__ || Object.getPrototypeOf(Value)).apply(this, arguments));\n }\n\n createClass(Value, [{\n key: 'change',\n\n /**\n * Create a new `Change` with the current value as a starting point.\n *\n * @param {Object} attrs\n * @return {Change}\n */\n value: function change() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return new Change(_extends({}, attrs, {\n value: this\n }));\n }\n /**\n * Add mark to text at `offset` and `length` in node by `path`.\n *\n * @param {List|String} path\n * @param {Number} offset\n * @param {Number} length\n * @param {Mark} mark\n * @return {Value}\n */\n\n }, {\n key: 'addMark',\n value: function addMark(path, offset, length, mark) {\n var value = this;\n var _value = value,\n document = _value.document;\n document = document.addMark(path, offset, length, mark);\n value = this.set('document', document);\n return value;\n }\n /**\n * Insert a `node`.\n *\n * @param {List|String} path\n * @param {Node} node\n * @return {Value}\n */\n\n }, {\n key: 'insertNode',\n value: function insertNode(path, node) {\n var value = this;\n var _value2 = value,\n document = _value2.document;\n document = document.insertNode(path, node);\n value = value.set('document', document);\n value = value.mapRanges(function (range) {\n return range.updatePoints(function (point) {\n return point.setPath(null);\n });\n });\n return value;\n }\n /**\n * Insert `text` at `offset` in node by `path`.\n *\n * @param {List|String} path\n * @param {Number} offset\n * @param {String} text\n * @param {Set} marks\n * @return {Value}\n */\n\n }, {\n key: 'insertText',\n value: function insertText(path, offset, text, marks) {\n var value = this;\n var _value3 = value,\n document = _value3.document,\n schema = _value3.schema;\n document = document.insertText(path, offset, text, marks);\n value = value.set('document', document); // Update any ranges that were affected.\n\n var node = document.assertNode(path);\n value = value.mapRanges(function (range) {\n var _range = range,\n anchor = _range.anchor,\n focus = _range.focus,\n isBackward = _range.isBackward;\n var isAtomic = Decoration.isDecoration(range) && schema.isAtomic(range.mark);\n\n if (anchor.key === node.key && (anchor.offset > offset || anchor.offset === offset && (!isAtomic || !isBackward))) {\n range = range.moveAnchorForward(text.length);\n }\n\n if (focus.key === node.key && (focus.offset > offset || focus.offset == offset && (!isAtomic || isBackward))) {\n range = range.moveFocusForward(text.length);\n }\n\n return range;\n });\n value = value.clearAtomicRanges(node.key, offset);\n return value;\n }\n /**\n * Merge a node backwards its previous sibling.\n *\n * @param {List|Key} path\n * @return {Value}\n */\n\n }, {\n key: 'mergeNode',\n value: function mergeNode(path) {\n var value = this;\n var _value4 = value,\n document = _value4.document;\n var newDocument = document.mergeNode(path);\n path = document.resolvePath(path);\n var withPath = PathUtils.decrement(path);\n var one = document.getNode(withPath);\n var two = document.getNode(path);\n value = value.set('document', newDocument);\n value = value.mapRanges(function (range) {\n if (two.object === 'text') {\n var max = one.text.length;\n\n if (range.anchor.key === two.key) {\n range = range.moveAnchorTo(one.key, max + range.anchor.offset);\n }\n\n if (range.focus.key === two.key) {\n range = range.moveFocusTo(one.key, max + range.focus.offset);\n }\n }\n\n range = range.updatePoints(function (point) {\n return point.setPath(null);\n });\n return range;\n });\n return value;\n }\n /**\n * Move a node by `path` to `newPath`.\n *\n * A `newIndex` can be provided when move nodes by `key`, to account for not\n * being able to have a key for a location in the tree that doesn't exist yet.\n *\n * @param {List|Key} path\n * @param {List|Key} newPath\n * @param {Number} newIndex\n * @return {Value}\n */\n\n }, {\n key: 'moveNode',\n value: function moveNode(path, newPath) {\n var newIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var value = this;\n var _value5 = value,\n document = _value5.document;\n document = document.moveNode(path, newPath, newIndex);\n value = value.set('document', document);\n value = value.mapRanges(function (range) {\n return range.updatePoints(function (point) {\n return point.setPath(null);\n });\n });\n return value;\n }\n /**\n * Remove mark from text at `offset` and `length` in node.\n *\n * @param {List|String} path\n * @param {Number} offset\n * @param {Number} length\n * @param {Mark} mark\n * @return {Value}\n */\n\n }, {\n key: 'removeMark',\n value: function removeMark(path, offset, length, mark) {\n var value = this;\n var _value6 = value,\n document = _value6.document;\n document = document.removeMark(path, offset, length, mark);\n value = this.set('document', document);\n return value;\n }\n /**\n * Remove a node by `path`.\n *\n * @param {List|String} path\n * @return {Value}\n */\n\n }, {\n key: 'removeNode',\n value: function removeNode(path) {\n var value = this;\n var _value7 = value,\n document = _value7.document;\n var node = document.assertNode(path);\n var first = node.object == 'text' ? node : node.getFirstText() || node;\n var last = node.object == 'text' ? node : node.getLastText() || node;\n var prev = document.getPreviousText(first.key);\n var next = document.getNextText(last.key);\n document = document.removeNode(path);\n value = value.set('document', document);\n value = value.mapRanges(function (range) {\n var _range2 = range,\n start = _range2.start,\n end = _range2.end;\n\n if (node.hasNode(start.key)) {\n range = prev ? range.moveStartTo(prev.key, prev.text.length) : next ? range.moveStartTo(next.key, 0) : range.unset();\n }\n\n if (node.hasNode(end.key)) {\n range = prev ? range.moveEndTo(prev.key, prev.text.length) : next ? range.moveEndTo(next.key, 0) : range.unset();\n }\n\n range = range.updatePoints(function (point) {\n return point.setPath(null);\n });\n return range;\n });\n return value;\n }\n /**\n * Remove `text` at `offset` in node by `path`.\n *\n * @param {List|Key} path\n * @param {Number} offset\n * @param {String} text\n * @return {Value}\n */\n\n }, {\n key: 'removeText',\n value: function removeText(path, offset, text) {\n var value = this;\n var _value8 = value,\n document = _value8.document;\n document = document.removeText(path, offset, text);\n value = value.set('document', document);\n var node = document.assertNode(path);\n var length = text.length;\n var rangeOffset = offset + length;\n value = value.clearAtomicRanges(node.key, offset, offset + length);\n value = value.mapRanges(function (range) {\n var _range3 = range,\n anchor = _range3.anchor,\n focus = _range3.focus;\n\n if (anchor.key === node.key) {\n range = anchor.offset >= rangeOffset ? range.moveAnchorBackward(length) : anchor.offset > offset ? range.moveAnchorTo(anchor.key, offset) : range;\n }\n\n if (focus.key === node.key) {\n range = focus.offset >= rangeOffset ? range.moveFocusBackward(length) : focus.offset > offset ? range.moveFocusTo(focus.key, offset) : range;\n }\n\n return range;\n });\n return value;\n }\n /**\n * Set `properties` on a node.\n *\n * @param {List|String} path\n * @param {Object} properties\n * @return {Value}\n */\n\n }, {\n key: 'setNode',\n value: function setNode(path, properties) {\n var value = this;\n var _value9 = value,\n document = _value9.document;\n document = document.setNode(path, properties);\n value = value.set('document', document);\n return value;\n }\n /**\n * Set `properties` on `mark` on text at `offset` and `length` in node.\n *\n * @param {List|String} path\n * @param {Number} offset\n * @param {Number} length\n * @param {Mark} mark\n * @param {Object} properties\n * @return {Value}\n */\n\n }, {\n key: 'setMark',\n value: function setMark(path, offset, length, mark, properties) {\n var value = this;\n var _value10 = value,\n document = _value10.document;\n document = document.setMark(path, offset, length, mark, properties);\n value = value.set('document', document);\n return value;\n }\n /**\n * Set `properties` on the value.\n *\n * @param {Object} properties\n * @return {Value}\n */\n\n }, {\n key: 'setProperties',\n value: function setProperties(properties) {\n var value = this;\n var _value11 = value,\n document = _value11.document;\n var data = properties.data,\n decorations = properties.decorations,\n history = properties.history,\n schema = properties.schema;\n var props = {};\n\n if (data) {\n props.data = data;\n }\n\n if (history) {\n props.history = history;\n }\n\n if (schema) {\n props.schema = schema;\n }\n\n if (decorations) {\n props.decorations = decorations.map(function (d) {\n return d.isSet ? d : document.resolveDecoration(d);\n });\n }\n\n value = value.merge(props);\n return value;\n }\n /**\n * Set `properties` on the selection.\n *\n * @param {Value} value\n * @param {Operation} operation\n * @return {Value}\n */\n\n }, {\n key: 'setSelection',\n value: function setSelection(properties) {\n var value = this;\n var _value12 = value,\n document = _value12.document,\n selection = _value12.selection;\n var next = selection.setProperties(properties);\n selection = document.resolveSelection(next);\n value = value.set('selection', selection);\n return value;\n }\n /**\n * Split a node by `path` at `position` with optional `properties` to apply\n * to the newly split node.\n *\n * @param {List|String} path\n * @param {Number} position\n * @param {Object} properties\n * @return {Value}\n */\n\n }, {\n key: 'splitNode',\n value: function splitNode(path, position, properties) {\n var value = this;\n var _value13 = value,\n document = _value13.document;\n var newDocument = document.splitNode(path, position, properties);\n var node = document.assertNode(path);\n value = value.set('document', newDocument);\n value = value.mapRanges(function (range) {\n var next = newDocument.getNextText(node.key);\n var _range4 = range,\n start = _range4.start,\n end = _range4.end; // If the start was after the split, move it to the next node.\n\n if (node.key === start.key && position <= start.offset) {\n range = range.moveStartTo(next.key, start.offset - position);\n } // If the end was after the split, move it to the next node.\n\n\n if (node.key === end.key && position <= end.offset) {\n range = range.moveEndTo(next.key, end.offset - position);\n }\n\n range = range.updatePoints(function (point) {\n return point.setPath(null);\n });\n return range;\n });\n return value;\n }\n /**\n * Map all range objects to apply adjustments with an `iterator`.\n *\n * @param {Function} iterator\n * @return {Value}\n */\n\n }, {\n key: 'mapRanges',\n value: function mapRanges(iterator) {\n var value = this;\n var _value14 = value,\n document = _value14.document,\n selection = _value14.selection,\n decorations = _value14.decorations;\n var sel = selection.isSet ? iterator(selection) : selection;\n if (!sel) sel = selection.unset();\n if (sel !== selection) sel = document.createSelection(sel);\n value = value.set('selection', sel);\n var decs = decorations.map(function (decoration) {\n var n = decoration.isSet ? iterator(decoration) : decoration;\n if (n && n !== decoration) n = document.createDecoration(n);\n return n;\n });\n decs = decs.filter(function (decoration) {\n return !!decoration;\n });\n value = value.set('decorations', decs);\n return value;\n }\n /**\n * Remove any atomic ranges inside a `key`, `offset` and `length`.\n *\n * @param {String} key\n * @param {Number} from\n * @param {Number?} to\n * @return {Value}\n */\n\n }, {\n key: 'clearAtomicRanges',\n value: function clearAtomicRanges(key, from) {\n var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var value = this;\n var _value15 = value,\n schema = _value15.schema;\n value = this.mapRanges(function (range) {\n if (!Decoration.isDecoration(range)) return range;\n var start = range.start,\n end = range.end,\n mark = range.mark;\n var isAtomic = schema.isAtomic(mark);\n if (!isAtomic) return range;\n if (start.key !== key) return range;\n\n if (start.offset < from && (end.key !== key || end.offset > from)) {\n return null;\n }\n\n if (to != null && start.offset < to && (end.key !== key || end.offset > to)) {\n return null;\n }\n\n return range;\n });\n return value;\n }\n /**\n * Return a JSON representation of the value.\n *\n * @param {Object} options\n * @return {Object}\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var object = {\n object: this.object,\n document: this.document.toJSON(options)\n };\n\n if (options.preserveData) {\n object.data = this.data.toJSON(options);\n }\n\n if (options.preserveDecorations) {\n object.decorations = this.decorations.toArray().map(function (d) {\n return d.toJSON(options);\n });\n }\n\n if (options.preserveHistory) {\n object.history = this.history.toJSON(options);\n }\n\n if (options.preserveSelection) {\n object.selection = this.selection.toJSON(options);\n }\n\n if (options.preserveSchema) {\n object.schema = this.schema.toJSON(options);\n }\n\n return object;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'value';\n }\n /**\n * Get the current start text node's closest block parent.\n *\n * @return {Block}\n */\n\n }, {\n key: 'startBlock',\n get: function get$$1() {\n return this.selection.start.key && this.document.getClosestBlock(this.selection.start.key);\n }\n /**\n * Get the current end text node's closest block parent.\n *\n * @return {Block}\n */\n\n }, {\n key: 'endBlock',\n get: function get$$1() {\n return this.selection.end.key && this.document.getClosestBlock(this.selection.end.key);\n }\n /**\n * Get the current anchor text node's closest block parent.\n *\n * @return {Block}\n */\n\n }, {\n key: 'anchorBlock',\n get: function get$$1() {\n return this.selection.anchor.key && this.document.getClosestBlock(this.selection.anchor.key);\n }\n /**\n * Get the current focus text node's closest block parent.\n *\n * @return {Block}\n */\n\n }, {\n key: 'focusBlock',\n get: function get$$1() {\n return this.selection.focus.key && this.document.getClosestBlock(this.selection.focus.key);\n }\n /**\n * Get the current start text node's closest inline parent.\n *\n * @return {Inline}\n */\n\n }, {\n key: 'startInline',\n get: function get$$1() {\n return this.selection.start.key && this.document.getClosestInline(this.selection.start.key);\n }\n /**\n * Get the current end text node's closest inline parent.\n *\n * @return {Inline}\n */\n\n }, {\n key: 'endInline',\n get: function get$$1() {\n return this.selection.end.key && this.document.getClosestInline(this.selection.end.key);\n }\n /**\n * Get the current anchor text node's closest inline parent.\n *\n * @return {Inline}\n */\n\n }, {\n key: 'anchorInline',\n get: function get$$1() {\n return this.selection.anchor.key && this.document.getClosestInline(this.selection.anchor.key);\n }\n /**\n * Get the current focus text node's closest inline parent.\n *\n * @return {Inline}\n */\n\n }, {\n key: 'focusInline',\n get: function get$$1() {\n return this.selection.focus.key && this.document.getClosestInline(this.selection.focus.key);\n }\n /**\n * Get the current start text node.\n *\n * @return {Text}\n */\n\n }, {\n key: 'startText',\n get: function get$$1() {\n return this.selection.start.key && this.document.getDescendant(this.selection.start.key);\n }\n /**\n * Get the current end node.\n *\n * @return {Text}\n */\n\n }, {\n key: 'endText',\n get: function get$$1() {\n return this.selection.end.key && this.document.getDescendant(this.selection.end.key);\n }\n /**\n * Get the current anchor node.\n *\n * @return {Text}\n */\n\n }, {\n key: 'anchorText',\n get: function get$$1() {\n return this.selection.anchor.key && this.document.getDescendant(this.selection.anchor.key);\n }\n /**\n * Get the current focus node.\n *\n * @return {Text}\n */\n\n }, {\n key: 'focusText',\n get: function get$$1() {\n return this.selection.focus.key && this.document.getDescendant(this.selection.focus.key);\n }\n /**\n * Get the next block node.\n *\n * @return {Block}\n */\n\n }, {\n key: 'nextBlock',\n get: function get$$1() {\n return this.selection.end.key && this.document.getNextBlock(this.selection.end.key);\n }\n /**\n * Get the previous block node.\n *\n * @return {Block}\n */\n\n }, {\n key: 'previousBlock',\n get: function get$$1() {\n return this.selection.start.key && this.document.getPreviousBlock(this.selection.start.key);\n }\n /**\n * Get the next inline node.\n *\n * @return {Inline}\n */\n\n }, {\n key: 'nextInline',\n get: function get$$1() {\n return this.selection.end.key && this.document.getNextInline(this.selection.end.key);\n }\n /**\n * Get the previous inline node.\n *\n * @return {Inline}\n */\n\n }, {\n key: 'previousInline',\n get: function get$$1() {\n return this.selection.start.key && this.document.getPreviousInline(this.selection.start.key);\n }\n /**\n * Get the next text node.\n *\n * @return {Text}\n */\n\n }, {\n key: 'nextText',\n get: function get$$1() {\n return this.selection.end.key && this.document.getNextText(this.selection.end.key);\n }\n /**\n * Get the previous text node.\n *\n * @return {Text}\n */\n\n }, {\n key: 'previousText',\n get: function get$$1() {\n return this.selection.start.key && this.document.getPreviousText(this.selection.start.key);\n }\n /**\n * Get the marks of the current selection.\n *\n * @return {Set}\n */\n\n }, {\n key: 'marks',\n get: function get$$1() {\n return this.selection.isUnset ? new Set() : this.selection.marks || this.document.getMarksAtRange(this.selection);\n }\n /**\n * Get the active marks of the current selection.\n *\n * @return {Set}\n */\n\n }, {\n key: 'activeMarks',\n get: function get$$1() {\n return this.selection.isUnset ? new Set() : this.selection.marks || this.document.getActiveMarksAtRange(this.selection);\n }\n /**\n * Get the block nodes in the current selection.\n *\n * @return {List}\n */\n\n }, {\n key: 'blocks',\n get: function get$$1() {\n return this.selection.isUnset ? new List() : this.document.getBlocksAtRange(this.selection);\n }\n /**\n * Get the fragment of the current selection.\n *\n * @return {Document}\n */\n\n }, {\n key: 'fragment',\n get: function get$$1() {\n return this.selection.isUnset ? Document.create() : this.document.getFragmentAtRange(this.selection);\n }\n /**\n * Get the inline nodes in the current selection.\n *\n * @return {List}\n */\n\n }, {\n key: 'inlines',\n get: function get$$1() {\n return this.selection.isUnset ? new List() : this.document.getInlinesAtRange(this.selection);\n }\n /**\n * Get the text nodes in the current selection.\n *\n * @return {List}\n */\n\n }, {\n key: 'texts',\n get: function get$$1() {\n return this.selection.isUnset ? new List() : this.document.getTextsAtRange(this.selection);\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Value` with `attrs`.\n *\n * @param {Object|Value} attrs\n * @param {Object} options\n * @return {Value}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (Value.isValue(attrs)) {\n return attrs;\n }\n\n if (isPlainObject(attrs)) {\n return Value.fromJSON(attrs, options);\n }\n\n throw new Error('`Value.create` only accepts objects or values, but you passed it: ' + attrs);\n }\n /**\n * Create a dictionary of settable value properties from `attrs`.\n *\n * @param {Object|Value} attrs\n * @return {Object}\n */\n\n }, {\n key: 'createProperties',\n value: function createProperties() {\n var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Value.isValue(a)) {\n return {\n data: a.data,\n decorations: a.decorations,\n schema: a.schema\n };\n }\n\n if (isPlainObject(a)) {\n var p = {};\n if ('data' in a) p.data = Data.create(a.data);\n if ('decorations' in a) p.decorations = Decoration.createList(a.decorations);\n if ('schema' in a) p.schema = Schema.create(a.schema);\n return p;\n }\n\n throw new Error('`Value.createProperties` only accepts objects or values, but you passed it: ' + a);\n }\n /**\n * Create a `Value` from a JSON `object`.\n *\n * @param {Object} object\n * @param {Object} options\n * @property {Boolean} normalize\n * @property {Array} plugins\n * @return {Value}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _object$data = object.data,\n data = _object$data === undefined ? {} : _object$data,\n _object$document = object.document,\n document = _object$document === undefined ? {} : _object$document,\n _object$selection = object.selection,\n selection = _object$selection === undefined ? {} : _object$selection,\n _object$schema = object.schema,\n schema = _object$schema === undefined ? {} : _object$schema,\n _object$history = object.history,\n history = _object$history === undefined ? {} : _object$history;\n data = Data.fromJSON(data);\n schema = Schema.fromJSON(schema);\n history = History.fromJSON(history);\n document = Document.fromJSON(document);\n selection = document.createSelection(selection);\n\n if (selection.isUnset) {\n var text = document.getFirstText();\n if (text) selection = selection.moveToStartOfNode(text);\n selection = document.createSelection(selection);\n }\n\n var value = new Value({\n data: data,\n document: document,\n selection: selection,\n schema: schema,\n history: history\n });\n\n if (options.normalize !== false) {\n var change = value.change();\n change.withoutSaving(function () {\n return change.normalize();\n });\n value = change.value;\n }\n\n return value;\n }\n /**\n * Check if a `value` is a `Value`.\n *\n * @param {Any} value\n * @return {Boolean}\n */\n\n }, {\n key: 'isValue',\n value: function isValue(value) {\n return !!(value && value[MODEL_TYPES.VALUE]);\n }\n }]);\n return Value;\n}(Record(DEFAULTS$13));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nValue.prototype[MODEL_TYPES.VALUE] = true;\n/**\n * Changes.\n *\n * @type {Object}\n */\n\nvar Changes$5 = {};\n/**\n * Set `properties` on the value.\n *\n * @param {Change} change\n * @param {Object|Value} properties\n */\n\nChanges$5.setValue = function (change, properties) {\n properties = Value.createProperties(properties);\n var value = change.value;\n change.applyOperation({\n type: 'set_value',\n properties: properties,\n value: value\n });\n};\n/**\n * Export.\n *\n * @type {Object}\n */\n\n\nvar Changes$6 = _extends({}, Changes, Changes$1, Changes$2, Changes$3, Changes$4, Changes$5);\n/**\n * Debug.\n *\n * @type {Function}\n */\n\n\nvar debug$2 = Debug('slate:operation:apply');\n/**\n * Apply an `op` to a `value`.\n *\n * @param {Value} value\n * @param {Object|Operation} op\n * @return {Value} value\n */\n\nfunction applyOperation(value, op) {\n op = Operation.create(op);\n var _op = op,\n type = _op.type;\n debug$2(type, op);\n\n switch (type) {\n case 'add_mark':\n {\n var _op2 = op,\n path = _op2.path,\n offset = _op2.offset,\n length = _op2.length,\n mark = _op2.mark;\n var next = value.addMark(path, offset, length, mark);\n return next;\n }\n\n case 'insert_node':\n {\n var _op3 = op,\n _path = _op3.path,\n node = _op3.node;\n\n var _next = value.insertNode(_path, node);\n\n return _next;\n }\n\n case 'insert_text':\n {\n var _op4 = op,\n _path2 = _op4.path,\n _offset = _op4.offset,\n text = _op4.text,\n marks = _op4.marks;\n\n var _next2 = value.insertText(_path2, _offset, text, marks);\n\n return _next2;\n }\n\n case 'merge_node':\n {\n var _op5 = op,\n _path3 = _op5.path;\n\n var _next3 = value.mergeNode(_path3);\n\n return _next3;\n }\n\n case 'move_node':\n {\n var _op6 = op,\n _path4 = _op6.path,\n newPath = _op6.newPath;\n\n var _next4 = value.moveNode(_path4, newPath);\n\n return _next4;\n }\n\n case 'remove_mark':\n {\n var _op7 = op,\n _path5 = _op7.path,\n _offset2 = _op7.offset,\n _length = _op7.length,\n _mark = _op7.mark;\n\n var _next5 = value.removeMark(_path5, _offset2, _length, _mark);\n\n return _next5;\n }\n\n case 'remove_node':\n {\n var _op8 = op,\n _path6 = _op8.path;\n\n var _next6 = value.removeNode(_path6);\n\n return _next6;\n }\n\n case 'remove_text':\n {\n var _op9 = op,\n _path7 = _op9.path,\n _offset3 = _op9.offset,\n _text = _op9.text;\n\n var _next7 = value.removeText(_path7, _offset3, _text);\n\n return _next7;\n }\n\n case 'set_mark':\n {\n var _op10 = op,\n _path8 = _op10.path,\n _offset4 = _op10.offset,\n _length2 = _op10.length,\n _mark2 = _op10.mark,\n properties = _op10.properties;\n\n var _next8 = value.setMark(_path8, _offset4, _length2, _mark2, properties);\n\n return _next8;\n }\n\n case 'set_node':\n {\n var _op11 = op,\n _path9 = _op11.path,\n _properties = _op11.properties;\n\n var _next9 = value.setNode(_path9, _properties);\n\n return _next9;\n }\n\n case 'set_selection':\n {\n var _op12 = op,\n _properties2 = _op12.properties;\n\n var _next10 = value.setSelection(_properties2);\n\n return _next10;\n }\n\n case 'set_value':\n {\n var _op13 = op,\n _properties3 = _op13.properties;\n\n var _next11 = value.setProperties(_properties3);\n\n return _next11;\n }\n\n case 'split_node':\n {\n var _op14 = op,\n _path10 = _op14.path,\n position = _op14.position,\n _properties4 = _op14.properties;\n\n var _next12 = value.splitNode(_path10, position, _properties4);\n\n return _next12;\n }\n\n default:\n {\n throw new Error('Unknown operation type: \"' + type + '\".');\n }\n }\n}\n/**\n * Debug.\n *\n * @type {Function}\n */\n\n\nvar debug$3 = Debug('slate:operation:invert');\n/**\n * Invert an `op`.\n *\n * @param {Object} op\n * @return {Object}\n */\n\nfunction invertOperation(op) {\n op = Operation.create(op);\n var _op = op,\n type = _op.type;\n debug$3(type, op);\n\n switch (type) {\n case 'insert_node':\n {\n var inverse = op.set('type', 'remove_node');\n return inverse;\n }\n\n case 'remove_node':\n {\n var _inverse = op.set('type', 'insert_node');\n\n return _inverse;\n }\n\n case 'move_node':\n {\n var _op2 = op,\n newPath = _op2.newPath,\n path = _op2.path;\n var inversePath = newPath;\n var inverseNewPath = path;\n var pathLast = path.size - 1;\n var newPathLast = newPath.size - 1; // If the node's old position was a left sibling of an ancestor of\n // its new position, we need to adjust part of the path by -1.\n\n if (path.size < inversePath.size && path.slice(0, pathLast).every(function (e, i) {\n return e == inversePath.get(i);\n }) && path.last() < inversePath.get(pathLast)) {\n inversePath = inversePath.slice(0, pathLast).concat(inversePath.get(pathLast) - 1).concat(inversePath.slice(pathLast + 1, inversePath.size));\n } // If the node's new position is an ancestor of the old position,\n // or a left sibling of an ancestor of its old position, we need\n // to adjust part of the path by 1.\n\n\n if (newPath.size < inverseNewPath.size && newPath.slice(0, newPathLast).every(function (e, i) {\n return e == inverseNewPath.get(i);\n }) && newPath.last() <= inverseNewPath.get(newPathLast)) {\n inverseNewPath = inverseNewPath.slice(0, newPathLast).concat(inverseNewPath.get(newPathLast) + 1).concat(inverseNewPath.slice(newPathLast + 1, inverseNewPath.size));\n }\n\n var _inverse2 = op.set('path', inversePath).set('newPath', inverseNewPath);\n\n return _inverse2;\n }\n\n case 'merge_node':\n {\n var _op3 = op,\n _path = _op3.path;\n\n var _inversePath = PathUtils.decrement(_path);\n\n var _inverse3 = op.set('type', 'split_node').set('path', _inversePath);\n\n return _inverse3;\n }\n\n case 'split_node':\n {\n var _op4 = op,\n _path2 = _op4.path;\n\n var _inversePath2 = PathUtils.increment(_path2);\n\n var _inverse4 = op.set('type', 'merge_node').set('path', _inversePath2);\n\n return _inverse4;\n }\n\n case 'set_node':\n {\n var _op5 = op,\n properties = _op5.properties,\n node = _op5.node;\n var inverseNode = node.merge(properties);\n var inverseProperties = pick(node, Object.keys(properties));\n\n var _inverse5 = op.set('node', inverseNode).set('properties', inverseProperties);\n\n return _inverse5;\n }\n\n case 'insert_text':\n {\n var _inverse6 = op.set('type', 'remove_text');\n\n return _inverse6;\n }\n\n case 'remove_text':\n {\n var _inverse7 = op.set('type', 'insert_text');\n\n return _inverse7;\n }\n\n case 'add_mark':\n {\n var _inverse8 = op.set('type', 'remove_mark');\n\n return _inverse8;\n }\n\n case 'remove_mark':\n {\n var _inverse9 = op.set('type', 'add_mark');\n\n return _inverse9;\n }\n\n case 'set_mark':\n {\n var _op6 = op,\n _properties = _op6.properties,\n mark = _op6.mark;\n var inverseMark = mark.merge(_properties);\n\n var _inverseProperties = pick(mark, Object.keys(_properties));\n\n var _inverse10 = op.set('mark', inverseMark).set('properties', _inverseProperties);\n\n return _inverse10;\n }\n\n case 'set_selection':\n {\n var _op7 = op,\n _properties2 = _op7.properties,\n selection = _op7.selection;\n var inverseSelection = selection.merge(_properties2);\n var inverseProps = pick(selection, Object.keys(_properties2));\n\n var _inverse11 = op.set('selection', inverseSelection).set('properties', inverseProps);\n\n return _inverse11;\n }\n\n case 'set_value':\n {\n var _op8 = op,\n _properties3 = _op8.properties,\n value = _op8.value;\n var inverseValue = value.merge(_properties3);\n\n var _inverseProperties2 = pick(value, Object.keys(_properties3));\n\n var _inverse12 = op.set('value', inverseValue).set('properties', _inverseProperties2);\n\n return _inverse12;\n }\n\n default:\n {\n throw new Error('Unknown operation type: \"' + type + '\".');\n }\n }\n}\n/**\n * Operation attributes.\n *\n * @type {Array}\n */\n\n\nvar OPERATION_ATTRIBUTES = {\n add_mark: ['value', 'path', 'offset', 'length', 'mark'],\n insert_node: ['value', 'path', 'node'],\n insert_text: ['value', 'path', 'offset', 'text', 'marks'],\n merge_node: ['value', 'path', 'position', 'properties', 'target'],\n move_node: ['value', 'path', 'newPath'],\n remove_mark: ['value', 'path', 'offset', 'length', 'mark'],\n remove_node: ['value', 'path', 'node'],\n remove_text: ['value', 'path', 'offset', 'text', 'marks'],\n set_mark: ['value', 'path', 'offset', 'length', 'mark', 'properties'],\n set_node: ['value', 'path', 'node', 'properties'],\n set_selection: ['value', 'selection', 'properties'],\n set_value: ['value', 'properties'],\n split_node: ['value', 'path', 'position', 'properties', 'target']\n /**\n * Default properties.\n *\n * @type {Object}\n */\n\n};\nvar DEFAULTS$14 = {\n length: undefined,\n mark: undefined,\n marks: undefined,\n newPath: undefined,\n node: undefined,\n offset: undefined,\n path: undefined,\n position: undefined,\n properties: undefined,\n selection: undefined,\n target: undefined,\n text: undefined,\n type: undefined,\n value: undefined\n /**\n * Operation.\n *\n * @type {Operation}\n */\n\n};\n\nvar Operation = function (_Record) {\n inherits(Operation, _Record);\n\n function Operation() {\n classCallCheck(this, Operation);\n return possibleConstructorReturn(this, (Operation.__proto__ || Object.getPrototypeOf(Operation)).apply(this, arguments));\n }\n\n createClass(Operation, [{\n key: 'apply',\n\n /**\n * Apply the operation to a `value`.\n *\n * @param {Value} value\n * @return {Value}\n */\n value: function apply(value) {\n var next = applyOperation(value, this);\n return next;\n }\n /**\n * Invert the operation.\n *\n * @return {Operation}\n */\n\n }, {\n key: 'invert',\n value: function invert() {\n var inverted = invertOperation(this);\n return inverted;\n }\n /**\n * Return a JSON representation of the operation.\n *\n * @param {Object} options\n * @return {Object}\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var object = this.object,\n type = this.type;\n var json = {\n object: object,\n type: type\n };\n var ATTRIBUTES = OPERATION_ATTRIBUTES[type];\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = ATTRIBUTES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n var value = this[key]; // Skip keys for objects that should not be serialized, and are only used\n // for providing the local-only invert behavior for the history stack.\n\n if (key == 'document') continue;\n if (key == 'selection') continue;\n if (key == 'value') continue;\n if (key == 'node' && type != 'insert_node') continue;\n\n if (key == 'mark' || key == 'marks' || key == 'node') {\n value = value.toJSON();\n }\n\n if (key == 'properties' && type == 'merge_node') {\n var v = {};\n if ('data' in value) v.data = value.data.toJS();\n if ('type' in value) v.type = value.type;\n value = v;\n }\n\n if (key == 'properties' && type == 'set_mark') {\n var _v = {};\n if ('data' in value) _v.data = value.data.toJS();\n if ('type' in value) _v.type = value.type;\n value = _v;\n }\n\n if (key == 'properties' && type == 'set_node') {\n var _v2 = {};\n if ('data' in value) _v2.data = value.data.toJS();\n if ('type' in value) _v2.type = value.type;\n value = _v2;\n }\n\n if (key == 'properties' && type == 'set_selection') {\n var _v3 = {};\n if ('anchor' in value) _v3.anchor = value.anchor.toJSON();\n if ('focus' in value) _v3.focus = value.focus.toJSON();\n if ('isFocused' in value) _v3.isFocused = value.isFocused;\n if ('marks' in value) _v3.marks = value.marks && value.marks.toJSON();\n value = _v3;\n }\n\n if (key == 'properties' && type == 'set_value') {\n var _v4 = {};\n if ('data' in value) _v4.data = value.data.toJS();\n if ('decorations' in value) _v4.decorations = value.decorations.toJS();\n if ('schema' in value) _v4.schema = value.schema.toJS();\n value = _v4;\n }\n\n if (key == 'properties' && type == 'split_node') {\n var _v5 = {};\n if ('data' in value) _v5.data = value.data.toJS();\n if ('type' in value) _v5.type = value.type;\n value = _v5;\n }\n\n json[key] = value;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return json;\n }\n }, {\n key: 'object',\n\n /**\n * Object.\n *\n * @return {String}\n */\n get: function get$$1() {\n return 'operation';\n }\n }], [{\n key: 'create',\n\n /**\n * Create a new `Operation` with `attrs`.\n *\n * @param {Object|Array|List|String|Operation} attrs\n * @return {Operation}\n */\n value: function create() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (Operation.isOperation(attrs)) {\n return attrs;\n }\n\n if (isPlainObject(attrs)) {\n return Operation.fromJSON(attrs);\n }\n\n throw new Error('`Operation.create` only accepts objects or operations, but you passed it: ' + attrs);\n }\n /**\n * Create a list of `Operations` from `elements`.\n *\n * @param {Array|List} elements\n * @return {List}\n */\n\n }, {\n key: 'createList',\n value: function createList() {\n var elements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (List.isList(elements) || Array.isArray(elements)) {\n var list = new List(elements.map(Operation.create));\n return list;\n }\n\n throw new Error('`Operation.createList` only accepts arrays or lists, but you passed it: ' + elements);\n }\n /**\n * Create a `Operation` from a JSON `object`.\n *\n * @param {Object|Operation} object\n * @return {Operation}\n */\n\n }, {\n key: 'fromJSON',\n value: function fromJSON(object) {\n if (Operation.isOperation(object)) {\n return object;\n }\n\n var type = object.type;\n var ATTRIBUTES = OPERATION_ATTRIBUTES[type];\n var attrs = {\n type: type\n };\n\n if (!ATTRIBUTES) {\n throw new Error('`Operation.fromJSON` was passed an unrecognized operation type: \"' + type + '\"');\n }\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = ATTRIBUTES[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var key = _step2.value;\n var v = object[key];\n\n if (v === undefined) {\n // Skip keys for objects that should not be serialized, and are only used\n // for providing the local-only invert behavior for the history stack.\n if (key == 'document') continue;\n if (key == 'selection') continue;\n if (key == 'value') continue;\n if (key == 'node' && type != 'insert_node') continue;\n throw new Error('`Operation.fromJSON` was passed a \"' + type + '\" operation without the required \"' + key + '\" attribute.');\n }\n\n if (key === 'path' || key === 'newPath') {\n v = PathUtils.create(v);\n }\n\n if (key === 'mark') {\n v = Mark.create(v);\n }\n\n if (key === 'marks' && v != null) {\n v = Mark.createSet(v);\n }\n\n if (key === 'node') {\n v = Node.create(v);\n }\n\n if (key === 'selection') {\n v = Selection.create(v);\n }\n\n if (key === 'value') {\n v = Value.create(v);\n }\n\n if (key === 'properties' && type === 'merge_node') {\n v = Node.createProperties(v);\n }\n\n if (key === 'properties' && type === 'set_mark') {\n v = Mark.createProperties(v);\n }\n\n if (key === 'properties' && type === 'set_node') {\n v = Node.createProperties(v);\n }\n\n if (key === 'properties' && type === 'set_selection') {\n v = Selection.createProperties(v);\n }\n\n if (key === 'properties' && type === 'set_value') {\n v = Value.createProperties(v);\n }\n\n if (key === 'properties' && type === 'split_node') {\n v = Node.createProperties(v);\n }\n\n attrs[key] = v;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n var node = new Operation(attrs);\n return node;\n }\n /**\n * Check if `any` is a `Operation`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }, {\n key: 'isOperation',\n value: function isOperation(any) {\n return !!(any && any[MODEL_TYPES.OPERATION]);\n }\n /**\n * Check if `any` is a list of operations.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n }, {\n key: 'isOperationList',\n value: function isOperationList(any) {\n return List.isList(any) && any.every(function (item) {\n return Operation.isOperation(item);\n });\n }\n }]);\n return Operation;\n}(Record(DEFAULTS$14));\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nOperation.prototype[MODEL_TYPES.OPERATION] = true;\n/**\n * Debug.\n *\n * @type {Function}\n */\n\nvar debug$4 = Debug('slate:change');\n/**\n * Change.\n *\n * @type {Change}\n */\n\nvar Change = function () {\n /**\n * Create a new `Change` with `attrs`.\n *\n * @param {Object} attrs\n * @property {Value} value\n */\n function Change(attrs) {\n classCallCheck(this, Change);\n var value = attrs.value;\n this.value = value;\n this.operations = new List();\n this.tmp = {\n dirty: [],\n merge: null,\n normalize: true,\n save: true\n };\n }\n /**\n * Object.\n *\n * @return {String}\n */\n\n /**\n * Check if `any` is a `Change`.\n *\n * @param {Any} any\n * @return {Boolean}\n */\n\n\n createClass(Change, [{\n key: 'applyOperation',\n\n /**\n * Apply an `operation` to the current value, saving the operation to the\n * history if needed.\n *\n * @param {Operation|Object} operation\n * @param {Object} options\n * @return {Change}\n */\n value: function applyOperation(operation) {\n var operations = this.operations;\n var value = this.value;\n var _value = value,\n history = _value.history;\n var oldValue = value; // Add in the current `value` in case the operation was serialized.\n\n if (isPlainObject(operation)) {\n operation = _extends({}, operation, {\n value: value\n });\n }\n\n operation = Operation.create(operation); // Default options to the change-level flags, this allows for setting\n // specific options for all of the operations of a given change.\n\n var _tmp = this.tmp,\n merge = _tmp.merge,\n save = _tmp.save; // If `merge` is non-commital, and this is not the first operation in a new change\n // then we should merge.\n\n if (merge == null && operations.size !== 0) {\n merge = true;\n } // Apply the operation to the value.\n\n\n debug$4('apply', {\n operation: operation,\n save: save,\n merge: merge\n });\n value = operation.apply(value); // If needed, save the operation to the history.\n\n if (history && save) {\n history = history.save(operation, {\n merge: merge\n });\n value = value.set('history', history);\n } // Get the keys of the affected nodes, and mark them as dirty.\n\n\n var keys = getDirtyKeys(operation, value, oldValue);\n this.tmp.dirty = this.tmp.dirty.concat(keys); // Update the mutable change object.\n\n this.value = value;\n this.operations = operations.push(operation);\n return this;\n }\n /**\n * Apply a series of `operations` to the current value.\n *\n * @param {Array|List} operations\n * @param {Object} options\n * @return {Change}\n */\n\n }, {\n key: 'applyOperations',\n value: function applyOperations(operations, options) {\n var _this = this;\n\n operations.forEach(function (op) {\n return _this.applyOperation(op, options);\n });\n return this;\n }\n /**\n * Call a change `fn` with arguments.\n *\n * @param {Function} fn\n * @param {Mixed} ...args\n * @return {Change}\n */\n\n }, {\n key: 'call',\n value: function call(fn) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n fn.apply(undefined, [this].concat(args));\n this.normalizeDirtyOperations();\n return this;\n }\n /**\n * Normalize all of the nodes in the document from scratch.\n *\n * @return {Change}\n */\n\n }, {\n key: 'normalize',\n value: function normalize() {\n var value = this.value;\n var document = value.document;\n var keys = Object.keys(document.getKeysToPathsTable());\n this.normalizeKeys(keys);\n return this;\n }\n /**\n * Normalize any new \"dirty\" operations that have been added to the change.\n *\n * @return {Change}\n */\n\n }, {\n key: 'normalizeDirtyOperations',\n value: function normalizeDirtyOperations() {\n var _tmp2 = this.tmp,\n normalize = _tmp2.normalize,\n dirty = _tmp2.dirty;\n if (!normalize) return this;\n if (!dirty.length) return this;\n this.tmp.dirty = [];\n this.normalizeKeys(dirty);\n return this;\n }\n /**\n * Normalize a set of nodes by their `keys`.\n *\n * @param {Array} keys\n * @return {Change}\n */\n\n }, {\n key: 'normalizeKeys',\n value: function normalizeKeys(keys) {\n var _this2 = this;\n\n var value = this.value;\n var document = value.document; // TODO: if we had an `Operations.tranform` method, we could optimize this\n // to not use keys, and instead used transformed operation paths.\n\n var table = document.getKeysToPathsTable();\n var map = Map$1(); // TODO: this could be optimized to not need the nested map, and instead use\n // clever sorting to arrive at the proper depth-first normalizing.\n\n keys.forEach(function (key) {\n var path = table[key];\n if (!path) return;\n if (!path.length) return;\n if (!map.hasIn(path)) map = map.setIn(path, Map$1());\n }); // To avoid infinite loops, we need to defer normalization until the end.\n\n this.withoutNormalizing(function () {\n _this2.normalizeMapAndPath(map);\n });\n return this;\n }\n /**\n * Normalize all of the nodes in a normalization `map`, depth-first. An\n * additional `path` argument specifics the current depth/location.\n *\n * @param {Map} map\n * @param {Array} path (optional)\n * @return {Change}\n */\n\n }, {\n key: 'normalizeMapAndPath',\n value: function normalizeMapAndPath(map) {\n var _this3 = this;\n\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n map.forEach(function (m, k) {\n var p = [].concat(toConsumableArray(path), [k]);\n\n _this3.normalizeMapAndPath(m, p);\n });\n this.normalizePath(path);\n return this;\n }\n /**\n * Normalize the node at a specific `path`, iterating as many times as\n * necessary until it satisfies all of the schema rules.\n *\n * @param {Array} path\n * @return {Change}\n */\n\n }, {\n key: 'normalizePath',\n value: function normalizePath(path) {\n var _this4 = this;\n\n var value = this.value;\n var document = value.document,\n schema = value.schema;\n var node = document.assertNode(path);\n var iterations = 0;\n var max = schema.stack.plugins.length + schema.rules.length + (node.object === 'text' ? 1 : node.nodes.size);\n\n var iterate = function iterate() {\n var fn = node.normalize(schema);\n if (!fn) return; // Run the normalize `fn` to fix the node.\n\n fn(_this4); // Attempt to re-find the node by path, or by key if it has changed\n // locations in the tree continue iterating.\n\n document = _this4.value.document;\n var _node = node,\n key = _node.key;\n var found = document.getDescendant(path);\n\n if (found && found.key === key) {\n node = found;\n } else {\n found = document.getDescendant(key);\n\n if (found) {\n node = found;\n path = document.getPath(key);\n } else {\n // If it no longer exists by key, it was removed, so abort.\n return;\n }\n } // Increment the iterations counter, and check to make sure that we haven't\n // exceeded the max. Without this check, it's easy for the `normalize`\n // function of a schema rule to be written incorrectly and for an infinite\n // invalid loop to occur.\n\n\n iterations++;\n\n if (iterations > max) {\n throw new Error('A schema rule could not be normalized after sufficient iterations. This is usually due to a `rule.normalize` or `plugin.normalizeNode` function of a schema being incorrectly written, causing an infinite loop.');\n } // Otherwise, iterate again.\n\n\n iterate();\n };\n\n iterate();\n return this;\n }\n /**\n * Apply a series of changes inside a synchronous `fn`, deferring\n * normalization until after the function has finished executing.\n *\n * @param {Function} fn\n * @return {Change}\n */\n\n }, {\n key: 'withoutNormalizing',\n value: function withoutNormalizing(fn) {\n var value = this.tmp.normalize;\n this.tmp.normalize = false;\n fn(this);\n this.tmp.normalize = value;\n\n if (this.tmp.normalize) {\n this.normalizeDirtyOperations();\n }\n\n return this;\n }\n /**\n * Apply a series of changes inside a synchronous `fn`, without merging any of\n * the new operations into previous save point in the history.\n *\n * @param {Function} fn\n * @return {Change}\n */\n\n }, {\n key: 'withoutMerging',\n value: function withoutMerging(fn) {\n var value = this.tmp.merge;\n this.tmp.merge = false;\n fn(this);\n this.tmp.merge = value;\n return this;\n }\n /**\n * Apply a series of changes inside a synchronous `fn`, without saving any of\n * their operations into the history.\n *\n * @param {Function} fn\n * @return {Change}\n */\n\n }, {\n key: 'withoutSaving',\n value: function withoutSaving(fn) {\n var value = this.tmp.save;\n this.tmp.save = false;\n fn(this);\n this.tmp.save = value;\n return this;\n }\n /**\n * Set an operation flag by `key` to `value`.\n *\n * @param {String} key\n * @param {Any} value\n * @return {Change}\n */\n\n /**\n * Deprecated.\n */\n\n }, {\n key: 'setOperationFlag',\n value: function setOperationFlag(key, value) {\n warning(false, 'As of slate@0.41.0 the `change.setOperationFlag` method has been deprecated.');\n this.tmp[key] = value;\n return this;\n }\n }, {\n key: 'getFlag',\n value: function getFlag(key) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n warning(false, 'As of slate@0.41.0 the `change.getFlag` method has been deprecated.');\n return options[key] !== undefined ? options[key] : this.tmp[key];\n }\n }, {\n key: 'unsetOperationFlag',\n value: function unsetOperationFlag(key) {\n warning(false, 'As of slate@0.41.0 the `change.unsetOperationFlag` method has been deprecated.');\n delete this.tmp[key];\n return this;\n }\n }, {\n key: 'withoutNormalization',\n value: function withoutNormalization(fn) {\n warning(false, 'As of slate@0.41.0 the `change.withoutNormalization` helper has been renamed to `change.withoutNormalizing`.');\n return this.withoutNormalizing(fn);\n }\n }, {\n key: 'object',\n get: function get$$1() {\n return 'change';\n }\n }]);\n return Change;\n}();\n/**\n * Get the \"dirty\" nodes's keys for a given `operation` and values.\n *\n * @param {Operation} operation\n * @param {Value} newValue\n * @param {Value} oldValue\n * @return {Array}\n */\n\n\nChange.isChange = isType.bind(null, 'CHANGE');\n\nfunction getDirtyKeys(operation, newValue, oldValue) {\n var type = operation.type,\n node = operation.node,\n path = operation.path,\n newPath = operation.newPath;\n var newDocument = newValue.document;\n var oldDocument = oldValue.document;\n\n switch (type) {\n case 'add_mark':\n case 'insert_text':\n case 'remove_mark':\n case 'remove_text':\n case 'set_mark':\n case 'set_node':\n {\n var target = newDocument.assertNode(path);\n var keys = [target.key];\n return keys;\n }\n\n case 'insert_node':\n {\n var table = node.getKeysToPathsTable();\n\n var _keys = Object.keys(table);\n\n return _keys;\n }\n\n case 'split_node':\n {\n var nextPath = PathUtils.increment(path);\n\n var _target = newDocument.assertNode(path);\n\n var split = newDocument.assertNode(nextPath);\n var _keys2 = [_target.key, split.key];\n return _keys2;\n }\n\n case 'merge_node':\n {\n var previousPath = PathUtils.decrement(path);\n var merged = newDocument.assertNode(previousPath);\n var _keys3 = [merged.key];\n return _keys3;\n }\n\n case 'move_node':\n {\n var parentPath = PathUtils.lift(path);\n var newParentPath = PathUtils.lift(newPath);\n var oldParent = oldDocument.assertNode(parentPath);\n var newParent = oldDocument.assertNode(newParentPath);\n var _keys4 = [oldParent.key, newParent.key];\n return _keys4;\n }\n\n case 'remove_node':\n {\n var _parentPath = PathUtils.lift(path);\n\n var parent = newDocument.assertNode(_parentPath);\n var _keys5 = [parent.key];\n return _keys5;\n }\n\n default:\n {\n return [];\n }\n }\n}\n/**\n * Attach a pseudo-symbol for type checking.\n */\n\n\nChange.prototype[MODEL_TYPES.CHANGE] = true;\n/**\n * Add a change method for each of the changes.\n */\n\nObject.keys(Changes$6).forEach(function (type) {\n Change.prototype[type] = function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n debug$4(type, {\n args: args\n });\n this.call.apply(this, [Changes$6[type]].concat(args));\n return this;\n };\n});\n/**\n * The interface that all Slate models implement.\n *\n * @type {Class}\n */\n\nvar CommonInterface = function () {\n function CommonInterface() {\n classCallCheck(this, CommonInterface);\n }\n\n createClass(CommonInterface, [{\n key: 'toJS',\n\n /**\n * Alias `toJS`.\n */\n value: function toJS() {\n return this.toJSON.apply(this, arguments);\n }\n }], [{\n key: 'fromJS',\n\n /**\n * Alias `fromJS`.\n */\n value: function fromJS() {\n return this.fromJSON.apply(this, arguments);\n }\n }]);\n return CommonInterface;\n}();\n/**\n * Mix in the common interface.\n *\n * @param {Record}\n */\n\n\nmixin(CommonInterface, [Block, Change, Decoration, Document, History, Inline, Leaf, Mark, Node, Operation, Point, Range, Schema, Selection, Stack$1, Text, Value]);\n/**\n * The interface that `Document`, `Block` and `Inline` all implement, to make\n * working with the recursive node tree easier.\n *\n * @type {Class}\n */\n\nvar ElementInterface = function () {\n function ElementInterface() {\n classCallCheck(this, ElementInterface);\n }\n\n createClass(ElementInterface, [{\n key: 'addMark',\n\n /**\n * Add mark to text at `offset` and `length` in node by `path`.\n *\n * @param {List|String} path\n * @param {Number} offset\n * @param {Number} length\n * @param {Mark} mark\n * @return {Node}\n */\n value: function addMark(path, offset, length, mark) {\n var node = this.assertDescendant(path);\n path = this.resolvePath(path);\n node = node.addMark(offset, length, mark);\n var ret = this.replaceNode(path, node);\n return ret;\n }\n /**\n * Create a decoration with `properties` relative to the node.\n *\n * @param {Object|Decoration} properties\n * @return {Decoration}\n */\n\n }, {\n key: 'createDecoration',\n value: function createDecoration(properties) {\n properties = Decoration.createProperties(properties);\n var decoration = this.resolveDecoration(properties);\n return decoration;\n }\n /**\n * Create a point with `properties` relative to the node.\n *\n * @param {Object|Point} properties\n * @return {Range}\n */\n\n }, {\n key: 'createPoint',\n value: function createPoint(properties) {\n properties = Point.createProperties(properties);\n var point = this.resolvePoint(properties);\n return point;\n }\n /**\n * Create a range with `properties` relative to the node.\n *\n * @param {Object|Range} properties\n * @return {Range}\n */\n\n }, {\n key: 'createRange',\n value: function createRange(properties) {\n properties = Range.createProperties(properties);\n var range = this.resolveRange(properties);\n return range;\n }\n /**\n * Create a selection with `properties` relative to the node.\n *\n * @param {Object|Selection} properties\n * @return {Selection}\n */\n\n }, {\n key: 'createSelection',\n value: function createSelection(properties) {\n properties = Selection.createProperties(properties);\n var selection = this.resolveSelection(properties);\n return selection;\n }\n /**\n * Recursively filter all descendant nodes with `iterator`.\n *\n * @param {Function} iterator\n * @return {List}\n */\n\n }, {\n key: 'filterDescendants',\n value: function filterDescendants(iterator) {\n var matches = [];\n this.forEachDescendant(function (node, i, nodes) {\n if (iterator(node, i, nodes)) matches.push(node);\n });\n return List(matches);\n }\n /**\n * Recursively find all descendant nodes by `iterator`.\n *\n * @param {Function} iterator\n * @return {Node|Null}\n */\n\n }, {\n key: 'findDescendant',\n value: function findDescendant(iterator) {\n var found = null;\n this.forEachDescendant(function (node, i, nodes) {\n if (iterator(node, i, nodes)) {\n found = node;\n return false;\n }\n });\n return found;\n }\n /**\n * Recursively iterate over all descendant nodes with `iterator`. If the\n * iterator returns false it will break the loop.\n *\n * @param {Function} iterator\n */\n\n }, {\n key: 'forEachDescendant',\n value: function forEachDescendant(iterator) {\n var ret = void 0;\n this.nodes.forEach(function (child, i, nodes) {\n if (iterator(child, i, nodes) === false) {\n ret = false;\n return false;\n }\n\n if (child.object != 'text') {\n ret = child.forEachDescendant(iterator);\n return ret;\n }\n });\n return ret;\n }\n /**\n * Get a set of the active marks in a `range`.\n *\n * @param {Range} range\n * @return {Set}\n */\n\n }, {\n key: 'getActiveMarksAtRange',\n value: function getActiveMarksAtRange(range) {\n range = this.resolveRange(range);\n if (range.isUnset) return Set();\n\n if (range.isCollapsed) {\n var _range = range,\n _start = _range.start;\n return this.getMarksAtPosition(_start.key, _start.offset).toSet();\n }\n\n var _range2 = range,\n start = _range2.start,\n end = _range2.end;\n var startKey = start.key;\n var startOffset = start.offset;\n var endKey = end.key;\n var endOffset = end.offset;\n var startText = this.getDescendant(startKey);\n\n if (startKey !== endKey) {\n while (startKey !== endKey && endOffset === 0) {\n var _endText = this.getPreviousText(endKey);\n\n endKey = _endText.key;\n endOffset = _endText.text.length;\n }\n\n while (startKey !== endKey && startOffset === startText.text.length) {\n startText = this.getNextText(startKey);\n startKey = startText.key;\n startOffset = 0;\n }\n }\n\n if (startKey === endKey) {\n return startText.getActiveMarksBetweenOffsets(startOffset, endOffset);\n }\n\n var startMarks = startText.getActiveMarksBetweenOffsets(startOffset, startText.text.length);\n if (startMarks.size === 0) return Set();\n var endText = this.getDescendant(endKey);\n var endMarks = endText.getActiveMarksBetweenOffsets(0, endOffset);\n var marks = startMarks.intersect(endMarks); // If marks is already empty, the active marks is empty\n\n if (marks.size === 0) return marks;\n var text = this.getNextText(startKey);\n\n while (text.key !== endKey) {\n if (text.text.length !== 0) {\n marks = marks.intersect(text.getActiveMarks());\n if (marks.size === 0) return Set();\n }\n\n text = this.getNextText(text.key);\n }\n\n return marks;\n }\n /**\n * Get a list of the ancestors of a descendant.\n *\n * @param {List|String} path\n * @return {List|Null}\n */\n\n }, {\n key: 'getAncestors',\n value: function getAncestors(path) {\n var _this = this;\n\n path = this.resolvePath(path);\n if (!path) return null;\n var ancestors = [];\n path.forEach(function (p, i) {\n var current = path.slice(0, i);\n\n var parent = _this.getNode(current);\n\n ancestors.push(parent);\n });\n return List(ancestors);\n }\n /**\n * Get the leaf block descendants of the node.\n *\n * @return {List}\n */\n\n }, {\n key: 'getBlocks',\n value: function getBlocks() {\n var array = this.getBlocksAsArray();\n return List(array);\n }\n /**\n * Get the leaf block descendants of the node.\n *\n * @return {List}\n */\n\n }, {\n key: 'getBlocksAsArray',\n value: function getBlocksAsArray() {\n return this.nodes.reduce(function (array, child) {\n if (child.object != 'block') return array;\n if (!child.isLeafBlock()) return array.concat(child.getBlocksAsArray());\n array.push(child);\n return array;\n }, []);\n }\n /**\n * Get the leaf block descendants in a `range`.\n *\n * @param {Range} range\n * @return {List}\n */\n\n }, {\n key: 'getBlocksAtRange',\n value: function getBlocksAtRange(range) {\n var array = this.getBlocksAtRangeAsArray(range); // Eliminate duplicates by converting to an `OrderedSet` first.\n\n return List(OrderedSet(array));\n }\n /**\n * Get the leaf block descendants in a `range` as an array\n *\n * @param {Range} range\n * @return {Array}\n */\n\n }, {\n key: 'getBlocksAtRangeAsArray',\n value: function getBlocksAtRangeAsArray(range) {\n range = this.resolveRange(range);\n if (range.isUnset) return [];\n var _range3 = range,\n start = _range3.start,\n end = _range3.end;\n var startBlock = this.getClosestBlock(start.key); // PERF: the most common case is when the range is in a single block node,\n // where we can avoid a lot of iterating of the tree.\n\n if (start.key === end.key) return [startBlock];\n var endBlock = this.getClosestBlock(end.key);\n var blocks = this.getBlocksAsArray();\n var startIndex = blocks.indexOf(startBlock);\n var endIndex = blocks.indexOf(endBlock);\n return blocks.slice(startIndex, endIndex + 1);\n }\n /**\n * Get all of the leaf blocks that match a `type`.\n *\n * @param {String} type\n * @return {List}\n */\n\n }, {\n key: 'getBlocksByType',\n value: function getBlocksByType(type) {\n var array = this.getBlocksByTypeAsArray(type);\n return List(array);\n }\n /**\n * Get all of the leaf blocks that match a `type` as an array\n *\n * @param {String} type\n * @return {Array}\n */\n\n }, {\n key: 'getBlocksByTypeAsArray',\n value: function getBlocksByTypeAsArray(type) {\n return this.nodes.reduce(function (array, node) {\n if (node.object != 'block') {\n return array;\n } else if (node.isLeafBlock() && node.type == type) {\n array.push(node);\n return array;\n } else {\n return array.concat(node.getBlocksByTypeAsArray(type));\n }\n }, []);\n }\n /**\n * Get a child node.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getChild',\n value: function getChild(path) {\n path = this.resolvePath(path);\n if (!path) return null;\n var child = path.size === 1 ? this.nodes.get(path.first()) : null;\n return child;\n }\n /**\n * Get closest parent of node that matches an `iterator`.\n *\n * @param {List|String} path\n * @param {Function} iterator\n * @return {Node|Null}\n */\n\n }, {\n key: 'getClosest',\n value: function getClosest(path, iterator) {\n var _this2 = this;\n\n var ancestors = this.getAncestors(path);\n if (!ancestors) return null;\n var closest = ancestors.findLast(function (node) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n } // We never want to include the top-level node.\n\n\n if (node === _this2) return false;\n return iterator.apply(undefined, [node].concat(args));\n });\n return closest || null;\n }\n /**\n * Get the closest block parent of a node.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getClosestBlock',\n value: function getClosestBlock(path) {\n var closest = this.getClosest(path, function (n) {\n return n.object === 'block';\n });\n return closest;\n }\n /**\n * Get the closest inline parent of a node by `path`.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getClosestInline',\n value: function getClosestInline(path) {\n var closest = this.getClosest(path, function (n) {\n return n.object === 'inline';\n });\n return closest;\n }\n /**\n * Get the closest void parent of a node by `path`.\n *\n * @param {List|String} path\n * @param {Schema} schema\n * @return {Node|Null}\n */\n\n }, {\n key: 'getClosestVoid',\n value: function getClosestVoid(path, schema) {\n var ancestors = this.getAncestors(path);\n if (!ancestors) return null;\n var ancestor = ancestors.findLast(function (a) {\n return schema.isVoid(a);\n });\n return ancestor;\n }\n /**\n * Get the common ancestor of nodes `a` and `b`.\n *\n * @param {List} a\n * @param {List} b\n * @return {Node}\n */\n\n }, {\n key: 'getCommonAncestor',\n value: function getCommonAncestor(a, b) {\n a = this.resolvePath(a);\n b = this.resolvePath(b);\n if (!a || !b) return null;\n var path = PathUtils.relate(a, b);\n var node = this.getNode(path);\n return node;\n }\n /**\n * Get the decorations for the node from a `stack`.\n *\n * @param {Stack} stack\n * @return {List}\n */\n\n }, {\n key: 'getDecorations',\n value: function getDecorations(stack) {\n var allDecorations = stack.map('decorateNode', this).map(function (decorations) {\n return Decoration.createList(decorations);\n });\n var list = List(allDecorations).flatten(true);\n return list;\n }\n /**\n * Get the depth of a descendant, with optional `startAt`.\n *\n * @param {List|String} path\n * @param {Number} startAt\n * @return {Number|Null}\n */\n\n }, {\n key: 'getDepth',\n value: function getDepth(path) {\n var startAt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n path = this.resolvePath(path);\n if (!path) return null;\n var node = this.getNode(path);\n var depth = node ? path.size - 1 + startAt : null;\n return depth;\n }\n /**\n * Get a descendant node.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getDescendant',\n value: function getDescendant(path) {\n path = this.resolvePath(path);\n if (!path) return null;\n var deep = path.flatMap(function (x) {\n return ['nodes', x];\n });\n var ret = this.getIn(deep);\n return ret;\n }\n /**\n * Get a fragment of the node at a `range`.\n *\n * @param {Range} range\n * @return {Document}\n */\n\n }, {\n key: 'getFragmentAtRange',\n value: function getFragmentAtRange(range) {\n range = this.resolveRange(range);\n\n if (range.isUnset) {\n return Document.create();\n }\n\n var _range4 = range,\n start = _range4.start,\n end = _range4.end;\n var node = this;\n var targetPath = end.path;\n var targetPosition = end.offset;\n var mode = 'end';\n\n while (targetPath.size) {\n var index = targetPath.last();\n node = node.splitNode(targetPath, targetPosition);\n targetPosition = index + 1;\n targetPath = PathUtils.lift(targetPath);\n\n if (!targetPath.size && mode === 'end') {\n targetPath = start.path;\n targetPosition = start.offset;\n mode = 'start';\n }\n }\n\n var startIndex = start.path.first() + 1;\n var endIndex = end.path.first() + 2;\n var nodes = node.nodes.slice(startIndex, endIndex);\n var fragment = Document.create({\n nodes: nodes\n });\n return fragment;\n }\n /**\n * Get the furthest parent of a node that matches an `iterator`.\n *\n * @param {Path} path\n * @param {Function} iterator\n * @return {Node|Null}\n */\n\n }, {\n key: 'getFurthest',\n value: function getFurthest(path, iterator) {\n var _this3 = this;\n\n var ancestors = this.getAncestors(path);\n if (!ancestors) return null;\n var furthest = ancestors.find(function (node) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n } // We never want to include the top-level node.\n\n\n if (node === _this3) return false;\n return iterator.apply(undefined, [node].concat(args));\n });\n return furthest || null;\n }\n /**\n * Get the furthest ancestor of a node.\n *\n * @param {Path} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getFurthestAncestor',\n value: function getFurthestAncestor(path) {\n path = this.resolvePath(path);\n if (!path) return null;\n var furthest = path.size ? this.nodes.get(path.first()) : null;\n return furthest;\n }\n /**\n * Get the furthest block parent of a node.\n *\n * @param {Path} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getFurthestBlock',\n value: function getFurthestBlock(path) {\n var furthest = this.getFurthest(path, function (n) {\n return n.object === 'block';\n });\n return furthest;\n }\n /**\n * Get the furthest inline parent of a node.\n *\n * @param {Path} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getFurthestInline',\n value: function getFurthestInline(path) {\n var furthest = this.getFurthest(path, function (n) {\n return n.object === 'inline';\n });\n return furthest;\n }\n /**\n * Get the furthest ancestor of a node that has only one child.\n *\n * @param {Path} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getFurthestOnlyChildAncestor',\n value: function getFurthestOnlyChildAncestor(path) {\n var ancestors = this.getAncestors(path);\n if (!ancestors) return null;\n var furthest = ancestors.rest().reverse().takeUntil(function (p) {\n return p.nodes.size > 1;\n }).last();\n return furthest || null;\n }\n /**\n * Get the closest inline nodes for each text node in the node.\n *\n * @return {List}\n */\n\n }, {\n key: 'getInlines',\n value: function getInlines() {\n var array = this.getInlinesAsArray();\n var list = List(array);\n return list;\n }\n /**\n * Get the closest inline nodes for each text node in the node, as an array.\n *\n * @return {List}\n */\n\n }, {\n key: 'getInlinesAsArray',\n value: function getInlinesAsArray() {\n var array = [];\n this.nodes.forEach(function (child) {\n if (child.object == 'text') return;\n\n if (child.isLeafInline()) {\n array.push(child);\n } else {\n array = array.concat(child.getInlinesAsArray());\n }\n });\n return array;\n }\n /**\n * Get the closest inline nodes for each text node in a `range`.\n *\n * @param {Range} range\n * @return {List}\n */\n\n }, {\n key: 'getInlinesAtRange',\n value: function getInlinesAtRange(range) {\n var array = this.getInlinesAtRangeAsArray(range); // Remove duplicates by converting it to an `OrderedSet` first.\n\n var list = List(OrderedSet(array));\n return list;\n }\n /**\n * Get the closest inline nodes for each text node in a `range` as an array.\n *\n * @param {Range} range\n * @return {Array}\n */\n\n }, {\n key: 'getInlinesAtRangeAsArray',\n value: function getInlinesAtRangeAsArray(range) {\n var _this4 = this;\n\n range = this.resolveRange(range);\n if (range.isUnset) return [];\n var array = this.getTextsAtRangeAsArray(range).map(function (text) {\n return _this4.getClosestInline(text.key);\n }).filter(function (exists) {\n return exists;\n });\n return array;\n }\n /**\n * Get all of the leaf inline nodes that match a `type`.\n *\n * @param {String} type\n * @return {List}\n */\n\n }, {\n key: 'getInlinesByType',\n value: function getInlinesByType(type) {\n var array = this.getInlinesByTypeAsArray(type);\n var list = List(array);\n return list;\n }\n /**\n * Get all of the leaf inline nodes that match a `type` as an array.\n *\n * @param {String} type\n * @return {Array}\n */\n\n }, {\n key: 'getInlinesByTypeAsArray',\n value: function getInlinesByTypeAsArray(type) {\n var array = this.nodes.reduce(function (inlines, node) {\n if (node.object == 'text') {\n return inlines;\n } else if (node.isLeafInline() && node.type == type) {\n inlines.push(node);\n return inlines;\n } else {\n return inlines.concat(node.getInlinesByTypeAsArray(type));\n }\n }, []);\n return array;\n }\n /**\n * Get a set of the marks in a `range`.\n *\n * @param {Range} range\n * @return {Set}\n */\n\n }, {\n key: 'getInsertMarksAtRange',\n value: function getInsertMarksAtRange(range) {\n range = this.resolveRange(range);\n var _range5 = range,\n start = _range5.start;\n\n if (range.isUnset) {\n return Set();\n }\n\n if (range.isCollapsed) {\n // PERF: range is not cachable, use key and offset as proxies for cache\n return this.getMarksAtPosition(start.key, start.offset);\n }\n\n var text = this.getDescendant(start.key);\n var marks = text.getMarksAtIndex(start.offset + 1);\n return marks;\n }\n /**\n * Get all of the marks for all of the characters of every text node.\n *\n * @return {Set}\n */\n\n }, {\n key: 'getMarks',\n value: function getMarks() {\n var array = this.getMarksAsArray();\n return Set(array);\n }\n /**\n * Get all of the marks as an array.\n *\n * @return {Array}\n */\n\n }, {\n key: 'getMarksAsArray',\n value: function getMarksAsArray() {\n var _ref;\n\n var result = [];\n this.nodes.forEach(function (node) {\n result.push(node.getMarksAsArray());\n }); // PERF: use only one concat rather than multiple for speed.\n\n var array = (_ref = []).concat.apply(_ref, result);\n\n return array;\n }\n /**\n * Get a set of marks in a `position`, the equivalent of a collapsed range\n *\n * @param {string} key\n * @param {number} offset\n * @return {Set}\n */\n\n }, {\n key: 'getMarksAtPosition',\n value: function getMarksAtPosition(key, offset) {\n var text = this.getDescendant(key);\n var currentMarks = text.getMarksAtIndex(offset);\n if (offset !== 0) return currentMarks;\n var closestBlock = this.getClosestBlock(key);\n\n if (closestBlock.text === '') {\n // insert mark for empty block; the empty block are often created by split node or add marks in a range including empty blocks\n return currentMarks;\n }\n\n var previous = this.getPreviousText(key);\n if (!previous) return Set();\n\n if (closestBlock.hasDescendant(previous.key)) {\n return previous.getMarksAtIndex(previous.text.length);\n }\n\n return currentMarks;\n }\n /**\n * Get a set of the marks in a `range`.\n *\n * @param {Range} range\n * @return {Set}\n */\n\n }, {\n key: 'getMarksAtRange',\n value: function getMarksAtRange(range) {\n var marks = Set(this.getOrderedMarksAtRange(range));\n return marks;\n }\n /**\n * Get all of the marks that match a `type`.\n *\n * @param {String} type\n * @return {Set}\n */\n\n }, {\n key: 'getMarksByType',\n value: function getMarksByType(type) {\n var array = this.getMarksByTypeAsArray(type);\n return Set(array);\n }\n /**\n * Get all of the marks that match a `type` as an array.\n *\n * @param {String} type\n * @return {Array}\n */\n\n }, {\n key: 'getMarksByTypeAsArray',\n value: function getMarksByTypeAsArray(type) {\n var array = this.nodes.reduce(function (memo, node) {\n return node.object == 'text' ? memo.concat(node.getMarksAsArray().filter(function (m) {\n return m.type == type;\n })) : memo.concat(node.getMarksByTypeAsArray(type));\n }, []);\n return array;\n }\n /**\n * Get the block node before a descendant text node by `key`.\n *\n * @param {String} key\n * @return {Node|Null}\n */\n\n }, {\n key: 'getNextBlock',\n value: function getNextBlock(key) {\n var child = this.assertDescendant(key);\n var last = void 0;\n\n if (child.object == 'block') {\n last = child.getLastText();\n } else {\n var block = this.getClosestBlock(key);\n last = block.getLastText();\n }\n\n var next = this.getNextText(last.key);\n if (!next) return null;\n var closest = this.getClosestBlock(next.key);\n return closest;\n }\n /**\n * Get the next node in the tree from a node.\n *\n * This will not only check for siblings but instead move up the tree\n * returning the next ancestor if no sibling is found.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getNextNode',\n value: function getNextNode(path) {\n path = this.resolvePath(path);\n if (!path) return null;\n if (!path.size) return null;\n\n for (var i = path.size; i > 0; i--) {\n var p = path.slice(0, i);\n var target = PathUtils.increment(p);\n var node = this.getNode(target);\n if (node) return node;\n }\n\n return null;\n }\n /**\n * Get the next sibling of a node.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getNextSibling',\n value: function getNextSibling(path) {\n path = this.resolvePath(path);\n if (!path) return null;\n if (!path.size) return null;\n var p = PathUtils.increment(path);\n var sibling = this.getNode(p);\n return sibling;\n }\n /**\n * Get the text node after a descendant text node.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getNextText',\n value: function getNextText(path) {\n path = this.resolvePath(path);\n if (!path) return null;\n if (!path.size) return null;\n var next = this.getNextNode(path);\n if (!next) return null;\n var text = next.getFirstText();\n return text;\n }\n /**\n * Get the offset for a descendant text node by `key`.\n *\n * @param {String} key\n * @return {Number}\n */\n\n }, {\n key: 'getOffset',\n value: function getOffset(key) {\n this.assertDescendant(key); // Calculate the offset of the nodes before the highest child.\n\n var child = this.getFurthestAncestor(key);\n var offset = this.nodes.takeUntil(function (n) {\n return n == child;\n }).reduce(function (memo, n) {\n return memo + n.text.length;\n }, 0); // Recurse if need be.\n\n var ret = this.hasChild(key) ? offset : offset + child.getOffset(key);\n return ret;\n }\n /**\n * Get the offset from a `range`.\n *\n * @param {Range} range\n * @return {Number}\n */\n\n }, {\n key: 'getOffsetAtRange',\n value: function getOffsetAtRange(range) {\n range = this.resolveRange(range);\n\n if (range.isUnset) {\n throw new Error('The range cannot be unset to calculcate its offset.');\n }\n\n if (range.isExpanded) {\n throw new Error('The range must be collapsed to calculcate its offset.');\n }\n\n var _range6 = range,\n start = _range6.start;\n var offset = this.getOffset(start.key) + start.offset;\n return offset;\n }\n /**\n * Get all of the marks for all of the characters of every text node.\n *\n * @return {OrderedSet}\n */\n\n }, {\n key: 'getOrderedMarks',\n value: function getOrderedMarks() {\n var array = this.getMarksAsArray();\n return OrderedSet(array);\n }\n /**\n * Get a set of the marks in a `range`.\n *\n * @param {Range} range\n * @return {OrderedSet}\n */\n\n }, {\n key: 'getOrderedMarksAtRange',\n value: function getOrderedMarksAtRange(range) {\n range = this.resolveRange(range);\n var _range7 = range,\n start = _range7.start,\n end = _range7.end;\n\n if (range.isUnset) {\n return OrderedSet();\n }\n\n if (range.isCollapsed) {\n // PERF: range is not cachable, use key and offset as proxies for cache\n return this.getMarksAtPosition(start.key, start.offset);\n }\n\n var marks = this.getOrderedMarksBetweenPositions(start.key, start.offset, end.key, end.offset);\n return marks;\n }\n /**\n * Get a set of the marks in a `range`.\n * PERF: arguments use key and offset for utilizing cache\n *\n * @param {string} startKey\n * @param {number} startOffset\n * @param {string} endKey\n * @param {number} endOffset\n * @returns {OrderedSet}\n */\n\n }, {\n key: 'getOrderedMarksBetweenPositions',\n value: function getOrderedMarksBetweenPositions(startKey, startOffset, endKey, endOffset) {\n if (startKey === endKey) {\n var startText = this.getDescendant(startKey);\n return startText.getMarksBetweenOffsets(startOffset, endOffset);\n }\n\n var texts = this.getTextsBetweenPositionsAsArray(startKey, endKey);\n return OrderedSet().withMutations(function (result) {\n texts.forEach(function (text) {\n if (text.key === startKey) {\n result.union(text.getMarksBetweenOffsets(startOffset, text.text.length));\n } else if (text.key === endKey) {\n result.union(text.getMarksBetweenOffsets(0, endOffset));\n } else {\n result.union(text.getMarks());\n }\n });\n });\n }\n /**\n * Get all of the marks that match a `type`.\n *\n * @param {String} type\n * @return {OrderedSet}\n */\n\n }, {\n key: 'getOrderedMarksByType',\n value: function getOrderedMarksByType(type) {\n var array = this.getMarksByTypeAsArray(type);\n return OrderedSet(array);\n }\n /**\n * Get the parent of a descendant node.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getParent',\n value: function getParent(path) {\n path = this.resolvePath(path);\n if (!path) return null;\n if (!path.size) return null;\n var parentPath = PathUtils.lift(path);\n var parent = this.getNode(parentPath);\n return parent;\n }\n /**\n * Get the block node before a descendant text node by `key`.\n *\n * @param {String} key\n * @return {Node|Null}\n */\n\n }, {\n key: 'getPreviousBlock',\n value: function getPreviousBlock(key) {\n var child = this.assertDescendant(key);\n var first = void 0;\n\n if (child.object == 'block') {\n first = child.getFirstText();\n } else {\n var block = this.getClosestBlock(key);\n first = block.getFirstText();\n }\n\n var previous = this.getPreviousText(first.key);\n if (!previous) return null;\n var closest = this.getClosestBlock(previous.key);\n return closest;\n }\n /**\n * Get the previous node from a node in the tree.\n *\n * This will not only check for siblings but instead move up the tree\n * returning the previous ancestor if no sibling is found.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getPreviousNode',\n value: function getPreviousNode(path) {\n path = this.resolvePath(path);\n if (!path) return null;\n if (!path.size) return null;\n\n for (var i = path.size; i > 0; i--) {\n var p = path.slice(0, i);\n if (p.last() === 0) continue;\n var target = PathUtils.decrement(p);\n var node = this.getNode(target);\n if (node) return node;\n }\n\n return null;\n }\n /**\n * Get the previous sibling of a node.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getPreviousSibling',\n value: function getPreviousSibling(path) {\n path = this.resolvePath(path);\n if (!path) return null;\n if (!path.size) return null;\n if (path.last() === 0) return null;\n var p = PathUtils.decrement(path);\n var sibling = this.getNode(p);\n return sibling;\n }\n /**\n * Get the text node after a descendant text node.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getPreviousText',\n value: function getPreviousText(path) {\n path = this.resolvePath(path);\n if (!path) return null;\n if (!path.size) return null;\n var previous = this.getPreviousNode(path);\n if (!previous) return null;\n var text = previous.getLastText();\n return text;\n }\n /**\n * Get the indexes of the selection for a `range`, given an extra flag for\n * whether the node `isSelected`, to determine whether not finding matches\n * means everything is selected or nothing is.\n *\n * @param {Range} range\n * @param {Boolean} isSelected\n * @return {Object|Null}\n */\n\n }, {\n key: 'getSelectionIndexes',\n value: function getSelectionIndexes(range) {\n var isSelected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var start = range.start,\n end = range.end; // PERF: if we're not selected, we can exit early.\n\n if (!isSelected) {\n return null;\n } // if we've been given an invalid selection we can exit early.\n\n\n if (range.isUnset) {\n return null;\n } // PERF: if the start and end keys are the same, just check for the child\n // that contains that single key.\n\n\n if (start.key == end.key) {\n var child = this.getFurthestAncestor(start.key);\n var index = child ? this.nodes.indexOf(child) : null;\n return {\n start: index,\n end: index + 1\n };\n } // Otherwise, check all of the children...\n\n\n var startIndex = null;\n var endIndex = null;\n this.nodes.forEach(function (child, i) {\n if (child.object == 'text') {\n if (startIndex == null && child.key == start.key) startIndex = i;\n if (endIndex == null && child.key == end.key) endIndex = i + 1;\n } else {\n if (startIndex == null && child.hasDescendant(start.key)) startIndex = i;\n if (endIndex == null && child.hasDescendant(end.key)) endIndex = i + 1;\n } // PERF: exit early if both start and end have been found.\n\n\n return startIndex == null || endIndex == null;\n });\n if (isSelected && startIndex == null) startIndex = 0;\n if (isSelected && endIndex == null) endIndex = this.nodes.size;\n return startIndex == null ? null : {\n start: startIndex,\n end: endIndex\n };\n }\n /**\n * Get the descendent text node at an `offset`.\n *\n * @param {String} offset\n * @return {Node|Null}\n */\n\n }, {\n key: 'getTextAtOffset',\n value: function getTextAtOffset(offset) {\n // PERF: Add a few shortcuts for the obvious cases.\n if (offset === 0) return this.getFirstText();\n if (offset === this.text.length) return this.getLastText();\n if (offset < 0 || offset > this.text.length) return null;\n var length = 0;\n var text = this.getTexts().find(function (node, i, nodes) {\n length += node.text.length;\n return length > offset;\n });\n return text;\n }\n /**\n * Get the direction of the node's text.\n *\n * @return {String}\n */\n\n }, {\n key: 'getTextDirection',\n value: function getTextDirection() {\n var dir = direction(this.text);\n return dir === 'neutral' ? null : dir;\n }\n /**\n * Recursively get all of the child text nodes in order of appearance.\n *\n * @return {List}\n */\n\n }, {\n key: 'getTexts',\n value: function getTexts() {\n var array = this.getTextsAsArray();\n return List(array);\n }\n /**\n * Recursively get all the leaf text nodes in order of appearance, as array.\n *\n * @return {List}\n */\n\n }, {\n key: 'getTextsAsArray',\n value: function getTextsAsArray() {\n var array = [];\n this.nodes.forEach(function (node) {\n if (node.object == 'text') {\n array.push(node);\n } else {\n array = array.concat(node.getTextsAsArray());\n }\n });\n return array;\n }\n /**\n * Get all of the text nodes in a `range`.\n *\n * @param {Range} range\n * @return {List}\n */\n\n }, {\n key: 'getTextsAtRange',\n value: function getTextsAtRange(range) {\n range = this.resolveRange(range);\n if (range.isUnset) return List();\n var _range8 = range,\n start = _range8.start,\n end = _range8.end;\n var list = List(this.getTextsBetweenPositionsAsArray(start.key, end.key));\n return list;\n }\n /**\n * Get all of the text nodes in a `range` as an array.\n *\n * @param {Range} range\n * @return {Array}\n */\n\n }, {\n key: 'getTextsAtRangeAsArray',\n value: function getTextsAtRangeAsArray(range) {\n range = this.resolveRange(range);\n if (range.isUnset) return [];\n var _range9 = range,\n start = _range9.start,\n end = _range9.end;\n var texts = this.getTextsBetweenPositionsAsArray(start.key, end.key);\n return texts;\n }\n /**\n * Get all of the text nodes in a `range` as an array.\n * PERF: use key in arguments for cache\n *\n * @param {string} startKey\n * @param {string} endKey\n * @returns {Array}\n */\n\n }, {\n key: 'getTextsBetweenPositionsAsArray',\n value: function getTextsBetweenPositionsAsArray(startKey, endKey) {\n var startText = this.getDescendant(startKey); // PERF: the most common case is when the range is in a single text node,\n // where we can avoid a lot of iterating of the tree.\n\n if (startKey == endKey) return [startText];\n var endText = this.getDescendant(endKey);\n var texts = this.getTextsAsArray();\n var start = texts.indexOf(startText);\n var end = texts.indexOf(endText, start);\n var ret = texts.slice(start, end + 1);\n return ret;\n }\n /**\n * Check if the node has block children.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'hasBlockChildren',\n value: function hasBlockChildren() {\n return !!(this.nodes && this.nodes.find(function (n) {\n return n.object === 'block';\n }));\n }\n /**\n * Check if a child node exists.\n *\n * @param {List|String} path\n * @return {Boolean}\n */\n\n }, {\n key: 'hasChild',\n value: function hasChild(path) {\n var child = this.getChild(path);\n return !!child;\n }\n /**\n * Check if a node has inline children.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'hasInlineChildren',\n value: function hasInlineChildren() {\n return !!(this.nodes && this.nodes.find(function (n) {\n return n.object === 'inline' || n.object === 'text';\n }));\n }\n /**\n * Recursively check if a child node exists.\n *\n * @param {List|String} path\n * @return {Boolean}\n */\n\n }, {\n key: 'hasDescendant',\n value: function hasDescendant(path) {\n var descendant = this.getDescendant(path);\n return !!descendant;\n }\n /**\n * Check if a node has a void parent.\n *\n * @param {List|String} path\n * @param {Schema} schema\n * @return {Boolean}\n */\n\n }, {\n key: 'hasVoidParent',\n value: function hasVoidParent(path, schema) {\n var closest = this.getClosestVoid(path, schema);\n return !!closest;\n }\n /**\n * Insert a `node`.\n *\n * @param {List|String} path\n * @param {Node} node\n * @return {Node}\n */\n\n }, {\n key: 'insertNode',\n value: function insertNode(path, node) {\n path = this.resolvePath(path);\n var index = path.last();\n var parentPath = PathUtils.lift(path);\n var parent = this.assertNode(parentPath);\n var nodes = parent.nodes.splice(index, 0, node);\n parent = parent.set('nodes', nodes);\n var ret = this.replaceNode(parentPath, parent);\n return ret;\n }\n /**\n * Insert `text` at `offset` in node by `path`.\n *\n * @param {List|String} path\n * @param {Number} offset\n * @param {String} text\n * @param {Set} marks\n * @return {Node}\n */\n\n }, {\n key: 'insertText',\n value: function insertText(path, offset, text, marks) {\n var node = this.assertDescendant(path);\n path = this.resolvePath(path);\n node = node.insertText(offset, text, marks);\n var ret = this.replaceNode(path, node);\n return ret;\n }\n /**\n * Check whether the node is a leaf block.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'isLeafBlock',\n value: function isLeafBlock() {\n var object = this.object,\n nodes = this.nodes;\n var first = nodes.first();\n return object === 'block' && first.object !== 'block';\n }\n /**\n * Check whether the node is a leaf inline.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'isLeafInline',\n value: function isLeafInline() {\n var object = this.object,\n nodes = this.nodes;\n var first = nodes.first();\n return object === 'inline' && first.object !== 'inline';\n }\n /**\n * Map all child nodes, updating them in their parents. This method is\n * optimized to not return a new node if no changes are made.\n *\n * @param {Function} iterator\n * @return {Node}\n */\n\n }, {\n key: 'mapChildren',\n value: function mapChildren(iterator) {\n var _this5 = this;\n\n var nodes = this.nodes;\n nodes.forEach(function (node, i) {\n var ret = iterator(node, i, _this5.nodes);\n if (ret !== node) nodes = nodes.set(ret.key, ret);\n });\n var ret = this.set('nodes', nodes);\n return ret;\n }\n /**\n * Map all descendant nodes, updating them in their parents. This method is\n * optimized to not return a new node if no changes are made.\n *\n * @param {Function} iterator\n * @return {Node}\n */\n\n }, {\n key: 'mapDescendants',\n value: function mapDescendants(iterator) {\n var _this6 = this;\n\n var nodes = this.nodes;\n nodes.forEach(function (node, index) {\n var ret = node;\n if (ret.object !== 'text') ret = ret.mapDescendants(iterator);\n ret = iterator(ret, index, _this6.nodes);\n if (ret === node) return;\n nodes = nodes.set(index, ret);\n });\n var ret = this.set('nodes', nodes);\n return ret;\n }\n /**\n * Merge a node backwards its previous sibling.\n *\n * @param {List|Key} path\n * @return {Node}\n */\n\n }, {\n key: 'mergeNode',\n value: function mergeNode(path) {\n var b = this.assertNode(path);\n path = this.resolvePath(path);\n\n if (path.last() === 0) {\n throw new Error('Unable to merge node because it has no previous sibling: ' + b);\n }\n\n var withPath = PathUtils.decrement(path);\n var a = this.assertNode(withPath);\n\n if (a.object !== b.object) {\n throw new Error('Unable to merge two different kinds of nodes: ' + a + ' and ' + b);\n }\n\n var newNode = a.object === 'text' ? a.mergeText(b) : a.set('nodes', a.nodes.concat(b.nodes));\n var ret = this;\n ret = ret.removeNode(path);\n ret = ret.removeNode(withPath);\n ret = ret.insertNode(withPath, newNode);\n return ret;\n }\n /**\n * Move a node by `path` to `newPath`.\n *\n * A `newIndex` can be provided when move nodes by `key`, to account for not\n * being able to have a key for a location in the tree that doesn't exist yet.\n *\n * @param {List|Key} path\n * @param {List|Key} newPath\n * @param {Number} newIndex\n * @return {Node}\n */\n\n }, {\n key: 'moveNode',\n value: function moveNode(path, newPath) {\n var newIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var node = this.assertNode(path);\n path = this.resolvePath(path);\n newPath = this.resolvePath(newPath, newIndex);\n var newParentPath = PathUtils.lift(newPath);\n this.assertNode(newParentPath);\n\n var _PathUtils$crop = PathUtils.crop(path, newPath),\n _PathUtils$crop2 = slicedToArray(_PathUtils$crop, 2),\n p = _PathUtils$crop2[0],\n np = _PathUtils$crop2[1];\n\n var position = PathUtils.compare(p, np); // If the old path ends above and before a node in the new path, then\n // removing it will alter the target, so we need to adjust the new path.\n\n if (path.size < newPath.size && position === -1) {\n newPath = PathUtils.decrement(newPath, 1, p.size - 1);\n }\n\n var ret = this;\n ret = ret.removeNode(path);\n ret = ret.insertNode(newPath, node);\n return ret;\n }\n /**\n * Remove mark from text at `offset` and `length` in node.\n *\n * @param {List} path\n * @param {Number} offset\n * @param {Number} length\n * @param {Mark} mark\n * @return {Node}\n */\n\n }, {\n key: 'removeMark',\n value: function removeMark(path, offset, length, mark) {\n var node = this.assertDescendant(path);\n path = this.resolvePath(path);\n node = node.removeMark(offset, length, mark);\n var ret = this.replaceNode(path, node);\n return ret;\n }\n /**\n * Remove a node.\n *\n * @param {List|String} path\n * @return {Node}\n */\n\n }, {\n key: 'removeNode',\n value: function removeNode(path) {\n this.assertDescendant(path);\n path = this.resolvePath(path);\n var deep = path.flatMap(function (x) {\n return ['nodes', x];\n });\n var ret = this.deleteIn(deep);\n return ret;\n }\n /**\n * Remove `text` at `offset` in node.\n *\n * @param {List|Key} path\n * @param {Number} offset\n * @param {String} text\n * @return {Node}\n */\n\n }, {\n key: 'removeText',\n value: function removeText(path, offset, text) {\n var node = this.assertDescendant(path);\n node = node.removeText(offset, text.length);\n var ret = this.replaceNode(path, node);\n return ret;\n }\n /**\n * Replace a `node` in the tree.\n *\n * @param {List|Key} path\n * @param {Node} node\n * @return {Node}\n */\n\n }, {\n key: 'replaceNode',\n value: function replaceNode(path, node) {\n path = this.resolvePath(path);\n\n if (!path) {\n throw new Error('Unable to replace a node because it could not be found in the first place: ' + path);\n }\n\n if (!path.size) return node;\n this.assertNode(path);\n var deep = path.flatMap(function (x) {\n return ['nodes', x];\n });\n var ret = this.setIn(deep, node);\n return ret;\n }\n /**\n * Resolve a `decoration`, relative to the node, ensuring that the keys and\n * offsets in the decoration exist and that they are synced with the paths.\n *\n * @param {Decoration|Object} decoration\n * @return {Decoration}\n */\n\n }, {\n key: 'resolveDecoration',\n value: function resolveDecoration(decoration) {\n decoration = Decoration.create(decoration);\n decoration = decoration.normalize(this);\n return decoration;\n }\n /**\n * Resolve a `point`, relative to the node, ensuring that the keys and\n * offsets in the point exist and that they are synced with the paths.\n *\n * @param {Point|Object} point\n * @return {Point}\n */\n\n }, {\n key: 'resolvePoint',\n value: function resolvePoint(point) {\n point = Point.create(point);\n point = point.normalize(this);\n return point;\n }\n /**\n * Resolve a `range`, relative to the node, ensuring that the keys and\n * offsets in the range exist and that they are synced with the paths.\n *\n * @param {Range|Object} range\n * @return {Range}\n */\n\n }, {\n key: 'resolveRange',\n value: function resolveRange(range) {\n range = Range.create(range);\n range = range.normalize(this);\n return range;\n }\n /**\n * Resolve a `selection`, relative to the node, ensuring that the keys and\n * offsets in the selection exist and that they are synced with the paths.\n *\n * @param {Selection|Object} selection\n * @return {Selection}\n */\n\n }, {\n key: 'resolveSelection',\n value: function resolveSelection(selection) {\n selection = Selection.create(selection);\n selection = selection.normalize(this);\n return selection;\n }\n /**\n * Set `properties` on a node.\n *\n * @param {List|String} path\n * @param {Object} properties\n * @return {Node}\n */\n\n }, {\n key: 'setNode',\n value: function setNode(path, properties) {\n var node = this.assertNode(path);\n node = node.merge(properties);\n var ret = this.replaceNode(path, node);\n return ret;\n }\n /**\n * Set `properties` on `mark` on text at `offset` and `length` in node.\n *\n * @param {List|String} path\n * @param {Number} offset\n * @param {Number} length\n * @param {Mark} mark\n * @param {Object} properties\n * @return {Node}\n */\n\n }, {\n key: 'setMark',\n value: function setMark(path, offset, length, mark, properties) {\n var node = this.assertNode(path);\n node = node.updateMark(offset, length, mark, properties);\n var ret = this.replaceNode(path, node);\n return ret;\n }\n /**\n * Split a node by `path` at `position` with optional `properties` to apply\n * to the newly split node.\n *\n * @param {List|String} path\n * @param {Number} position\n * @param {Object} properties\n * @return {Node}\n */\n\n }, {\n key: 'splitNode',\n value: function splitNode(path, position, properties) {\n var child = this.assertNode(path);\n path = this.resolvePath(path);\n var a = void 0;\n var b = void 0;\n\n if (child.object === 'text') {\n var _child$splitText = child.splitText(position);\n\n var _child$splitText2 = slicedToArray(_child$splitText, 2);\n\n a = _child$splitText2[0];\n b = _child$splitText2[1];\n } else {\n var befores = child.nodes.take(position);\n var afters = child.nodes.skip(position);\n a = child.set('nodes', befores);\n b = child.set('nodes', afters).regenerateKey();\n }\n\n if (properties && child.object !== 'text') {\n b = b.merge(properties);\n }\n\n var ret = this;\n ret = ret.removeNode(path);\n ret = ret.insertNode(path, b);\n ret = ret.insertNode(path, a);\n return ret;\n }\n }]);\n return ElementInterface;\n}();\n/**\n * Mix in assertion variants.\n */\n\n\nvar ASSERTS = ['Child', 'Depth', 'Descendant', 'Node', 'Parent', 'Path'];\n\nvar _loop$1 = function _loop(method) {\n ElementInterface.prototype['assert' + method] = function (path) {\n for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n var ret = this['get' + method].apply(this, [path].concat(args));\n\n if (ret == null) {\n throw new Error('`Node.assert' + method + '` could not find node with path or key: ' + path);\n }\n\n return ret;\n };\n};\n\nvar _iteratorNormalCompletion$1 = true;\nvar _didIteratorError$1 = false;\nvar _iteratorError$1 = undefined;\n\ntry {\n for (var _iterator$1 = ASSERTS[Symbol.iterator](), _step$1; !(_iteratorNormalCompletion$1 = (_step$1 = _iterator$1.next()).done); _iteratorNormalCompletion$1 = true) {\n var method$1 = _step$1.value;\n\n _loop$1(method$1);\n }\n /**\n * Memoize read methods.\n */\n\n} catch (err) {\n _didIteratorError$1 = true;\n _iteratorError$1 = err;\n} finally {\n try {\n if (!_iteratorNormalCompletion$1 && _iterator$1.return) {\n _iterator$1.return();\n }\n } finally {\n if (_didIteratorError$1) {\n throw _iteratorError$1;\n }\n }\n}\n\nmemoize(ElementInterface.prototype, ['getBlocksAsArray', 'getBlocksAtRangeAsArray', 'getBlocksByTypeAsArray', 'getDecorations', 'getFragmentAtRange', 'getInlinesAsArray', 'getInlinesAtRangeAsArray', 'getInlinesByTypeAsArray', 'getMarksAsArray', 'getMarksAtPosition', 'getOrderedMarksBetweenPositions', 'getInsertMarksAtRange', 'getMarksByTypeAsArray', 'getNextBlock', 'getOffset', 'getOffsetAtRange', 'getPreviousBlock', 'getTextAtOffset', 'getTextDirection', 'getTextsAsArray', 'getTextsBetweenPositionsAsArray']);\n/**\n * Mix in the element interface.\n */\n\nmixin(ElementInterface, [Block, Document, Inline]);\n/**\n * The interface that `Document`, `Block` and `Inline` all implement, to make\n * working with the recursive node tree easier.\n *\n * @type {Class}\n */\n\nvar NodeInterface = function () {\n function NodeInterface() {\n classCallCheck(this, NodeInterface);\n }\n\n createClass(NodeInterface, [{\n key: 'getFirstInvalidNode',\n\n /**\n * Check whether the node is a leaf inline.\n *\n * @return {Boolean}\n */\n value: function getFirstInvalidNode(schema) {\n if (this.object === 'text') {\n var _invalid = this.validate(schema) ? this : null;\n\n return _invalid;\n }\n\n var invalid = null;\n this.nodes.find(function (n) {\n invalid = n.validate(schema) ? n : n.getFirstInvalidNode(schema);\n return invalid;\n });\n return invalid;\n }\n /**\n * Get the first text node of a node, or the node itself.\n *\n * @return {Node|Null}\n */\n\n }, {\n key: 'getFirstText',\n value: function getFirstText() {\n if (this.object === 'text') {\n return this;\n }\n\n var descendant = null;\n var found = this.nodes.find(function (node) {\n if (node.object === 'text') return true;\n descendant = node.getFirstText();\n return !!descendant;\n });\n return descendant || found;\n }\n /**\n * Get an object mapping all the keys in the node to their paths.\n *\n * @return {Object}\n */\n\n }, {\n key: 'getKeysToPathsTable',\n value: function getKeysToPathsTable() {\n var ret = defineProperty({}, this.key, []);\n\n if (this.nodes) {\n this.nodes.forEach(function (node, i) {\n var nested = node.getKeysToPathsTable();\n\n for (var key in nested) {\n var path = nested[key];\n warning(!(key in ret), 'A node with a duplicate key of \"' + key + '\" was found! Duplicate keys are not allowed, you should use `node.regenerateKey` before inserting if you are reusing an existing node.');\n ret[key] = [i].concat(toConsumableArray(path));\n }\n });\n }\n\n return ret;\n }\n /**\n * Get the last text node of a node, or the node itself.\n *\n * @return {Node|Null}\n */\n\n }, {\n key: 'getLastText',\n value: function getLastText() {\n if (this.object === 'text') {\n return this;\n }\n\n var descendant = null;\n var found = this.nodes.findLast(function (node) {\n if (node.object == 'text') return true;\n descendant = node.getLastText();\n return descendant;\n });\n return descendant || found;\n }\n /**\n * Get a node in the tree, or the node itself.\n *\n * @param {List|String} path\n * @return {Node|Null}\n */\n\n }, {\n key: 'getNode',\n value: function getNode(path) {\n path = this.resolvePath(path);\n if (!path) return null;\n if (this.object === 'text' && path.size) return null;\n var node = path.size ? this.getDescendant(path) : this;\n return node;\n }\n /**\n * Find the path to a node.\n *\n * @param {String|List} key\n * @return {List}\n */\n\n }, {\n key: 'getPath',\n value: function getPath(key) {\n // Handle the case of passing in a path directly, to match other methods.\n if (List.isList(key)) return key;\n var dict = this.getKeysToPathsTable();\n var path = dict[key];\n return path ? List(path) : null;\n }\n /**\n * Get the concatenated text string of a node.\n *\n * @return {String}\n */\n\n }, {\n key: 'getText',\n value: function getText() {\n var children = this.object === 'text' ? this.leaves : this.nodes;\n var text = children.reduce(function (memo, c) {\n return memo + c.text;\n }, '');\n return text;\n }\n /**\n * Check if a node exists.\n *\n * @param {List|String} path\n * @return {Boolean}\n */\n\n }, {\n key: 'hasNode',\n value: function hasNode(path) {\n var node = this.getNode(path);\n return !!node;\n }\n /**\n * Normalize the text node with a `schema`.\n *\n * @param {Schema} schema\n * @return {Function|Void}\n */\n\n }, {\n key: 'normalize',\n value: function normalize(schema) {\n var normalizer = schema.normalizeNode(this);\n return normalizer;\n }\n /**\n * Regenerate the node's key.\n *\n * @return {Node}\n */\n\n }, {\n key: 'regenerateKey',\n value: function regenerateKey() {\n var key = KeyUtils.create();\n var node = this.set('key', key);\n return node;\n }\n /**\n * Resolve a path from a path list or key string.\n *\n * An `index` can be provided, in which case paths created from a key string\n * will have the index pushed onto them. This is helpful in cases where you\n * want to accept either a `path` or a `key, index` combination for targeting\n * a location in the tree that doesn't exist yet, like when inserting.\n *\n * @param {List|String} value\n * @param {Number} index\n * @return {List}\n */\n\n }, {\n key: 'resolvePath',\n value: function resolvePath(path, index) {\n if (typeof path === 'string') {\n path = this.getPath(path);\n\n if (index != null) {\n path = path.concat(index);\n }\n } else {\n path = PathUtils.create(path);\n }\n\n return path;\n }\n /**\n * Validate the node against a `schema`.\n *\n * @param {Schema} schema\n * @return {Error|Void}\n */\n\n }, {\n key: 'validate',\n value: function validate(schema) {\n var error = schema.validateNode(this);\n return error;\n }\n }, {\n key: 'text',\n\n /**\n * Get the concatenated text of the node.\n *\n * @return {String}\n */\n get: function get$$1() {\n return this.getText();\n }\n }]);\n return NodeInterface;\n}();\n/**\n * Memoize read methods.\n */\n\n\nmemoize(NodeInterface.prototype, ['getFirstInvalidNode', 'getFirstText', 'getKeysToPathsTable', 'getLastText', 'getText', 'normalize', 'validate']);\n/**\n * Mix in the node interface.\n */\n\nmixin(NodeInterface, [Block, Document, Inline, Text]);\n/**\n * The interface that `Decoration`, `Range` and `Selection` all implement, to make\n * working anchor and focus points easier.\n *\n * @type {Class}\n */\n\nvar RangeInterface = function () {\n function RangeInterface() {\n classCallCheck(this, RangeInterface);\n }\n\n createClass(RangeInterface, [{\n key: 'flip',\n\n /**\n * Flip the range.\n *\n * @return {Range}\n */\n value: function flip() {\n var range = this.setPoints([this.focus, this.anchor]);\n return range;\n }\n /**\n * Move the anchor and focus offsets forward `n` characters.\n *\n * @param {Number} n\n * @return {Range}\n */\n\n }, {\n key: 'moveForward',\n value: function moveForward(n) {\n return this.updatePoints(function (point) {\n return point.moveForward(n);\n });\n }\n /**\n * Move the anchor and focus offsets backward `n` characters.\n *\n * @param {Number} n\n * @return {Range}\n */\n\n }, {\n key: 'moveBackward',\n value: function moveBackward(n) {\n return this.updatePoints(function (point) {\n return point.moveBackward(n);\n });\n }\n /**\n * Move the anchor offset backward `n` characters.\n *\n * @param {Number} n\n * @return {Range}\n */\n\n }, {\n key: 'moveAnchorBackward',\n value: function moveAnchorBackward(n) {\n var range = this.setAnchor(this.anchor.moveBackward(n));\n return range;\n }\n /**\n * Move the anchor offset forward `n` characters.\n *\n * @param {Number} n\n * @return {Range}\n */\n\n }, {\n key: 'moveAnchorForward',\n value: function moveAnchorForward(n) {\n var range = this.setAnchor(this.anchor.moveForward(n));\n return range;\n }\n /**\n * Move the range's anchor point to a new `path` and `offset`.\n *\n * Optionally, the `path` can be a key string, or omitted entirely in which\n * case it would be the offset number.\n *\n * @param {List|String} path\n * @param {Number} offset\n * @return {Range}\n */\n\n }, {\n key: 'moveAnchorTo',\n value: function moveAnchorTo(path, offset) {\n var range = this.setAnchor(this.anchor.moveTo(path, offset));\n return range;\n }\n /**\n * Move the range's anchor point to the start of a `node`.\n *\n * @param {Node} node\n * @return {Range}\n */\n\n }, {\n key: 'moveAnchorToStartOfNode',\n value: function moveAnchorToStartOfNode(node) {\n var range = this.setAnchor(this.anchor.moveToStartOfNode(node));\n return range;\n }\n /**\n * Move the range's anchor point to the end of a `node`.\n *\n * @param {Node} node\n * @return {Range}\n */\n\n }, {\n key: 'moveAnchorToEndOfNode',\n value: function moveAnchorToEndOfNode(node) {\n var range = this.setAnchor(this.anchor.moveToEndOfNode(node));\n return range;\n }\n /**\n * Move the end offset backward `n` characters.\n *\n * @param {Number} n\n * @return {Range}\n */\n\n }, {\n key: 'moveEndBackward',\n value: function moveEndBackward(n) {\n var range = this.setEnd(this.end.moveBackward(n));\n return range;\n }\n /**\n * Move the end offset forward `n` characters.\n *\n * @param {Number} n\n * @return {Range}\n */\n\n }, {\n key: 'moveEndForward',\n value: function moveEndForward(n) {\n var range = this.setEnd(this.end.moveForward(n));\n return range;\n }\n /**\n * Move the range's end point to a new `path` and `offset`.\n *\n * Optionally, the `path` can be a key string, or omitted entirely in which\n * case it would be the offset number.\n *\n * @param {List|String} path\n * @param {Number} offset\n * @return {Range}\n */\n\n }, {\n key: 'moveEndTo',\n value: function moveEndTo(path, offset) {\n var range = this.setEnd(this.end.moveTo(path, offset));\n return range;\n }\n /**\n * Move the range's end point to the start of a `node`.\n *\n * @param {Node} node\n * @return {Range}\n */\n\n }, {\n key: 'moveEndToStartOfNode',\n value: function moveEndToStartOfNode(node) {\n var range = this.setEnd(this.end.moveToStartOfNode(node));\n return range;\n }\n /**\n * Move the range's end point to the end of a `node`.\n *\n * @param {Node} node\n * @return {Range}\n */\n\n }, {\n key: 'moveEndToEndOfNode',\n value: function moveEndToEndOfNode(node) {\n var range = this.setEnd(this.end.moveToEndOfNode(node));\n return range;\n }\n /**\n * Move the focus offset backward `n` characters.\n *\n * @param {Number} n\n * @return {Range}\n */\n\n }, {\n key: 'moveFocusBackward',\n value: function moveFocusBackward(n) {\n var range = this.setFocus(this.focus.moveBackward(n));\n return range;\n }\n /**\n * Move the focus offset forward `n` characters.\n *\n * @param {Number} n\n * @return {Range}\n */\n\n }, {\n key: 'moveFocusForward',\n value: function moveFocusForward(n) {\n var range = this.setFocus(this.focus.moveForward(n));\n return range;\n }\n /**\n * Move the range's focus point to a new `path` and `offset`.\n *\n * Optionally, the `path` can be a key string, or omitted entirely in which\n * case it would be the offset number.\n *\n * @param {List|String} path\n * @param {Number} offset\n * @return {Range}\n */\n\n }, {\n key: 'moveFocusTo',\n value: function moveFocusTo(path, offset) {\n var range = this.setFocus(this.focus.moveTo(path, offset));\n return range;\n }\n /**\n * Move the range's focus point to the start of a `node`.\n *\n * @param {Node} node\n * @return {Range}\n */\n\n }, {\n key: 'moveFocusToStartOfNode',\n value: function moveFocusToStartOfNode(node) {\n var range = this.setFocus(this.focus.moveToStartOfNode(node));\n return range;\n }\n /**\n * Move the range's focus point to the end of a `node`.\n *\n * @param {Node} node\n * @return {Range}\n */\n\n }, {\n key: 'moveFocusToEndOfNode',\n value: function moveFocusToEndOfNode(node) {\n var range = this.setFocus(this.focus.moveToEndOfNode(node));\n return range;\n }\n /**\n * Move the start offset backward `n` characters.\n *\n * @param {Number} n\n * @return {Range}\n */\n\n }, {\n key: 'moveStartBackward',\n value: function moveStartBackward(n) {\n var range = this.setStart(this.start.moveBackward(n));\n return range;\n }\n /**\n * Move the start offset forward `n` characters.\n *\n * @param {Number} n\n * @return {Range}\n */\n\n }, {\n key: 'moveStartForward',\n value: function moveStartForward(n) {\n var range = this.setStart(this.start.moveForward(n));\n return range;\n }\n /**\n * Move the range's start point to a new `path` and `offset`.\n *\n * Optionally, the `path` can be a key string, or omitted entirely in which\n * case it would be the offset number.\n *\n * @param {List|String} path\n * @param {Number} offset\n * @return {Range}\n */\n\n }, {\n key: 'moveStartTo',\n value: function moveStartTo(path, offset) {\n var range = this.setStart(this.start.moveTo(path, offset));\n return range;\n }\n /**\n * Move the range's start point to the start of a `node`.\n *\n * @param {Node} node\n * @return {Range}\n */\n\n }, {\n key: 'moveStartToStartOfNode',\n value: function moveStartToStartOfNode(node) {\n var range = this.setStart(this.start.moveToStartOfNode(node));\n return range;\n }\n /**\n * Move the range's start point to the end of a `node`.\n *\n * @param {Node} node\n * @return {Range}\n */\n\n }, {\n key: 'moveStartToEndOfNode',\n value: function moveStartToEndOfNode(node) {\n var range = this.setStart(this.start.moveToEndOfNode(node));\n return range;\n }\n /**\n * Move range's points to a new `path` and `offset`.\n *\n * @param {Number} n\n * @return {Range}\n */\n\n }, {\n key: 'moveTo',\n value: function moveTo(path, offset) {\n return this.updatePoints(function (point) {\n return point.moveTo(path, offset);\n });\n }\n /**\n * Move the focus point to the anchor point.\n *\n * @return {Range}\n */\n\n }, {\n key: 'moveToAnchor',\n value: function moveToAnchor() {\n var range = this.setFocus(this.anchor);\n return range;\n }\n /**\n * Move the start point to the end point.\n *\n * @return {Range}\n */\n\n }, {\n key: 'moveToEnd',\n value: function moveToEnd() {\n var range = this.setStart(this.end);\n return range;\n }\n /**\n * Move the range's points to the end of a `node`.\n *\n * @param {Node} node\n * @return {Range}\n */\n\n }, {\n key: 'moveToEndOfNode',\n value: function moveToEndOfNode(node) {\n return this.updatePoints(function (point) {\n return point.moveToEndOfNode(node);\n });\n }\n /**\n * Move the anchor point to the focus point.\n *\n * @return {Range}\n */\n\n }, {\n key: 'moveToFocus',\n value: function moveToFocus() {\n var range = this.setAnchor(this.focus);\n return range;\n }\n /**\n * Move to the entire range of `start` and `end` nodes.\n *\n * @param {Node} start\n * @param {Node} end (optional)\n * @return {Range}\n */\n\n }, {\n key: 'moveToRangeOfNode',\n value: function moveToRangeOfNode(start) {\n var end = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : start;\n var range = this.setPoints([this.anchor.moveToStartOfNode(start), this.focus.moveToEndOfNode(end)]);\n return range;\n }\n /**\n * Move the end point to the start point.\n *\n * @return {Range}\n */\n\n }, {\n key: 'moveToStart',\n value: function moveToStart() {\n var range = this.setEnd(this.start);\n return range;\n }\n /**\n * Move the range's points to the start of a `node`.\n *\n * @param {Node} node\n * @return {Range}\n */\n\n }, {\n key: 'moveToStartOfNode',\n value: function moveToStartOfNode(node) {\n return this.updatePoints(function (point) {\n return point.moveToStartOfNode(node);\n });\n }\n /**\n * Normalize the range, relative to a `node`, ensuring that the anchor\n * and focus nodes of the range always refer to leaf text nodes.\n *\n * @param {Node} node\n * @return {Range}\n */\n\n }, {\n key: 'normalize',\n value: function normalize(node) {\n return this.updatePoints(function (point) {\n return point.normalize(node);\n });\n }\n /**\n * Set the anchor point to a new `anchor`.\n *\n * @param {Point} anchor\n * @return {Range}\n */\n\n }, {\n key: 'setAnchor',\n value: function setAnchor(anchor) {\n var range = this.set('anchor', anchor);\n return range;\n }\n /**\n * Set the end point to a new `point`.\n *\n * @param {Point} point\n * @return {Range}\n */\n\n }, {\n key: 'setEnd',\n value: function setEnd(point) {\n var range = this.isBackward ? this.setAnchor(point) : this.setFocus(point);\n return range;\n }\n /**\n * Set the focus point to a new `focus`.\n *\n * @param {Point} focus\n * @return {Range}\n */\n\n }, {\n key: 'setFocus',\n value: function setFocus(focus) {\n var range = this.set('focus', focus);\n return range;\n }\n /**\n * Set the anchor and focus points to new `values`.\n *\n * @param {Array} values\n * @return {Range}\n */\n\n }, {\n key: 'setPoints',\n value: function setPoints(values) {\n var _values = slicedToArray(values, 2),\n anchor = _values[0],\n focus = _values[1];\n\n var range = this.set('anchor', anchor).set('focus', focus);\n return range;\n }\n /**\n * Set the anchor and focus points with `updater` callback\n *\n * @param {Function} updater\n * @return {Range}\n */\n\n }, {\n key: 'updatePoints',\n value: function updatePoints(updater) {\n var anchor = this.anchor,\n focus = this.focus;\n anchor = updater(anchor);\n focus = updater(focus);\n return this.merge({\n anchor: anchor,\n focus: focus\n });\n }\n /**\n * Set the start point to a new `point`.\n *\n * @param {Point} point\n * @return {Range}\n */\n\n }, {\n key: 'setStart',\n value: function setStart(point) {\n var range = this.isBackward ? this.setFocus(point) : this.setAnchor(point);\n return range;\n }\n /**\n * Set new `properties` on the range.\n *\n * @param {Object|Range} properties\n * @return {Range}\n */\n\n }, {\n key: 'setProperties',\n value: function setProperties(properties) {\n properties = Range.createProperties(properties);\n var _properties = properties,\n anchor = _properties.anchor,\n focus = _properties.focus,\n props = objectWithoutProperties(_properties, ['anchor', 'focus']);\n\n if (anchor) {\n props.anchor = Point.create(anchor);\n }\n\n if (focus) {\n props.focus = Point.create(focus);\n }\n\n var range = this.merge(props);\n return range;\n }\n /**\n * Return a JSON representation of the range.\n *\n * @param {Object} options\n * @return {Object}\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var object = {\n object: this.object,\n anchor: this.anchor.toJSON(options),\n focus: this.focus.toJSON(options)\n };\n return object;\n }\n /**\n * Return a `Range` instance from any range-like instance.\n *\n * @return {Range}\n */\n\n }, {\n key: 'toRange',\n value: function toRange() {\n var properties = Range.createProperties(this);\n var range = Range.create(properties);\n return range;\n }\n /**\n * Unset the range.\n *\n * @return {Range}\n */\n\n }, {\n key: 'unset',\n value: function unset() {\n var range = this.updatePoints(function (p) {\n return p.unset();\n });\n return range;\n }\n }, {\n key: 'isCollapsed',\n\n /**\n * Check whether the range is collapsed.\n *\n * @return {Boolean}\n */\n get: function get$$1() {\n return this.anchor === this.focus || this.anchor.key === this.focus.key && this.anchor.offset === this.focus.offset;\n }\n /**\n * Check whether the range is expanded.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'isExpanded',\n get: function get$$1() {\n return !this.isCollapsed;\n }\n /**\n * Check whether the range is backward.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'isBackward',\n get: function get$$1() {\n var isUnset = this.isUnset,\n anchor = this.anchor,\n focus = this.focus;\n\n if (isUnset) {\n return null;\n }\n\n if (anchor.key === focus.key) {\n return anchor.offset > focus.offset;\n }\n\n var isBackward = PathUtils.isBefore(focus.path, anchor.path);\n return isBackward;\n }\n /**\n * Check whether the range is forward.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'isForward',\n get: function get$$1() {\n var isBackward = this.isBackward;\n var isForward = isBackward == null ? null : !isBackward;\n return isForward;\n }\n /**\n * Check whether the range isn't set.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'isUnset',\n get: function get$$1() {\n var anchor = this.anchor,\n focus = this.focus;\n var isUnset = anchor.isUnset || focus.isUnset;\n return isUnset;\n }\n /**\n * Check whether the range is set.\n *\n * @return {Boolean}\n */\n\n }, {\n key: 'isSet',\n get: function get$$1() {\n return !this.isUnset;\n }\n /**\n * Get the start point.\n *\n * @return {String}\n */\n\n }, {\n key: 'start',\n get: function get$$1() {\n return this.isBackward ? this.focus : this.anchor;\n }\n /**\n * Get the end point.\n *\n * @return {String}\n */\n\n }, {\n key: 'end',\n get: function get$$1() {\n return this.isBackward ? this.anchor : this.focus;\n }\n }]);\n return RangeInterface;\n}();\n/**\n * Mix in the range interface.\n *\n * @param {Record}\n */\n\n\nmixin(RangeInterface, [Decoration, Range, Selection]);\n/**\n * Export.\n *\n * @type {Object}\n */\n\nvar Operations = {\n apply: applyOperation,\n invert: invertOperation\n};\nvar index = {\n Block: Block,\n Changes: Changes$6,\n Data: Data,\n Decoration: Decoration,\n Document: Document,\n History: History,\n Inline: Inline,\n KeyUtils: KeyUtils,\n Leaf: Leaf,\n Mark: Mark,\n Node: Node,\n Operation: Operation,\n Operations: Operations,\n PathUtils: PathUtils,\n Point: Point,\n Range: Range,\n resetMemoization: resetMemoization,\n Schema: Schema,\n Selection: Selection,\n Stack: Stack$1,\n Text: Text,\n TextUtils: TextUtils,\n useMemoization: useMemoization,\n Value: Value\n};\nexport default index;\nexport { Block, Change, Changes$6 as Changes, Data, Decoration, Document, History, Inline, KeyUtils, Leaf, Mark, Node, Operation, Operations, PathUtils, Point, Range, resetMemoization, Schema, Selection, Stack$1 as Stack, Text, TextUtils, useMemoization, Value };","import { Block, Change, Data, Document, History, Inline, Leaf, Mark, Node, Range, Schema, Stack, Value, Text } from 'slate';\n/**\n * Create a prop type checker for Slate objects with `name` and `validate`.\n *\n * @param {String} name\n * @param {Function} validate\n * @return {Function}\n */\n\nfunction create(name, validate) {\n function check(isRequired, props, propName, componentName, location) {\n var value = props[propName];\n if (value == null && !isRequired) return null;\n if (value == null && isRequired) return new Error('The ' + location + ' `' + propName + '` is marked as required in `' + componentName + '`, but it was not supplied.');\n if (validate(value)) return null;\n return new Error('Invalid ' + location + ' `' + propName + '` supplied to `' + componentName + '`, expected a Slate `' + name + '` but received: ' + value);\n }\n\n function propType() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return check.apply(undefined, [false].concat(args));\n }\n\n propType.isRequired = function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return check.apply(undefined, [true].concat(args));\n };\n\n return propType;\n}\n/**\n * Prop type checkers.\n *\n * @type {Object}\n */\n\n\nvar Types = {\n block: create('Block', function (v) {\n return Block.isBlock(v);\n }),\n blocks: create('List', function (v) {\n return Block.isBlockList(v);\n }),\n change: create('Change', function (v) {\n return Change.isChange(v);\n }),\n data: create('Data', function (v) {\n return Data.isData(v);\n }),\n document: create('Document', function (v) {\n return Document.isDocument(v);\n }),\n history: create('History', function (v) {\n return History.isHistory(v);\n }),\n inline: create('Inline', function (v) {\n return Inline.isInline(v);\n }),\n inlines: create('Inline', function (v) {\n return Inline.isInlineList(v);\n }),\n leaf: create('Leaf', function (v) {\n return Leaf.isLeaf(v);\n }),\n leaves: create('List', function (v) {\n return Leaf.isLeafList(v);\n }),\n mark: create('Mark', function (v) {\n return Mark.isMark(v);\n }),\n marks: create('Set', function (v) {\n return Mark.isMarkSet(v);\n }),\n node: create('Node', function (v) {\n return Node.isNode(v);\n }),\n nodes: create('List', function (v) {\n return Node.isNodeList(v);\n }),\n range: create('Range', function (v) {\n return Range.isRange(v);\n }),\n ranges: create('List', function (v) {\n return Range.isRangeList(v);\n }),\n schema: create('Schema', function (v) {\n return Schema.isSchema(v);\n }),\n stack: create('Stack', function (v) {\n return Stack.isStack(v);\n }),\n value: create('Value', function (v) {\n return Value.isValue(v);\n }),\n text: create('Text', function (v) {\n return Text.isText(v);\n }),\n texts: create('List', function (v) {\n return Text.isTextList(v);\n })\n /**\n * Export.\n *\n * @type {Object}\n */\n\n};\nexport default Types;","function _typeof2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\nvar _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n};\n\nexport var isBrowser = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\" && (typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) === 'object' && document.nodeType === 9;\nexport default isBrowser;","import isBrowser from 'is-in-browser';\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n/**\n * Browser matching rules.\n *\n * @type {Array}\n */\n\n\nvar BROWSER_RULES = [['edge', /Edge\\/([0-9\\._]+)/], ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/], ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/], ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/], ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)$/], ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+)\\).*Gecko$/], ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/], ['ie', /MSIE\\s(7\\.0)/], ['android', /Android\\s([0-9\\.]+)/], ['safari', /Version\\/([0-9\\._]+).*Safari/]];\nvar browser = void 0;\n\nif (isBrowser) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = BROWSER_RULES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _ref = _step.value;\n\n var _ref2 = slicedToArray(_ref, 2);\n\n var name = _ref2[0];\n var regexp = _ref2[1];\n\n if (regexp.test(window.navigator.userAgent)) {\n browser = name;\n break;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n/**\n * Operating system matching rules.\n *\n * @type {Array}\n */\n\n\nvar OS_RULES = [['ios', /os ([\\.\\_\\d]+) like mac os/i], // must be before the macos rule\n['macos', /mac os x/i], ['android', /android/i], ['firefoxos', /mozilla\\/[a-z\\.\\_\\d]+ \\((?:mobile)|(?:tablet)/i], ['windows', /windows\\s*(?:nt)?\\s*([\\.\\_\\d]+)/i]];\nvar os = void 0;\n\nif (isBrowser) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = OS_RULES[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _ref3 = _step2.value;\n\n var _ref4 = slicedToArray(_ref3, 2);\n\n var _name = _ref4[0];\n var _regexp = _ref4[1];\n\n if (_regexp.test(window.navigator.userAgent)) {\n os = _name;\n break;\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n}\n/**\n * Feature matching rules.\n *\n * @type {Array}\n */\n\n\nvar FEATURE_RULES = [['inputeventslevel1', function (window) {\n var event = window.InputEvent ? new window.InputEvent('input') : {};\n var support = ('inputType' in event);\n return support;\n}], ['inputeventslevel2', function (window) {\n var element = window.document.createElement('div');\n element.contentEditable = true;\n var support = ('onbeforeinput' in element);\n return support;\n}]];\nvar features = [];\n\nif (isBrowser) {\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = FEATURE_RULES[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var _ref5 = _step3.value;\n\n var _ref6 = slicedToArray(_ref5, 2);\n\n var _name2 = _ref6[0];\n var test = _ref6[1];\n\n if (test(window)) {\n features.push(_name2);\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n}\n/**\n * Array of regular expression matchers and their API version\n *\n * @type {Array}\n */\n\n\nvar ANDROID_API_VERSIONS = [[/^9([.]0|)/, 28], [/^8[.]1/, 27], [/^8([.]0|)/, 26], [/^7[.]1/, 25], [/^7([.]0|)/, 24], [/^6([.]0|)/, 23], [/^5[.]1/, 22], [/^5([.]0|)/, 21], [/^4[.]4/, 20]];\n/**\n * get the Android API version from the userAgent\n *\n * @return {number} version\n */\n\nfunction getAndroidApiVersion() {\n if (os !== 'android') return null;\n var userAgent = window.navigator.userAgent;\n var matchData = userAgent.match(/Android\\s([0-9\\.]+)/);\n if (matchData == null) return null;\n var versionString = matchData[1];\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = ANDROID_API_VERSIONS[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var _ref7 = _step4.value;\n\n var _ref8 = slicedToArray(_ref7, 2);\n\n var regex = _ref8[0];\n var version = _ref8[1];\n if (versionString.match(regex)) return version;\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n\n return null;\n}\n/**\n * Export.\n *\n * @type {Boolean}\n */\n\n\nvar IS_CHROME = browser === 'chrome';\nvar IS_OPERA = browser === 'opera';\nvar IS_FIREFOX = browser === 'firefox';\nvar IS_SAFARI = browser === 'safari';\nvar IS_IE = browser === 'ie';\nvar IS_EDGE = browser === 'edge';\nvar IS_ANDROID = os === 'android';\nvar IS_IOS = os === 'ios';\nvar IS_MAC = os === 'macos';\nvar IS_WINDOWS = os === 'windows';\nvar ANDROID_API_VERSION = getAndroidApiVersion();\nvar HAS_INPUT_EVENTS_LEVEL_1 = features.includes('inputeventslevel1');\nvar HAS_INPUT_EVENTS_LEVEL_2 = features.includes('inputeventslevel2') || IS_ANDROID && (ANDROID_API_VERSION === 28 || ANDROID_API_VERSION === null);\nexport { IS_CHROME, IS_OPERA, IS_FIREFOX, IS_SAFARI, IS_IE, IS_EDGE, IS_ANDROID, IS_IOS, IS_MAC, IS_WINDOWS, ANDROID_API_VERSION, HAS_INPUT_EVENTS_LEVEL_1, HAS_INPUT_EVENTS_LEVEL_2 };","import { Node, Value } from 'slate';\nimport { atob, btoa } from 'isomorphic-base64';\n/**\n * Encode a JSON `object` as base-64 `string`.\n *\n * @param {Object} object\n * @return {String}\n */\n\nfunction encode(object) {\n var string = JSON.stringify(object);\n var encoded = btoa(encodeURIComponent(string));\n return encoded;\n}\n/**\n * Decode a base-64 `string` to a JSON `object`.\n *\n * @param {String} string\n * @return {Object}\n */\n\n\nfunction decode(string) {\n var decoded = decodeURIComponent(atob(string));\n var object = JSON.parse(decoded);\n return object;\n}\n/**\n * Deserialize a Value `string`.\n *\n * @param {String} string\n * @return {Value}\n */\n\n\nfunction deserialize(string, options) {\n var raw = decode(string);\n var value = Value.fromJSON(raw, options);\n return value;\n}\n/**\n * Deserialize a Node `string`.\n *\n * @param {String} string\n * @return {Node}\n */\n\n\nfunction deserializeNode(string, options) {\n var raw = decode(string);\n var node = Node.fromJSON(raw, options);\n return node;\n}\n/**\n * Serialize a `value`.\n *\n * @param {Value} value\n * @return {String}\n */\n\n\nfunction serialize(value, options) {\n var raw = value.toJSON(options);\n var encoded = encode(raw);\n return encoded;\n}\n/**\n * Serialize a `node`.\n *\n * @param {Node} node\n * @return {String}\n */\n\n\nfunction serializeNode(node, options) {\n var raw = node.toJSON(options);\n var encoded = encode(raw);\n return encoded;\n}\n/**\n * Export.\n *\n * @type {Object}\n */\n\n\nvar index = {\n deserialize: deserialize,\n deserializeNode: deserializeNode,\n serialize: serialize,\n serializeNode: serializeNode\n};\nexport default index;","import { Block, Mark, Node, Value } from 'slate';\nimport { Set } from 'immutable';\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n/**\n * Deserialize a plain text `string` to a Slate value.\n *\n * @param {String} string\n * @param {Object} options\n * @property {Boolean} toJSON\n * @property {String|Object|Block} defaultBlock\n * @property {Array|Set} defaultMarks\n * @return {Value}\n */\n\n\nfunction deserialize(string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _options$defaultBlock = options.defaultBlock,\n defaultBlock = _options$defaultBlock === undefined ? 'line' : _options$defaultBlock,\n _options$defaultMarks = options.defaultMarks,\n defaultMarks = _options$defaultMarks === undefined ? [] : _options$defaultMarks,\n _options$delimiter = options.delimiter,\n delimiter = _options$delimiter === undefined ? '\\n' : _options$delimiter,\n _options$toJSON = options.toJSON,\n toJSON = _options$toJSON === undefined ? false : _options$toJSON;\n\n if (Set.isSet(defaultMarks)) {\n defaultMarks = defaultMarks.toArray();\n }\n\n defaultBlock = Node.createProperties(defaultBlock);\n defaultMarks = defaultMarks.map(Mark.createProperties);\n var json = {\n object: 'value',\n document: {\n object: 'document',\n data: {},\n nodes: string.split(delimiter).map(function (line) {\n return _extends({}, defaultBlock, {\n object: 'block',\n data: {},\n nodes: [{\n object: 'text',\n leaves: [{\n object: 'leaf',\n text: line,\n marks: defaultMarks\n }]\n }]\n });\n })\n }\n };\n var ret = toJSON ? json : Value.fromJSON(json);\n return ret;\n}\n/**\n * Serialize a Slate `value` to a plain text string.\n *\n * @param {Value} value\n * @return {String}\n */\n\n\nfunction serialize(value) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return serializeNode(value.document, options);\n}\n/**\n * Serialize a `node` to plain text.\n *\n * @param {Node} node\n * @return {String}\n */\n\n\nfunction serializeNode(node) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _options$delimiter2 = options.delimiter,\n delimiter = _options$delimiter2 === undefined ? '\\n' : _options$delimiter2;\n\n if (node.object === 'document' || node.object === 'block' && Block.isBlockList(node.nodes)) {\n return node.nodes.map(serializeNode).join(delimiter);\n } else {\n return node.text;\n }\n}\n/**\n * Export.\n *\n * @type {Object}\n */\n\n\nvar index = {\n deserialize: deserialize,\n serialize: serialize\n};\nexport default index;","import { isKeyHotkey } from 'is-hotkey';\nimport { IS_IOS, IS_MAC } from 'slate-dev-environment';\n/**\n * Hotkey mappings for each platform.\n *\n * @type {Object}\n */\n\nvar HOTKEYS = {\n bold: 'mod+b',\n compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],\n moveBackward: 'left',\n moveForward: 'right',\n moveWordBackward: 'ctrl+left',\n moveWordForward: 'ctrl+right',\n deleteBackward: 'shift?+backspace',\n deleteForward: 'shift?+delete',\n extendBackward: 'shift+left',\n extendForward: 'shift+right',\n italic: 'mod+i',\n splitBlock: 'shift?+enter',\n undo: 'mod+z'\n};\nvar APPLE_HOTKEYS = {\n moveLineBackward: 'opt+up',\n moveLineForward: 'opt+down',\n moveWordBackward: 'opt+left',\n moveWordForward: 'opt+right',\n deleteBackward: ['ctrl+backspace', 'ctrl+h'],\n deleteForward: ['ctrl+delete', 'ctrl+d'],\n deleteLineBackward: 'cmd+shift?+backspace',\n deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],\n deleteWordBackward: 'opt+shift?+backspace',\n deleteWordForward: 'opt+shift?+delete',\n extendLineBackward: 'opt+shift+up',\n extendLineForward: 'opt+shift+down',\n redo: 'cmd+shift+z',\n transposeCharacter: 'ctrl+t'\n};\nvar WINDOWS_HOTKEYS = {\n deleteWordBackward: 'ctrl+shift?+backspace',\n deleteWordForward: 'ctrl+shift?+delete',\n redo: 'ctrl+y'\n /**\n * Hotkeys.\n *\n * @type {Object}\n */\n\n};\nvar Hotkeys = {};\nvar IS_APPLE = IS_IOS || IS_MAC;\nvar IS_WINDOWS = !IS_APPLE;\nvar KEYS = [].concat(Object.keys(HOTKEYS)).concat(Object.keys(APPLE_HOTKEYS)).concat(Object.keys(WINDOWS_HOTKEYS));\nKEYS.forEach(function (key) {\n var method = 'is' + key[0].toUpperCase() + key.slice(1);\n if (Hotkeys[method]) return;\n var generic = HOTKEYS[key];\n var apple = APPLE_HOTKEYS[key];\n var windows = WINDOWS_HOTKEYS[key];\n var isGeneric = generic && isKeyHotkey(generic);\n var isApple = apple && isKeyHotkey(apple);\n var isWindows = windows && isKeyHotkey(windows);\n\n Hotkeys[method] = function (event) {\n if (isGeneric && isGeneric(event)) return true;\n if (IS_APPLE && isApple && isApple(event)) return true;\n if (IS_WINDOWS && isWindows && isWindows(event)) return true;\n return false;\n };\n});\nexport default Hotkeys;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport Debug from 'debug';\nimport React from 'react';\nimport Types from 'prop-types';\nimport SlateTypes from 'slate-prop-types';\nimport ImmutableTypes from 'react-immutable-proptypes';\nimport { PathUtils, Node, Value, Text, Schema, Stack } from 'slate';\nimport { Set } from 'immutable';\nimport warning from 'slate-dev-warning';\nimport getWindow from 'get-window';\nimport { IS_IE, IS_EDGE, IS_SAFARI, IS_IOS, IS_FIREFOX, HAS_INPUT_EVENTS_LEVEL_2 } from 'slate-dev-environment';\nimport isBackward from 'selection-is-backward';\nimport throttle from 'lodash/throttle';\nimport Base64 from 'slate-base64-serializer';\nimport Plain from 'slate-plain-serializer';\nimport Hotkeys from 'slate-hotkeys';\nimport { findDOMNode } from 'react-dom';\nimport memoizeOne from 'memoize-one';\n/**\n * Event handlers used by Slate plugins.\n *\n * @type {Array}\n */\n\nvar EVENT_HANDLERS = ['onBeforeInput', 'onBlur', 'onClick', 'onContextMenu', 'onCompositionEnd', 'onCompositionStart', 'onCopy', 'onCut', 'onDragEnd', 'onDragEnter', 'onDragExit', 'onDragLeave', 'onDragOver', 'onDragStart', 'onDrop', 'onInput', 'onFocus', 'onKeyDown', 'onKeyUp', 'onPaste', 'onSelect'];\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar defineProperty = function defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + _typeof(superClass));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (_typeof(call) === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\nvar toConsumableArray = function toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n/**\n * Props that can be defined by plugins.\n *\n * @type {Array}\n */\n\n\nvar PLUGIN_PROPS = [].concat(toConsumableArray(EVENT_HANDLERS), ['decorateNode', 'onChange', 'renderEditor', 'renderMark', 'renderNode', 'renderPlaceholder', 'renderPortal', 'schema', 'validateNode']);\n/**\n * Offset key parser regex.\n *\n * @type {RegExp}\n */\n\nvar PARSER = /^([\\w-]+)(?::(\\d+))?$/;\n/**\n * Parse an offset key `string`.\n *\n * @param {String} string\n * @return {Object}\n */\n\nfunction parse(string) {\n var matches = PARSER.exec(string);\n\n if (!matches) {\n throw new Error(\"Invalid offset key string \\\"\" + string + \"\\\".\");\n }\n\n var _matches = slicedToArray(matches, 3),\n original = _matches[0],\n key = _matches[1],\n index = _matches[2]; // eslint-disable-line no-unused-vars\n\n\n return {\n key: key,\n index: parseInt(index, 10)\n };\n}\n/**\n * Stringify an offset key `object`.\n *\n * @param {Object} object\n * @property {String} key\n * @property {Number} index\n * @return {String}\n */\n\n\nfunction stringify(object) {\n return object.key + \":\" + object.index;\n}\n/**\n * Export.\n *\n * @type {Object}\n */\n\n\nvar OffsetKey = {\n parse: parse,\n stringify: stringify\n};\n/**\n * Debugger.\n *\n * @type {Function}\n */\n\nvar debug = Debug('slate:leaves');\n/**\n * Leaf.\n *\n * @type {Component}\n */\n\nvar Leaf = function (_React$Component) {\n inherits(Leaf, _React$Component);\n\n function Leaf() {\n var _ref;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, Leaf);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = Leaf.__proto__ || Object.getPrototypeOf(Leaf)).call.apply(_ref, [this].concat(args))), _this), _initialiseProps.call(_this), _temp), possibleConstructorReturn(_this, _ret);\n }\n /**\n * Property types.\n *\n * @type {Object}\n */\n\n /**\n * Debug.\n *\n * @param {String} message\n * @param {Mixed} ...args\n */\n\n\n createClass(Leaf, [{\n key: 'shouldComponentUpdate',\n\n /**\n * Should component update?\n *\n * @param {Object} props\n * @return {Boolean}\n */\n value: function shouldComponentUpdate(props) {\n // If any of the regular properties have changed, re-render.\n if (props.index != this.props.index || props.marks != this.props.marks || props.text != this.props.text || props.parent != this.props.parent) {\n return true;\n } // Otherwise, don't update.\n\n\n return false;\n }\n /**\n * Render the leaf.\n *\n * @return {Element}\n */\n\n }, {\n key: 'render',\n value: function render() {\n this.debug('render', this);\n var _props = this.props,\n node = _props.node,\n index = _props.index;\n var offsetKey = OffsetKey.stringify({\n key: node.key,\n index: index\n });\n return React.createElement('span', {\n 'data-offset-key': offsetKey\n }, this.renderMarks());\n }\n /**\n * Render all of the leaf's mark components.\n *\n * @return {Element}\n */\n\n }, {\n key: 'renderMarks',\n value: function renderMarks() {\n var _props2 = this.props,\n marks = _props2.marks,\n node = _props2.node,\n offset = _props2.offset,\n text = _props2.text,\n editor = _props2.editor;\n var stack = editor.stack;\n var leaf = this.renderText();\n var attributes = {\n 'data-slate-leaf': true\n };\n return marks.reduce(function (children, mark) {\n var props = {\n editor: editor,\n mark: mark,\n marks: marks,\n node: node,\n offset: offset,\n text: text,\n children: children,\n attributes: attributes\n };\n var element = stack.find('renderMark', props);\n return element || children;\n }, leaf);\n }\n /**\n * Render the text content of the leaf, accounting for browsers.\n *\n * @return {Element}\n */\n\n }, {\n key: 'renderText',\n value: function renderText() {\n var _props3 = this.props,\n block = _props3.block,\n node = _props3.node,\n editor = _props3.editor,\n parent = _props3.parent,\n text = _props3.text,\n index = _props3.index,\n leaves = _props3.leaves;\n var value = editor.value;\n var schema = value.schema; // COMPAT: Render text inside void nodes with a zero-width space.\n // So the node can contain selection but the text is not visible.\n\n if (schema.isVoid(parent)) {\n return React.createElement('span', {\n 'data-slate-zero-width': 'z'\n }, \"\\u200B\");\n } // COMPAT: If this is the last text node in an empty block, render a zero-\n // width space that will convert into a line break when copying and pasting\n // to support expected plain text.\n\n\n if (text === '' && parent.object === 'block' && parent.text === '' && parent.nodes.last() === node) {\n return React.createElement('span', {\n 'data-slate-zero-width': 'n'\n }, \"\\u200B\");\n } // COMPAT: If the text is empty, it's because it's on the edge of an inline\n // node, so we render a zero-width space so that the selection can be\n // inserted next to it still.\n\n\n if (text === '') {\n return React.createElement('span', {\n 'data-slate-zero-width': 'z'\n }, \"\\u200B\");\n } // COMPAT: Browsers will collapse trailing new lines at the end of blocks,\n // so we need to add an extra trailing new lines to prevent that.\n\n\n var lastText = block.getLastText();\n var lastChar = text.charAt(text.length - 1);\n var isLastText = node === lastText;\n var isLastLeaf = index === leaves.size - 1;\n if (isLastText && isLastLeaf && lastChar === '\\n') return text + '\\n'; // Otherwise, just return the text.\n\n return text;\n }\n }]);\n return Leaf;\n}(React.Component);\n/**\n * Export.\n *\n * @type {Component}\n */\n\n\nLeaf.propTypes = {\n block: SlateTypes.block.isRequired,\n editor: Types.object.isRequired,\n index: Types.number.isRequired,\n leaves: SlateTypes.leaves.isRequired,\n marks: SlateTypes.marks.isRequired,\n node: SlateTypes.node.isRequired,\n offset: Types.number.isRequired,\n parent: SlateTypes.node.isRequired,\n text: Types.string.isRequired\n};\n\nvar _initialiseProps = function _initialiseProps() {\n var _this2 = this;\n\n this.debug = function (message) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n debug.apply(undefined, [message, _this2.props.node.key + '-' + _this2.props.index].concat(args));\n };\n};\n/**\n * Debug.\n *\n * @type {Function}\n */\n\n\nvar debug$1 = Debug('slate:node');\n/**\n * Text.\n *\n * @type {Component}\n */\n\nvar Text$1 = function (_React$Component) {\n inherits(Text$$1, _React$Component);\n\n function Text$$1() {\n var _ref;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, Text$$1);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = Text$$1.__proto__ || Object.getPrototypeOf(Text$$1)).call.apply(_ref, [this].concat(args))), _this), _initialiseProps$1.call(_this), _temp), possibleConstructorReturn(_this, _ret);\n }\n /**\n * Property types.\n *\n * @type {Object}\n */\n\n /**\n * Default prop types.\n *\n * @type {Object}\n */\n\n /**\n * Debug.\n *\n * @param {String} message\n * @param {Mixed} ...args\n */\n\n /**\n * Should the node update?\n *\n * @param {Object} nextProps\n * @param {Object} value\n * @return {Boolean}\n */\n\n\n createClass(Text$$1, [{\n key: 'render',\n\n /**\n * Render.\n *\n * @return {Element}\n */\n value: function render() {\n var _this2 = this;\n\n this.debug('render', this);\n var _props = this.props,\n decorations = _props.decorations,\n editor = _props.editor,\n node = _props.node,\n style = _props.style;\n var value = editor.value;\n var document = value.document;\n var key = node.key;\n var decs = decorations.filter(function (d) {\n var start = d.start,\n end = d.end; // If either of the decoration's keys match, include it.\n\n if (start.key === key || end.key === key) return true; // Otherwise, if the decoration is in a single node, it's not ours.\n\n if (start.key === end.key) return false; // If the node's path is before the start path, ignore it.\n\n var path = document.assertPath(key);\n if (PathUtils.compare(path, start.path) === -1) return false; // If the node's path is after the end path, ignore it.\n\n if (PathUtils.compare(path, end.path) === 1) return false; // Otherwise, include it.\n\n return true;\n }); // PERF: Take advantage of cache by avoiding arguments\n\n var leaves = decs.size === 0 ? node.getLeaves() : node.getLeaves(decs);\n var offset = 0;\n var children = leaves.map(function (leaf, i) {\n var child = _this2.renderLeaf(leaves, leaf, i, offset);\n\n offset += leaf.text.length;\n return child;\n });\n return React.createElement('span', {\n 'data-key': key,\n style: style\n }, children);\n }\n /**\n * Render a single leaf given a `leaf` and `offset`.\n *\n * @param {List} leaves\n * @param {Leaf} leaf\n * @param {Number} index\n * @param {Number} offset\n * @return {Element} leaf\n */\n\n }]);\n return Text$$1;\n}(React.Component);\n/**\n * Export.\n *\n * @type {Component}\n */\n\n\nText$1.propTypes = {\n block: SlateTypes.block,\n decorations: ImmutableTypes.list.isRequired,\n editor: Types.object.isRequired,\n node: SlateTypes.node.isRequired,\n parent: SlateTypes.node.isRequired,\n style: Types.object\n};\nText$1.defaultProps = {\n style: null\n};\n\nvar _initialiseProps$1 = function _initialiseProps() {\n var _this3 = this;\n\n this.debug = function (message) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n var node = _this3.props.node;\n var key = node.key;\n debug$1.apply(undefined, [message, key + ' (text)'].concat(args));\n };\n\n this.shouldComponentUpdate = function (nextProps) {\n var props = _this3.props;\n var n = nextProps;\n var p = props; // If the node has changed, update. PERF: There are cases where it will have\n // changed, but it's properties will be exactly the same (eg. copy-paste)\n // which this won't catch. But that's rare and not a drag on performance, so\n // for simplicity we just let them through.\n\n if (n.node != p.node) return true; // If the node parent is a block node, and it was the last child of the\n // block, re-render to cleanup extra `\\n`.\n\n if (n.parent.object == 'block') {\n var pLast = p.parent.nodes.last();\n var nLast = n.parent.nodes.last();\n if (p.node == pLast && n.node != nLast) return true;\n } // Re-render if the current decorations have changed.\n\n\n if (!n.decorations.equals(p.decorations)) return true; // Otherwise, don't update.\n\n return false;\n };\n\n this.renderLeaf = function (leaves, leaf, index, offset) {\n var _props2 = _this3.props,\n block = _props2.block,\n node = _props2.node,\n parent = _props2.parent,\n editor = _props2.editor;\n var text = leaf.text,\n marks = leaf.marks;\n return React.createElement(Leaf, {\n key: node.key + '-' + index,\n block: block,\n editor: editor,\n index: index,\n marks: marks,\n node: node,\n offset: offset,\n parent: parent,\n leaves: leaves,\n text: text\n });\n };\n};\n/**\n * Debug.\n *\n * @type {Function}\n */\n\n\nvar debug$2 = Debug('slate:void');\n/**\n * Void.\n *\n * @type {Component}\n */\n\nvar Void = function (_React$Component) {\n inherits(Void, _React$Component);\n\n function Void() {\n var _ref;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, Void);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = Void.__proto__ || Object.getPrototypeOf(Void)).call.apply(_ref, [this].concat(args))), _this), _initialiseProps$2.call(_this), _temp), possibleConstructorReturn(_this, _ret);\n }\n /**\n * Property types.\n *\n * @type {Object}\n */\n\n /**\n * Debug.\n *\n * @param {String} message\n * @param {Mixed} ...args\n */\n\n\n createClass(Void, [{\n key: 'render',\n\n /**\n * Render.\n *\n * @return {Element}\n */\n value: function render() {\n var props = this.props;\n var children = props.children,\n node = props.node,\n readOnly = props.readOnly;\n var Tag = node.object == 'block' ? 'div' : 'span';\n var style = {\n height: '0',\n color: 'transparent',\n outline: 'none',\n position: 'absolute'\n };\n var spacer = React.createElement(Tag, {\n 'data-slate-spacer': true,\n style: style\n }, this.renderText());\n var content = React.createElement(Tag, {\n contentEditable: readOnly ? null : false\n }, children);\n this.debug('render', {\n props: props\n });\n return React.createElement(Tag, {\n 'data-slate-void': true,\n 'data-key': node.key,\n contentEditable: readOnly || node.object == 'block' ? null : false\n }, readOnly ? null : spacer, content);\n }\n /**\n * Render the void node's text node, which will catch the cursor when it the\n * void node is navigated to with the arrow keys.\n *\n * Having this text node there means the browser continues to manage the\n * selection natively, so it keeps track of the right offset when moving\n * across the block.\n *\n * @return {Element}\n */\n\n }]);\n return Void;\n}(React.Component);\n/**\n * Export.\n *\n * @type {Component}\n */\n\n\nVoid.propTypes = {\n block: SlateTypes.block,\n children: Types.any.isRequired,\n editor: Types.object.isRequired,\n node: SlateTypes.node.isRequired,\n parent: SlateTypes.node.isRequired,\n readOnly: Types.bool.isRequired\n};\n\nvar _initialiseProps$2 = function _initialiseProps() {\n var _this2 = this;\n\n this.debug = function (message) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n var node = _this2.props.node;\n var key = node.key,\n type = node.type;\n var id = key + ' (' + type + ')';\n debug$2.apply(undefined, [message, '' + id].concat(args));\n };\n\n this.renderText = function () {\n var _props = _this2.props,\n block = _props.block,\n decorations = _props.decorations,\n node = _props.node,\n readOnly = _props.readOnly,\n editor = _props.editor;\n var child = node.getFirstText();\n return React.createElement(Text$1, {\n block: node.object == 'block' ? node : block,\n decorations: decorations,\n editor: editor,\n key: child.key,\n node: child,\n parent: node,\n readOnly: readOnly\n });\n };\n};\n/**\n * Split the decorations in lists of relevant decorations for each child.\n *\n * @param {Node} node\n * @param {List} decorations\n * @return {Array>}\n */\n\n\nfunction getChildrenDecorations(node, decorations) {\n var activeDecorations = Set().asMutable();\n var childrenDecorations = [];\n orderChildDecorations(node, decorations).forEach(function (item) {\n if (item.isRangeStart) {\n // Item is a decoration start\n activeDecorations.add(item.decoration);\n } else if (item.isRangeEnd) {\n // item is a decoration end\n activeDecorations.remove(item.decoration);\n } else {\n // Item is a child node\n childrenDecorations.push(activeDecorations.toList());\n }\n });\n return childrenDecorations;\n}\n/**\n * Orders the children of provided node and its decoration endpoints (start, end)\n * so that decorations can be passed only to relevant children (see use in Node.render())\n *\n * @param {Node} node\n * @param {List} decorations\n * @return {Array}\n *\n * where type Item =\n * {\n * child: Node,\n * // Index of the child in its parent\n * index: number\n * }\n * or {\n * // True if this represents the start of the given decoration\n * isRangeStart: boolean,\n * // True if this represents the end of the given decoration\n * isRangeEnd: boolean,\n * decoration: Range\n * }\n */\n\n\nfunction orderChildDecorations(node, decorations) {\n if (decorations.isEmpty()) {\n return node.nodes.toArray().map(function (child, index) {\n return {\n child: child,\n index: index\n };\n });\n } // Map each key to its global order\n\n\n var keyOrders = defineProperty({}, node.key, 0);\n var globalOrder = 1;\n node.forEachDescendant(function (child) {\n keyOrders[child.key] = globalOrder;\n globalOrder = globalOrder + 1;\n });\n var childNodes = node.nodes.toArray();\n var endPoints = childNodes.map(function (child, index) {\n return {\n child: child,\n index: index,\n order: keyOrders[child.key]\n };\n });\n decorations.forEach(function (decoration) {\n // Range start.\n // A rangeStart should be before the child containing its startKey, in order\n // to consider it active before going down the child.\n var startKeyOrder = keyOrders[decoration.start.key];\n var containingChildOrder = startKeyOrder === undefined ? 0 : getContainingChildOrder(childNodes, keyOrders, startKeyOrder);\n endPoints.push({\n isRangeStart: true,\n order: containingChildOrder - 0.5,\n decoration: decoration\n }); // Range end.\n\n var endKeyOrder = (keyOrders[decoration.end.key] || globalOrder) + 0.5;\n endPoints.push({\n isRangeEnd: true,\n order: endKeyOrder,\n decoration: decoration\n });\n });\n return endPoints.sort(function (a, b) {\n return a.order > b.order ? 1 : -1;\n });\n}\n/*\n * Returns the key order of the child right before the given order.\n */\n\n\nfunction getContainingChildOrder(children, keyOrders, order) {\n // Find the first child that is after the given key\n var nextChildIndex = children.findIndex(function (child) {\n return order < keyOrders[child.key];\n });\n\n if (nextChildIndex <= 0) {\n return 0;\n }\n\n var containingChild = children[nextChildIndex - 1];\n return keyOrders[containingChild.key];\n}\n/**\n * Debug.\n *\n * @type {Function}\n */\n\n\nvar debug$3 = Debug('slate:node');\n/**\n * Node.\n *\n * @type {Component}\n */\n\nvar Node$1 = function (_React$Component) {\n inherits(Node$$1, _React$Component);\n\n function Node$$1() {\n var _ref;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, Node$$1);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = Node$$1.__proto__ || Object.getPrototypeOf(Node$$1)).call.apply(_ref, [this].concat(args))), _this), _initialiseProps$3.call(_this), _temp), possibleConstructorReturn(_this, _ret);\n }\n /**\n * Property types.\n *\n * @type {Object}\n */\n\n /**\n * Debug.\n *\n * @param {String} message\n * @param {Mixed} ...args\n */\n\n\n createClass(Node$$1, [{\n key: 'shouldComponentUpdate',\n\n /**\n * Should the node update?\n *\n * @param {Object} nextProps\n * @param {Object} value\n * @return {Boolean}\n */\n value: function shouldComponentUpdate(nextProps) {\n var props = this.props;\n var stack = props.editor.stack;\n var shouldUpdate = stack.find('shouldNodeComponentUpdate', props, nextProps);\n var n = nextProps;\n var p = props; // If the `Component` has a custom logic to determine whether the component\n // needs to be updated or not, return true if it returns true. If it returns\n // false, we need to ignore it, because it shouldn't be allowed it.\n\n if (shouldUpdate != null) {\n if (shouldUpdate) {\n return true;\n }\n\n warning(shouldUpdate !== false, \"Returning false in `shouldNodeComponentUpdate` does not disable Slate's internal `shouldComponentUpdate` logic. If you want to prevent updates, use React's `shouldComponentUpdate` instead.\");\n } // If the `readOnly` status has changed, re-render in case there is any\n // user-land logic that depends on it, like nested editable contents.\n\n\n if (n.readOnly != p.readOnly) return true; // If the node has changed, update. PERF: There are cases where it will have\n // changed, but it's properties will be exactly the same (eg. copy-paste)\n // which this won't catch. But that's rare and not a drag on performance, so\n // for simplicity we just let them through.\n\n if (n.node != p.node) return true; // If the selection value of the node or of some of its children has changed,\n // re-render in case there is any user-land logic depends on it to render.\n // if the node is selected update it, even if it was already selected: the\n // selection value of some of its children could have been changed and they\n // need to be rendered again.\n\n if (n.isSelected || p.isSelected) return true;\n if (n.isFocused || p.isFocused) return true; // If the decorations have changed, update.\n\n if (!n.decorations.equals(p.decorations)) return true; // Otherwise, don't update.\n\n return false;\n }\n /**\n * Render.\n *\n * @return {Element}\n */\n\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n this.debug('render', this);\n var _props = this.props,\n editor = _props.editor,\n isSelected = _props.isSelected,\n isFocused = _props.isFocused,\n node = _props.node,\n decorations = _props.decorations,\n parent = _props.parent,\n readOnly = _props.readOnly;\n var value = editor.value;\n var selection = value.selection,\n schema = value.schema;\n var stack = editor.stack;\n var indexes = node.getSelectionIndexes(selection, isSelected);\n var decs = decorations.concat(node.getDecorations(stack));\n var childrenDecorations = getChildrenDecorations(node, decs);\n var children = [];\n node.nodes.forEach(function (child, i) {\n var isChildSelected = !!indexes && indexes.start <= i && i < indexes.end;\n children.push(_this2.renderNode(child, isChildSelected, childrenDecorations[i]));\n }); // Attributes that the developer must mix into the element in their\n // custom node renderer component.\n\n var attributes = {\n 'data-key': node.key // If it's a block node with inline children, add the proper `dir` attribute\n // for text direction.\n\n };\n\n if (node.object == 'block' && node.nodes.first().object != 'block') {\n var direction = node.getTextDirection();\n if (direction == 'rtl') attributes.dir = 'rtl';\n }\n\n var props = {\n key: node.key,\n editor: editor,\n isFocused: isFocused,\n isSelected: isSelected,\n node: node,\n parent: parent,\n readOnly: readOnly\n };\n var placeholder = stack.find('renderPlaceholder', props);\n\n if (placeholder) {\n placeholder = React.cloneElement(placeholder, {\n key: node.key + '-placeholder'\n });\n children = [placeholder].concat(toConsumableArray(children));\n }\n\n var element = stack.find('renderNode', _extends({}, props, {\n attributes: attributes,\n children: children\n }));\n return schema.isVoid(node) ? React.createElement(Void, this.props, element) : element;\n }\n /**\n * Render a `child` node.\n *\n * @param {Node} child\n * @param {Boolean} isSelected\n * @param {Array} decorations\n * @return {Element}\n */\n\n }]);\n return Node$$1;\n}(React.Component);\n/**\n * Export.\n *\n * @type {Component}\n */\n\n\nNode$1.propTypes = {\n block: SlateTypes.block,\n decorations: ImmutableTypes.list.isRequired,\n editor: Types.object.isRequired,\n isFocused: Types.bool.isRequired,\n isSelected: Types.bool.isRequired,\n node: SlateTypes.node.isRequired,\n parent: SlateTypes.node.isRequired,\n readOnly: Types.bool.isRequired\n};\n\nvar _initialiseProps$3 = function _initialiseProps() {\n var _this3 = this;\n\n this.debug = function (message) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n var node = _this3.props.node;\n var key = node.key,\n type = node.type;\n debug$3.apply(undefined, [message, key + ' (' + type + ')'].concat(args));\n };\n\n this.renderNode = function (child, isSelected, decorations) {\n var _props2 = _this3.props,\n block = _props2.block,\n editor = _props2.editor,\n node = _props2.node,\n readOnly = _props2.readOnly,\n isFocused = _props2.isFocused;\n var Component = child.object == 'text' ? Text$1 : Node$1;\n return React.createElement(Component, {\n block: node.object == 'block' ? node : block,\n decorations: decorations,\n editor: editor,\n isSelected: isSelected,\n isFocused: isFocused && isSelected,\n key: child.key,\n node: child,\n parent: node,\n readOnly: readOnly\n });\n };\n};\n/**\n * Find the DOM node for a `key`.\n *\n * @param {String|Node} key\n * @param {Window} win (optional)\n * @return {Element}\n */\n\n\nfunction findDOMNode$1(key) {\n var win = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n\n if (Node.isNode(key)) {\n key = key.key;\n }\n\n var el = win.document.querySelector('[data-key=\"' + key + '\"]');\n\n if (!el) {\n throw new Error('Unable to find a DOM node for \"' + key + '\". This is often because of forgetting to add `props.attributes` to a custom component.');\n }\n\n return el;\n}\n/**\n * Find a native DOM selection point from a Slate `point`.\n *\n * @param {Point} point\n * @param {Window} win (optional)\n * @return {Object|Null}\n */\n\n\nfunction findDOMPoint(point) {\n var win = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n var el = findDOMNode$1(point.key, win);\n var start = 0;\n var n = void 0; // COMPAT: In IE, this method's arguments are not optional, so we have to\n // pass in all four even though the last two are defaults. (2017/10/25)\n\n var iterator = win.document.createNodeIterator(el, NodeFilter.SHOW_TEXT, function () {\n return NodeFilter.FILTER_ACCEPT;\n }, false);\n\n while (n = iterator.nextNode()) {\n var length = n.textContent.length;\n var end = start + length;\n\n if (point.offset <= end) {\n var o = point.offset - start;\n return {\n node: n,\n offset: o >= 0 ? o : 0\n };\n }\n\n start = end;\n }\n\n return null;\n}\n/**\n * Find a native DOM range Slate `range`.\n *\n * @param {Range} range\n * @param {Window} win (optional)\n * @return {Object|Null}\n */\n\n\nfunction findDOMRange(range) {\n var win = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n var anchor = range.anchor,\n focus = range.focus,\n isBackward$$1 = range.isBackward,\n isCollapsed = range.isCollapsed;\n var domAnchor = findDOMPoint(anchor, win);\n var domFocus = isCollapsed ? domAnchor : findDOMPoint(focus, win);\n if (!domAnchor || !domFocus) return null;\n var r = win.document.createRange();\n var start = isBackward$$1 ? domFocus : domAnchor;\n var end = isBackward$$1 ? domAnchor : domFocus;\n r.setStart(start.node, start.offset);\n r.setEnd(end.node, end.offset);\n return r;\n}\n/**\n * Constants.\n *\n * @type {String}\n */\n\n\nvar ZERO_WIDTH_ATTRIBUTE = 'data-slate-zero-width';\nvar ZERO_WIDTH_SELECTOR = '[' + ZERO_WIDTH_ATTRIBUTE + ']';\nvar OFFSET_KEY_ATTRIBUTE = 'data-offset-key';\nvar RANGE_SELECTOR = '[' + OFFSET_KEY_ATTRIBUTE + ']';\nvar TEXT_SELECTOR = '[data-key]';\nvar VOID_SELECTOR = '[data-slate-void]';\n/**\n * Find a Slate point from a DOM selection's `nativeNode` and `nativeOffset`.\n *\n * @param {Element} nativeNode\n * @param {Number} nativeOffset\n * @param {Value} value\n * @return {Point}\n */\n\nfunction findPoint(nativeNode, nativeOffset, value) {\n var _normalizeNodeAndOffs = normalizeNodeAndOffset(nativeNode, nativeOffset),\n nearestNode = _normalizeNodeAndOffs.node,\n nearestOffset = _normalizeNodeAndOffs.offset;\n\n var window = getWindow(nativeNode);\n var parentNode = nearestNode.parentNode;\n var rangeNode = parentNode.closest(RANGE_SELECTOR);\n var offset = void 0;\n var node = void 0; // Calculate how far into the text node the `nearestNode` is, so that we can\n // determine what the offset relative to the text node is.\n\n if (rangeNode) {\n var range = window.document.createRange();\n var textNode = rangeNode.closest(TEXT_SELECTOR);\n range.setStart(textNode, 0);\n range.setEnd(nearestNode, nearestOffset);\n node = textNode;\n offset = range.toString().length;\n } else {\n // For void nodes, the element with the offset key will be a cousin, not an\n // ancestor, so find it by going down from the nearest void parent.\n var voidNode = parentNode.closest(VOID_SELECTOR);\n if (!voidNode) return null;\n rangeNode = voidNode.querySelector(RANGE_SELECTOR);\n if (!rangeNode) return null;\n node = rangeNode;\n offset = node.textContent.length;\n } // COMPAT: If the parent node is a Slate zero-width space, this is because the\n // text node should have no characters. However, during IME composition the\n // ASCII characters will be prepended to the zero-width space, so subtract 1\n // from the offset to account for the zero-width space character.\n\n\n if (offset == node.textContent.length && parentNode.hasAttribute(ZERO_WIDTH_ATTRIBUTE)) {\n offset--;\n } // Get the string value of the offset key attribute.\n\n\n var offsetKey = rangeNode.getAttribute(OFFSET_KEY_ATTRIBUTE);\n if (!offsetKey) return null;\n\n var _OffsetKey$parse = OffsetKey.parse(offsetKey),\n key = _OffsetKey$parse.key; // COMPAT: If someone is clicking from one Slate editor into another, the\n // select event fires twice, once for the old editor's `element` first, and\n // then afterwards for the correct `element`. (2017/03/03)\n\n\n if (!value.document.hasDescendant(key)) return null;\n var point = value.document.createPoint({\n key: key,\n offset: offset\n });\n return point;\n}\n/**\n * From a DOM selection's `node` and `offset`, normalize so that it always\n * refers to a text node.\n *\n * @param {Element} node\n * @param {Number} offset\n * @return {Object}\n */\n\n\nfunction normalizeNodeAndOffset(node, offset) {\n // If it's an element node, its offset refers to the index of its children\n // including comment nodes, so try to find the right text child node.\n if (node.nodeType == 1 && node.childNodes.length) {\n var isLast = offset == node.childNodes.length;\n var direction = isLast ? 'backward' : 'forward';\n var index = isLast ? offset - 1 : offset;\n node = getEditableChild(node, index, direction); // If the node has children, traverse until we have a leaf node. Leaf nodes\n // can be either text nodes, or other void DOM nodes.\n\n while (node.nodeType == 1 && node.childNodes.length) {\n var i = isLast ? node.childNodes.length - 1 : 0;\n node = getEditableChild(node, i, direction);\n } // Determine the new offset inside the text node.\n\n\n offset = isLast ? node.textContent.length : 0;\n } // Return the node and offset.\n\n\n return {\n node: node,\n offset: offset\n };\n}\n/**\n * Get the nearest editable child at `index` in a `parent`, preferring\n * `direction`.\n *\n * @param {Element} parent\n * @param {Number} index\n * @param {String} direction ('forward' or 'backward')\n * @return {Element|Null}\n */\n\n\nfunction getEditableChild(parent, index, direction) {\n var childNodes = parent.childNodes;\n var child = childNodes[index];\n var i = index;\n var triedForward = false;\n var triedBackward = false; // While the child is a comment node, or an element node with no children,\n // keep iterating to find a sibling non-void, non-comment node.\n\n while (child.nodeType == 8 || child.nodeType == 1 && child.childNodes.length == 0 || child.nodeType == 1 && child.getAttribute('contenteditable') == 'false') {\n if (triedForward && triedBackward) break;\n\n if (i >= childNodes.length) {\n triedForward = true;\n i = index - 1;\n direction = 'backward';\n continue;\n }\n\n if (i < 0) {\n triedBackward = true;\n i = index + 1;\n direction = 'forward';\n continue;\n }\n\n child = childNodes[i];\n if (direction == 'forward') i++;\n if (direction == 'backward') i--;\n }\n\n return child || null;\n}\n/**\n * Find a Slate range from a DOM `native` selection.\n *\n * @param {Selection} native\n * @param {Value} value\n * @return {Range}\n */\n\n\nfunction findRange(native, value) {\n var el = native.anchorNode || native.startContainer;\n if (!el) return null;\n var window = getWindow(el); // If the `native` object is a DOM `Range` or `StaticRange` object, change it\n // into something that looks like a DOM `Selection` instead.\n\n if (native instanceof window.Range || window.StaticRange && native instanceof window.StaticRange) {\n native = {\n anchorNode: native.startContainer,\n anchorOffset: native.startOffset,\n focusNode: native.endContainer,\n focusOffset: native.endOffset\n };\n }\n\n var _native = native,\n anchorNode = _native.anchorNode,\n anchorOffset = _native.anchorOffset,\n focusNode = _native.focusNode,\n focusOffset = _native.focusOffset,\n isCollapsed = _native.isCollapsed;\n var anchor = findPoint(anchorNode, anchorOffset, value);\n var focus = isCollapsed ? anchor : findPoint(focusNode, focusOffset, value);\n if (!anchor || !focus) return null; // COMPAT: ??? The Edge browser seems to have a case where if you select the\n // last word of a span, it sets the endContainer to the containing span.\n // `selection-is-backward` doesn't handle this case.\n\n if (IS_IE || IS_EDGE) {\n var domAnchor = findDOMPoint(anchor);\n var domFocus = findDOMPoint(focus);\n native = {\n anchorNode: domAnchor.node,\n anchorOffset: domAnchor.offset,\n focusNode: domFocus.node,\n focusOffset: domFocus.offset\n };\n }\n\n var document = value.document;\n var range = document.createRange({\n anchor: anchor,\n focus: focus\n });\n return range;\n}\n/**\n * CSS overflow values that would cause scrolling.\n *\n * @type {Array}\n */\n\n\nvar OVERFLOWS = ['auto', 'overlay', 'scroll'];\n/**\n * Detect whether we are running IOS version 11\n */\n\nvar IS_IOS_11 = IS_IOS && !!window.navigator.userAgent.match(/os 11_/i);\n/**\n * Find the nearest parent with scrolling, or window.\n *\n * @param {el} Element\n */\n\nfunction findScrollContainer(el, window) {\n var parent = el.parentNode;\n var scroller = void 0;\n\n while (!scroller) {\n if (!parent.parentNode) break;\n var style = window.getComputedStyle(parent);\n var overflowY = style.overflowY;\n\n if (OVERFLOWS.includes(overflowY)) {\n scroller = parent;\n break;\n }\n\n parent = parent.parentNode;\n } // COMPAT: Because Chrome does not allow doucment.body.scrollTop, we're\n // assuming that window.scrollTo() should be used if the scrollable element\n // turns out to be document.body or document.documentElement. This will work\n // unless body is intentionally set to scrollable by restricting its height\n // (e.g. height: 100vh).\n\n\n if (!scroller) {\n return window.document.body;\n }\n\n return scroller;\n}\n/**\n * Scroll the current selection's focus point into view if needed.\n *\n * @param {Selection} selection\n */\n\n\nfunction scrollToSelection(selection) {\n if (IS_IOS_11) return;\n if (!selection.anchorNode) return;\n var window = getWindow(selection.anchorNode);\n var scroller = findScrollContainer(selection.anchorNode, window);\n var isWindow = scroller == window.document.body || scroller == window.document.documentElement;\n var backward = isBackward(selection);\n var range = selection.getRangeAt(0).cloneRange();\n range.collapse(backward);\n var cursorRect = range.getBoundingClientRect(); // COMPAT: range.getBoundingClientRect() returns 0s in Safari when range is\n // collapsed. Expanding the range by 1 is a relatively effective workaround\n // for vertical scroll, although horizontal may be off by 1 character.\n // https://bugs.webkit.org/show_bug.cgi?id=138949\n // https://bugs.chromium.org/p/chromium/issues/detail?id=435438\n\n if (IS_SAFARI) {\n if (range.collapsed && cursorRect.top == 0 && cursorRect.height == 0) {\n if (range.startOffset == 0) {\n range.setEnd(range.endContainer, 1);\n } else {\n range.setStart(range.startContainer, range.startOffset - 1);\n }\n\n cursorRect = range.getBoundingClientRect();\n\n if (cursorRect.top == 0 && cursorRect.height == 0) {\n if (range.getClientRects().length) {\n cursorRect = range.getClientRects()[0];\n }\n }\n }\n }\n\n var width = void 0;\n var height = void 0;\n var yOffset = void 0;\n var xOffset = void 0;\n var scrollerTop = 0;\n var scrollerLeft = 0;\n var scrollerBordersY = 0;\n var scrollerBordersX = 0;\n var scrollerPaddingTop = 0;\n var scrollerPaddingBottom = 0;\n var scrollerPaddingLeft = 0;\n var scrollerPaddingRight = 0;\n\n if (isWindow) {\n var innerWidth = window.innerWidth,\n innerHeight = window.innerHeight,\n pageYOffset = window.pageYOffset,\n pageXOffset = window.pageXOffset;\n width = innerWidth;\n height = innerHeight;\n yOffset = pageYOffset;\n xOffset = pageXOffset;\n } else {\n var offsetWidth = scroller.offsetWidth,\n offsetHeight = scroller.offsetHeight,\n scrollTop = scroller.scrollTop,\n scrollLeft = scroller.scrollLeft;\n\n var _window$getComputedSt = window.getComputedStyle(scroller),\n borderTopWidth = _window$getComputedSt.borderTopWidth,\n borderBottomWidth = _window$getComputedSt.borderBottomWidth,\n borderLeftWidth = _window$getComputedSt.borderLeftWidth,\n borderRightWidth = _window$getComputedSt.borderRightWidth,\n paddingTop = _window$getComputedSt.paddingTop,\n paddingBottom = _window$getComputedSt.paddingBottom,\n paddingLeft = _window$getComputedSt.paddingLeft,\n paddingRight = _window$getComputedSt.paddingRight;\n\n var scrollerRect = scroller.getBoundingClientRect();\n width = offsetWidth;\n height = offsetHeight;\n scrollerTop = scrollerRect.top + parseInt(borderTopWidth, 10);\n scrollerLeft = scrollerRect.left + parseInt(borderLeftWidth, 10);\n scrollerBordersY = parseInt(borderTopWidth, 10) + parseInt(borderBottomWidth, 10);\n scrollerBordersX = parseInt(borderLeftWidth, 10) + parseInt(borderRightWidth, 10);\n scrollerPaddingTop = parseInt(paddingTop, 10);\n scrollerPaddingBottom = parseInt(paddingBottom, 10);\n scrollerPaddingLeft = parseInt(paddingLeft, 10);\n scrollerPaddingRight = parseInt(paddingRight, 10);\n yOffset = scrollTop;\n xOffset = scrollLeft;\n }\n\n var cursorTop = cursorRect.top + yOffset - scrollerTop;\n var cursorLeft = cursorRect.left + xOffset - scrollerLeft;\n var x = xOffset;\n var y = yOffset;\n\n if (cursorLeft < xOffset) {\n // selection to the left of viewport\n x = cursorLeft - scrollerPaddingLeft;\n } else if (cursorLeft + cursorRect.width + scrollerBordersX > xOffset + width) {\n // selection to the right of viewport\n x = cursorLeft + scrollerBordersX + scrollerPaddingRight - width;\n }\n\n if (cursorTop < yOffset) {\n // selection above viewport\n y = cursorTop - scrollerPaddingTop;\n } else if (cursorTop + cursorRect.height + scrollerBordersY > yOffset + height) {\n // selection below viewport\n y = cursorTop + scrollerBordersY + scrollerPaddingBottom + cursorRect.height - height;\n }\n\n if (isWindow) {\n window.scrollTo(x, y);\n } else {\n scroller.scrollTop = y;\n scroller.scrollLeft = x;\n }\n}\n/**\n * COMPAT: if we are in <= IE11 and the selection contains\n * tables, `removeAllRanges()` will throw\n * \"unable to complete the operation due to error 800a025e\"\n *\n * @param {Selection} selection document selection\n */\n\n\nfunction removeAllRanges(selection) {\n var doc = window.document;\n\n if (doc && doc.body.createTextRange) {\n // All IE but Edge\n var range = doc.body.createTextRange();\n range.collapse();\n range.select();\n } else {\n selection.removeAllRanges();\n }\n}\n\nvar FIREFOX_NODE_TYPE_ACCESS_ERROR = /Permission denied to access property \"nodeType\"/;\n/**\n * Debug.\n *\n * @type {Function}\n */\n\nvar debug$4 = Debug('slate:content');\n/**\n * Content.\n *\n * @type {Component}\n */\n\nvar Content = function (_React$Component) {\n inherits(Content, _React$Component);\n\n function Content() {\n var _ref;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, Content);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = Content.__proto__ || Object.getPrototypeOf(Content)).call.apply(_ref, [this].concat(args))), _this), _this.tmp = {\n isUpdatingSelection: false\n /**\n * Create a set of bound event handlers.\n *\n * @type {Object}\n */\n\n }, _this.handlers = EVENT_HANDLERS.reduce(function (obj, handler) {\n obj[handler] = function (event) {\n return _this.onEvent(handler, event);\n };\n\n return obj;\n }, {}), _this.updateSelection = function () {\n var editor = _this.props.editor;\n var value = editor.value;\n var selection = value.selection;\n var isBackward$$1 = selection.isBackward;\n var window = getWindow(_this.element);\n var native = window.getSelection(); // .getSelection() can return null in some cases\n // https://bugzilla.mozilla.org/show_bug.cgi?id=827585\n\n if (!native) return;\n var rangeCount = native.rangeCount,\n anchorNode = native.anchorNode; // If both selections are blurred, do nothing.\n\n if (!rangeCount && selection.isBlurred) return; // If the selection has been blurred, but is still inside the editor in the\n // DOM, blur it manually.\n\n if (selection.isBlurred) {\n if (!_this.isInEditor(anchorNode)) return;\n removeAllRanges(native);\n\n _this.element.blur();\n\n debug$4('updateSelection', {\n selection: selection,\n native: native\n });\n return;\n } // If the selection isn't set, do nothing.\n\n\n if (selection.isUnset) return; // Otherwise, figure out which DOM nodes should be selected...\n\n var current = !!rangeCount && native.getRangeAt(0);\n var range = findDOMRange(selection, window);\n\n if (!range) {\n warning(false, 'Unable to find a native DOM range from the current selection.');\n return;\n }\n\n var startContainer = range.startContainer,\n startOffset = range.startOffset,\n endContainer = range.endContainer,\n endOffset = range.endOffset; // If the new range matches the current selection, there is nothing to fix.\n // COMPAT: The native `Range` object always has it's \"start\" first and \"end\"\n // last in the DOM. It has no concept of \"backwards/forwards\", so we have\n // to check both orientations here. (2017/10/31)\n\n if (current) {\n if (startContainer == current.startContainer && startOffset == current.startOffset && endContainer == current.endContainer && endOffset == current.endOffset || startContainer == current.endContainer && startOffset == current.endOffset && endContainer == current.startContainer && endOffset == current.startOffset) {\n return;\n }\n } // Otherwise, set the `isUpdatingSelection` flag and update the selection.\n\n\n _this.tmp.isUpdatingSelection = true;\n removeAllRanges(native); // COMPAT: IE 11 does not support Selection.setBaseAndExtent\n\n if (native.setBaseAndExtent) {\n // COMPAT: Since the DOM range has no concept of backwards/forwards\n // we need to check and do the right thing here.\n if (isBackward$$1) {\n native.setBaseAndExtent(range.endContainer, range.endOffset, range.startContainer, range.startOffset);\n } else {\n native.setBaseAndExtent(range.startContainer, range.startOffset, range.endContainer, range.endOffset);\n }\n } else {\n // COMPAT: IE 11 does not support Selection.extend, fallback to addRange\n native.addRange(range);\n } // Scroll to the selection, in case it's out of view.\n\n\n scrollToSelection(native); // Then unset the `isUpdatingSelection` flag after a delay.\n\n setTimeout(function () {\n // COMPAT: In Firefox, it's not enough to create a range, you also need to\n // focus the contenteditable element too. (2016/11/16)\n if (IS_FIREFOX && _this.element) _this.element.focus();\n _this.tmp.isUpdatingSelection = false;\n });\n debug$4('updateSelection', {\n selection: selection,\n native: native\n });\n }, _this.ref = function (element) {\n _this.element = element;\n }, _this.isInEditor = function (target) {\n var _this2 = _this,\n element = _this2.element;\n var el = void 0;\n\n try {\n // COMPAT: Text nodes don't have `isContentEditable` property. So, when\n // `target` is a text node use its parent node for check.\n el = target.nodeType === 3 ? target.parentNode : target;\n } catch (err) {\n // COMPAT: In Firefox, `target.nodeType` will throw an error if target is\n // originating from an internal \"restricted\" element (e.g. a stepper\n // arrow on a number input)\n // see github.com/ianstormtaylor/slate/issues/1819\n if (IS_FIREFOX && FIREFOX_NODE_TYPE_ACCESS_ERROR.test(err.message)) {\n return false;\n }\n\n throw err;\n }\n\n var allowEdit = el.isContentEditable || el.closest('[data-slate-void]');\n return allowEdit && (el === element || el.closest('[data-slate-editor]') === element);\n }, _this.onNativeSelectionChange = throttle(function (event) {\n if (_this.props.readOnly) return;\n var window = getWindow(event.target);\n var activeElement = window.document.activeElement;\n if (activeElement !== _this.element) return;\n\n _this.props.onSelect(event);\n }, 100), _this.renderNode = function (child, isSelected, decorations) {\n var _this$props = _this.props,\n editor = _this$props.editor,\n readOnly = _this$props.readOnly;\n var value = editor.value;\n var document = value.document,\n selection = value.selection;\n var isFocused = selection.isFocused;\n return React.createElement(Node$1, {\n block: null,\n editor: editor,\n decorations: decorations,\n isSelected: isSelected,\n isFocused: isFocused && isSelected,\n key: child.key,\n node: child,\n parent: document,\n readOnly: readOnly\n });\n }, _temp), possibleConstructorReturn(_this, _ret);\n }\n /**\n * Property types.\n *\n * @type {Object}\n */\n\n /**\n * Default properties.\n *\n * @type {Object}\n */\n\n /**\n * Temporary values.\n *\n * @type {Object}\n */\n\n\n createClass(Content, [{\n key: 'componentDidMount',\n\n /**\n * When the editor first mounts in the DOM we need to:\n *\n * - Add native DOM event listeners.\n * - Update the selection, in case it starts focused.\n */\n value: function componentDidMount() {\n var window = getWindow(this.element);\n window.document.addEventListener('selectionchange', this.onNativeSelectionChange); // COMPAT: Restrict scope of `beforeinput` to clients that support the\n // Input Events Level 2 spec, since they are preventable events.\n\n if (HAS_INPUT_EVENTS_LEVEL_2) {\n this.element.addEventListener('beforeinput', this.handlers.onBeforeInput);\n }\n\n this.updateSelection();\n }\n /**\n * When unmounting, remove DOM event listeners.\n */\n\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n var window = getWindow(this.element);\n\n if (window) {\n window.document.removeEventListener('selectionchange', this.onNativeSelectionChange);\n }\n\n if (HAS_INPUT_EVENTS_LEVEL_2) {\n this.element.removeEventListener('beforeinput', this.handlers.onBeforeInput);\n }\n }\n /**\n * On update, update the selection.\n */\n\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n this.updateSelection();\n }\n /**\n * Update the native DOM selection to reflect the internal model.\n */\n\n /**\n * The React ref method to set the root content element locally.\n *\n * @param {Element} element\n */\n\n /**\n * Check if an event `target` is fired from within the contenteditable\n * element. This should be false for edits happening in non-contenteditable\n * children, such as void nodes and other nested Slate editors.\n *\n * @param {Element} target\n * @return {Boolean}\n */\n\n }, {\n key: 'onEvent',\n\n /**\n * On `event` with `handler`.\n *\n * @param {String} handler\n * @param {Event} event\n */\n value: function onEvent(handler, event) {\n debug$4('onEvent', handler); // Ignore `onBlur`, `onFocus` and `onSelect` events generated\n // programmatically while updating selection.\n\n if (this.tmp.isUpdatingSelection && (handler == 'onSelect' || handler == 'onBlur' || handler == 'onFocus')) {\n return;\n } // COMPAT: There are situations where a select event will fire with a new\n // native selection that resolves to the same internal position. In those\n // cases we don't need to trigger any changes, since our internal model is\n // already up to date, but we do want to update the native selection again\n // to make sure it is in sync. (2017/10/16)\n\n\n if (handler == 'onSelect') {\n var editor = this.props.editor;\n var value = editor.value;\n var selection = value.selection;\n var window = getWindow(event.target);\n var native = window.getSelection();\n var range = findRange(native, value);\n\n if (range && range.equals(selection.toRange())) {\n this.updateSelection();\n return;\n }\n } // Don't handle drag and drop events coming from embedded editors.\n\n\n if (handler == 'onDragEnd' || handler == 'onDragEnter' || handler == 'onDragExit' || handler == 'onDragLeave' || handler == 'onDragOver' || handler == 'onDragStart' || handler == 'onDrop') {\n var target = event.target;\n var targetEditorNode = target.closest('[data-slate-editor]');\n if (targetEditorNode !== this.element) return;\n } // Some events require being in editable in the editor, so if the event\n // target isn't, ignore them.\n\n\n if (handler == 'onBeforeInput' || handler == 'onBlur' || handler == 'onCompositionEnd' || handler == 'onCompositionStart' || handler == 'onCopy' || handler == 'onCut' || handler == 'onFocus' || handler == 'onInput' || handler == 'onKeyDown' || handler == 'onKeyUp' || handler == 'onPaste' || handler == 'onSelect') {\n if (!this.isInEditor(event.target)) return;\n }\n\n this.props[handler](event);\n }\n /**\n * On native `selectionchange` event, trigger the `onSelect` handler. This is\n * needed to account for React's `onSelect` being non-standard and not firing\n * until after a selection has been released. This causes issues in situations\n * where another change happens while a selection is being made.\n *\n * @param {Event} event\n */\n\n }, {\n key: 'render',\n\n /**\n * Render the editor content.\n *\n * @return {Element}\n */\n value: function render() {\n var _this3 = this;\n\n var props = this.props,\n handlers = this.handlers;\n var className = props.className,\n readOnly = props.readOnly,\n editor = props.editor,\n tabIndex = props.tabIndex,\n role = props.role,\n tagName = props.tagName,\n spellCheck = props.spellCheck;\n var value = editor.value,\n stack = editor.stack;\n var Container = tagName;\n var document = value.document,\n selection = value.selection,\n decorations = value.decorations;\n var indexes = document.getSelectionIndexes(selection);\n var decs = document.getDecorations(stack).concat(decorations);\n var childrenDecorations = getChildrenDecorations(document, decs);\n var children = document.nodes.toArray().map(function (child, i) {\n var isSelected = !!indexes && indexes.start <= i && i < indexes.end;\n return _this3.renderNode(child, isSelected, childrenDecorations[i]);\n });\n\n var style = _extends({\n // Prevent the default outline styles.\n outline: 'none',\n // Preserve adjacent whitespace and new lines.\n whiteSpace: 'pre-wrap',\n // Allow words to break if they are too long.\n wordWrap: 'break-word'\n }, readOnly ? {} : {\n WebkitUserModify: 'read-write-plaintext-only'\n }, props.style);\n\n debug$4('render', {\n props: props\n });\n return React.createElement(Container, _extends({}, handlers, {\n 'data-slate-editor': true,\n ref: this.ref,\n 'data-key': document.key,\n contentEditable: readOnly ? null : true,\n suppressContentEditableWarning: true,\n className: className,\n autoCorrect: props.autoCorrect ? 'on' : 'off',\n spellCheck: spellCheck,\n style: style,\n role: readOnly ? null : role || 'textbox',\n tabIndex: tabIndex // COMPAT: The Grammarly Chrome extension works by changing the DOM out\n // from under `contenteditable` elements, which leads to weird behaviors\n // so we have to disable it like this. (2017/04/24)\n ,\n 'data-gramm': false\n }), children);\n }\n /**\n * Render a `child` node of the document.\n *\n * @param {Node} child\n * @param {Boolean} isSelected\n * @return {Element}\n */\n\n }]);\n return Content;\n}(React.Component);\n/**\n * Mix in handler prop types.\n */\n\n\nContent.propTypes = {\n autoCorrect: Types.bool.isRequired,\n className: Types.string,\n editor: Types.object.isRequired,\n readOnly: Types.bool.isRequired,\n role: Types.string,\n spellCheck: Types.bool.isRequired,\n style: Types.object,\n tabIndex: Types.number,\n tagName: Types.string\n};\nContent.defaultProps = {\n style: {},\n tagName: 'div'\n};\nEVENT_HANDLERS.forEach(function (handler) {\n Content.propTypes[handler] = Types.func.isRequired;\n});\n/**\n * The transfer types that Slate recognizes.\n *\n * @type {Object}\n */\n\nvar TRANSFER_TYPES = {\n FRAGMENT: 'application/x-slate-fragment',\n HTML: 'text/html',\n NODE: 'application/x-slate-node',\n RICH: 'text/rtf',\n TEXT: 'text/plain'\n /**\n * Export.\n *\n * @type {Object}\n */\n\n};\nvar FRAGMENT = TRANSFER_TYPES.FRAGMENT;\nvar HTML = TRANSFER_TYPES.HTML;\nvar TEXT = TRANSFER_TYPES.TEXT;\n/**\n * Prepares a Slate document fragment to be copied to the clipboard.\n *\n * @param {Event} event\n * @param {Value} value\n * @param {Document} [fragment]\n */\n\nfunction cloneFragment(event, value) {\n var fragment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : value.fragment;\n var callback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function () {\n return undefined;\n };\n var window = getWindow(event.target);\n var native = window.getSelection();\n var schema = value.schema;\n var _value$selection = value.selection,\n start = _value$selection.start,\n end = _value$selection.end;\n var startVoid = value.document.getClosestVoid(start.key, schema);\n var endVoid = value.document.getClosestVoid(end.key, schema); // If the selection is collapsed, and it isn't inside a void node, abort.\n\n if (native.isCollapsed && !startVoid) return; // Create a fake selection so that we can add a Base64-encoded copy of the\n // fragment to the HTML, to decode on future pastes.\n\n var encoded = Base64.serializeNode(fragment);\n var range = native.getRangeAt(0);\n var contents = range.cloneContents();\n var attach = contents.childNodes[0]; // Make sure attach is a non-empty node, since empty nodes will not get copied\n\n contents.childNodes.forEach(function (node) {\n if (node.textContent && node.textContent.trim() !== '') {\n attach = node;\n }\n }); // COMPAT: If the end node is a void node, we need to move the end of the\n // range from the void node's spacer span, to the end of the void node's\n // content, since the spacer is before void's content in the DOM.\n\n if (endVoid) {\n var r = range.cloneRange();\n var node = findDOMNode$1(endVoid, window);\n r.setEndAfter(node);\n contents = r.cloneContents();\n } // COMPAT: If the start node is a void node, we need to attach the encoded\n // fragment to the void node's content node instead of the spacer, because\n // attaching it to empty `
/` nodes will end up having it erased by\n // most browsers. (2018/04/27)\n\n\n if (startVoid) {\n attach = contents.childNodes[0].childNodes[1].firstChild;\n } // Remove any zero-width space spans from the cloned DOM so that they don't\n // show up elsewhere when pasted.\n\n\n [].slice.call(contents.querySelectorAll(ZERO_WIDTH_SELECTOR)).forEach(function (zw) {\n var isNewline = zw.getAttribute(ZERO_WIDTH_ATTRIBUTE) === 'n';\n zw.textContent = isNewline ? '\\n' : '';\n }); // Set a `data-slate-fragment` attribute on a non-empty node, so it shows up\n // in the HTML, and can be used for intra-Slate pasting. If it's a text\n // node, wrap it in a `` so we have something to set an attribute on.\n\n if (attach.nodeType == 3) {\n var span = window.document.createElement('span'); // COMPAT: In Chrome and Safari, if we don't add the `white-space` style\n // then leading and trailing spaces will be ignored. (2017/09/21)\n\n span.style.whiteSpace = 'pre';\n span.appendChild(attach);\n contents.appendChild(span);\n attach = span;\n }\n\n attach.setAttribute('data-slate-fragment', encoded); // Creates value from only the selected blocks\n // Then gets plaintext for clipboard with proper linebreaks for BLOCK elements\n // Via Plain serializer\n\n var valFromSelection = Value.create({\n document: fragment\n });\n var plainText = Plain.serialize(valFromSelection); // Add the phony content to a div element. This is needed to copy the\n // contents into the html clipboard register.\n\n var div = window.document.createElement('div');\n div.appendChild(contents); // For browsers supporting it, we set the clipboard registers manually,\n // since the result is more predictable.\n // COMPAT: IE supports the setData method, but only in restricted sense.\n // IE doesn't support arbitrary MIME types or common ones like 'text/plain';\n // it only accepts \"Text\" (which gets mapped to 'text/plain') and \"Url\"\n // (mapped to 'text/url-list'); so, we should only enter block if !IS_IE\n\n if (event.clipboardData && event.clipboardData.setData && !IS_IE) {\n event.preventDefault();\n event.clipboardData.setData(TEXT, plainText);\n event.clipboardData.setData(FRAGMENT, encoded);\n event.clipboardData.setData(HTML, div.innerHTML);\n callback();\n } // COMPAT: For browser that don't support the Clipboard API's setData method,\n // we must rely on the browser to natively copy what's selected.\n // So we add the div (containing our content) to the DOM, and select it.\n\n\n var editor = event.target.closest('[data-slate-editor]');\n div.setAttribute('contenteditable', true);\n div.style.position = 'absolute';\n div.style.left = '-9999px';\n editor.appendChild(div);\n native.selectAllChildren(div); // Revert to the previous selection right after copying.\n\n window.requestAnimationFrame(function () {\n editor.removeChild(div);\n removeAllRanges(native);\n native.addRange(range);\n callback();\n });\n}\n/**\n * Find a Slate node from a DOM `element`.\n *\n * @param {Element} element\n * @param {Value} value\n * @return {Node|Null}\n */\n\n\nfunction findNode(element, value) {\n var closest = element.closest('[data-key]');\n if (!closest) return null;\n var key = closest.getAttribute('data-key');\n if (!key) return null;\n var node = value.document.getNode(key);\n return node || null;\n}\n/**\n * Get the target range from a DOM `event`.\n *\n * @param {Event} event\n * @param {Value} value\n * @return {Range}\n */\n\n\nfunction getEventRange(event, value) {\n if (event.nativeEvent) {\n event = event.nativeEvent;\n }\n\n var _event = event,\n x = _event.x,\n y = _event.y,\n target = _event.target;\n if (x == null || y == null) return null;\n var document = value.document,\n schema = value.schema;\n var node = findNode(target, value);\n if (!node) return null; // If the drop target is inside a void node, move it into either the next or\n // previous node, depending on which side the `x` and `y` coordinates are\n // closest to.\n\n if (schema.isVoid(node)) {\n var rect = target.getBoundingClientRect();\n var isPrevious = node.object == 'inline' ? x - rect.left < rect.left + rect.width - x : y - rect.top < rect.top + rect.height - y;\n var text = node.getFirstText();\n\n var _range = document.createRange();\n\n if (isPrevious) {\n var previousText = document.getPreviousText(text.key);\n\n if (previousText) {\n return _range.moveToEndOfNode(previousText);\n }\n }\n\n var nextText = document.getNextText(text.key);\n return nextText ? _range.moveToStartOfNode(nextText) : null;\n } // Else resolve a range from the caret position where the drop occured.\n\n\n var window = getWindow(target);\n var native = void 0; // COMPAT: In Firefox, `caretRangeFromPoint` doesn't exist. (2016/07/25)\n\n if (window.document.caretRangeFromPoint) {\n native = window.document.caretRangeFromPoint(x, y);\n } else if (window.document.caretPositionFromPoint) {\n var position = window.document.caretPositionFromPoint(x, y);\n native = window.document.createRange();\n native.setStart(position.offsetNode, position.offset);\n native.setEnd(position.offsetNode, position.offset);\n } else if (window.document.body.createTextRange) {\n // COMPAT: In IE, `caretRangeFromPoint` and\n // `caretPositionFromPoint` don't exist. (2018/07/11)\n native = window.document.body.createTextRange();\n\n try {\n native.moveToPoint(x, y);\n } catch (error) {\n // IE11 will raise an `unspecified error` if `moveToPoint` is\n // called during a dropEvent.\n return null;\n }\n } // Resolve a Slate range from the DOM range.\n\n\n var range = findRange(native, value);\n if (!range) return null;\n return range;\n}\n/**\n * Transfer types.\n *\n * @type {String}\n */\n\n\nvar FRAGMENT$1 = TRANSFER_TYPES.FRAGMENT;\nvar HTML$1 = TRANSFER_TYPES.HTML;\nvar NODE = TRANSFER_TYPES.NODE;\nvar RICH = TRANSFER_TYPES.RICH;\nvar TEXT$1 = TRANSFER_TYPES.TEXT;\n/**\n * Fragment matching regexp for HTML nodes.\n *\n * @type {RegExp}\n */\n\nvar FRAGMENT_MATCHER = / data-slate-fragment=\"([^\\s\"]+)\"/;\n/**\n * Get the transfer data from an `event`.\n *\n * @param {Event} event\n * @return {Object}\n */\n\nfunction getEventTransfer(event) {\n // COMPAT: IE 11 doesn't populate nativeEvent with either\n // dataTransfer or clipboardData. We'll need to use the base event\n // object (2018/14/6)\n if (!IS_IE && event.nativeEvent) {\n event = event.nativeEvent;\n }\n\n var transfer = event.dataTransfer || event.clipboardData;\n var fragment = getType(transfer, FRAGMENT$1);\n var node = getType(transfer, NODE);\n var html = getType(transfer, HTML$1);\n var rich = getType(transfer, RICH);\n var text = getType(transfer, TEXT$1);\n var files = void 0; // If there isn't a fragment, but there is HTML, check to see if the HTML is\n // actually an encoded fragment.\n\n if (!fragment && html && ~html.indexOf(' data-slate-fragment=\"')) {\n var matches = FRAGMENT_MATCHER.exec(html);\n\n var _matches = slicedToArray(matches, 2),\n full = _matches[0],\n encoded = _matches[1]; // eslint-disable-line no-unused-vars\n\n\n if (encoded) fragment = encoded;\n } // COMPAT: Edge doesn't handle custom data types\n // These will be embedded in text/plain in this case (2017/7/12)\n\n\n if (text) {\n var embeddedTypes = getEmbeddedTypes(text);\n if (embeddedTypes[FRAGMENT$1]) fragment = embeddedTypes[FRAGMENT$1];\n if (embeddedTypes[NODE]) node = embeddedTypes[NODE];\n if (embeddedTypes[TEXT$1]) text = embeddedTypes[TEXT$1];\n } // Decode a fragment or node if they exist.\n\n\n if (fragment) fragment = Base64.deserializeNode(fragment);\n if (node) node = Base64.deserializeNode(node); // COMPAT: Edge sometimes throws 'NotSupportedError'\n // when accessing `transfer.items` (2017/7/12)\n\n try {\n // Get and normalize files if they exist.\n if (transfer.items && transfer.items.length) {\n files = Array.from(transfer.items).map(function (item) {\n return item.kind == 'file' ? item.getAsFile() : null;\n }).filter(function (exists) {\n return exists;\n });\n } else if (transfer.files && transfer.files.length) {\n files = Array.from(transfer.files);\n }\n } catch (err) {\n if (transfer.files && transfer.files.length) {\n files = Array.from(transfer.files);\n }\n } // Determine the type of the data.\n\n\n var data = {\n files: files,\n fragment: fragment,\n html: html,\n node: node,\n rich: rich,\n text: text\n };\n data.type = getTransferType(data);\n return data;\n}\n/**\n * Takes text input, checks whether contains embedded data\n * and returns object with original text +/- additional data\n *\n * @param {String} text\n * @return {Object}\n */\n\n\nfunction getEmbeddedTypes(text) {\n var prefix = 'SLATE-DATA-EMBED::';\n\n if (text.substring(0, prefix.length) != prefix) {\n return {\n TEXT: text\n };\n } // Attempt to parse, if fails then just standard text/plain\n // Otherwise, already had data embedded\n\n\n try {\n return JSON.parse(text.substring(prefix.length));\n } catch (err) {\n throw new Error('Unable to parse custom Slate drag event data.');\n }\n}\n/**\n * Get the type of a transfer from its `data`.\n *\n * @param {Object} data\n * @return {String}\n */\n\n\nfunction getTransferType(data) {\n if (data.fragment) return 'fragment';\n if (data.node) return 'node'; // COMPAT: Microsoft Word adds an image of the selected text to the data.\n // Since files are preferred over HTML or text, this would cause the type to\n // be considered `files`. But it also adds rich text data so we can check\n // for that and properly set the type to `html` or `text`. (2016/11/21)\n\n if (data.rich && data.html) return 'html';\n if (data.rich && data.text) return 'text';\n if (data.files && data.files.length) return 'files';\n if (data.html) return 'html';\n if (data.text) return 'text';\n return 'unknown';\n}\n/**\n * Get one of types `TYPES.FRAGMENT`, `TYPES.NODE`, `text/html`, `text/rtf` or\n * `text/plain` from transfers's `data` if possible, otherwise return null.\n *\n * @param {Object} transfer\n * @param {String} type\n * @return {String}\n */\n\n\nfunction getType(transfer, type) {\n if (!transfer.types || !transfer.types.length) {\n // COMPAT: In IE 11, there is no `types` field but `getData('Text')`\n // is supported`. (2017/06/23)\n return type == TEXT$1 ? transfer.getData('Text') || null : null;\n } // COMPAT: In Edge, transfer.types doesn't respond to `indexOf`. (2017/10/25)\n\n\n var types = Array.from(transfer.types);\n return types.indexOf(type) !== -1 ? transfer.getData(type) || null : null;\n}\n/**\n * The default plain text transfer type.\n *\n * @type {String}\n */\n\n\nvar TEXT$2 = TRANSFER_TYPES.TEXT;\n/**\n * Set data with `type` and `content` on an `event`.\n *\n * COMPAT: In Edge, custom types throw errors, so embed all non-standard\n * types in text/plain compound object. (2017/7/12)\n *\n * @param {Event} event\n * @param {String} type\n * @param {String} content\n */\n\nfunction setEventTransfer(event, type, content) {\n var mime = TRANSFER_TYPES[type.toUpperCase()];\n\n if (!mime) {\n throw new Error('Cannot set unknown transfer type \"' + mime + '\".');\n }\n\n if (event.nativeEvent) {\n event = event.nativeEvent;\n }\n\n var transfer = event.dataTransfer || event.clipboardData;\n\n try {\n transfer.setData(mime, content); // COMPAT: Safari needs to have the 'text' (and not 'text/plain') value in dataTransfer\n // to display the cursor while dragging internally.\n\n transfer.setData('text', transfer.getData('text'));\n } catch (err) {\n var prefix = 'SLATE-DATA-EMBED::';\n var text = transfer.getData(TEXT$2);\n var obj = {}; // If the existing plain text data is prefixed, it's Slate JSON data.\n\n if (text.substring(0, prefix.length) === prefix) {\n try {\n obj = JSON.parse(text.substring(prefix.length));\n } catch (e) {\n throw new Error('Failed to parse Slate data from `DataTransfer` object.');\n }\n } else {\n // Otherwise, it's just set it as is.\n obj[TEXT$2] = text;\n }\n\n obj[mime] = content;\n var string = '' + prefix + JSON.stringify(obj);\n transfer.setData(TEXT$2, string);\n }\n}\n/**\n * Debug.\n *\n * @type {Function}\n */\n\n\nvar debug$5 = Debug('slate:after');\n/**\n * The after plugin.\n *\n * @return {Object}\n */\n\nfunction AfterPlugin() {\n var isDraggingInternally = null;\n /**\n * On before input.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n function onBeforeInput(event, change, editor) {\n debug$5('onBeforeInput', {\n event: event\n });\n var isSynthetic = !!event.nativeEvent; // If the event is synthetic, it's React's polyfill of `beforeinput` that\n // isn't a true `beforeinput` event with meaningful information. It only\n // gets triggered for character insertions, so we can just insert directly.\n\n if (isSynthetic) {\n event.preventDefault();\n change.insertText(event.data);\n return;\n } // Otherwise, we can use the information in the `beforeinput` event to\n // figure out the exact change that will occur, and prevent it.\n\n\n var _event$getTargetRange = event.getTargetRanges(),\n _event$getTargetRange2 = slicedToArray(_event$getTargetRange, 1),\n targetRange = _event$getTargetRange2[0];\n\n if (!targetRange) return;\n event.preventDefault();\n var value = change.value;\n var document = value.document,\n selection = value.selection,\n schema = value.schema;\n var range = findRange(targetRange, value);\n\n switch (event.inputType) {\n case 'deleteByDrag':\n case 'deleteByCut':\n case 'deleteContent':\n case 'deleteContentBackward':\n case 'deleteContentForward':\n {\n change.deleteAtRange(range);\n return;\n }\n\n case 'deleteWordBackward':\n {\n change.deleteWordBackwardAtRange(range);\n return;\n }\n\n case 'deleteWordForward':\n {\n change.deleteWordForwardAtRange(range);\n return;\n }\n\n case 'deleteSoftLineBackward':\n case 'deleteHardLineBackward':\n {\n change.deleteLineBackwardAtRange(range);\n return;\n }\n\n case 'deleteSoftLineForward':\n case 'deleteHardLineForward':\n {\n change.deleteLineForwardAtRange(range);\n return;\n }\n\n case 'insertLineBreak':\n case 'insertParagraph':\n {\n var hasVoidParent = document.hasVoidParent(selection.start.path, schema);\n\n if (hasVoidParent) {\n change.moveToStartOfNextText();\n } else {\n change.splitBlockAtRange(range);\n }\n\n return;\n }\n\n case 'insertFromYank':\n case 'insertReplacementText':\n case 'insertText':\n {\n // COMPAT: `data` should have the text for the `insertText` input type\n // and `dataTransfer` should have the text for the\n // `insertReplacementText` input type, but Safari uses `insertText` for\n // spell check replacements and sets `data` to `null`. (2018/08/09)\n var text = event.data == null ? event.dataTransfer.getData('text/plain') : event.data;\n if (text == null) return;\n change.insertTextAtRange(range, text, selection.marks); // If the text was successfully inserted, and the selection had marks\n // on it, unset the selection's marks.\n\n if (selection.marks && value.document != change.value.document) {\n change.select({\n marks: null\n });\n }\n\n return;\n }\n }\n }\n /**\n * On blur.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onBlur(event, change, editor) {\n debug$5('onBlur', {\n event: event\n });\n change.blur();\n }\n /**\n * On click.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onClick(event, change, editor) {\n if (editor.props.readOnly) {\n return true;\n }\n\n var value = change.value;\n var document = value.document,\n schema = value.schema;\n var node = findNode(event.target, value);\n\n if (!node) {\n return;\n }\n\n var ancestors = document.getAncestors(node.key);\n var isVoid = node && (schema.isVoid(node) || ancestors.some(function (a) {\n return schema.isVoid(a);\n }));\n\n if (isVoid) {\n // COMPAT: In Chrome & Safari, selections that are at the zero offset of\n // an inline node will be automatically replaced to be at the last offset\n // of a previous inline node, which screws us up, so we always want to set\n // it to the end of the node. (2016/11/29)\n change.focus().moveToEndOfNode(node);\n }\n\n debug$5('onClick', {\n event: event\n });\n }\n /**\n * On copy.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onCopy(event, change, editor) {\n debug$5('onCopy', {\n event: event\n });\n cloneFragment(event, change.value);\n }\n /**\n * On cut.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onCut(event, change, editor) {\n debug$5('onCut', {\n event: event\n }); // Once the fake cut content has successfully been added to the clipboard,\n // delete the content in the current selection.\n\n cloneFragment(event, change.value, change.value.fragment, function () {\n // If user cuts a void block node or a void inline node,\n // manually removes it since selection is collapsed in this case.\n var value = change.value;\n var endBlock = value.endBlock,\n endInline = value.endInline,\n selection = value.selection,\n schema = value.schema;\n var isCollapsed = selection.isCollapsed;\n var isVoidBlock = endBlock && schema.isVoid(endBlock) && isCollapsed;\n var isVoidInline = endInline && schema.isVoid(endInline) && isCollapsed;\n\n if (isVoidBlock) {\n editor.change(function (c) {\n return c.removeNodeByKey(endBlock.key);\n });\n } else if (isVoidInline) {\n editor.change(function (c) {\n return c.removeNodeByKey(endInline.key);\n });\n } else {\n editor.change(function (c) {\n return c.delete();\n });\n }\n });\n }\n /**\n * On drag end.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onDragEnd(event, change, editor) {\n debug$5('onDragEnd', {\n event: event\n });\n isDraggingInternally = null;\n }\n /**\n * On drag over.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onDragOver(event, change, editor) {\n debug$5('onDragOver', {\n event: event\n });\n }\n /**\n * On drag start.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onDragStart(event, change, editor) {\n debug$5('onDragStart', {\n event: event\n });\n isDraggingInternally = true;\n var value = change.value;\n var document = value.document,\n schema = value.schema;\n var node = findNode(event.target, value);\n var ancestors = document.getAncestors(node.key);\n var isVoid = node && (schema.isVoid(node) || ancestors.some(function (a) {\n return schema.isVoid(a);\n }));\n var selectionIncludesNode = value.blocks.some(function (block) {\n return block.key === node.key;\n }); // If a void block is dragged and is not selected, select it (necessary for local drags).\n\n if (isVoid && !selectionIncludesNode) {\n change.moveToRangeOfNode(node);\n }\n\n var fragment = change.value.fragment;\n var encoded = Base64.serializeNode(fragment);\n setEventTransfer(event, 'fragment', encoded);\n }\n /**\n * On drop.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onDrop(event, change, editor) {\n debug$5('onDrop', {\n event: event\n });\n var value = change.value;\n var document = value.document,\n selection = value.selection,\n schema = value.schema;\n var window = getWindow(event.target);\n var target = getEventRange(event, value);\n if (!target) return;\n var transfer = getEventTransfer(event);\n var type = transfer.type,\n fragment = transfer.fragment,\n text = transfer.text;\n change.focus(); // If the drag is internal and the target is after the selection, it\n // needs to account for the selection's content being deleted.\n\n if (isDraggingInternally && selection.end.key == target.end.key && selection.end.offset < target.end.offset) {\n target = target.moveForward(selection.start.key == selection.end.key ? 0 - selection.end.offset + selection.start.offset : 0 - selection.end.offset);\n }\n\n if (isDraggingInternally) {\n change.delete();\n }\n\n change.select(target);\n\n if (type == 'text' || type == 'html') {\n var _target = target,\n anchor = _target.anchor;\n var hasVoidParent = document.hasVoidParent(anchor.key, schema);\n\n if (hasVoidParent) {\n var n = document.getNode(anchor.key);\n\n while (hasVoidParent) {\n n = document.getNextText(n.key);\n if (!n) break;\n hasVoidParent = document.hasVoidParent(n.key, schema);\n }\n\n if (n) change.moveToStartOfNode(n);\n }\n\n if (text) {\n text.split('\\n').forEach(function (line, i) {\n if (i > 0) change.splitBlock();\n change.insertText(line);\n });\n }\n }\n\n if (type == 'fragment') {\n change.insertFragment(fragment);\n } // COMPAT: React's onSelect event breaks after an onDrop event\n // has fired in a node: https://github.com/facebook/react/issues/11379.\n // Until this is fixed in React, we dispatch a mouseup event on that\n // DOM node, since that will make it go back to normal.\n\n\n var focusNode = document.getNode(target.focus.key);\n var el = findDOMNode$1(focusNode, window);\n if (!el) return;\n el.dispatchEvent(new MouseEvent('mouseup', {\n view: window,\n bubbles: true,\n cancelable: true\n }));\n }\n /**\n * On input.\n *\n * @param {Event} eventvent\n * @param {Change} change\n */\n\n\n function onInput(event, change, editor) {\n debug$5('onInput', {\n event: event\n });\n var window = getWindow(event.target);\n var value = change.value; // Get the selection point.\n\n var native = window.getSelection();\n var anchorNode = native.anchorNode;\n var point = findPoint(anchorNode, 0, value);\n if (!point) return; // Get the text node and leaf in question.\n\n var document = value.document,\n selection = value.selection;\n var node = document.getDescendant(point.key);\n var block = document.getClosestBlock(node.key);\n var leaves = node.getLeaves();\n var lastText = block.getLastText();\n var lastLeaf = leaves.last();\n var start = 0;\n var end = 0;\n var leaf = leaves.find(function (r) {\n start = end;\n end += r.text.length;\n if (end > point.offset) return true;\n }) || lastLeaf; // Get the text information.\n\n var text = leaf.text;\n var textContent = anchorNode.textContent;\n var isLastText = node == lastText;\n var isLastLeaf = leaf == lastLeaf;\n var lastChar = textContent.charAt(textContent.length - 1); // COMPAT: If this is the last leaf, and the DOM text ends in a new line,\n // we will have added another new line in 's render method to account\n // for browsers collapsing a single trailing new lines, so remove it.\n\n if (isLastText && isLastLeaf && lastChar == '\\n') {\n textContent = textContent.slice(0, -1);\n } // If the text is no different, abort.\n\n\n if (textContent == text) return; // Determine what the selection should be after changing the text.\n\n var delta = textContent.length - text.length;\n var corrected = selection.moveToEnd().moveForward(delta);\n var entire = selection.moveAnchorTo(point.key, start).moveFocusTo(point.key, end);\n entire = document.resolveRange(entire); // Change the current value to have the leaf's text replaced.\n\n change.insertTextAtRange(entire, textContent, leaf.marks).select(corrected);\n }\n /**\n * On key down.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onKeyDown(event, change, editor) {\n debug$5('onKeyDown', {\n event: event\n });\n var value = change.value;\n var document = value.document,\n selection = value.selection,\n schema = value.schema;\n var hasVoidParent = document.hasVoidParent(selection.start.path, schema); // COMPAT: In iOS, some of these hotkeys are handled in the\n // `onNativeBeforeInput` handler of the `` component in order to\n // preserve native autocorrect behavior, so they shouldn't be handled here.\n\n if (Hotkeys.isSplitBlock(event) && !IS_IOS) {\n return hasVoidParent ? change.moveToStartOfNextText() : change.splitBlock();\n }\n\n if (Hotkeys.isDeleteBackward(event) && !IS_IOS) {\n return change.deleteCharBackward();\n }\n\n if (Hotkeys.isDeleteForward(event) && !IS_IOS) {\n return change.deleteCharForward();\n }\n\n if (Hotkeys.isDeleteLineBackward(event)) {\n return change.deleteLineBackward();\n }\n\n if (Hotkeys.isDeleteLineForward(event)) {\n return change.deleteLineForward();\n }\n\n if (Hotkeys.isDeleteWordBackward(event)) {\n return change.deleteWordBackward();\n }\n\n if (Hotkeys.isDeleteWordForward(event)) {\n return change.deleteWordForward();\n }\n\n if (Hotkeys.isRedo(event)) {\n return change.redo();\n }\n\n if (Hotkeys.isUndo(event)) {\n return change.undo();\n } // COMPAT: Certain browsers don't handle the selection updates properly. In\n // Chrome, the selection isn't properly extended. And in Firefox, the\n // selection isn't properly collapsed. (2017/10/17)\n\n\n if (Hotkeys.isMoveLineBackward(event)) {\n event.preventDefault();\n return change.moveToStartOfBlock();\n }\n\n if (Hotkeys.isMoveLineForward(event)) {\n event.preventDefault();\n return change.moveToEndOfBlock();\n }\n\n if (Hotkeys.isExtendLineBackward(event)) {\n event.preventDefault();\n return change.moveFocusToStartOfBlock();\n }\n\n if (Hotkeys.isExtendLineForward(event)) {\n event.preventDefault();\n return change.moveFocusToEndOfBlock();\n } // COMPAT: If a void node is selected, or a zero-width text node adjacent to\n // an inline is selected, we need to handle these hotkeys manually because\n // browsers won't know what to do.\n\n\n if (Hotkeys.isMoveBackward(event)) {\n var previousText = value.previousText,\n startText = value.startText;\n var isPreviousInVoid = previousText && document.hasVoidParent(previousText.key, schema);\n\n if (hasVoidParent || isPreviousInVoid || startText.text == '') {\n event.preventDefault();\n return change.moveBackward();\n }\n }\n\n if (Hotkeys.isMoveForward(event)) {\n var nextText = value.nextText,\n _startText = value.startText;\n var isNextInVoid = nextText && document.hasVoidParent(nextText.key, schema);\n\n if (hasVoidParent || isNextInVoid || _startText.text == '') {\n event.preventDefault();\n return change.moveForward();\n }\n }\n\n if (Hotkeys.isExtendBackward(event)) {\n var _previousText = value.previousText,\n _startText2 = value.startText;\n\n var _isPreviousInVoid = _previousText && document.hasVoidParent(_previousText.key, schema);\n\n if (hasVoidParent || _isPreviousInVoid || _startText2.text == '') {\n event.preventDefault();\n return change.moveFocusBackward();\n }\n }\n\n if (Hotkeys.isExtendForward(event)) {\n var _nextText = value.nextText,\n _startText3 = value.startText;\n\n var _isNextInVoid = _nextText && document.hasVoidParent(_nextText.key, schema);\n\n if (hasVoidParent || _isNextInVoid || _startText3.text == '') {\n event.preventDefault();\n return change.moveFocusForward();\n }\n }\n }\n /**\n * On paste.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onPaste(event, change, editor) {\n debug$5('onPaste', {\n event: event\n });\n var transfer = getEventTransfer(event);\n var type = transfer.type,\n fragment = transfer.fragment,\n text = transfer.text;\n\n if (type == 'fragment') {\n change.insertFragment(fragment);\n }\n\n if (type == 'text' || type == 'html') {\n if (!text) return;\n var value = change.value;\n var document = value.document,\n selection = value.selection,\n startBlock = value.startBlock,\n schema = value.schema;\n if (schema.isVoid(startBlock)) return;\n var defaultBlock = startBlock;\n var defaultMarks = document.getInsertMarksAtRange(selection);\n var frag = Plain.deserialize(text, {\n defaultBlock: defaultBlock,\n defaultMarks: defaultMarks\n }).document;\n change.insertFragment(frag);\n }\n }\n /**\n * On select.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onSelect(event, change, editor) {\n debug$5('onSelect', {\n event: event\n });\n var window = getWindow(event.target);\n var value = change.value;\n var document = value.document,\n schema = value.schema;\n var native = window.getSelection(); // If there are no ranges, the editor was blurred natively.\n\n if (!native.rangeCount) {\n change.blur();\n return;\n } // Otherwise, determine the Slate selection from the native one.\n\n\n var range = findRange(native, value);\n if (!range) return;\n var _range = range,\n anchor = _range.anchor,\n focus = _range.focus;\n var anchorText = document.getNode(anchor.key);\n var focusText = document.getNode(focus.key);\n var anchorInline = document.getClosestInline(anchor.key);\n var focusInline = document.getClosestInline(focus.key);\n var focusBlock = document.getClosestBlock(focus.key);\n var anchorBlock = document.getClosestBlock(anchor.key); // COMPAT: If the anchor point is at the start of a non-void, and the\n // focus point is inside a void node with an offset that isn't `0`, set\n // the focus offset to `0`. This is due to void nodes 's being\n // positioned off screen, resulting in the offset always being greater\n // than `0`. Since we can't know what it really should be, and since an\n // offset of `0` is less destructive because it creates a hanging\n // selection, go with `0`. (2017/09/07)\n\n if (anchorBlock && !schema.isVoid(anchorBlock) && anchor.offset == 0 && focusBlock && schema.isVoid(focusBlock) && focus.offset != 0) {\n range = range.setFocus(focus.setOffset(0));\n } // COMPAT: If the selection is at the end of a non-void inline node, and\n // there is a node after it, put it in the node after instead. This\n // standardizes the behavior, since it's indistinguishable to the user.\n\n\n if (anchorInline && !schema.isVoid(anchorInline) && anchor.offset == anchorText.text.length) {\n var block = document.getClosestBlock(anchor.key);\n var next = block.getNextText(anchor.key);\n if (next) range = range.moveAnchorTo(next.key, 0);\n }\n\n if (focusInline && !schema.isVoid(focusInline) && focus.offset == focusText.text.length) {\n var _block = document.getClosestBlock(focus.key);\n\n var _next = _block.getNextText(focus.key);\n\n if (_next) range = range.moveFocusTo(_next.key, 0);\n }\n\n var selection = document.createSelection(range);\n selection = selection.setIsFocused(true); // Preserve active marks from the current selection.\n // They will be cleared by `change.select` if the selection actually moved.\n\n selection = selection.set('marks', value.selection.marks);\n change.select(selection);\n }\n /**\n * Render editor.\n *\n * @param {Object} props\n * @param {Editor} editor\n * @return {Object}\n */\n\n\n function renderEditor(props, editor) {\n var handlers = editor.handlers;\n return React.createElement(Content, _extends({}, handlers, {\n autoCorrect: props.autoCorrect,\n className: props.className,\n editor: editor,\n readOnly: props.readOnly,\n role: props.role,\n spellCheck: props.spellCheck,\n style: props.style,\n tabIndex: props.tabIndex,\n tagName: props.tagName\n }));\n }\n /**\n * Render node.\n *\n * @param {Object} props\n * @return {Element}\n */\n\n\n function renderNode(props) {\n var attributes = props.attributes,\n children = props.children,\n node = props.node;\n if (node.object != 'block' && node.object != 'inline') return;\n var Tag = node.object == 'block' ? 'div' : 'span';\n var style = {\n position: 'relative'\n };\n return React.createElement(Tag, _extends({}, attributes, {\n style: style\n }), children);\n }\n /**\n * Render placeholder.\n *\n * @param {Object} props\n * @return {Element}\n */\n\n\n function renderPlaceholder(props) {\n var editor = props.editor,\n node = props.node;\n if (!editor.props.placeholder) return;\n if (editor.state.isComposing) return;\n if (node.object != 'block') return;\n if (!Text.isTextList(node.nodes)) return;\n if (node.text != '') return;\n if (editor.value.document.getBlocks().size > 1) return;\n var style = {\n pointerEvents: 'none',\n display: 'inline-block',\n width: '0',\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n opacity: '0.333'\n };\n return React.createElement('span', {\n contentEditable: false,\n style: style\n }, editor.props.placeholder);\n }\n /**\n * Return the plugin.\n *\n * @type {Object}\n */\n\n\n return {\n onBeforeInput: onBeforeInput,\n onBlur: onBlur,\n onClick: onClick,\n onCopy: onCopy,\n onCut: onCut,\n onDragEnd: onDragEnd,\n onDragOver: onDragOver,\n onDragStart: onDragStart,\n onDrop: onDrop,\n onInput: onInput,\n onKeyDown: onKeyDown,\n onPaste: onPaste,\n onSelect: onSelect,\n renderEditor: renderEditor,\n renderNode: renderNode,\n renderPlaceholder: renderPlaceholder\n };\n}\n/**\n * Debug.\n *\n * @type {Function}\n */\n\n\nvar debug$6 = Debug('slate:before');\n/**\n * The core before plugin.\n *\n * @return {Object}\n */\n\nfunction BeforePlugin() {\n var activeElement = null;\n var compositionCount = 0;\n var isComposing = false;\n var isCopying = false;\n var isDragging = false;\n /**\n * On before input.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n function onBeforeInput(event, change, editor) {\n if (editor.props.readOnly) return true;\n var isSynthetic = !!event.nativeEvent; // COMPAT: If the browser supports Input Events Level 2, we will have\n // attached a custom handler for the real `beforeinput` events, instead of\n // allowing React's synthetic polyfill, so we need to ignore synthetics.\n\n if (isSynthetic && HAS_INPUT_EVENTS_LEVEL_2) return true;\n debug$6('onBeforeInput', {\n event: event\n });\n }\n /**\n * On blur.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onBlur(event, change, editor) {\n if (isCopying) return true;\n if (editor.props.readOnly) return true;\n var value = change.value;\n var schema = value.schema;\n var relatedTarget = event.relatedTarget,\n target = event.target;\n var window = getWindow(target); // COMPAT: If the current `activeElement` is still the previous one, this is\n // due to the window being blurred when the tab itself becomes unfocused, so\n // we want to abort early to allow to editor to stay focused when the tab\n // becomes focused again.\n\n if (activeElement == window.document.activeElement) return true; // COMPAT: The `relatedTarget` can be null when the new focus target is not\n // a \"focusable\" element (eg. a `
` without `tabindex` set).\n\n if (relatedTarget) {\n var el = findDOMNode(editor); // COMPAT: The event should be ignored if the focus is returning to the\n // editor from an embedded editable element (eg. an element inside\n // a void node).\n\n if (relatedTarget == el) return true; // COMPAT: The event should be ignored if the focus is moving from the\n // editor to inside a void node's spacer element.\n\n if (relatedTarget.hasAttribute('data-slate-spacer')) return true; // COMPAT: The event should be ignored if the focus is moving to a non-\n // editable section of an element that isn't a void node (eg. a list item\n // of the check list example).\n\n var node = findNode(relatedTarget, value);\n if (el.contains(relatedTarget) && node && !schema.isVoid(node)) return true;\n }\n\n debug$6('onBlur', {\n event: event\n });\n }\n /**\n * On change.\n *\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onChange(change, editor) {\n var value = change.value; // If the value's schema isn't the editor's schema, update it. This can\n // happen on the initialization of the editor, or if the schema changes.\n // This change isn't save into history since only schema is updated.\n\n if (value.schema != editor.schema) {\n change.withoutSaving(function () {\n change.setValue({\n schema: editor.schema\n }).normalize();\n });\n }\n\n debug$6('onChange');\n }\n /**\n * On composition end.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onCompositionEnd(event, change, editor) {\n var n = compositionCount; // The `count` check here ensures that if another composition starts\n // before the timeout has closed out this one, we will abort unsetting the\n // `isComposing` flag, since a composition is still in affect.\n\n window.requestAnimationFrame(function () {\n if (compositionCount > n) return;\n isComposing = false; // HACK: we need to re-render the editor here so that it will update its\n // placeholder in case one is currently rendered. This should be handled\n // differently ideally, in a less invasive way?\n // (apply force re-render if isComposing changes)\n\n if (editor.state.isComposing) {\n editor.setState({\n isComposing: false\n });\n }\n });\n debug$6('onCompositionEnd', {\n event: event\n });\n }\n /**\n * On composition start.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onCompositionStart(event, change, editor) {\n isComposing = true;\n compositionCount++; // HACK: we need to re-render the editor here so that it will update its\n // placeholder in case one is currently rendered. This should be handled\n // differently ideally, in a less invasive way?\n // (apply force re-render if isComposing changes)\n\n if (!editor.state.isComposing) {\n editor.setState({\n isComposing: true\n });\n }\n\n debug$6('onCompositionStart', {\n event: event\n });\n }\n /**\n * On copy.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onCopy(event, change, editor) {\n var window = getWindow(event.target);\n isCopying = true;\n window.requestAnimationFrame(function () {\n return isCopying = false;\n });\n debug$6('onCopy', {\n event: event\n });\n }\n /**\n * On cut.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onCut(event, change, editor) {\n if (editor.props.readOnly) return true;\n var window = getWindow(event.target);\n isCopying = true;\n window.requestAnimationFrame(function () {\n return isCopying = false;\n });\n debug$6('onCut', {\n event: event\n });\n }\n /**\n * On drag end.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onDragEnd(event, change, editor) {\n isDragging = false;\n debug$6('onDragEnd', {\n event: event\n });\n }\n /**\n * On drag enter.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onDragEnter(event, change, editor) {\n debug$6('onDragEnter', {\n event: event\n });\n }\n /**\n * On drag exit.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onDragExit(event, change, editor) {\n debug$6('onDragExit', {\n event: event\n });\n }\n /**\n * On drag leave.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onDragLeave(event, change, editor) {\n debug$6('onDragLeave', {\n event: event\n });\n }\n /**\n * On drag over.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onDragOver(event, change, editor) {\n // If the target is inside a void node, and only in this case,\n // call `preventDefault` to signal that drops are allowed.\n // When the target is editable, dropping is already allowed by\n // default, and calling `preventDefault` hides the cursor.\n var value = editor.value;\n var schema = value.schema;\n var node = findNode(event.target, editor.value);\n if (schema.isVoid(node)) event.preventDefault(); // COMPAT: IE won't call onDrop on contentEditables unless the\n // default dragOver is prevented:\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/913982/\n // (2018/07/11)\n\n if (IS_IE) event.preventDefault(); // If a drag is already in progress, don't do this again.\n\n if (!isDragging) {\n isDragging = true; // COMPAT: IE will raise an `unspecified error` if dropEffect is\n // set. (2018/07/11)\n\n if (!IS_IE) {\n event.nativeEvent.dataTransfer.dropEffect = 'move';\n }\n }\n\n debug$6('onDragOver', {\n event: event\n });\n }\n /**\n * On drag start.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onDragStart(event, change, editor) {\n isDragging = true;\n debug$6('onDragStart', {\n event: event\n });\n }\n /**\n * On drop.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onDrop(event, change, editor) {\n // Nothing happens in read-only mode.\n if (editor.props.readOnly) return true; // Prevent default so the DOM's value isn't corrupted.\n\n event.preventDefault();\n debug$6('onDrop', {\n event: event\n });\n }\n /**\n * On focus.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onFocus(event, change, editor) {\n if (isCopying) return true;\n if (editor.props.readOnly) return true;\n var el = findDOMNode(editor); // Save the new `activeElement`.\n\n var window = getWindow(event.target);\n activeElement = window.document.activeElement; // COMPAT: If the editor has nested editable elements, the focus can go to\n // those elements. In Firefox, this must be prevented because it results in\n // issues with keyboard navigation. (2017/03/30)\n\n if (IS_FIREFOX && event.target != el) {\n el.focus();\n return true;\n }\n\n debug$6('onFocus', {\n event: event\n });\n }\n /**\n * On input.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onInput(event, change, editor) {\n if (isComposing) return true;\n if (change.value.selection.isBlurred) return true;\n debug$6('onInput', {\n event: event\n });\n }\n /**\n * On key down.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onKeyDown(event, change, editor) {\n if (editor.props.readOnly) return true; // When composing, we need to prevent all hotkeys from executing while\n // typing. However, certain characters also move the selection before\n // we're able to handle it, so prevent their default behavior.\n\n if (isComposing) {\n if (Hotkeys.isCompose(event)) event.preventDefault();\n return true;\n } // Certain hotkeys have native editing behaviors in `contenteditable`\n // elements which will change the DOM and cause our value to be out of sync,\n // so they need to always be prevented.\n\n\n if (!IS_IOS && (Hotkeys.isBold(event) || Hotkeys.isDeleteBackward(event) || Hotkeys.isDeleteForward(event) || Hotkeys.isDeleteLineBackward(event) || Hotkeys.isDeleteLineForward(event) || Hotkeys.isDeleteWordBackward(event) || Hotkeys.isDeleteWordForward(event) || Hotkeys.isItalic(event) || Hotkeys.isRedo(event) || Hotkeys.isSplitBlock(event) || Hotkeys.isTransposeCharacter(event) || Hotkeys.isUndo(event))) {\n event.preventDefault();\n }\n\n debug$6('onKeyDown', {\n event: event\n });\n }\n /**\n * On paste.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onPaste(event, change, editor) {\n if (editor.props.readOnly) return true; // Prevent defaults so the DOM state isn't corrupted.\n\n event.preventDefault();\n debug$6('onPaste', {\n event: event\n });\n }\n /**\n * On select.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Editor} editor\n */\n\n\n function onSelect(event, change, editor) {\n if (isCopying) return true;\n if (isComposing) return true;\n if (editor.props.readOnly) return true; // Save the new `activeElement`.\n\n var window = getWindow(event.target);\n activeElement = window.document.activeElement;\n debug$6('onSelect', {\n event: event\n });\n }\n /**\n * Return the plugin.\n *\n * @type {Object}\n */\n\n\n return {\n onBeforeInput: onBeforeInput,\n onBlur: onBlur,\n onChange: onChange,\n onCompositionEnd: onCompositionEnd,\n onCompositionStart: onCompositionStart,\n onCopy: onCopy,\n onCut: onCut,\n onDragEnd: onDragEnd,\n onDragEnter: onDragEnter,\n onDragExit: onDragExit,\n onDragLeave: onDragLeave,\n onDragOver: onDragOver,\n onDragStart: onDragStart,\n onDrop: onDrop,\n onFocus: onFocus,\n onInput: onInput,\n onKeyDown: onKeyDown,\n onPaste: onPaste,\n onSelect: onSelect\n };\n}\n/**\n * Noop.\n *\n * @return {Void}\n */\n\n\nfunction noop() {}\n/**\n * Debug.\n *\n * @type {Function}\n */\n\n\nvar debug$7 = Debug('slate:editor');\n/**\n * Editor.\n *\n * @type {Component}\n */\n\nvar Editor = function (_React$Component) {\n inherits(Editor, _React$Component);\n\n function Editor() {\n var _ref;\n\n var _temp, _this, _ret;\n\n classCallCheck(this, Editor);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = Editor.__proto__ || Object.getPrototypeOf(Editor)).call.apply(_ref, [this].concat(args))), _this), _initialiseProps$4.call(_this), _temp), possibleConstructorReturn(_this, _ret);\n }\n /**\n * Property types.\n *\n * @type {Object}\n */\n\n /**\n * Default properties.\n *\n * @type {Object}\n */\n\n /**\n * Initial state.\n *\n * @type {Object}\n */\n\n /**\n * Temporary values.\n *\n * @type {Object}\n */\n\n /**\n * Create a set of bound event handlers.\n *\n * @type {Object}\n */\n\n\n createClass(Editor, [{\n key: 'componentDidMount',\n\n /**\n * When the component first mounts, flush any temporary changes, and then,\n * focus the editor if `autoFocus` is set.\n */\n value: function componentDidMount() {\n this.tmp.updates++;\n var autoFocus = this.props.autoFocus;\n var change = this.tmp.change;\n\n if (autoFocus) {\n if (change) {\n change.focus();\n } else {\n this.focus();\n }\n }\n\n if (change) {\n this.onChange(change);\n }\n }\n /**\n * When the component updates, flush any temporary change.\n */\n\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps) {\n this.tmp.updates++;\n var _tmp = this.tmp,\n change = _tmp.change,\n resolves = _tmp.resolves,\n updates = _tmp.updates; // If we've resolved a few times already, and it's exactly in line with\n // the updates, then warn the user that they may be doing something wrong.\n\n warning(resolves < 5 || resolves !== updates, 'A Slate component is re-resolving `props.plugins` or `props.schema` on each update, which leads to poor performance. This is often due to passing in a new `schema` or `plugins` prop with each render by declaring them inline in your render function. Do not do this!');\n\n if (change) {\n this.onChange(change);\n }\n }\n /**\n * Render the editor.\n *\n * @return {Element}\n */\n\n }, {\n key: 'render',\n value: function render() {\n debug$7('render', this);\n\n var props = _extends({}, this.props);\n\n var tree = this.stack.render('renderEditor', props, this);\n return tree;\n }\n /**\n * Get the editor's current plugins.\n *\n * @return {Array}\n */\n\n }, {\n key: 'plugins',\n get: function get$$1() {\n var plugins = this.resolvePlugins(this.props.plugins, this.props.schema);\n return plugins;\n }\n /**\n * Get the editor's current schema.\n *\n * @return {Schema}\n */\n\n }, {\n key: 'schema',\n get: function get$$1() {\n var schema = this.resolveSchema(this.plugins);\n return schema;\n }\n /**\n * Get the editor's current stack.\n *\n * @return {Stack}\n */\n\n }, {\n key: 'stack',\n get: function get$$1() {\n var stack = this.resolveStack(this.plugins);\n return stack;\n }\n /**\n * Get the editor's current value.\n *\n * @return {Value}\n */\n\n }, {\n key: 'value',\n get: function get$$1() {\n // If the current `plugins` and `value` are the same as the last seen ones\n // that were saved in `tmp`, don't re-resolve because that will trigger\n // extra `onChange` runs.\n if (this.plugins === this.tmp.plugins && this.props.value === this.tmp.value) {\n return this.tmp.value;\n }\n\n var value = this.resolveValue(this.plugins, this.props.value);\n return value;\n }\n /**\n * Perform a change on the editor, passing `...args` to `change.call`.\n *\n * @param {Mixed} ...args\n */\n\n /**\n * Programmatically blur the editor.\n */\n\n /**\n * Programmatically focus the editor.\n */\n\n /**\n * On change.\n *\n * @param {Change} change\n */\n\n /**\n * On event.\n *\n * @param {String} handler\n * @param {Event} event\n */\n\n /**\n * Resolve a change from the current `plugins`, a potential `change` and its\n * current operations `size`.\n *\n * @param {Array} plugins\n * @param {Change} change\n * @param {Number} size\n */\n\n /**\n * Resolve a set of plugins from potential `plugins` and a `schema`.\n *\n * In addition to the plugins provided in props, this will initialize three\n * other plugins:\n *\n * - The top-level editor plugin, which allows for top-level handlers, etc.\n * - The two \"core\" plugins, one before all the other and one after.\n *\n * @param {Array|Void} plugins\n * @param {Schema|Object|Void} schema\n * @return {Array}\n */\n\n /**\n * Resolve a schema from the current `plugins`.\n *\n * @param {Array} plugins\n * @return {Schema}\n */\n\n /**\n * Resolve a stack from the current `plugins`.\n *\n * @param {Array} plugins\n * @return {Stack}\n */\n\n /**\n * Resolve a value from the current `plugins` and a potential `value`.\n *\n * @param {Array} plugins\n * @param {Value} value\n * @return {Change}\n */\n\n }]);\n return Editor;\n}(React.Component);\n/**\n * Mix in the prop types for the event handlers.\n */\n\n\nEditor.propTypes = {\n autoCorrect: Types.bool,\n autoFocus: Types.bool,\n className: Types.string,\n onChange: Types.func,\n placeholder: Types.any,\n plugins: Types.array,\n readOnly: Types.bool,\n role: Types.string,\n schema: Types.object,\n spellCheck: Types.bool,\n style: Types.object,\n tabIndex: Types.number,\n value: SlateTypes.value.isRequired\n};\nEditor.defaultProps = {\n autoFocus: false,\n autoCorrect: true,\n onChange: noop,\n plugins: [],\n readOnly: false,\n schema: {},\n spellCheck: true\n};\n\nvar _initialiseProps$4 = function _initialiseProps() {\n var _this2 = this;\n\n this.state = {};\n this.tmp = {\n change: null,\n isChanging: false,\n operationsSize: null,\n plugins: null,\n resolves: 0,\n updates: 0,\n value: null\n };\n this.handlers = EVENT_HANDLERS.reduce(function (obj, handler) {\n obj[handler] = function (event) {\n return _this2.onEvent(handler, event);\n };\n\n return obj;\n }, {});\n\n this.change = function () {\n if (_this2.tmp.isChanging) {\n warning(false, \"The `editor.change` method was called from within an existing `editor.change` callback. This is not allowed, and often due to calling `editor.change` directly from a plugin's event handler which is unnecessary.\");\n return;\n }\n\n var change = _this2.value.change();\n\n try {\n _this2.tmp.isChanging = true;\n change.call.apply(change, arguments);\n } catch (error) {\n throw error;\n } finally {\n _this2.tmp.isChanging = false;\n }\n\n _this2.onChange(change);\n };\n\n this.blur = function () {\n _this2.change(function (c) {\n return c.blur();\n });\n };\n\n this.focus = function () {\n _this2.change(function (c) {\n return c.focus();\n });\n };\n\n this.onChange = function (change) {\n // If the change doesn't define any operations to apply, abort.\n if (change.operations.size === 0) {\n return;\n }\n\n debug$7('onChange', {\n change: change\n });\n change = _this2.resolveChange(_this2.plugins, change, change.operations.size); // Store a reference to the last `value` and `plugins` that were seen by the\n // editor, so we can know whether to normalize a new unknown value if one\n // is passed in via `this.props`.\n\n _this2.tmp.value = change.value;\n _this2.tmp.plugins = _this2.plugins; // Remove the temporary `change`, since it's being flushed.\n\n delete _this2.tmp.change;\n delete _this2.tmp.operationsSize;\n\n _this2.props.onChange(change);\n };\n\n this.onEvent = function (handler, event) {\n _this2.change(function (change) {\n _this2.stack.run(handler, event, change, _this2);\n });\n };\n\n this.resolveChange = memoizeOne(function (plugins, change, size) {\n var stack = _this2.resolveStack(plugins);\n\n stack.run('onChange', change, _this2);\n return change;\n });\n this.resolvePlugins = memoizeOne(function () {\n var plugins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var schema = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n debug$7('resolvePlugins', {\n plugins: plugins,\n schema: schema\n });\n _this2.tmp.resolves++;\n var beforePlugin = BeforePlugin();\n var afterPlugin = AfterPlugin();\n var editorPlugin = {\n schema: schema\n };\n\n var _loop = function _loop(_prop) {\n // Skip `onChange` because the editor's `onChange` is special.\n if (_prop == 'onChange') return 'continue'; // Skip `schema` because it can't be proxied easily, so it must be passed\n // in as an argument to this function instead.\n\n if (_prop == 'schema') return 'continue'; // Define a function that will just proxies into `props`.\n\n editorPlugin[_prop] = function () {\n var _props;\n\n return _this2.props[_prop] && (_props = _this2.props)[_prop].apply(_props, arguments);\n };\n };\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = PLUGIN_PROPS[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _prop = _step2.value;\n\n var _ret2 = _loop(_prop);\n\n if (_ret2 === 'continue') continue;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return [beforePlugin, editorPlugin].concat(toConsumableArray(plugins), [afterPlugin]);\n });\n this.resolveSchema = memoizeOne(function (plugins) {\n debug$7('resolveSchema', {\n plugins: plugins\n });\n var schema = Schema.create({\n plugins: plugins\n });\n return schema;\n });\n this.resolveStack = memoizeOne(function (plugins) {\n debug$7('resolveStack', {\n plugins: plugins\n });\n var stack = Stack.create({\n plugins: plugins\n });\n return stack;\n });\n this.resolveValue = memoizeOne(function (plugins, value) {\n debug$7('resolveValue', {\n plugins: plugins,\n value: value\n });\n var change = value.change();\n change = _this2.resolveChange(plugins, change, change.operations.size); // Store the change and it's operations count so that it can be flushed once\n // the component next updates.\n\n _this2.tmp.change = change;\n _this2.tmp.operationsSize = change.operations.size;\n return change.value;\n });\n};\n\nvar _iteratorNormalCompletion = true;\nvar _didIteratorError = false;\nvar _iteratorError = undefined;\n\ntry {\n for (var _iterator = EVENT_HANDLERS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prop = _step.value;\n Editor.propTypes[prop] = Types.func;\n }\n /**\n * Export.\n *\n * @type {Component}\n */\n\n} catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n} finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n}\n\nvar index = {\n Editor: Editor,\n cloneFragment: cloneFragment,\n findDOMNode: findDOMNode$1,\n findDOMRange: findDOMRange,\n findNode: findNode,\n findRange: findRange,\n getEventRange: getEventRange,\n getEventTransfer: getEventTransfer,\n setEventTransfer: setEventTransfer,\n AfterPlugin: AfterPlugin,\n BeforePlugin: BeforePlugin\n};\nexport default index;\nexport { Editor, cloneFragment, findDOMNode$1 as findDOMNode, findDOMRange, findNode, findRange, getEventRange, getEventTransfer, setEventTransfer, AfterPlugin, BeforePlugin };","import memoize from '@emotion/memoize';\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|default|defer|dir|disabled|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|itemProp|itemScope|itemType|itemID|itemRef|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class)|(on[A-Z].*)|((data|aria|x)-.*))$/i;\nvar index = memoize(reactPropsRegex.test.bind(reactPropsRegex));\nexport default index;","import PropTypes from 'prop-types';\nimport isPropValid from '@emotion/is-prop-valid';\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar channel = '__EMOTION_THEMING__'; // https://github.com/styled-components/styled-components/blob/e05b3fe247e9d956bcde786cec376e32afb85bca/src/utils/create-broadcast.js\n\nvar _contextTypes;\n\nvar contextTypes = (_contextTypes = {}, _contextTypes[channel] = PropTypes.object, _contextTypes);\n\nfunction setTheme(theme) {\n this.setState({\n theme: theme\n });\n}\n\nvar testPickPropsOnStringTag = isPropValid;\n\nvar testPickPropsOnComponent = function testPickPropsOnComponent(key) {\n return key !== 'theme' && key !== 'innerRef';\n};\n\nvar testAlwaysTrue = function testAlwaysTrue() {\n return true;\n};\n\nvar pickAssign = function pickAssign(testFn, target) {\n var i = 2;\n var length = arguments.length;\n\n for (; i < length; i++) {\n var source = arguments[i];\n\n var _key = void 0;\n\n for (_key in source) {\n if (testFn(_key)) {\n target[_key] = source[_key];\n }\n }\n }\n\n return target;\n};\n\nvar warnedAboutExtractStatic = false;\n\nfunction createEmotionStyled(emotion, view) {\n var _createStyled = function createStyled(tag, options) {\n if (process.env.NODE_ENV !== 'production') {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var staticClassName;\n var identifierName;\n var stableClassName;\n var shouldForwardProp;\n\n if (options !== undefined) {\n staticClassName = options.e;\n identifierName = options.label;\n stableClassName = options.target;\n shouldForwardProp = tag.__emotion_forwardProp && options.shouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && // $FlowFixMe\n options.shouldForwardProp(propName);\n } : options.shouldForwardProp;\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = staticClassName === undefined ? isReal && tag.__emotion_base || tag : tag;\n\n if (typeof shouldForwardProp !== 'function') {\n shouldForwardProp = typeof baseTag === 'string' && baseTag.charAt(0) === baseTag.charAt(0).toLowerCase() ? testPickPropsOnStringTag : testPickPropsOnComponent;\n }\n\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (staticClassName === undefined) {\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n styles.push(args[i], args[0][i]);\n }\n }\n } else if (process.env.NODE_ENV !== 'production' && !warnedAboutExtractStatic) {\n console.warn('extractStatic is deprecated and will be removed in emotion@10. We recommend disabling extractStatic or using other libraries like linaria or css-literal-loader');\n warnedAboutExtractStatic = true;\n }\n\n var Styled = /*#__PURE__*/function (_view$Component) {\n _inheritsLoose(Styled, _view$Component);\n\n function Styled() {\n return _view$Component.apply(this, arguments) || this;\n }\n\n var _proto = Styled.prototype;\n\n _proto.componentWillMount = function componentWillMount() {\n if (this.context[channel] !== undefined) {\n this.unsubscribe = this.context[channel].subscribe(setTheme.bind(this));\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.unsubscribe !== undefined) {\n this.context[channel].unsubscribe(this.unsubscribe);\n }\n };\n\n _proto.render = function render() {\n var props = this.props,\n state = this.state;\n this.mergedProps = pickAssign(testAlwaysTrue, {}, props, {\n theme: state !== null && state.theme || props.theme || {}\n });\n var className = '';\n var classInterpolations = [];\n\n if (props.className) {\n if (staticClassName === undefined) {\n className += emotion.getRegisteredStyles(classInterpolations, props.className);\n } else {\n className += props.className + \" \";\n }\n }\n\n if (staticClassName === undefined) {\n className += emotion.css.apply(this, styles.concat(classInterpolations));\n } else {\n className += staticClassName;\n }\n\n if (stableClassName !== undefined) {\n className += \" \" + stableClassName;\n }\n\n return view.createElement(baseTag, // $FlowFixMe\n pickAssign(shouldForwardProp, {}, props, {\n className: className,\n ref: props.innerRef\n }));\n };\n\n return Styled;\n }(view.Component);\n\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n\n if (tag.defaultProps !== undefined) {\n // $FlowFixMe\n Styled.defaultProps = tag.defaultProps;\n }\n\n Styled.contextTypes = contextTypes;\n Styled.__emotion_styles = styles;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_real = Styled;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (process.env.NODE_ENV !== 'production' && stableClassName === undefined) {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe\n\n\n return \".\" + stableClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return _createStyled(nextTag, nextOptions !== undefined ? // $FlowFixMe\n pickAssign(testAlwaysTrue, {}, options, nextOptions) : options).apply(void 0, styles);\n };\n\n return Styled;\n };\n };\n\n if (process.env.NODE_ENV !== 'production' && typeof Proxy !== 'undefined') {\n _createStyled = new Proxy(_createStyled, {\n get: function get(target, property) {\n switch (property) {\n // react-hot-loader tries to access this stuff\n case '__proto__':\n case 'name':\n case 'prototype':\n case 'displayName':\n {\n return target[property];\n }\n\n default:\n {\n throw new Error(\"You're trying to use the styled shorthand without babel-plugin-emotion.\" + (\"\\nPlease install and setup babel-plugin-emotion or use the function call syntax(`styled('\" + property + \"')` instead of `styled.\" + property + \"`)\"));\n }\n }\n }\n });\n }\n\n return _createStyled;\n}\n\nexport default createEmotionStyled;","import React from 'react';\nimport * as emotion from 'emotion';\nexport * from 'emotion';\nimport createEmotionStyled from 'create-emotion-styled';\nvar index = createEmotionStyled(emotion, React);\nexport default index;","import React from 'react'\nimport styled from 'react-emotion'\n\nexport const Button = styled('span')`\n cursor: pointer;\n color: ${props =>\n props.reversed\n ? props.active ? 'white' : '#aaa'\n : props.active ? 'rgba(0,0,0,0.6)' : 'rgba(0,0,0,0.3)'};\n`\n\nexport const Icon = styled(({ className, ...rest }) => {\n return \n})`\n font-size: 18px;\n vertical-align: text-bottom;\n`\n\nexport const Menu = styled('div')`\n & > * {\n display: inline-block;\n }\n & > * + * {\n margin-left: 15px;\n }\n`\n\nexport const Toolbar = styled(Menu)`\n position: relative;\n padding: 0px 5px 10px;\n border-bottom: 1px solid rgba(0,0,0,0.2);\n margin-bottom: 20px;\n`\n","import React from 'react'\nimport styled from 'react-emotion'\n\nconst StyledHover = styled('div')`\n position: absolute;\n z-index: 1;\n top: -100000px;\n left: -100000px;\n opacity: 0;\n transition: opacity 0.75s;\n`\n\nclass HoverLink extends React.Component {\n render() {\n const { className, innerRef } = this.props\n //const root = $(innerRef).closest('.block');\n\n return (\n \n Test Link Hover\n \n )\n }\n}\n\nexport default function LinkHover(options) {\n const linkHoverState = new LinkHoverState(options);\n return {\n renderEditor: linkHoverState.renderEditor,\n onChange: linkHoverState.onChange\n }\n}\n\nclass LinkHoverState {\n constructor(options) {\n this.options = options\n this.currentLink = null\n\n this.renderEditor = this.renderEditor.bind(this)\n this.onChange = this.onChange.bind(this)\n }\n\n renderEditor(props, editor) { // renderEditor signature changes in v 0.19/0.42\n //console.log(next)\n const children = props.children\n\n return (\n \n {children}\n (this.linkHover = linkHover)} editor={editor} />\n \n )\n }\n\n onChange({ value }) {\n const link = value.inlines.find(inline => inline.type == 'link')\n\n this.updateLinkHover(this.linkHover, link, value)\n }\n\n updateLinkHover (linkHover, link, value) {\n if (!linkHover) return\n\n if (link && value) {\n const { fragment, selection } = value\n this.currentLink = link\n\n const href = link.data.get('href')\n const anchorTag = linkHover.firstElementChild\n anchorTag.innerHTML = href\n anchorTag.setAttribute('href', href)\n\n const native = window.getSelection()\n const range = native.getRangeAt(0)\n const rect = range.getBoundingClientRect()\n const container = range.commonAncestorContainer\n const block = XHR(container).closest('.block')[ 0 ]\n const blockRect = block.getBoundingClientRect()\n linkHover.style.opacity = 1\n linkHover.style.top = `${rect.bottom - blockRect.top + 10}px`\n\n linkHover.style.left = `${rect.left - blockRect.left +\n rect.width / 2}px`\n } else {\n this.currentLink = null\n linkHover.style.top = `-100000px`\n linkHover.style.left = `-100000px`\n linkHover.style.opacity = 0\n }\n\n }\n}\n","import { Editor } from 'slate-react'\nimport { Value } from 'slate'\n\nimport React from 'react'\nimport { isKeyHotkey } from 'is-hotkey'\nimport isUrl from 'is-url'\nimport { Button, Icon, Toolbar } from './components'\n\nconst AjaxAPI = window.AjaxAPI;\n\n// plugins\nimport WordCount from './plugins/word_count'\nimport LinkHover from './plugins/link_hover'\nconst plugins = [\n\n]\n\n/**\n * Define the default node type.\n *\n * @type {String}\n */\n\nconst DEFAULT_NODE = 'paragraph'\n\n/**\n * Define hotkey matchers.\n *\n * @type {Function}\n */\n\nconst isBoldHotkey = isKeyHotkey('mod+b')\nconst isItalicHotkey = isKeyHotkey('mod+i')\nconst isUnderlinedHotkey = isKeyHotkey('mod+u')\nconst isCodeHotkey = isKeyHotkey('mod+`')\n\n/**\n * A change helper to standardize wrapping links.\n *\n * @param {Change} change\n * @param {String} href\n */\n\nfunction wrapLink(change, href) {\n change.wrapInline({\n type: 'link',\n data: { href },\n })\n\n change.moveToEnd()\n}\n\n/**\n * A change helper to standardize unwrapping links.\n *\n * @param {Change} change\n */\n\nfunction unwrapLink(change) {\n change.unwrapInline('link')\n}\n\n// fastest method for deep clone of pure json objects.\n// (slice() is shallow clone.)\nconst clone = (obj) => {\n return JSON.parse(JSON.stringify(obj));\n};\n\n/**\n * The rich text example.\n *\n * @type {Component}\n */\n\nclass RichEditor extends React.Component {\n constructor(props) {\n super(props)\n\n this.block = this.props.block\n this.update = this.props.update\n this.plugins = [LinkHover()]\n\n if (!this.block.data) {\n this.block.data = []\n this.block.data.push({})\n }\n\n this.state = { value: this.props.initialValue }\n\n //this.ref = React.createRef()\n }\n\n /**\n * Store a reference to the `editor`.\n *\n * @param {Editor} editor\n */\n\n ref = editor => {\n this.editor = editor\n }\n\n /**\n * Check if the current selection has a mark with `type` in it.\n *\n * @param {String} type\n * @return {Boolean}\n */\n\n hasMark = type => {\n const { value } = this.state\n return value.activeMarks.some(mark => mark.type == type)\n }\n\n hasLinks = () => {\n const { value } = this.state\n return value.inlines.some(inline => inline.type == 'link')\n }\n\n /**\n * Check if the any of the currently selected blocks are of `type`.\n *\n * @param {String} type\n * @return {Boolean}\n */\n\n hasBlock = type => {\n const { value } = this.state\n return value.blocks.some(node => node.type == type)\n }\n\n /**\n * Render.\n *\n * @return {Element}\n */\n\n render() {\n return (\n
\n {this.props.edit ?\n \n {this.renderMarkButton('bold', 'format_bold')}\n {this.renderMarkButton('italic', 'format_italic')}\n {this.renderMarkButton('underlined', 'format_underlined')}\n {this.renderMarkButton('code', 'code')}\n {this.renderLinkButton('link', 'link')}\n {this.renderBlockButton('heading-one', 'looks_one')}\n {this.renderBlockButton('heading-two', 'looks_two')}\n {this.renderBlockButton('heading-three', 'looks_3')}\n {this.renderBlockButton('block-quote', 'format_quote')}\n {this.renderBlockButton('numbered-list', 'format_list_numbered')}\n {this.renderBlockButton('bulleted-list', 'format_list_bulleted')}\n \n : null }\n \n
\n )\n }\n\n /**\n * Render a link-toggling toolbar button.\n *\n * @param {String} type\n * @param {String} icon\n * @return {Element}\n */\n renderLinkButton = (type, icon) => {\n const isActive = this.hasLinks()\n\n return (\n \n {icon}\n \n )\n }\n\n /**\n * Render a mark-toggling toolbar button.\n *\n * @param {String} type\n * @param {String} icon\n * @return {Element}\n */\n\n renderMarkButton = (type, icon) => {\n const isActive = this.hasMark(type)\n\n return (\n this.onClickMark(event, type)}\n >\n {icon}\n \n )\n }\n\n /**\n * Render a block-toggling toolbar button.\n *\n * @param {String} type\n * @param {String} icon\n * @return {Element}\n */\n\n renderBlockButton = (type, icon) => {\n let isActive = this.hasBlock(type)\n\n if (['numbered-list', 'bulleted-list'].includes(type)) {\n const { value } = this.state\n const parent = value.document.getParent(value.blocks.first().key)\n isActive = this.hasBlock('list-item') && parent && parent.type === type\n }\n\n return (\n this.onClickBlock(event, type)}\n >\n {icon}\n \n )\n }\n\n /**\n * Render a Slate node.\n *\n * @param {Object} props\n * @return {Element}\n */\n\n renderNode = props => {\n const { attributes, children, node, edit } = props\n\n switch (node.type) {\n case 'block-quote':\n return
{children}
\n case 'bulleted-list':\n return
    {children}
\n case 'heading-one':\n return

{children}

\n case 'heading-two':\n return

{children}

\n case 'heading-three':\n return

{children}

\n case 'list-item':\n return
  • {children}
  • \n case 'numbered-list':\n return
      {children}
    \n case 'link': {\n const { data } = node\n const href = data.get('href')\n if (edit) {\n return (\n \n {children}\n \n )\n } else {\n return (\n \n {children}\n \n )\n }\n }\n }\n }\n\n /**\n * Render a Slate mark.\n *\n * @param {Object} props\n * @return {Element}\n */\n\n renderMark = props => {\n const { children, mark, attributes } = props\n\n switch (mark.type) {\n case 'bold':\n return {children}\n case 'code':\n return {children}\n case 'italic':\n return {children}\n case 'underlined':\n return {children}\n }\n }\n\n /**\n * On change, save the new `value`.\n *\n * @param {Change} change\n */\n\n onChange = ({ value }) => {\n if (!this.props.edit) { return; }\n\n if (value.document != this.state.value.document) {\n var block = clone(this.props.block);\n if (!block.instance.data) {\n block.instance.data = [];\n }\n\n const content = JSON.stringify(value.toJSON())\n\n const values = {\n 'block_type': 'rich_text',\n 'block_instance_id': block.instance.id,\n 'data': { 'content': content }\n };\n const section = this.props.section;\n const update = this.update;\n (new AjaxAPI).post(values, '/block_data/write', function(data){\n if (block.instance.data[0]){\n block.instance.data[0] = data.item;\n } else {\n block.instance.data.push(data.item)\n }\n update(block, 'update', section);\n });\n }\n\n this.setState({ value })\n }\n\n /**\n * On key down, if it's a formatting command toggle a mark.\n *\n * @param {Event} event\n * @param {Change} change\n * @return {Change}\n */\n\n onKeyDown = (event, change) => {\n let mark\n\n if (isBoldHotkey(event)) {\n mark = 'bold'\n } else if (isItalicHotkey(event)) {\n mark = 'italic'\n } else if (isUnderlinedHotkey(event)) {\n mark = 'underlined'\n } else if (isCodeHotkey(event)) {\n mark = 'code'\n } else {\n return\n }\n\n event.preventDefault()\n change.toggleMark(mark)\n return true\n }\n\n /**\n * When a mark button is clicked, toggle the current mark.\n *\n * @param {Event} event\n * @param {String} type\n */\n\n onClickMark = (event, type) => {\n event.preventDefault()\n const { value } = this.state\n const change = value.change().toggleMark(type)\n this.onChange(change)\n }\n\n /**\n * When a block button is clicked, toggle the block type.\n *\n * @param {Event} event\n * @param {String} type\n */\n\n onClickBlock = (event, type) => {\n event.preventDefault()\n const { value } = this.state\n const change = value.change()\n const { document } = value\n\n // Handle everything but list buttons.\n if (type != 'bulleted-list' && type != 'numbered-list') {\n const isActive = this.hasBlock(type)\n const isList = this.hasBlock('list-item')\n\n if (isList) {\n change\n .setBlocks(isActive ? DEFAULT_NODE : type)\n .unwrapBlock('bulleted-list')\n .unwrapBlock('numbered-list')\n } else {\n change.setBlocks(isActive ? DEFAULT_NODE : type)\n }\n } else {\n // Handle the extra wrapping required for list buttons.\n const isList = this.hasBlock('list-item')\n const isType = value.blocks.some(block => {\n return !!document.getClosest(block.key, parent => parent.type == type)\n })\n\n if (isList && isType) {\n change\n .setBlocks(DEFAULT_NODE)\n .unwrapBlock('bulleted-list')\n .unwrapBlock('numbered-list')\n } else if (isList) {\n change\n .unwrapBlock(\n type == 'bulleted-list' ? 'numbered-list' : 'bulleted-list'\n )\n .wrapBlock(type)\n } else {\n change.setBlocks('list-item').wrapBlock(type)\n }\n }\n\n this.onChange(change)\n }\n\n /**\n * When clicking a link, if the selection has a link in it, remove the link.\n * Otherwise, add a new link with an href and text.\n *\n * @param {Event} event\n */\n\n onClickLink = event => {\n event.preventDefault()\n\n this.editor.change(change => {\n const { value } = change\n const hasLinks = this.hasLinks()\n\n if (hasLinks) {\n change.call(unwrapLink)\n } else if (value.selection.isExpanded) {\n const href = window.prompt('Enter the URL of the link:')\n\n if (href === null) {\n return\n }\n\n change.call(wrapLink, href)\n } else {\n const href = window.prompt('Enter the URL of the link:')\n\n if (href === null) {\n return\n }\n\n const text = window.prompt('Enter the text for the link:')\n\n if (text === null) {\n return\n }\n\n change\n .insertText(text)\n .moveFocusBackward(text.length)\n .call(wrapLink, href)\n }\n })\n }\n\n /**\n * On paste, if the text is a link, wrap the selection in a link.\n *\n * @param {Event} event\n * @param {Change} change\n * @param {Function} next\n */\n/*\n onPaste = (event, change, next) => {\n if (change.value.selection.isCollapsed) return next()\n\n const transfer = getEventTransfer(event)\n const { type, text } = transfer\n if (type != 'text' && type != 'html') return next()\n if (!isUrl(text)) return next()\n\n if (this.hasLinks()) {\n change.call(unwrapLink)\n }\n\n change.call(wrapLink, text)\n }\n*/\n}\n\n/**\n * Export.\n */\n\nexport default RichEditor\n","var React = require('react');\nimport RichEditor from '../slate/rich_editor'\nimport { Value, KeyUtils } from 'slate';\n\nKeyUtils.setGenerator(function () {\n return Math.floor(Math.random() * Math.floor(4000000000)).toString();\n});\n\nconst initialValue = {\n document: {\n nodes: [\n {\n object: 'block',\n type: 'paragraph',\n nodes: [\n {\n object: 'text',\n leaves: [\n {\n text: '',\n },\n ],\n },\n ],\n },\n ],\n },\n};\n\nclass EditorBlock extends React.Component {\n constructor(props) {\n super(props);\n\n this.data = this.props.block.instance.data &&\n this.props.block.instance.data[0] &&\n this.props.block.instance.data[0].content;\n var value = JSON.parse(this.data || JSON.stringify(initialValue));\n\n this.state = {\n value: Value.fromJSON(value)\n }\n }\n\n // Render the editor.\n render() {\n return \n }\n}\n\nexport default EditorBlock;\n","import EditorBlock from '../../components/blocks/editor_block.jsx';\n\nwindow.EditorBlock = EditorBlock;\n"],"sourceRoot":""}