{"version":3,"file":"DQlOTjET.js","sources":["../../../../node_modules/lodash-es/_freeGlobal.js","../../../../node_modules/lodash-es/_root.js","../../../../node_modules/lodash-es/_Symbol.js","../../../../node_modules/lodash-es/_getRawTag.js","../../../../node_modules/lodash-es/_objectToString.js","../../../../node_modules/lodash-es/_baseGetTag.js","../../../../node_modules/lodash-es/isObjectLike.js","../../../../node_modules/lodash-es/isArray.js","../../../../node_modules/lodash-es/isObject.js","../../../../node_modules/lodash-es/identity.js","../../../../node_modules/lodash-es/isFunction.js","../../../../node_modules/lodash-es/_coreJsData.js","../../../../node_modules/lodash-es/_isMasked.js","../../../../node_modules/lodash-es/_toSource.js","../../../../node_modules/lodash-es/_baseIsNative.js","../../../../node_modules/lodash-es/_getValue.js","../../../../node_modules/lodash-es/_getNative.js","../../../../node_modules/lodash-es/_WeakMap.js","../../../../node_modules/lodash-es/_baseCreate.js","../../../../node_modules/lodash-es/_apply.js","../../../../node_modules/lodash-es/_copyArray.js","../../../../node_modules/lodash-es/_shortOut.js","../../../../node_modules/lodash-es/constant.js","../../../../node_modules/lodash-es/_defineProperty.js","../../../../node_modules/lodash-es/_baseSetToString.js","../../../../node_modules/lodash-es/_setToString.js","../../../../node_modules/lodash-es/_arrayEach.js","../../../../node_modules/lodash-es/_isIndex.js","../../../../node_modules/lodash-es/_baseAssignValue.js","../../../../node_modules/lodash-es/eq.js","../../../../node_modules/lodash-es/_assignValue.js","../../../../node_modules/lodash-es/_copyObject.js","../../../../node_modules/lodash-es/_overRest.js","../../../../node_modules/lodash-es/_baseRest.js","../../../../node_modules/lodash-es/isLength.js","../../../../node_modules/lodash-es/isArrayLike.js","../../../../node_modules/lodash-es/_isIterateeCall.js","../../../../node_modules/lodash-es/_createAssigner.js","../../../../node_modules/lodash-es/_isPrototype.js","../../../../node_modules/lodash-es/_baseTimes.js","../../../../node_modules/lodash-es/_baseIsArguments.js","../../../../node_modules/lodash-es/isArguments.js","../../../../node_modules/lodash-es/stubFalse.js","../../../../node_modules/lodash-es/isBuffer.js","../../../../node_modules/lodash-es/_baseIsTypedArray.js","../../../../node_modules/lodash-es/_baseUnary.js","../../../../node_modules/lodash-es/_nodeUtil.js","../../../../node_modules/lodash-es/isTypedArray.js","../../../../node_modules/lodash-es/_arrayLikeKeys.js","../../../../node_modules/lodash-es/_overArg.js","../../../../node_modules/lodash-es/_nativeKeys.js","../../../../node_modules/lodash-es/_baseKeys.js","../../../../node_modules/lodash-es/keys.js","../../../../node_modules/lodash-es/_nativeKeysIn.js","../../../../node_modules/lodash-es/_baseKeysIn.js","../../../../node_modules/lodash-es/keysIn.js","../../../../node_modules/lodash-es/_nativeCreate.js","../../../../node_modules/lodash-es/_hashClear.js","../../../../node_modules/lodash-es/_hashDelete.js","../../../../node_modules/lodash-es/_hashGet.js","../../../../node_modules/lodash-es/_hashHas.js","../../../../node_modules/lodash-es/_hashSet.js","../../../../node_modules/lodash-es/_Hash.js","../../../../node_modules/lodash-es/_listCacheClear.js","../../../../node_modules/lodash-es/_assocIndexOf.js","../../../../node_modules/lodash-es/_listCacheDelete.js","../../../../node_modules/lodash-es/_listCacheGet.js","../../../../node_modules/lodash-es/_listCacheHas.js","../../../../node_modules/lodash-es/_listCacheSet.js","../../../../node_modules/lodash-es/_ListCache.js","../../../../node_modules/lodash-es/_Map.js","../../../../node_modules/lodash-es/_mapCacheClear.js","../../../../node_modules/lodash-es/_isKeyable.js","../../../../node_modules/lodash-es/_getMapData.js","../../../../node_modules/lodash-es/_mapCacheDelete.js","../../../../node_modules/lodash-es/_mapCacheGet.js","../../../../node_modules/lodash-es/_mapCacheHas.js","../../../../node_modules/lodash-es/_mapCacheSet.js","../../../../node_modules/lodash-es/_MapCache.js","../../../../node_modules/lodash-es/_arrayPush.js","../../../../node_modules/lodash-es/_getPrototype.js","../../../../node_modules/lodash-es/isPlainObject.js","../../../../node_modules/lodash-es/_stackClear.js","../../../../node_modules/lodash-es/_stackDelete.js","../../../../node_modules/lodash-es/_stackGet.js","../../../../node_modules/lodash-es/_stackHas.js","../../../../node_modules/lodash-es/_stackSet.js","../../../../node_modules/lodash-es/_Stack.js","../../../../node_modules/lodash-es/_baseAssign.js","../../../../node_modules/lodash-es/_baseAssignIn.js","../../../../node_modules/lodash-es/_cloneBuffer.js","../../../../node_modules/lodash-es/_arrayFilter.js","../../../../node_modules/lodash-es/stubArray.js","../../../../node_modules/lodash-es/_getSymbols.js","../../../../node_modules/lodash-es/_copySymbols.js","../../../../node_modules/lodash-es/_getSymbolsIn.js","../../../../node_modules/lodash-es/_copySymbolsIn.js","../../../../node_modules/lodash-es/_baseGetAllKeys.js","../../../../node_modules/lodash-es/_getAllKeys.js","../../../../node_modules/lodash-es/_getAllKeysIn.js","../../../../node_modules/lodash-es/_DataView.js","../../../../node_modules/lodash-es/_Promise.js","../../../../node_modules/lodash-es/_Set.js","../../../../node_modules/lodash-es/_getTag.js","../../../../node_modules/lodash-es/_initCloneArray.js","../../../../node_modules/lodash-es/_Uint8Array.js","../../../../node_modules/lodash-es/_cloneArrayBuffer.js","../../../../node_modules/lodash-es/_cloneDataView.js","../../../../node_modules/lodash-es/_cloneRegExp.js","../../../../node_modules/lodash-es/_cloneSymbol.js","../../../../node_modules/lodash-es/_cloneTypedArray.js","../../../../node_modules/lodash-es/_initCloneByTag.js","../../../../node_modules/lodash-es/_initCloneObject.js","../../../../node_modules/lodash-es/_baseIsMap.js","../../../../node_modules/lodash-es/isMap.js","../../../../node_modules/lodash-es/_baseIsSet.js","../../../../node_modules/lodash-es/isSet.js","../../../../node_modules/lodash-es/_baseClone.js","../../../../node_modules/lodash-es/cloneDeep.js","../../../../node_modules/lodash-es/_setCacheAdd.js","../../../../node_modules/lodash-es/_setCacheHas.js","../../../../node_modules/lodash-es/_SetCache.js","../../../../node_modules/lodash-es/_arraySome.js","../../../../node_modules/lodash-es/_cacheHas.js","../../../../node_modules/lodash-es/_equalArrays.js","../../../../node_modules/lodash-es/_mapToArray.js","../../../../node_modules/lodash-es/_setToArray.js","../../../../node_modules/lodash-es/_equalByTag.js","../../../../node_modules/lodash-es/_equalObjects.js","../../../../node_modules/lodash-es/_baseIsEqualDeep.js","../../../../node_modules/lodash-es/_baseIsEqual.js","../../../../node_modules/lodash-es/_createBaseFor.js","../../../../node_modules/lodash-es/_baseFor.js","../../../../node_modules/lodash-es/_assignMergeValue.js","../../../../node_modules/lodash-es/isArrayLikeObject.js","../../../../node_modules/lodash-es/_safeGet.js","../../../../node_modules/lodash-es/toPlainObject.js","../../../../node_modules/lodash-es/_baseMergeDeep.js","../../../../node_modules/lodash-es/_baseMerge.js","../../../../node_modules/lodash-es/isEqual.js","../../../../node_modules/lodash-es/merge.js","../../../../node_modules/parchment/dist/parchment.js","../../../../node_modules/fast-diff/diff.js","../../../../node_modules/lodash.clonedeep/index.js","../../../../node_modules/lodash.isequal/index.js","../../../../node_modules/quill-delta/dist/AttributeMap.js","../../../../node_modules/quill-delta/dist/Op.js","../../../../node_modules/quill-delta/dist/OpIterator.js","../../../../node_modules/quill-delta/dist/Delta.js","../../../../node_modules/quill/blots/break.js","../../../../node_modules/quill/blots/text.js","../../../../node_modules/quill/blots/inline.js","../../../../node_modules/quill/blots/block.js","../../../../node_modules/quill/blots/cursor.js","../../../../node_modules/eventemitter3/index.js","../../../../node_modules/quill/core/instances.js","../../../../node_modules/quill/core/logger.js","../../../../node_modules/quill/core/emitter.js","../../../../node_modules/quill/core/selection.js","../../../../node_modules/quill/core/editor.js","../../../../node_modules/quill/core/module.js","../../../../node_modules/quill/blots/embed.js","../../../../node_modules/quill/core/composition.js","../../../../node_modules/quill/core/theme.js","../../../../node_modules/quill/core/utils/scrollRectIntoView.js","../../../../node_modules/quill/core/utils/createRegistryWithFormats.js","../../../../node_modules/quill/core/quill.js","../../../../node_modules/quill/blots/container.js","../../../../node_modules/quill/blots/scroll.js","../../../../node_modules/quill/formats/align.js","../../../../node_modules/quill/formats/color.js","../../../../node_modules/quill/formats/background.js","../../../../node_modules/quill/formats/code.js","../../../../node_modules/quill/formats/direction.js","../../../../node_modules/quill/formats/font.js","../../../../node_modules/quill/formats/size.js","../../../../node_modules/quill/modules/keyboard.js","../../../../node_modules/quill/modules/normalizeExternalHTML/normalizers/googleDocs.js","../../../../node_modules/quill/modules/normalizeExternalHTML/normalizers/msWord.js","../../../../node_modules/quill/modules/normalizeExternalHTML/index.js","../../../../node_modules/quill/modules/clipboard.js","../../../../node_modules/quill/modules/history.js","../../../../node_modules/quill/modules/uploader.js","../../../../node_modules/quill/modules/input.js","../../../../node_modules/quill/modules/uiNode.js","../../../../node_modules/quill/core.js","../../../../node_modules/quill/formats/indent.js","../../../../node_modules/quill/formats/blockquote.js","../../../../node_modules/quill/formats/header.js","../../../../node_modules/quill/formats/list.js","../../../../node_modules/quill/formats/bold.js","../../../../node_modules/quill/formats/italic.js","../../../../node_modules/quill/formats/link.js","../../../../node_modules/quill/formats/script.js","../../../../node_modules/quill/formats/strike.js","../../../../node_modules/quill/formats/underline.js","../../../../node_modules/quill/formats/formula.js","../../../../node_modules/quill/formats/image.js","../../../../node_modules/quill/formats/video.js","../../../../node_modules/quill/modules/syntax.js","../../../../node_modules/quill/formats/table.js","../../../../node_modules/quill/modules/table.js","../../../../node_modules/quill/modules/toolbar.js","../../../../node_modules/quill/ui/icons.js","../../../../node_modules/quill/ui/picker.js","../../../../node_modules/quill/ui/color-picker.js","../../../../node_modules/quill/ui/icon-picker.js","../../../../node_modules/quill/ui/tooltip.js","../../../../node_modules/quill/themes/base.js","../../../../node_modules/quill/themes/bubble.js","../../../../node_modules/quill/themes/snow.js","../../../../node_modules/quill/quill.js","../../../../components/forms/components/QuillyEditor.vue"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\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 */\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 if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\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 */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\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 */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\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\nexport default isObjectLike;\n","/**\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;\n\nexport default isArray;\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 return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/**\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\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\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 */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\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 var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\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 */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\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 */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\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 */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\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\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\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 */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\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 */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","/**\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: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\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\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\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 */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\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\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\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 */\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};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\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 */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/**\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 return array;\n}\n\nexport default arrayEach;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\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 */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\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 */\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\nexport default baseAssignValue;\n","/**\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\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\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 */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\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 */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\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 */\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 index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\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 * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\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 */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\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 */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\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 */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\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 return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\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 */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\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 */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\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\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\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 */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\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]';\n\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/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\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 */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\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\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\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 }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\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 */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\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 */\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)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\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\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\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 */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\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 */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","/**\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 if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\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 */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\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 return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\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 */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\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\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\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 */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\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 */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\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 */\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\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\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\nexport default listCacheClear;\n","import eq from './eq.js';\n\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 */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\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 */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\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 */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\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 */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\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 */\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 return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\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\nexport default mapCacheClear;\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 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\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 */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\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 */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\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 */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\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 */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\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 */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\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 */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","/**\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 return array;\n}\n\nexport default arrayPush;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\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 */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\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\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\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\nexport default stackGet;\n","/**\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\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\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 */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\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 */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\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 */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\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 */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\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 */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","/**\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 if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\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\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\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 */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\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 */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\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 */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\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 */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\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 */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\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 */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\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 */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(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: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\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 */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\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 */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\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 */\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\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\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 */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\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 */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\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 */\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\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\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]';\n\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/**\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 */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\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: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: 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\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\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 */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\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 */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\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 */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\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 */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\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 */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\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]';\n\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/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\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 */\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 if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\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 if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\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\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\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 }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\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 cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\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 */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an 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 an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\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 safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.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 * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","var Scope = /* @__PURE__ */ ((Scope2) => (Scope2[Scope2.TYPE = 3] = \"TYPE\", Scope2[Scope2.LEVEL = 12] = \"LEVEL\", Scope2[Scope2.ATTRIBUTE = 13] = \"ATTRIBUTE\", Scope2[Scope2.BLOT = 14] = \"BLOT\", Scope2[Scope2.INLINE = 7] = \"INLINE\", Scope2[Scope2.BLOCK = 11] = \"BLOCK\", Scope2[Scope2.BLOCK_BLOT = 10] = \"BLOCK_BLOT\", Scope2[Scope2.INLINE_BLOT = 6] = \"INLINE_BLOT\", Scope2[Scope2.BLOCK_ATTRIBUTE = 9] = \"BLOCK_ATTRIBUTE\", Scope2[Scope2.INLINE_ATTRIBUTE = 5] = \"INLINE_ATTRIBUTE\", Scope2[Scope2.ANY = 15] = \"ANY\", Scope2))(Scope || {});\nclass Attributor {\n constructor(attrName, keyName, options = {}) {\n this.attrName = attrName, this.keyName = keyName;\n const attributeBit = Scope.TYPE & Scope.ATTRIBUTE;\n this.scope = options.scope != null ? (\n // Ignore type bits, force attribute bit\n options.scope & Scope.LEVEL | attributeBit\n ) : Scope.ATTRIBUTE, options.whitelist != null && (this.whitelist = options.whitelist);\n }\n static keys(node) {\n return Array.from(node.attributes).map((item) => item.name);\n }\n add(node, value) {\n return this.canAdd(node, value) ? (node.setAttribute(this.keyName, value), !0) : !1;\n }\n canAdd(_node, value) {\n return this.whitelist == null ? !0 : typeof value == \"string\" ? this.whitelist.indexOf(value.replace(/[\"']/g, \"\")) > -1 : this.whitelist.indexOf(value) > -1;\n }\n remove(node) {\n node.removeAttribute(this.keyName);\n }\n value(node) {\n const value = node.getAttribute(this.keyName);\n return this.canAdd(node, value) && value ? value : \"\";\n }\n}\nclass ParchmentError extends Error {\n constructor(message) {\n message = \"[Parchment] \" + message, super(message), this.message = message, this.name = this.constructor.name;\n }\n}\nconst _Registry = class _Registry {\n constructor() {\n this.attributes = {}, this.classes = {}, this.tags = {}, this.types = {};\n }\n static find(node, bubble = !1) {\n if (node == null)\n return null;\n if (this.blots.has(node))\n return this.blots.get(node) || null;\n if (bubble) {\n let parentNode = null;\n try {\n parentNode = node.parentNode;\n } catch {\n return null;\n }\n return this.find(parentNode, bubble);\n }\n return null;\n }\n create(scroll, input, value) {\n const match2 = this.query(input);\n if (match2 == null)\n throw new ParchmentError(`Unable to create ${input} blot`);\n const blotClass = match2, node = (\n // @ts-expect-error Fix me later\n input instanceof Node || input.nodeType === Node.TEXT_NODE ? input : blotClass.create(value)\n ), blot = new blotClass(scroll, node, value);\n return _Registry.blots.set(blot.domNode, blot), blot;\n }\n find(node, bubble = !1) {\n return _Registry.find(node, bubble);\n }\n query(query, scope = Scope.ANY) {\n let match2;\n return typeof query == \"string\" ? match2 = this.types[query] || this.attributes[query] : query instanceof Text || query.nodeType === Node.TEXT_NODE ? match2 = this.types.text : typeof query == \"number\" ? query & Scope.LEVEL & Scope.BLOCK ? match2 = this.types.block : query & Scope.LEVEL & Scope.INLINE && (match2 = this.types.inline) : query instanceof Element && ((query.getAttribute(\"class\") || \"\").split(/\\s+/).some((name) => (match2 = this.classes[name], !!match2)), match2 = match2 || this.tags[query.tagName]), match2 == null ? null : \"scope\" in match2 && scope & Scope.LEVEL & match2.scope && scope & Scope.TYPE & match2.scope ? match2 : null;\n }\n register(...definitions) {\n return definitions.map((definition) => {\n const isBlot = \"blotName\" in definition, isAttr = \"attrName\" in definition;\n if (!isBlot && !isAttr)\n throw new ParchmentError(\"Invalid definition\");\n if (isBlot && definition.blotName === \"abstract\")\n throw new ParchmentError(\"Cannot register abstract class\");\n const key = isBlot ? definition.blotName : isAttr ? definition.attrName : void 0;\n return this.types[key] = definition, isAttr ? typeof definition.keyName == \"string\" && (this.attributes[definition.keyName] = definition) : isBlot && (definition.className && (this.classes[definition.className] = definition), definition.tagName && (Array.isArray(definition.tagName) ? definition.tagName = definition.tagName.map((tagName) => tagName.toUpperCase()) : definition.tagName = definition.tagName.toUpperCase(), (Array.isArray(definition.tagName) ? definition.tagName : [definition.tagName]).forEach((tag) => {\n (this.tags[tag] == null || definition.className == null) && (this.tags[tag] = definition);\n }))), definition;\n });\n }\n};\n_Registry.blots = /* @__PURE__ */ new WeakMap();\nlet Registry = _Registry;\nfunction match(node, prefix) {\n return (node.getAttribute(\"class\") || \"\").split(/\\s+/).filter((name) => name.indexOf(`${prefix}-`) === 0);\n}\nclass ClassAttributor extends Attributor {\n static keys(node) {\n return (node.getAttribute(\"class\") || \"\").split(/\\s+/).map((name) => name.split(\"-\").slice(0, -1).join(\"-\"));\n }\n add(node, value) {\n return this.canAdd(node, value) ? (this.remove(node), node.classList.add(`${this.keyName}-${value}`), !0) : !1;\n }\n remove(node) {\n match(node, this.keyName).forEach((name) => {\n node.classList.remove(name);\n }), node.classList.length === 0 && node.removeAttribute(\"class\");\n }\n value(node) {\n const value = (match(node, this.keyName)[0] || \"\").slice(this.keyName.length + 1);\n return this.canAdd(node, value) ? value : \"\";\n }\n}\nconst ClassAttributor$1 = ClassAttributor;\nfunction camelize(name) {\n const parts = name.split(\"-\"), rest = parts.slice(1).map((part) => part[0].toUpperCase() + part.slice(1)).join(\"\");\n return parts[0] + rest;\n}\nclass StyleAttributor extends Attributor {\n static keys(node) {\n return (node.getAttribute(\"style\") || \"\").split(\";\").map((value) => value.split(\":\")[0].trim());\n }\n add(node, value) {\n return this.canAdd(node, value) ? (node.style[camelize(this.keyName)] = value, !0) : !1;\n }\n remove(node) {\n node.style[camelize(this.keyName)] = \"\", node.getAttribute(\"style\") || node.removeAttribute(\"style\");\n }\n value(node) {\n const value = node.style[camelize(this.keyName)];\n return this.canAdd(node, value) ? value : \"\";\n }\n}\nconst StyleAttributor$1 = StyleAttributor;\nclass AttributorStore {\n constructor(domNode) {\n this.attributes = {}, this.domNode = domNode, this.build();\n }\n attribute(attribute, value) {\n value ? attribute.add(this.domNode, value) && (attribute.value(this.domNode) != null ? this.attributes[attribute.attrName] = attribute : delete this.attributes[attribute.attrName]) : (attribute.remove(this.domNode), delete this.attributes[attribute.attrName]);\n }\n build() {\n this.attributes = {};\n const blot = Registry.find(this.domNode);\n if (blot == null)\n return;\n const attributes = Attributor.keys(this.domNode), classes = ClassAttributor$1.keys(this.domNode), styles = StyleAttributor$1.keys(this.domNode);\n attributes.concat(classes).concat(styles).forEach((name) => {\n const attr = blot.scroll.query(name, Scope.ATTRIBUTE);\n attr instanceof Attributor && (this.attributes[attr.attrName] = attr);\n });\n }\n copy(target) {\n Object.keys(this.attributes).forEach((key) => {\n const value = this.attributes[key].value(this.domNode);\n target.format(key, value);\n });\n }\n move(target) {\n this.copy(target), Object.keys(this.attributes).forEach((key) => {\n this.attributes[key].remove(this.domNode);\n }), this.attributes = {};\n }\n values() {\n return Object.keys(this.attributes).reduce(\n (attributes, name) => (attributes[name] = this.attributes[name].value(this.domNode), attributes),\n {}\n );\n }\n}\nconst AttributorStore$1 = AttributorStore, _ShadowBlot = class _ShadowBlot {\n constructor(scroll, domNode) {\n this.scroll = scroll, this.domNode = domNode, Registry.blots.set(domNode, this), this.prev = null, this.next = null;\n }\n static create(rawValue) {\n if (this.tagName == null)\n throw new ParchmentError(\"Blot definition missing tagName\");\n let node, value;\n return Array.isArray(this.tagName) ? (typeof rawValue == \"string\" ? (value = rawValue.toUpperCase(), parseInt(value, 10).toString() === value && (value = parseInt(value, 10))) : typeof rawValue == \"number\" && (value = rawValue), typeof value == \"number\" ? node = document.createElement(this.tagName[value - 1]) : value && this.tagName.indexOf(value) > -1 ? node = document.createElement(value) : node = document.createElement(this.tagName[0])) : node = document.createElement(this.tagName), this.className && node.classList.add(this.className), node;\n }\n // Hack for accessing inherited static methods\n get statics() {\n return this.constructor;\n }\n attach() {\n }\n clone() {\n const domNode = this.domNode.cloneNode(!1);\n return this.scroll.create(domNode);\n }\n detach() {\n this.parent != null && this.parent.removeChild(this), Registry.blots.delete(this.domNode);\n }\n deleteAt(index, length) {\n this.isolate(index, length).remove();\n }\n formatAt(index, length, name, value) {\n const blot = this.isolate(index, length);\n if (this.scroll.query(name, Scope.BLOT) != null && value)\n blot.wrap(name, value);\n else if (this.scroll.query(name, Scope.ATTRIBUTE) != null) {\n const parent = this.scroll.create(this.statics.scope);\n blot.wrap(parent), parent.format(name, value);\n }\n }\n insertAt(index, value, def) {\n const blot = def == null ? this.scroll.create(\"text\", value) : this.scroll.create(value, def), ref = this.split(index);\n this.parent.insertBefore(blot, ref || void 0);\n }\n isolate(index, length) {\n const target = this.split(index);\n if (target == null)\n throw new Error(\"Attempt to isolate at end\");\n return target.split(length), target;\n }\n length() {\n return 1;\n }\n offset(root = this.parent) {\n return this.parent == null || this === root ? 0 : this.parent.children.offset(this) + this.parent.offset(root);\n }\n optimize(_context) {\n this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer) && this.wrap(this.statics.requiredContainer.blotName);\n }\n remove() {\n this.domNode.parentNode != null && this.domNode.parentNode.removeChild(this.domNode), this.detach();\n }\n replaceWith(name, value) {\n const replacement = typeof name == \"string\" ? this.scroll.create(name, value) : name;\n return this.parent != null && (this.parent.insertBefore(replacement, this.next || void 0), this.remove()), replacement;\n }\n split(index, _force) {\n return index === 0 ? this : this.next;\n }\n update(_mutations, _context) {\n }\n wrap(name, value) {\n const wrapper = typeof name == \"string\" ? this.scroll.create(name, value) : name;\n if (this.parent != null && this.parent.insertBefore(wrapper, this.next || void 0), typeof wrapper.appendChild != \"function\")\n throw new ParchmentError(`Cannot wrap ${name}`);\n return wrapper.appendChild(this), wrapper;\n }\n};\n_ShadowBlot.blotName = \"abstract\";\nlet ShadowBlot = _ShadowBlot;\nconst _LeafBlot = class _LeafBlot extends ShadowBlot {\n /**\n * Returns the value represented by domNode if it is this Blot's type\n * No checking that domNode can represent this Blot type is required so\n * applications needing it should check externally before calling.\n */\n static value(_domNode) {\n return !0;\n }\n /**\n * Given location represented by node and offset from DOM Selection Range,\n * return index to that location.\n */\n index(node, offset) {\n return this.domNode === node || this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY ? Math.min(offset, 1) : -1;\n }\n /**\n * Given index to location within blot, return node and offset representing\n * that location, consumable by DOM Selection Range\n */\n position(index, _inclusive) {\n let offset = Array.from(this.parent.domNode.childNodes).indexOf(this.domNode);\n return index > 0 && (offset += 1), [this.parent.domNode, offset];\n }\n /**\n * Return value represented by this blot\n * Should not change without interaction from API or\n * user change detectable by update()\n */\n value() {\n return {\n [this.statics.blotName]: this.statics.value(this.domNode) || !0\n };\n }\n};\n_LeafBlot.scope = Scope.INLINE_BLOT;\nlet LeafBlot = _LeafBlot;\nconst LeafBlot$1 = LeafBlot;\nclass LinkedList {\n constructor() {\n this.head = null, this.tail = null, this.length = 0;\n }\n append(...nodes) {\n if (this.insertBefore(nodes[0], null), nodes.length > 1) {\n const rest = nodes.slice(1);\n this.append(...rest);\n }\n }\n at(index) {\n const next = this.iterator();\n let cur = next();\n for (; cur && index > 0; )\n index -= 1, cur = next();\n return cur;\n }\n contains(node) {\n const next = this.iterator();\n let cur = next();\n for (; cur; ) {\n if (cur === node)\n return !0;\n cur = next();\n }\n return !1;\n }\n indexOf(node) {\n const next = this.iterator();\n let cur = next(), index = 0;\n for (; cur; ) {\n if (cur === node)\n return index;\n index += 1, cur = next();\n }\n return -1;\n }\n insertBefore(node, refNode) {\n node != null && (this.remove(node), node.next = refNode, refNode != null ? (node.prev = refNode.prev, refNode.prev != null && (refNode.prev.next = node), refNode.prev = node, refNode === this.head && (this.head = node)) : this.tail != null ? (this.tail.next = node, node.prev = this.tail, this.tail = node) : (node.prev = null, this.head = this.tail = node), this.length += 1);\n }\n offset(target) {\n let index = 0, cur = this.head;\n for (; cur != null; ) {\n if (cur === target)\n return index;\n index += cur.length(), cur = cur.next;\n }\n return -1;\n }\n remove(node) {\n this.contains(node) && (node.prev != null && (node.prev.next = node.next), node.next != null && (node.next.prev = node.prev), node === this.head && (this.head = node.next), node === this.tail && (this.tail = node.prev), this.length -= 1);\n }\n iterator(curNode = this.head) {\n return () => {\n const ret = curNode;\n return curNode != null && (curNode = curNode.next), ret;\n };\n }\n find(index, inclusive = !1) {\n const next = this.iterator();\n let cur = next();\n for (; cur; ) {\n const length = cur.length();\n if (index < length || inclusive && index === length && (cur.next == null || cur.next.length() !== 0))\n return [cur, index];\n index -= length, cur = next();\n }\n return [null, 0];\n }\n forEach(callback) {\n const next = this.iterator();\n let cur = next();\n for (; cur; )\n callback(cur), cur = next();\n }\n forEachAt(index, length, callback) {\n if (length <= 0)\n return;\n const [startNode, offset] = this.find(index);\n let curIndex = index - offset;\n const next = this.iterator(startNode);\n let cur = next();\n for (; cur && curIndex < index + length; ) {\n const curLength = cur.length();\n index > curIndex ? callback(\n cur,\n index - curIndex,\n Math.min(length, curIndex + curLength - index)\n ) : callback(cur, 0, Math.min(curLength, index + length - curIndex)), curIndex += curLength, cur = next();\n }\n }\n map(callback) {\n return this.reduce((memo, cur) => (memo.push(callback(cur)), memo), []);\n }\n reduce(callback, memo) {\n const next = this.iterator();\n let cur = next();\n for (; cur; )\n memo = callback(memo, cur), cur = next();\n return memo;\n }\n}\nfunction makeAttachedBlot(node, scroll) {\n const found = scroll.find(node);\n if (found)\n return found;\n try {\n return scroll.create(node);\n } catch {\n const blot = scroll.create(Scope.INLINE);\n return Array.from(node.childNodes).forEach((child) => {\n blot.domNode.appendChild(child);\n }), node.parentNode && node.parentNode.replaceChild(blot.domNode, node), blot.attach(), blot;\n }\n}\nconst _ParentBlot = class _ParentBlot extends ShadowBlot {\n constructor(scroll, domNode) {\n super(scroll, domNode), this.uiNode = null, this.build();\n }\n appendChild(other) {\n this.insertBefore(other);\n }\n attach() {\n super.attach(), this.children.forEach((child) => {\n child.attach();\n });\n }\n attachUI(node) {\n this.uiNode != null && this.uiNode.remove(), this.uiNode = node, _ParentBlot.uiClass && this.uiNode.classList.add(_ParentBlot.uiClass), this.uiNode.setAttribute(\"contenteditable\", \"false\"), this.domNode.insertBefore(this.uiNode, this.domNode.firstChild);\n }\n /**\n * Called during construction, should fill its own children LinkedList.\n */\n build() {\n this.children = new LinkedList(), Array.from(this.domNode.childNodes).filter((node) => node !== this.uiNode).reverse().forEach((node) => {\n try {\n const child = makeAttachedBlot(node, this.scroll);\n this.insertBefore(child, this.children.head || void 0);\n } catch (err) {\n if (err instanceof ParchmentError)\n return;\n throw err;\n }\n });\n }\n deleteAt(index, length) {\n if (index === 0 && length === this.length())\n return this.remove();\n this.children.forEachAt(index, length, (child, offset, childLength) => {\n child.deleteAt(offset, childLength);\n });\n }\n descendant(criteria, index = 0) {\n const [child, offset] = this.children.find(index);\n return criteria.blotName == null && criteria(child) || criteria.blotName != null && child instanceof criteria ? [child, offset] : child instanceof _ParentBlot ? child.descendant(criteria, offset) : [null, -1];\n }\n descendants(criteria, index = 0, length = Number.MAX_VALUE) {\n let descendants = [], lengthLeft = length;\n return this.children.forEachAt(\n index,\n length,\n (child, childIndex, childLength) => {\n (criteria.blotName == null && criteria(child) || criteria.blotName != null && child instanceof criteria) && descendants.push(child), child instanceof _ParentBlot && (descendants = descendants.concat(\n child.descendants(criteria, childIndex, lengthLeft)\n )), lengthLeft -= childLength;\n }\n ), descendants;\n }\n detach() {\n this.children.forEach((child) => {\n child.detach();\n }), super.detach();\n }\n enforceAllowedChildren() {\n let done = !1;\n this.children.forEach((child) => {\n done || this.statics.allowedChildren.some(\n (def) => child instanceof def\n ) || (child.statics.scope === Scope.BLOCK_BLOT ? (child.next != null && this.splitAfter(child), child.prev != null && this.splitAfter(child.prev), child.parent.unwrap(), done = !0) : child instanceof _ParentBlot ? child.unwrap() : child.remove());\n });\n }\n formatAt(index, length, name, value) {\n this.children.forEachAt(index, length, (child, offset, childLength) => {\n child.formatAt(offset, childLength, name, value);\n });\n }\n insertAt(index, value, def) {\n const [child, offset] = this.children.find(index);\n if (child)\n child.insertAt(offset, value, def);\n else {\n const blot = def == null ? this.scroll.create(\"text\", value) : this.scroll.create(value, def);\n this.appendChild(blot);\n }\n }\n insertBefore(childBlot, refBlot) {\n childBlot.parent != null && childBlot.parent.children.remove(childBlot);\n let refDomNode = null;\n this.children.insertBefore(childBlot, refBlot || null), childBlot.parent = this, refBlot != null && (refDomNode = refBlot.domNode), (this.domNode.parentNode !== childBlot.domNode || this.domNode.nextSibling !== refDomNode) && this.domNode.insertBefore(childBlot.domNode, refDomNode), childBlot.attach();\n }\n length() {\n return this.children.reduce((memo, child) => memo + child.length(), 0);\n }\n moveChildren(targetParent, refNode) {\n this.children.forEach((child) => {\n targetParent.insertBefore(child, refNode);\n });\n }\n optimize(context) {\n if (super.optimize(context), this.enforceAllowedChildren(), this.uiNode != null && this.uiNode !== this.domNode.firstChild && this.domNode.insertBefore(this.uiNode, this.domNode.firstChild), this.children.length === 0)\n if (this.statics.defaultChild != null) {\n const child = this.scroll.create(this.statics.defaultChild.blotName);\n this.appendChild(child);\n } else\n this.remove();\n }\n path(index, inclusive = !1) {\n const [child, offset] = this.children.find(index, inclusive), position = [[this, index]];\n return child instanceof _ParentBlot ? position.concat(child.path(offset, inclusive)) : (child != null && position.push([child, offset]), position);\n }\n removeChild(child) {\n this.children.remove(child);\n }\n replaceWith(name, value) {\n const replacement = typeof name == \"string\" ? this.scroll.create(name, value) : name;\n return replacement instanceof _ParentBlot && this.moveChildren(replacement), super.replaceWith(replacement);\n }\n split(index, force = !1) {\n if (!force) {\n if (index === 0)\n return this;\n if (index === this.length())\n return this.next;\n }\n const after = this.clone();\n return this.parent && this.parent.insertBefore(after, this.next || void 0), this.children.forEachAt(index, this.length(), (child, offset, _length) => {\n const split = child.split(offset, force);\n split != null && after.appendChild(split);\n }), after;\n }\n splitAfter(child) {\n const after = this.clone();\n for (; child.next != null; )\n after.appendChild(child.next);\n return this.parent && this.parent.insertBefore(after, this.next || void 0), after;\n }\n unwrap() {\n this.parent && this.moveChildren(this.parent, this.next || void 0), this.remove();\n }\n update(mutations, _context) {\n const addedNodes = [], removedNodes = [];\n mutations.forEach((mutation) => {\n mutation.target === this.domNode && mutation.type === \"childList\" && (addedNodes.push(...mutation.addedNodes), removedNodes.push(...mutation.removedNodes));\n }), removedNodes.forEach((node) => {\n if (node.parentNode != null && // @ts-expect-error Fix me later\n node.tagName !== \"IFRAME\" && document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY)\n return;\n const blot = this.scroll.find(node);\n blot != null && (blot.domNode.parentNode == null || blot.domNode.parentNode === this.domNode) && blot.detach();\n }), addedNodes.filter((node) => node.parentNode === this.domNode && node !== this.uiNode).sort((a, b) => a === b ? 0 : a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? 1 : -1).forEach((node) => {\n let refBlot = null;\n node.nextSibling != null && (refBlot = this.scroll.find(node.nextSibling));\n const blot = makeAttachedBlot(node, this.scroll);\n (blot.next !== refBlot || blot.next == null) && (blot.parent != null && blot.parent.removeChild(this), this.insertBefore(blot, refBlot || void 0));\n }), this.enforceAllowedChildren();\n }\n};\n_ParentBlot.uiClass = \"\";\nlet ParentBlot = _ParentBlot;\nconst ParentBlot$1 = ParentBlot;\nfunction isEqual(obj1, obj2) {\n if (Object.keys(obj1).length !== Object.keys(obj2).length)\n return !1;\n for (const prop in obj1)\n if (obj1[prop] !== obj2[prop])\n return !1;\n return !0;\n}\nconst _InlineBlot = class _InlineBlot extends ParentBlot$1 {\n static create(value) {\n return super.create(value);\n }\n static formats(domNode, scroll) {\n const match2 = scroll.query(_InlineBlot.blotName);\n if (!(match2 != null && domNode.tagName === match2.tagName)) {\n if (typeof this.tagName == \"string\")\n return !0;\n if (Array.isArray(this.tagName))\n return domNode.tagName.toLowerCase();\n }\n }\n constructor(scroll, domNode) {\n super(scroll, domNode), this.attributes = new AttributorStore$1(this.domNode);\n }\n format(name, value) {\n if (name === this.statics.blotName && !value)\n this.children.forEach((child) => {\n child instanceof _InlineBlot || (child = child.wrap(_InlineBlot.blotName, !0)), this.attributes.copy(child);\n }), this.unwrap();\n else {\n const format = this.scroll.query(name, Scope.INLINE);\n if (format == null)\n return;\n format instanceof Attributor ? this.attributes.attribute(format, value) : value && (name !== this.statics.blotName || this.formats()[name] !== value) && this.replaceWith(name, value);\n }\n }\n formats() {\n const formats = this.attributes.values(), format = this.statics.formats(this.domNode, this.scroll);\n return format != null && (formats[this.statics.blotName] = format), formats;\n }\n formatAt(index, length, name, value) {\n this.formats()[name] != null || this.scroll.query(name, Scope.ATTRIBUTE) ? this.isolate(index, length).format(name, value) : super.formatAt(index, length, name, value);\n }\n optimize(context) {\n super.optimize(context);\n const formats = this.formats();\n if (Object.keys(formats).length === 0)\n return this.unwrap();\n const next = this.next;\n next instanceof _InlineBlot && next.prev === this && isEqual(formats, next.formats()) && (next.moveChildren(this), next.remove());\n }\n replaceWith(name, value) {\n const replacement = super.replaceWith(name, value);\n return this.attributes.copy(replacement), replacement;\n }\n update(mutations, context) {\n super.update(mutations, context), mutations.some(\n (mutation) => mutation.target === this.domNode && mutation.type === \"attributes\"\n ) && this.attributes.build();\n }\n wrap(name, value) {\n const wrapper = super.wrap(name, value);\n return wrapper instanceof _InlineBlot && this.attributes.move(wrapper), wrapper;\n }\n};\n_InlineBlot.allowedChildren = [_InlineBlot, LeafBlot$1], _InlineBlot.blotName = \"inline\", _InlineBlot.scope = Scope.INLINE_BLOT, _InlineBlot.tagName = \"SPAN\";\nlet InlineBlot = _InlineBlot;\nconst InlineBlot$1 = InlineBlot, _BlockBlot = class _BlockBlot extends ParentBlot$1 {\n static create(value) {\n return super.create(value);\n }\n static formats(domNode, scroll) {\n const match2 = scroll.query(_BlockBlot.blotName);\n if (!(match2 != null && domNode.tagName === match2.tagName)) {\n if (typeof this.tagName == \"string\")\n return !0;\n if (Array.isArray(this.tagName))\n return domNode.tagName.toLowerCase();\n }\n }\n constructor(scroll, domNode) {\n super(scroll, domNode), this.attributes = new AttributorStore$1(this.domNode);\n }\n format(name, value) {\n const format = this.scroll.query(name, Scope.BLOCK);\n format != null && (format instanceof Attributor ? this.attributes.attribute(format, value) : name === this.statics.blotName && !value ? this.replaceWith(_BlockBlot.blotName) : value && (name !== this.statics.blotName || this.formats()[name] !== value) && this.replaceWith(name, value));\n }\n formats() {\n const formats = this.attributes.values(), format = this.statics.formats(this.domNode, this.scroll);\n return format != null && (formats[this.statics.blotName] = format), formats;\n }\n formatAt(index, length, name, value) {\n this.scroll.query(name, Scope.BLOCK) != null ? this.format(name, value) : super.formatAt(index, length, name, value);\n }\n insertAt(index, value, def) {\n if (def == null || this.scroll.query(value, Scope.INLINE) != null)\n super.insertAt(index, value, def);\n else {\n const after = this.split(index);\n if (after != null) {\n const blot = this.scroll.create(value, def);\n after.parent.insertBefore(blot, after);\n } else\n throw new Error(\"Attempt to insertAt after block boundaries\");\n }\n }\n replaceWith(name, value) {\n const replacement = super.replaceWith(name, value);\n return this.attributes.copy(replacement), replacement;\n }\n update(mutations, context) {\n super.update(mutations, context), mutations.some(\n (mutation) => mutation.target === this.domNode && mutation.type === \"attributes\"\n ) && this.attributes.build();\n }\n};\n_BlockBlot.blotName = \"block\", _BlockBlot.scope = Scope.BLOCK_BLOT, _BlockBlot.tagName = \"P\", _BlockBlot.allowedChildren = [\n InlineBlot$1,\n _BlockBlot,\n LeafBlot$1\n];\nlet BlockBlot = _BlockBlot;\nconst BlockBlot$1 = BlockBlot, _ContainerBlot = class _ContainerBlot extends ParentBlot$1 {\n checkMerge() {\n return this.next !== null && this.next.statics.blotName === this.statics.blotName;\n }\n deleteAt(index, length) {\n super.deleteAt(index, length), this.enforceAllowedChildren();\n }\n formatAt(index, length, name, value) {\n super.formatAt(index, length, name, value), this.enforceAllowedChildren();\n }\n insertAt(index, value, def) {\n super.insertAt(index, value, def), this.enforceAllowedChildren();\n }\n optimize(context) {\n super.optimize(context), this.children.length > 0 && this.next != null && this.checkMerge() && (this.next.moveChildren(this), this.next.remove());\n }\n};\n_ContainerBlot.blotName = \"container\", _ContainerBlot.scope = Scope.BLOCK_BLOT;\nlet ContainerBlot = _ContainerBlot;\nconst ContainerBlot$1 = ContainerBlot;\nclass EmbedBlot extends LeafBlot$1 {\n static formats(_domNode, _scroll) {\n }\n format(name, value) {\n super.formatAt(0, this.length(), name, value);\n }\n formatAt(index, length, name, value) {\n index === 0 && length === this.length() ? this.format(name, value) : super.formatAt(index, length, name, value);\n }\n formats() {\n return this.statics.formats(this.domNode, this.scroll);\n }\n}\nconst EmbedBlot$1 = EmbedBlot, OBSERVER_CONFIG = {\n attributes: !0,\n characterData: !0,\n characterDataOldValue: !0,\n childList: !0,\n subtree: !0\n}, MAX_OPTIMIZE_ITERATIONS = 100, _ScrollBlot = class _ScrollBlot extends ParentBlot$1 {\n constructor(registry, node) {\n super(null, node), this.registry = registry, this.scroll = this, this.build(), this.observer = new MutationObserver((mutations) => {\n this.update(mutations);\n }), this.observer.observe(this.domNode, OBSERVER_CONFIG), this.attach();\n }\n create(input, value) {\n return this.registry.create(this, input, value);\n }\n find(node, bubble = !1) {\n const blot = this.registry.find(node, bubble);\n return blot ? blot.scroll === this ? blot : bubble ? this.find(blot.scroll.domNode.parentNode, !0) : null : null;\n }\n query(query, scope = Scope.ANY) {\n return this.registry.query(query, scope);\n }\n register(...definitions) {\n return this.registry.register(...definitions);\n }\n build() {\n this.scroll != null && super.build();\n }\n detach() {\n super.detach(), this.observer.disconnect();\n }\n deleteAt(index, length) {\n this.update(), index === 0 && length === this.length() ? this.children.forEach((child) => {\n child.remove();\n }) : super.deleteAt(index, length);\n }\n formatAt(index, length, name, value) {\n this.update(), super.formatAt(index, length, name, value);\n }\n insertAt(index, value, def) {\n this.update(), super.insertAt(index, value, def);\n }\n optimize(mutations = [], context = {}) {\n super.optimize(context);\n const mutationsMap = context.mutationsMap || /* @__PURE__ */ new WeakMap();\n let records = Array.from(this.observer.takeRecords());\n for (; records.length > 0; )\n mutations.push(records.pop());\n const mark = (blot, markParent = !0) => {\n blot == null || blot === this || blot.domNode.parentNode != null && (mutationsMap.has(blot.domNode) || mutationsMap.set(blot.domNode, []), markParent && mark(blot.parent));\n }, optimize = (blot) => {\n mutationsMap.has(blot.domNode) && (blot instanceof ParentBlot$1 && blot.children.forEach(optimize), mutationsMap.delete(blot.domNode), blot.optimize(context));\n };\n let remaining = mutations;\n for (let i = 0; remaining.length > 0; i += 1) {\n if (i >= MAX_OPTIMIZE_ITERATIONS)\n throw new Error(\"[Parchment] Maximum optimize iterations reached\");\n for (remaining.forEach((mutation) => {\n const blot = this.find(mutation.target, !0);\n blot != null && (blot.domNode === mutation.target && (mutation.type === \"childList\" ? (mark(this.find(mutation.previousSibling, !1)), Array.from(mutation.addedNodes).forEach((node) => {\n const child = this.find(node, !1);\n mark(child, !1), child instanceof ParentBlot$1 && child.children.forEach((grandChild) => {\n mark(grandChild, !1);\n });\n })) : mutation.type === \"attributes\" && mark(blot.prev)), mark(blot));\n }), this.children.forEach(optimize), remaining = Array.from(this.observer.takeRecords()), records = remaining.slice(); records.length > 0; )\n mutations.push(records.pop());\n }\n }\n update(mutations, context = {}) {\n mutations = mutations || this.observer.takeRecords();\n const mutationsMap = /* @__PURE__ */ new WeakMap();\n mutations.map((mutation) => {\n const blot = this.find(mutation.target, !0);\n return blot == null ? null : mutationsMap.has(blot.domNode) ? (mutationsMap.get(blot.domNode).push(mutation), null) : (mutationsMap.set(blot.domNode, [mutation]), blot);\n }).forEach((blot) => {\n blot != null && blot !== this && mutationsMap.has(blot.domNode) && blot.update(mutationsMap.get(blot.domNode) || [], context);\n }), context.mutationsMap = mutationsMap, mutationsMap.has(this.domNode) && super.update(mutationsMap.get(this.domNode), context), this.optimize(mutations, context);\n }\n};\n_ScrollBlot.blotName = \"scroll\", _ScrollBlot.defaultChild = BlockBlot$1, _ScrollBlot.allowedChildren = [BlockBlot$1, ContainerBlot$1], _ScrollBlot.scope = Scope.BLOCK_BLOT, _ScrollBlot.tagName = \"DIV\";\nlet ScrollBlot = _ScrollBlot;\nconst ScrollBlot$1 = ScrollBlot, _TextBlot = class _TextBlot extends LeafBlot$1 {\n static create(value) {\n return document.createTextNode(value);\n }\n static value(domNode) {\n return domNode.data;\n }\n constructor(scroll, node) {\n super(scroll, node), this.text = this.statics.value(this.domNode);\n }\n deleteAt(index, length) {\n this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length);\n }\n index(node, offset) {\n return this.domNode === node ? offset : -1;\n }\n insertAt(index, value, def) {\n def == null ? (this.text = this.text.slice(0, index) + value + this.text.slice(index), this.domNode.data = this.text) : super.insertAt(index, value, def);\n }\n length() {\n return this.text.length;\n }\n optimize(context) {\n super.optimize(context), this.text = this.statics.value(this.domNode), this.text.length === 0 ? this.remove() : this.next instanceof _TextBlot && this.next.prev === this && (this.insertAt(this.length(), this.next.value()), this.next.remove());\n }\n position(index, _inclusive = !1) {\n return [this.domNode, index];\n }\n split(index, force = !1) {\n if (!force) {\n if (index === 0)\n return this;\n if (index === this.length())\n return this.next;\n }\n const after = this.scroll.create(this.domNode.splitText(index));\n return this.parent.insertBefore(after, this.next || void 0), this.text = this.statics.value(this.domNode), after;\n }\n update(mutations, _context) {\n mutations.some((mutation) => mutation.type === \"characterData\" && mutation.target === this.domNode) && (this.text = this.statics.value(this.domNode));\n }\n value() {\n return this.text;\n }\n};\n_TextBlot.blotName = \"text\", _TextBlot.scope = Scope.INLINE_BLOT;\nlet TextBlot = _TextBlot;\nconst TextBlot$1 = TextBlot;\nexport {\n Attributor,\n AttributorStore$1 as AttributorStore,\n BlockBlot$1 as BlockBlot,\n ClassAttributor$1 as ClassAttributor,\n ContainerBlot$1 as ContainerBlot,\n EmbedBlot$1 as EmbedBlot,\n InlineBlot$1 as InlineBlot,\n LeafBlot$1 as LeafBlot,\n ParentBlot$1 as ParentBlot,\n Registry,\n Scope,\n ScrollBlot$1 as ScrollBlot,\n StyleAttributor$1 as StyleAttributor,\n TextBlot$1 as TextBlot\n};\n//# sourceMappingURL=parchment.js.map\n","/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int|Object} [cursor_pos] Edit position in text1 or object with more info\n * @param {boolean} [cleanup] Apply semantic cleanup before returning.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos, cleanup, _fix_unicode) {\n // Check for equality\n if (text1 === text2) {\n if (text1) {\n return [[DIFF_EQUAL, text1]];\n }\n return [];\n }\n\n if (cursor_pos != null) {\n var editdiff = find_cursor_edit_diff(text1, text2, cursor_pos);\n if (editdiff) {\n return editdiff;\n }\n }\n\n // Trim off common prefix (speedup).\n var commonlength = diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = diff_compute_(text1, text2);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift([DIFF_EQUAL, commonprefix]);\n }\n if (commonsuffix) {\n diffs.push([DIFF_EQUAL, commonsuffix]);\n }\n diff_cleanupMerge(diffs, _fix_unicode);\n if (cleanup) {\n diff_cleanupSemantic(diffs);\n }\n return diffs;\n}\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [[DIFF_INSERT, text2]];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [[DIFF_DELETE, text1]];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i !== -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [\n [DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)],\n ];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length === 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2],\n ];\n }\n\n // Check to see if the problem can be split in two.\n var hm = diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = diff_main(text1_a, text2_a);\n var diffs_b = diff_main(text1_b, text2_b);\n // Merge the results.\n return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n }\n\n return diff_bisect_(text1, text2);\n}\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = delta % 2 !== 0;\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 === -d || (k1 !== d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (\n x1 < text1_length &&\n y1 < text2_length &&\n text1.charAt(x1) === text2.charAt(y1)\n ) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 === -d || (k2 !== d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (\n x2 < text1_length &&\n y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) ===\n text2.charAt(text2_length - y2 - 1)\n ) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2],\n ];\n}\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = diff_main(text1a, text2a);\n var diffsb = diff_main(text1b, text2b);\n\n return diffs.concat(diffsb);\n}\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\nfunction diff_commonPrefix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)\n ) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n if (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) {\n pointermid--;\n }\n\n return pointermid;\n}\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n * string and the start of the second string.\n * @private\n */\nfunction diff_commonOverlap_(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n // Eliminate the null case.\n if (text1_length == 0 || text2_length == 0) {\n return 0;\n }\n // Truncate the longer string.\n if (text1_length > text2_length) {\n text1 = text1.substring(text1_length - text2_length);\n } else if (text1_length < text2_length) {\n text2 = text2.substring(0, text1_length);\n }\n var text_length = Math.min(text1_length, text2_length);\n // Quick check for the worst case.\n if (text1 == text2) {\n return text_length;\n }\n\n // Start by looking for a single character match\n // and increase length until no match is found.\n // Performance analysis: http://neil.fraser.name/news/2010/11/04/\n var best = 0;\n var length = 1;\n while (true) {\n var pattern = text1.substring(text_length - length);\n var found = text2.indexOf(pattern);\n if (found == -1) {\n return best;\n }\n length += found;\n if (\n found == 0 ||\n text1.substring(text_length - length) == text2.substring(0, length)\n ) {\n best = length;\n length++;\n }\n }\n}\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)\n ) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n if (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) {\n pointermid--;\n }\n\n return pointermid;\n}\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = \"\";\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) !== -1) {\n var prefixLength = diff_commonPrefix(\n longtext.substring(i),\n shorttext.substring(j)\n );\n var suffixLength = diff_commonSuffix(\n longtext.substring(0, i),\n shorttext.substring(0, j)\n );\n if (best_common.length < suffixLength + prefixLength) {\n best_common =\n shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [\n best_longtext_a,\n best_longtext_b,\n best_shorttext_a,\n best_shorttext_b,\n best_common,\n ];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(\n longtext,\n shorttext,\n Math.ceil(longtext.length / 4)\n );\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(\n longtext,\n shorttext,\n Math.ceil(longtext.length / 2)\n );\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n}\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.} diffs Array of diff tuples.\n */\nfunction diff_cleanupSemantic(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastequality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_insertions1 = 0;\n var length_deletions1 = 0;\n // Number of characters that changed after the equality.\n var length_insertions2 = 0;\n var length_deletions2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) {\n // Equality found.\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastequality = diffs[pointer][1];\n } else {\n // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_INSERT) {\n length_insertions2 += diffs[pointer][1].length;\n } else {\n length_deletions2 += diffs[pointer][1].length;\n }\n // Eliminate an equality that is smaller or equal to the edits on both\n // sides of it.\n if (\n lastequality &&\n lastequality.length <=\n Math.max(length_insertions1, length_deletions1) &&\n lastequality.length <= Math.max(length_insertions2, length_deletions2)\n ) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0, [\n DIFF_DELETE,\n lastequality,\n ]);\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0; // Reset the counters.\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastequality = null;\n changes = true;\n }\n }\n pointer++;\n }\n\n // Normalize the diff.\n if (changes) {\n diff_cleanupMerge(diffs);\n }\n diff_cleanupSemanticLossless(diffs);\n\n // Find any overlaps between deletions and insertions.\n // e.g: abcxxxxxxdef\n // -> abcxxxdef\n // e.g: xxxabcdefxxx\n // -> defxxxabc\n // Only extract an overlap if it is as big as the edit ahead or behind it.\n pointer = 1;\n while (pointer < diffs.length) {\n if (\n diffs[pointer - 1][0] == DIFF_DELETE &&\n diffs[pointer][0] == DIFF_INSERT\n ) {\n var deletion = diffs[pointer - 1][1];\n var insertion = diffs[pointer][1];\n var overlap_length1 = diff_commonOverlap_(deletion, insertion);\n var overlap_length2 = diff_commonOverlap_(insertion, deletion);\n if (overlap_length1 >= overlap_length2) {\n if (\n overlap_length1 >= deletion.length / 2 ||\n overlap_length1 >= insertion.length / 2\n ) {\n // Overlap found. Insert an equality and trim the surrounding edits.\n diffs.splice(pointer, 0, [\n DIFF_EQUAL,\n insertion.substring(0, overlap_length1),\n ]);\n diffs[pointer - 1][1] = deletion.substring(\n 0,\n deletion.length - overlap_length1\n );\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (\n overlap_length2 >= deletion.length / 2 ||\n overlap_length2 >= insertion.length / 2\n ) {\n // Reverse overlap found.\n // Insert an equality and swap and trim the surrounding edits.\n diffs.splice(pointer, 0, [\n DIFF_EQUAL,\n deletion.substring(0, overlap_length2),\n ]);\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] = insertion.substring(\n 0,\n insertion.length - overlap_length2\n );\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] = deletion.substring(overlap_length2);\n pointer++;\n }\n }\n pointer++;\n }\n pointer++;\n }\n}\n\nvar nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\nvar whitespaceRegex_ = /\\s/;\nvar linebreakRegex_ = /[\\r\\n]/;\nvar blanklineEndRegex_ = /\\n\\r?\\n$/;\nvar blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The cat came. -> The cat came.\n * @param {!Array.} diffs Array of diff tuples.\n */\nfunction diff_cleanupSemanticLossless(diffs) {\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 6 (best) to 0 (worst).\n * Closure, but does not reference any external variables.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n * @private\n */\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 6;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var char1 = one.charAt(one.length - 1);\n var char2 = two.charAt(0);\n var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_);\n var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_);\n var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_);\n var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_);\n var lineBreak1 = whitespace1 && char1.match(linebreakRegex_);\n var lineBreak2 = whitespace2 && char2.match(linebreakRegex_);\n var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_);\n var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_);\n\n if (blankLine1 || blankLine2) {\n // Five points for blank lines.\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n // Four points for line breaks.\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n // Three points for end of sentences.\n return 3;\n } else if (whitespace1 || whitespace2) {\n // Two points for whitespace.\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n // One point for non-alphanumeric.\n return 1;\n }\n return 0;\n }\n\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (\n diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL\n ) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore =\n diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score =\n diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n}\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n * @param {boolean} fix_unicode Whether to normalize to a unicode-correct diff\n */\nfunction diff_cleanupMerge(diffs, fix_unicode) {\n diffs.push([DIFF_EQUAL, \"\"]); // Add a dummy entry at the end.\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = \"\";\n var text_insert = \"\";\n var commonlength;\n while (pointer < diffs.length) {\n if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n diffs.splice(pointer, 1);\n continue;\n }\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n var previous_equality = pointer - count_insert - count_delete - 1;\n if (fix_unicode) {\n // prevent splitting of unicode surrogate pairs. when fix_unicode is true,\n // we assume that the old and new text in the diff are complete and correct\n // unicode-encoded JS strings, but the tuple boundaries may fall between\n // surrogate pairs. we fix this by shaving off stray surrogates from the end\n // of the previous equality and the beginning of this equality. this may create\n // empty equalities or a common prefix or suffix. for example, if AB and AC are\n // emojis, `[[0, 'A'], [-1, 'BA'], [0, 'C']]` would turn into deleting 'ABAC' and\n // inserting 'AC', and then the common suffix 'AC' will be eliminated. in this\n // particular case, both equalities go away, we absorb any previous inequalities,\n // and we keep scanning for the next equality before rewriting the tuples.\n if (\n previous_equality >= 0 &&\n ends_with_pair_start(diffs[previous_equality][1])\n ) {\n var stray = diffs[previous_equality][1].slice(-1);\n diffs[previous_equality][1] = diffs[previous_equality][1].slice(\n 0,\n -1\n );\n text_delete = stray + text_delete;\n text_insert = stray + text_insert;\n if (!diffs[previous_equality][1]) {\n // emptied out previous equality, so delete it and include previous delete/insert\n diffs.splice(previous_equality, 1);\n pointer--;\n var k = previous_equality - 1;\n if (diffs[k] && diffs[k][0] === DIFF_INSERT) {\n count_insert++;\n text_insert = diffs[k][1] + text_insert;\n k--;\n }\n if (diffs[k] && diffs[k][0] === DIFF_DELETE) {\n count_delete++;\n text_delete = diffs[k][1] + text_delete;\n k--;\n }\n previous_equality = k;\n }\n }\n if (starts_with_pair_end(diffs[pointer][1])) {\n var stray = diffs[pointer][1].charAt(0);\n diffs[pointer][1] = diffs[pointer][1].slice(1);\n text_delete += stray;\n text_insert += stray;\n }\n }\n if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n // for empty equality not at end, wait for next equality\n diffs.splice(pointer, 1);\n break;\n }\n if (text_delete.length > 0 || text_insert.length > 0) {\n // note that diff_commonPrefix and diff_commonSuffix are unicode-aware\n if (text_delete.length > 0 && text_insert.length > 0) {\n // Factor out any common prefixes.\n commonlength = diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if (previous_equality >= 0) {\n diffs[previous_equality][1] += text_insert.substring(\n 0,\n commonlength\n );\n } else {\n diffs.splice(0, 0, [\n DIFF_EQUAL,\n text_insert.substring(0, commonlength),\n ]);\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixes.\n commonlength = diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] =\n text_insert.substring(text_insert.length - commonlength) +\n diffs[pointer][1];\n text_insert = text_insert.substring(\n 0,\n text_insert.length - commonlength\n );\n text_delete = text_delete.substring(\n 0,\n text_delete.length - commonlength\n );\n }\n }\n // Delete the offending records and add the merged ones.\n var n = count_insert + count_delete;\n if (text_delete.length === 0 && text_insert.length === 0) {\n diffs.splice(pointer - n, n);\n pointer = pointer - n;\n } else if (text_delete.length === 0) {\n diffs.splice(pointer - n, n, [DIFF_INSERT, text_insert]);\n pointer = pointer - n + 1;\n } else if (text_insert.length === 0) {\n diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete]);\n pointer = pointer - n + 1;\n } else {\n diffs.splice(\n pointer - n,\n n,\n [DIFF_DELETE, text_delete],\n [DIFF_INSERT, text_insert]\n );\n pointer = pointer - n + 2;\n }\n }\n if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = \"\";\n text_insert = \"\";\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === \"\") {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: ABAC -> ABAC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (\n diffs[pointer - 1][0] === DIFF_EQUAL &&\n diffs[pointer + 1][0] === DIFF_EQUAL\n ) {\n // This is a single edit surrounded by equalities.\n if (\n diffs[pointer][1].substring(\n diffs[pointer][1].length - diffs[pointer - 1][1].length\n ) === diffs[pointer - 1][1]\n ) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] =\n diffs[pointer - 1][1] +\n diffs[pointer][1].substring(\n 0,\n diffs[pointer][1].length - diffs[pointer - 1][1].length\n );\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (\n diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]\n ) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n diff_cleanupMerge(diffs, fix_unicode);\n }\n}\n\nfunction is_surrogate_pair_start(charCode) {\n return charCode >= 0xd800 && charCode <= 0xdbff;\n}\n\nfunction is_surrogate_pair_end(charCode) {\n return charCode >= 0xdc00 && charCode <= 0xdfff;\n}\n\nfunction starts_with_pair_end(str) {\n return is_surrogate_pair_end(str.charCodeAt(0));\n}\n\nfunction ends_with_pair_start(str) {\n return is_surrogate_pair_start(str.charCodeAt(str.length - 1));\n}\n\nfunction remove_empty_tuples(tuples) {\n var ret = [];\n for (var i = 0; i < tuples.length; i++) {\n if (tuples[i][1].length > 0) {\n ret.push(tuples[i]);\n }\n }\n return ret;\n}\n\nfunction make_edit_splice(before, oldMiddle, newMiddle, after) {\n if (ends_with_pair_start(before) || starts_with_pair_end(after)) {\n return null;\n }\n return remove_empty_tuples([\n [DIFF_EQUAL, before],\n [DIFF_DELETE, oldMiddle],\n [DIFF_INSERT, newMiddle],\n [DIFF_EQUAL, after],\n ]);\n}\n\nfunction find_cursor_edit_diff(oldText, newText, cursor_pos) {\n // note: this runs after equality check has ruled out exact equality\n var oldRange =\n typeof cursor_pos === \"number\"\n ? { index: cursor_pos, length: 0 }\n : cursor_pos.oldRange;\n var newRange = typeof cursor_pos === \"number\" ? null : cursor_pos.newRange;\n // take into account the old and new selection to generate the best diff\n // possible for a text edit. for example, a text change from \"xxx\" to \"xx\"\n // could be a delete or forwards-delete of any one of the x's, or the\n // result of selecting two of the x's and typing \"x\".\n var oldLength = oldText.length;\n var newLength = newText.length;\n if (oldRange.length === 0 && (newRange === null || newRange.length === 0)) {\n // see if we have an insert or delete before or after cursor\n var oldCursor = oldRange.index;\n var oldBefore = oldText.slice(0, oldCursor);\n var oldAfter = oldText.slice(oldCursor);\n var maybeNewCursor = newRange ? newRange.index : null;\n editBefore: {\n // is this an insert or delete right before oldCursor?\n var newCursor = oldCursor + newLength - oldLength;\n if (maybeNewCursor !== null && maybeNewCursor !== newCursor) {\n break editBefore;\n }\n if (newCursor < 0 || newCursor > newLength) {\n break editBefore;\n }\n var newBefore = newText.slice(0, newCursor);\n var newAfter = newText.slice(newCursor);\n if (newAfter !== oldAfter) {\n break editBefore;\n }\n var prefixLength = Math.min(oldCursor, newCursor);\n var oldPrefix = oldBefore.slice(0, prefixLength);\n var newPrefix = newBefore.slice(0, prefixLength);\n if (oldPrefix !== newPrefix) {\n break editBefore;\n }\n var oldMiddle = oldBefore.slice(prefixLength);\n var newMiddle = newBefore.slice(prefixLength);\n return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter);\n }\n editAfter: {\n // is this an insert or delete right after oldCursor?\n if (maybeNewCursor !== null && maybeNewCursor !== oldCursor) {\n break editAfter;\n }\n var cursor = oldCursor;\n var newBefore = newText.slice(0, cursor);\n var newAfter = newText.slice(cursor);\n if (newBefore !== oldBefore) {\n break editAfter;\n }\n var suffixLength = Math.min(oldLength - cursor, newLength - cursor);\n var oldSuffix = oldAfter.slice(oldAfter.length - suffixLength);\n var newSuffix = newAfter.slice(newAfter.length - suffixLength);\n if (oldSuffix !== newSuffix) {\n break editAfter;\n }\n var oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength);\n var newMiddle = newAfter.slice(0, newAfter.length - suffixLength);\n return make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix);\n }\n }\n if (oldRange.length > 0 && newRange && newRange.length === 0) {\n replaceRange: {\n // see if diff could be a splice of the old selection range\n var oldPrefix = oldText.slice(0, oldRange.index);\n var oldSuffix = oldText.slice(oldRange.index + oldRange.length);\n var prefixLength = oldPrefix.length;\n var suffixLength = oldSuffix.length;\n if (newLength < prefixLength + suffixLength) {\n break replaceRange;\n }\n var newPrefix = newText.slice(0, prefixLength);\n var newSuffix = newText.slice(newLength - suffixLength);\n if (oldPrefix !== newPrefix || oldSuffix !== newSuffix) {\n break replaceRange;\n }\n var oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength);\n var newMiddle = newText.slice(prefixLength, newLength - suffixLength);\n return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix);\n }\n }\n\n return null;\n}\n\nfunction diff(text1, text2, cursor_pos, cleanup) {\n // only pass fix_unicode=true at the top level, not when diff_main is\n // recursively invoked\n return diff_main(text1, text2, cursor_pos, cleanup, true);\n}\n\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\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 promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\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/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/**\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 ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\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 return array;\n}\n\n/**\n * A specialized version of `_.reduce` 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 * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\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 return result;\n}\n\n/**\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\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\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\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\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 return this.has(key) && delete this.__data__[key];\n}\n\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 */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\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 */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\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 */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\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}\n\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 */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\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 */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\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 */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\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 */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\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 */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\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 */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\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 */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\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 */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\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 */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\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 */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\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 return this.__data__['delete'](key);\n}\n\n/**\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\n/**\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\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 */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\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 */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\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 */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\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 */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\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 */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\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} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including 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 */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\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 if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\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 */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\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 */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\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 */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\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 */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\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 */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\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 */\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\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\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 */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\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 */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\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 */\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\n/**\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\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\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 */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Copies own symbol properties 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 */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\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 */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\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 */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\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 */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\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 */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\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 */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\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`, `Number`, `RegExp`, 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 {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\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: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\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 cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\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 */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\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 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\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 */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\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 */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, true, true);\n}\n\n/**\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\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 */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\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;\n\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 */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an 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 an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\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 */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\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 */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\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 */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\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 return !!value && (type == 'object' || type == 'function');\n}\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 && typeof value == 'object';\n}\n\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 */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\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\n/**\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 = cloneDeep;\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\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 nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\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/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\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 if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\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 return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\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 return result;\n}\n\n/**\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\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\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 cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\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\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\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\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\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\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 */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\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 */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\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 */\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\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\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\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 */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\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 */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\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 */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\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 */\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 return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\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 */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\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\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 */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\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 */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\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 */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\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 */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\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 */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\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\n this.size = data.size;\n return result;\n}\n\n/**\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\n/**\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\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 */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\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 */\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)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\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 */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\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 */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\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 */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\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 */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\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 */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\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 */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\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 */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\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 */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\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 */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\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 */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\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 */\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 if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\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 */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(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: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\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 */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\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 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\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 */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\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 */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\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 */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\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 */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\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\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 */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\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;\n\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 */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\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 */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.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 * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\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 */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\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 var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\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 */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\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 return value != null && (type == 'object' || type == 'function');\n}\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\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 */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\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 */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\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\n/**\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 = isEqual;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst cloneDeep = require(\"lodash.clonedeep\");\nconst isEqual = require(\"lodash.isequal\");\nvar AttributeMap;\n(function (AttributeMap) {\n function compose(a = {}, b = {}, keepNull = false) {\n if (typeof a !== 'object') {\n a = {};\n }\n if (typeof b !== 'object') {\n b = {};\n }\n let attributes = cloneDeep(b);\n if (!keepNull) {\n attributes = Object.keys(attributes).reduce((copy, key) => {\n if (attributes[key] != null) {\n copy[key] = attributes[key];\n }\n return copy;\n }, {});\n }\n for (const key in a) {\n if (a[key] !== undefined && b[key] === undefined) {\n attributes[key] = a[key];\n }\n }\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n AttributeMap.compose = compose;\n function diff(a = {}, b = {}) {\n if (typeof a !== 'object') {\n a = {};\n }\n if (typeof b !== 'object') {\n b = {};\n }\n const attributes = Object.keys(a)\n .concat(Object.keys(b))\n .reduce((attrs, key) => {\n if (!isEqual(a[key], b[key])) {\n attrs[key] = b[key] === undefined ? null : b[key];\n }\n return attrs;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n AttributeMap.diff = diff;\n function invert(attr = {}, base = {}) {\n attr = attr || {};\n const baseInverted = Object.keys(base).reduce((memo, key) => {\n if (base[key] !== attr[key] && attr[key] !== undefined) {\n memo[key] = base[key];\n }\n return memo;\n }, {});\n return Object.keys(attr).reduce((memo, key) => {\n if (attr[key] !== base[key] && base[key] === undefined) {\n memo[key] = null;\n }\n return memo;\n }, baseInverted);\n }\n AttributeMap.invert = invert;\n function transform(a, b, priority = false) {\n if (typeof a !== 'object') {\n return b;\n }\n if (typeof b !== 'object') {\n return undefined;\n }\n if (!priority) {\n return b; // b simply overwrites us without priority\n }\n const attributes = Object.keys(b).reduce((attrs, key) => {\n if (a[key] === undefined) {\n attrs[key] = b[key]; // null is a valid value\n }\n return attrs;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n AttributeMap.transform = transform;\n})(AttributeMap || (AttributeMap = {}));\nexports.default = AttributeMap;\n//# sourceMappingURL=AttributeMap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Op;\n(function (Op) {\n function length(op) {\n if (typeof op.delete === 'number') {\n return op.delete;\n }\n else if (typeof op.retain === 'number') {\n return op.retain;\n }\n else if (typeof op.retain === 'object' && op.retain !== null) {\n return 1;\n }\n else {\n return typeof op.insert === 'string' ? op.insert.length : 1;\n }\n }\n Op.length = length;\n})(Op || (Op = {}));\nexports.default = Op;\n//# sourceMappingURL=Op.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Op_1 = require(\"./Op\");\nclass Iterator {\n constructor(ops) {\n this.ops = ops;\n this.index = 0;\n this.offset = 0;\n }\n hasNext() {\n return this.peekLength() < Infinity;\n }\n next(length) {\n if (!length) {\n length = Infinity;\n }\n const nextOp = this.ops[this.index];\n if (nextOp) {\n const offset = this.offset;\n const opLength = Op_1.default.length(nextOp);\n if (length >= opLength - offset) {\n length = opLength - offset;\n this.index += 1;\n this.offset = 0;\n }\n else {\n this.offset += length;\n }\n if (typeof nextOp.delete === 'number') {\n return { delete: length };\n }\n else {\n const retOp = {};\n if (nextOp.attributes) {\n retOp.attributes = nextOp.attributes;\n }\n if (typeof nextOp.retain === 'number') {\n retOp.retain = length;\n }\n else if (typeof nextOp.retain === 'object' &&\n nextOp.retain !== null) {\n // offset should === 0, length should === 1\n retOp.retain = nextOp.retain;\n }\n else if (typeof nextOp.insert === 'string') {\n retOp.insert = nextOp.insert.substr(offset, length);\n }\n else {\n // offset should === 0, length should === 1\n retOp.insert = nextOp.insert;\n }\n return retOp;\n }\n }\n else {\n return { retain: Infinity };\n }\n }\n peek() {\n return this.ops[this.index];\n }\n peekLength() {\n if (this.ops[this.index]) {\n // Should never return 0 if our index is being managed correctly\n return Op_1.default.length(this.ops[this.index]) - this.offset;\n }\n else {\n return Infinity;\n }\n }\n peekType() {\n const op = this.ops[this.index];\n if (op) {\n if (typeof op.delete === 'number') {\n return 'delete';\n }\n else if (typeof op.retain === 'number' ||\n (typeof op.retain === 'object' && op.retain !== null)) {\n return 'retain';\n }\n else {\n return 'insert';\n }\n }\n return 'retain';\n }\n rest() {\n if (!this.hasNext()) {\n return [];\n }\n else if (this.offset === 0) {\n return this.ops.slice(this.index);\n }\n else {\n const offset = this.offset;\n const index = this.index;\n const next = this.next();\n const rest = this.ops.slice(this.index);\n this.offset = offset;\n this.index = index;\n return [next].concat(rest);\n }\n }\n}\nexports.default = Iterator;\n//# sourceMappingURL=OpIterator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AttributeMap = exports.OpIterator = exports.Op = void 0;\nconst diff = require(\"fast-diff\");\nconst cloneDeep = require(\"lodash.clonedeep\");\nconst isEqual = require(\"lodash.isequal\");\nconst AttributeMap_1 = require(\"./AttributeMap\");\nexports.AttributeMap = AttributeMap_1.default;\nconst Op_1 = require(\"./Op\");\nexports.Op = Op_1.default;\nconst OpIterator_1 = require(\"./OpIterator\");\nexports.OpIterator = OpIterator_1.default;\nconst NULL_CHARACTER = String.fromCharCode(0); // Placeholder char for embed in diff()\nconst getEmbedTypeAndData = (a, b) => {\n if (typeof a !== 'object' || a === null) {\n throw new Error(`cannot retain a ${typeof a}`);\n }\n if (typeof b !== 'object' || b === null) {\n throw new Error(`cannot retain a ${typeof b}`);\n }\n const embedType = Object.keys(a)[0];\n if (!embedType || embedType !== Object.keys(b)[0]) {\n throw new Error(`embed types not matched: ${embedType} != ${Object.keys(b)[0]}`);\n }\n return [embedType, a[embedType], b[embedType]];\n};\nclass Delta {\n constructor(ops) {\n // Assume we are given a well formed ops\n if (Array.isArray(ops)) {\n this.ops = ops;\n }\n else if (ops != null && Array.isArray(ops.ops)) {\n this.ops = ops.ops;\n }\n else {\n this.ops = [];\n }\n }\n static registerEmbed(embedType, handler) {\n this.handlers[embedType] = handler;\n }\n static unregisterEmbed(embedType) {\n delete this.handlers[embedType];\n }\n static getHandler(embedType) {\n const handler = this.handlers[embedType];\n if (!handler) {\n throw new Error(`no handlers for embed type \"${embedType}\"`);\n }\n return handler;\n }\n insert(arg, attributes) {\n const newOp = {};\n if (typeof arg === 'string' && arg.length === 0) {\n return this;\n }\n newOp.insert = arg;\n if (attributes != null &&\n typeof attributes === 'object' &&\n Object.keys(attributes).length > 0) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n }\n delete(length) {\n if (length <= 0) {\n return this;\n }\n return this.push({ delete: length });\n }\n retain(length, attributes) {\n if (typeof length === 'number' && length <= 0) {\n return this;\n }\n const newOp = { retain: length };\n if (attributes != null &&\n typeof attributes === 'object' &&\n Object.keys(attributes).length > 0) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n }\n push(newOp) {\n let index = this.ops.length;\n let lastOp = this.ops[index - 1];\n newOp = cloneDeep(newOp);\n if (typeof lastOp === 'object') {\n if (typeof newOp.delete === 'number' &&\n typeof lastOp.delete === 'number') {\n this.ops[index - 1] = { delete: lastOp.delete + newOp.delete };\n return this;\n }\n // Since it does not matter if we insert before or after deleting at the same index,\n // always prefer to insert first\n if (typeof lastOp.delete === 'number' && newOp.insert != null) {\n index -= 1;\n lastOp = this.ops[index - 1];\n if (typeof lastOp !== 'object') {\n this.ops.unshift(newOp);\n return this;\n }\n }\n if (isEqual(newOp.attributes, lastOp.attributes)) {\n if (typeof newOp.insert === 'string' &&\n typeof lastOp.insert === 'string') {\n this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n if (typeof newOp.attributes === 'object') {\n this.ops[index - 1].attributes = newOp.attributes;\n }\n return this;\n }\n else if (typeof newOp.retain === 'number' &&\n typeof lastOp.retain === 'number') {\n this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n if (typeof newOp.attributes === 'object') {\n this.ops[index - 1].attributes = newOp.attributes;\n }\n return this;\n }\n }\n }\n if (index === this.ops.length) {\n this.ops.push(newOp);\n }\n else {\n this.ops.splice(index, 0, newOp);\n }\n return this;\n }\n chop() {\n const lastOp = this.ops[this.ops.length - 1];\n if (lastOp && typeof lastOp.retain === 'number' && !lastOp.attributes) {\n this.ops.pop();\n }\n return this;\n }\n filter(predicate) {\n return this.ops.filter(predicate);\n }\n forEach(predicate) {\n this.ops.forEach(predicate);\n }\n map(predicate) {\n return this.ops.map(predicate);\n }\n partition(predicate) {\n const passed = [];\n const failed = [];\n this.forEach((op) => {\n const target = predicate(op) ? passed : failed;\n target.push(op);\n });\n return [passed, failed];\n }\n reduce(predicate, initialValue) {\n return this.ops.reduce(predicate, initialValue);\n }\n changeLength() {\n return this.reduce((length, elem) => {\n if (elem.insert) {\n return length + Op_1.default.length(elem);\n }\n else if (elem.delete) {\n return length - elem.delete;\n }\n return length;\n }, 0);\n }\n length() {\n return this.reduce((length, elem) => {\n return length + Op_1.default.length(elem);\n }, 0);\n }\n slice(start = 0, end = Infinity) {\n const ops = [];\n const iter = new OpIterator_1.default(this.ops);\n let index = 0;\n while (index < end && iter.hasNext()) {\n let nextOp;\n if (index < start) {\n nextOp = iter.next(start - index);\n }\n else {\n nextOp = iter.next(end - index);\n ops.push(nextOp);\n }\n index += Op_1.default.length(nextOp);\n }\n return new Delta(ops);\n }\n compose(other) {\n const thisIter = new OpIterator_1.default(this.ops);\n const otherIter = new OpIterator_1.default(other.ops);\n const ops = [];\n const firstOther = otherIter.peek();\n if (firstOther != null &&\n typeof firstOther.retain === 'number' &&\n firstOther.attributes == null) {\n let firstLeft = firstOther.retain;\n while (thisIter.peekType() === 'insert' &&\n thisIter.peekLength() <= firstLeft) {\n firstLeft -= thisIter.peekLength();\n ops.push(thisIter.next());\n }\n if (firstOther.retain - firstLeft > 0) {\n otherIter.next(firstOther.retain - firstLeft);\n }\n }\n const delta = new Delta(ops);\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n }\n else if (thisIter.peekType() === 'delete') {\n delta.push(thisIter.next());\n }\n else {\n const length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n const thisOp = thisIter.next(length);\n const otherOp = otherIter.next(length);\n if (otherOp.retain) {\n const newOp = {};\n if (typeof thisOp.retain === 'number') {\n newOp.retain =\n typeof otherOp.retain === 'number' ? length : otherOp.retain;\n }\n else {\n if (typeof otherOp.retain === 'number') {\n if (thisOp.retain == null) {\n newOp.insert = thisOp.insert;\n }\n else {\n newOp.retain = thisOp.retain;\n }\n }\n else {\n const action = thisOp.retain == null ? 'insert' : 'retain';\n const [embedType, thisData, otherData] = getEmbedTypeAndData(thisOp[action], otherOp.retain);\n const handler = Delta.getHandler(embedType);\n newOp[action] = {\n [embedType]: handler.compose(thisData, otherData, action === 'retain'),\n };\n }\n }\n // Preserve null when composing with a retain, otherwise remove it for inserts\n const attributes = AttributeMap_1.default.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');\n if (attributes) {\n newOp.attributes = attributes;\n }\n delta.push(newOp);\n // Optimization if rest of other is just retain\n if (!otherIter.hasNext() &&\n isEqual(delta.ops[delta.ops.length - 1], newOp)) {\n const rest = new Delta(thisIter.rest());\n return delta.concat(rest).chop();\n }\n // Other op should be delete, we could be an insert or retain\n // Insert + delete cancels out\n }\n else if (typeof otherOp.delete === 'number' &&\n (typeof thisOp.retain === 'number' ||\n (typeof thisOp.retain === 'object' && thisOp.retain !== null))) {\n delta.push(otherOp);\n }\n }\n }\n return delta.chop();\n }\n concat(other) {\n const delta = new Delta(this.ops.slice());\n if (other.ops.length > 0) {\n delta.push(other.ops[0]);\n delta.ops = delta.ops.concat(other.ops.slice(1));\n }\n return delta;\n }\n diff(other, cursor) {\n if (this.ops === other.ops) {\n return new Delta();\n }\n const strings = [this, other].map((delta) => {\n return delta\n .map((op) => {\n if (op.insert != null) {\n return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n }\n const prep = delta === other ? 'on' : 'with';\n throw new Error('diff() called ' + prep + ' non-document');\n })\n .join('');\n });\n const retDelta = new Delta();\n const diffResult = diff(strings[0], strings[1], cursor, true);\n const thisIter = new OpIterator_1.default(this.ops);\n const otherIter = new OpIterator_1.default(other.ops);\n diffResult.forEach((component) => {\n let length = component[1].length;\n while (length > 0) {\n let opLength = 0;\n switch (component[0]) {\n case diff.INSERT:\n opLength = Math.min(otherIter.peekLength(), length);\n retDelta.push(otherIter.next(opLength));\n break;\n case diff.DELETE:\n opLength = Math.min(length, thisIter.peekLength());\n thisIter.next(opLength);\n retDelta.delete(opLength);\n break;\n case diff.EQUAL:\n opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);\n const thisOp = thisIter.next(opLength);\n const otherOp = otherIter.next(opLength);\n if (isEqual(thisOp.insert, otherOp.insert)) {\n retDelta.retain(opLength, AttributeMap_1.default.diff(thisOp.attributes, otherOp.attributes));\n }\n else {\n retDelta.push(otherOp).delete(opLength);\n }\n break;\n }\n length -= opLength;\n }\n });\n return retDelta.chop();\n }\n eachLine(predicate, newline = '\\n') {\n const iter = new OpIterator_1.default(this.ops);\n let line = new Delta();\n let i = 0;\n while (iter.hasNext()) {\n if (iter.peekType() !== 'insert') {\n return;\n }\n const thisOp = iter.peek();\n const start = Op_1.default.length(thisOp) - iter.peekLength();\n const index = typeof thisOp.insert === 'string'\n ? thisOp.insert.indexOf(newline, start) - start\n : -1;\n if (index < 0) {\n line.push(iter.next());\n }\n else if (index > 0) {\n line.push(iter.next(index));\n }\n else {\n if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n return;\n }\n i += 1;\n line = new Delta();\n }\n }\n if (line.length() > 0) {\n predicate(line, {}, i);\n }\n }\n invert(base) {\n const inverted = new Delta();\n this.reduce((baseIndex, op) => {\n if (op.insert) {\n inverted.delete(Op_1.default.length(op));\n }\n else if (typeof op.retain === 'number' && op.attributes == null) {\n inverted.retain(op.retain);\n return baseIndex + op.retain;\n }\n else if (op.delete || typeof op.retain === 'number') {\n const length = (op.delete || op.retain);\n const slice = base.slice(baseIndex, baseIndex + length);\n slice.forEach((baseOp) => {\n if (op.delete) {\n inverted.push(baseOp);\n }\n else if (op.retain && op.attributes) {\n inverted.retain(Op_1.default.length(baseOp), AttributeMap_1.default.invert(op.attributes, baseOp.attributes));\n }\n });\n return baseIndex + length;\n }\n else if (typeof op.retain === 'object' && op.retain !== null) {\n const slice = base.slice(baseIndex, baseIndex + 1);\n const baseOp = new OpIterator_1.default(slice.ops).next();\n const [embedType, opData, baseOpData] = getEmbedTypeAndData(op.retain, baseOp.insert);\n const handler = Delta.getHandler(embedType);\n inverted.retain({ [embedType]: handler.invert(opData, baseOpData) }, AttributeMap_1.default.invert(op.attributes, baseOp.attributes));\n return baseIndex + 1;\n }\n return baseIndex;\n }, 0);\n return inverted.chop();\n }\n transform(arg, priority = false) {\n priority = !!priority;\n if (typeof arg === 'number') {\n return this.transformPosition(arg, priority);\n }\n const other = arg;\n const thisIter = new OpIterator_1.default(this.ops);\n const otherIter = new OpIterator_1.default(other.ops);\n const delta = new Delta();\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (thisIter.peekType() === 'insert' &&\n (priority || otherIter.peekType() !== 'insert')) {\n delta.retain(Op_1.default.length(thisIter.next()));\n }\n else if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n }\n else {\n const length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n const thisOp = thisIter.next(length);\n const otherOp = otherIter.next(length);\n if (thisOp.delete) {\n // Our delete either makes their delete redundant or removes their retain\n continue;\n }\n else if (otherOp.delete) {\n delta.push(otherOp);\n }\n else {\n const thisData = thisOp.retain;\n const otherData = otherOp.retain;\n let transformedData = typeof otherData === 'object' && otherData !== null\n ? otherData\n : length;\n if (typeof thisData === 'object' &&\n thisData !== null &&\n typeof otherData === 'object' &&\n otherData !== null) {\n const embedType = Object.keys(thisData)[0];\n if (embedType === Object.keys(otherData)[0]) {\n const handler = Delta.getHandler(embedType);\n if (handler) {\n transformedData = {\n [embedType]: handler.transform(thisData[embedType], otherData[embedType], priority),\n };\n }\n }\n }\n // We retain either their retain or insert\n delta.retain(transformedData, AttributeMap_1.default.transform(thisOp.attributes, otherOp.attributes, priority));\n }\n }\n }\n return delta.chop();\n }\n transformPosition(index, priority = false) {\n priority = !!priority;\n const thisIter = new OpIterator_1.default(this.ops);\n let offset = 0;\n while (thisIter.hasNext() && offset <= index) {\n const length = thisIter.peekLength();\n const nextType = thisIter.peekType();\n thisIter.next();\n if (nextType === 'delete') {\n index -= Math.min(length, index - offset);\n continue;\n }\n else if (nextType === 'insert' && (offset < index || !priority)) {\n index += length;\n }\n offset += length;\n }\n return index;\n }\n}\nDelta.Op = Op_1.default;\nDelta.OpIterator = OpIterator_1.default;\nDelta.AttributeMap = AttributeMap_1.default;\nDelta.handlers = {};\nexports.default = Delta;\nif (typeof module === 'object') {\n module.exports = Delta;\n module.exports.default = Delta;\n}\n//# sourceMappingURL=Delta.js.map","import { EmbedBlot } from 'parchment';\nclass Break extends EmbedBlot {\n static value() {\n return undefined;\n }\n optimize() {\n if (this.prev || this.next) {\n this.remove();\n }\n }\n length() {\n return 0;\n }\n value() {\n return '';\n }\n}\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\nexport default Break;\n//# sourceMappingURL=break.js.map","import { TextBlot } from 'parchment';\nclass Text extends TextBlot {}\n\n// https://lodash.com/docs#escape\nconst entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nfunction escapeText(text) {\n return text.replace(/[&<>\"']/g, s => entityMap[s]);\n}\nexport { Text as default, escapeText };\n//# sourceMappingURL=text.js.map","import { EmbedBlot, InlineBlot, Scope } from 'parchment';\nimport Break from './break.js';\nimport Text from './text.js';\nclass Inline extends InlineBlot {\n static allowedChildren = [Inline, Break, EmbedBlot, Text];\n // Lower index means deeper in the DOM tree, since not found (-1) is for embeds\n static order = ['cursor', 'inline',\n // Must be lower\n 'link',\n // Chrome wants to be lower\n 'underline', 'strike', 'italic', 'bold', 'script', 'code' // Must be higher\n ];\n static compare(self, other) {\n const selfIndex = Inline.order.indexOf(self);\n const otherIndex = Inline.order.indexOf(other);\n if (selfIndex >= 0 || otherIndex >= 0) {\n return selfIndex - otherIndex;\n }\n if (self === other) {\n return 0;\n }\n if (self < other) {\n return -1;\n }\n return 1;\n }\n formatAt(index, length, name, value) {\n if (Inline.compare(this.statics.blotName, name) < 0 && this.scroll.query(name, Scope.BLOT)) {\n const blot = this.isolate(index, length);\n if (value) {\n blot.wrap(name, value);\n }\n } else {\n super.formatAt(index, length, name, value);\n }\n }\n optimize(context) {\n super.optimize(context);\n if (this.parent instanceof Inline && Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {\n const parent = this.parent.isolate(this.offset(), this.length());\n // @ts-expect-error TODO: make isolate generic\n this.moveChildren(parent);\n parent.wrap(this);\n }\n }\n}\nexport default Inline;\n//# sourceMappingURL=inline.js.map","import { AttributorStore, BlockBlot, EmbedBlot, LeafBlot, Scope } from 'parchment';\nimport Delta from 'quill-delta';\nimport Break from './break.js';\nimport Inline from './inline.js';\nimport TextBlot from './text.js';\nconst NEWLINE_LENGTH = 1;\nclass Block extends BlockBlot {\n cache = {};\n delta() {\n if (this.cache.delta == null) {\n this.cache.delta = blockDelta(this);\n }\n return this.cache.delta;\n }\n deleteAt(index, length) {\n super.deleteAt(index, length);\n this.cache = {};\n }\n formatAt(index, length, name, value) {\n if (length <= 0) return;\n if (this.scroll.query(name, Scope.BLOCK)) {\n if (index + length === this.length()) {\n this.format(name, value);\n }\n } else {\n super.formatAt(index, Math.min(length, this.length() - index - 1), name, value);\n }\n this.cache = {};\n }\n insertAt(index, value, def) {\n if (def != null) {\n super.insertAt(index, value, def);\n this.cache = {};\n return;\n }\n if (value.length === 0) return;\n const lines = value.split('\\n');\n const text = lines.shift();\n if (text.length > 0) {\n if (index < this.length() - 1 || this.children.tail == null) {\n super.insertAt(Math.min(index, this.length() - 1), text);\n } else {\n this.children.tail.insertAt(this.children.tail.length(), text);\n }\n this.cache = {};\n }\n // TODO: Fix this next time the file is edited.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let block = this;\n lines.reduce((lineIndex, line) => {\n // @ts-expect-error Fix me later\n block = block.split(lineIndex, true);\n block.insertAt(0, line);\n return line.length;\n }, index + text.length);\n }\n insertBefore(blot, ref) {\n const {\n head\n } = this.children;\n super.insertBefore(blot, ref);\n if (head instanceof Break) {\n head.remove();\n }\n this.cache = {};\n }\n length() {\n if (this.cache.length == null) {\n this.cache.length = super.length() + NEWLINE_LENGTH;\n }\n return this.cache.length;\n }\n moveChildren(target, ref) {\n super.moveChildren(target, ref);\n this.cache = {};\n }\n optimize(context) {\n super.optimize(context);\n this.cache = {};\n }\n path(index) {\n return super.path(index, true);\n }\n removeChild(child) {\n super.removeChild(child);\n this.cache = {};\n }\n split(index) {\n let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {\n const clone = this.clone();\n if (index === 0) {\n this.parent.insertBefore(clone, this);\n return this;\n }\n this.parent.insertBefore(clone, this.next);\n return clone;\n }\n const next = super.split(index, force);\n this.cache = {};\n return next;\n }\n}\nBlock.blotName = 'block';\nBlock.tagName = 'P';\nBlock.defaultChild = Break;\nBlock.allowedChildren = [Break, Inline, EmbedBlot, TextBlot];\nclass BlockEmbed extends EmbedBlot {\n attach() {\n super.attach();\n this.attributes = new AttributorStore(this.domNode);\n }\n delta() {\n return new Delta().insert(this.value(), {\n ...this.formats(),\n ...this.attributes.values()\n });\n }\n format(name, value) {\n const attribute = this.scroll.query(name, Scope.BLOCK_ATTRIBUTE);\n if (attribute != null) {\n // @ts-expect-error TODO: Scroll#query() should return Attributor when scope is attribute\n this.attributes.attribute(attribute, value);\n }\n }\n formatAt(index, length, name, value) {\n this.format(name, value);\n }\n insertAt(index, value, def) {\n if (def != null) {\n super.insertAt(index, value, def);\n return;\n }\n const lines = value.split('\\n');\n const text = lines.pop();\n const blocks = lines.map(line => {\n const block = this.scroll.create(Block.blotName);\n block.insertAt(0, line);\n return block;\n });\n const ref = this.split(index);\n blocks.forEach(block => {\n this.parent.insertBefore(block, ref);\n });\n if (text) {\n this.parent.insertBefore(this.scroll.create('text', text), ref);\n }\n }\n}\nBlockEmbed.scope = Scope.BLOCK_BLOT;\n// It is important for cursor behavior BlockEmbeds use tags that are block level elements\n\nfunction blockDelta(blot) {\n let filter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return blot.descendants(LeafBlot).reduce((delta, leaf) => {\n if (leaf.length() === 0) {\n return delta;\n }\n return delta.insert(leaf.value(), bubbleFormats(leaf, {}, filter));\n }, new Delta()).insert('\\n', bubbleFormats(blot));\n}\nfunction bubbleFormats(blot) {\n let formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let filter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (blot == null) return formats;\n if ('formats' in blot && typeof blot.formats === 'function') {\n formats = {\n ...formats,\n ...blot.formats()\n };\n if (filter) {\n // exclude syntax highlighting from deltas and getFormat()\n delete formats['code-token'];\n }\n }\n if (blot.parent == null || blot.parent.statics.blotName === 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {\n return formats;\n }\n return bubbleFormats(blot.parent, formats, filter);\n}\nexport { blockDelta, bubbleFormats, BlockEmbed, Block as default };\n//# sourceMappingURL=block.js.map","import { EmbedBlot, Scope } from 'parchment';\nimport TextBlot from './text.js';\nclass Cursor extends EmbedBlot {\n static blotName = 'cursor';\n static className = 'ql-cursor';\n static tagName = 'span';\n static CONTENTS = '\\uFEFF'; // Zero width no break space\n\n static value() {\n return undefined;\n }\n constructor(scroll, domNode, selection) {\n super(scroll, domNode);\n this.selection = selection;\n this.textNode = document.createTextNode(Cursor.CONTENTS);\n this.domNode.appendChild(this.textNode);\n this.savedLength = 0;\n }\n detach() {\n // super.detach() will also clear domNode.__blot\n if (this.parent != null) this.parent.removeChild(this);\n }\n format(name, value) {\n if (this.savedLength !== 0) {\n super.format(name, value);\n return;\n }\n // TODO: Fix this next time the file is edited.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let target = this;\n let index = 0;\n while (target != null && target.statics.scope !== Scope.BLOCK_BLOT) {\n index += target.offset(target.parent);\n target = target.parent;\n }\n if (target != null) {\n this.savedLength = Cursor.CONTENTS.length;\n // @ts-expect-error TODO: allow empty context in Parchment\n target.optimize();\n target.formatAt(index, Cursor.CONTENTS.length, name, value);\n this.savedLength = 0;\n }\n }\n index(node, offset) {\n if (node === this.textNode) return 0;\n return super.index(node, offset);\n }\n length() {\n return this.savedLength;\n }\n position() {\n return [this.textNode, this.textNode.data.length];\n }\n remove() {\n super.remove();\n // @ts-expect-error Fix me later\n this.parent = null;\n }\n restore() {\n if (this.selection.composing || this.parent == null) return null;\n const range = this.selection.getNativeRange();\n // Browser may push down styles/nodes inside the cursor blot.\n // https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#push-down-values\n while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {\n // @ts-expect-error Fix me later\n this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);\n }\n const prevTextBlot = this.prev instanceof TextBlot ? this.prev : null;\n const prevTextLength = prevTextBlot ? prevTextBlot.length() : 0;\n const nextTextBlot = this.next instanceof TextBlot ? this.next : null;\n // @ts-expect-error TODO: make TextBlot.text public\n const nextText = nextTextBlot ? nextTextBlot.text : '';\n const {\n textNode\n } = this;\n // take text from inside this blot and reset it\n const newText = textNode.data.split(Cursor.CONTENTS).join('');\n textNode.data = Cursor.CONTENTS;\n\n // proactively merge TextBlots around cursor so that optimization\n // doesn't lose the cursor. the reason we are here in cursor.restore\n // could be that the user clicked in prevTextBlot or nextTextBlot, or\n // the user typed something.\n let mergedTextBlot;\n if (prevTextBlot) {\n mergedTextBlot = prevTextBlot;\n if (newText || nextTextBlot) {\n prevTextBlot.insertAt(prevTextBlot.length(), newText + nextText);\n if (nextTextBlot) {\n nextTextBlot.remove();\n }\n }\n } else if (nextTextBlot) {\n mergedTextBlot = nextTextBlot;\n nextTextBlot.insertAt(0, newText);\n } else {\n const newTextNode = document.createTextNode(newText);\n mergedTextBlot = this.scroll.create(newTextNode);\n this.parent.insertBefore(mergedTextBlot, this);\n }\n this.remove();\n if (range) {\n // calculate selection to restore\n const remapOffset = (node, offset) => {\n if (prevTextBlot && node === prevTextBlot.domNode) {\n return offset;\n }\n if (node === textNode) {\n return prevTextLength + offset - 1;\n }\n if (nextTextBlot && node === nextTextBlot.domNode) {\n return prevTextLength + newText.length + offset;\n }\n return null;\n };\n const start = remapOffset(range.start.node, range.start.offset);\n const end = remapOffset(range.end.node, range.end.offset);\n if (start !== null && end !== null) {\n return {\n startNode: mergedTextBlot.domNode,\n startOffset: start,\n endNode: mergedTextBlot.domNode,\n endOffset: end\n };\n }\n }\n return null;\n }\n update(mutations, context) {\n if (mutations.some(mutation => {\n return mutation.type === 'characterData' && mutation.target === this.textNode;\n })) {\n const range = this.restore();\n if (range) context.range = range;\n }\n }\n\n // Avoid .ql-cursor being a descendant of ``.\n // The reason is Safari pushes down `` on text insertion.\n // That will cause DOM nodes not sync with the model.\n //\n // For example ({I} is the caret), given the markup:\n // \\uFEFF{I}\n // When typing a char \"x\", `` will be pushed down inside the `` first:\n // \\uFEFF{I}\n // And then \"x\" will be inserted after ``:\n // \\uFEFFd{I}\n optimize(context) {\n // @ts-expect-error Fix me later\n super.optimize(context);\n let {\n parent\n } = this;\n while (parent) {\n if (parent.domNode.tagName === 'A') {\n this.savedLength = Cursor.CONTENTS.length;\n // @ts-expect-error TODO: make isolate generic\n parent.isolate(this.offset(parent), this.length()).unwrap();\n this.savedLength = 0;\n break;\n }\n parent = parent.parent;\n }\n }\n value() {\n return '';\n }\n}\nexport default Cursor;\n//# sourceMappingURL=cursor.js.map","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","export default new WeakMap();\n//# sourceMappingURL=instances.js.map","const levels = ['error', 'warn', 'log', 'info'];\nlet level = 'warn';\nfunction debug(method) {\n if (level) {\n if (levels.indexOf(method) <= levels.indexOf(level)) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n console[method](...args); // eslint-disable-line no-console\n }\n }\n}\nfunction namespace(ns) {\n return levels.reduce((logger, method) => {\n logger[method] = debug.bind(console, method, ns);\n return logger;\n }, {});\n}\nnamespace.level = newLevel => {\n level = newLevel;\n};\ndebug.level = namespace.level;\nexport default namespace;\n//# sourceMappingURL=logger.js.map","import { EventEmitter } from 'eventemitter3';\nimport instances from './instances.js';\nimport logger from './logger.js';\nconst debug = logger('quill:events');\nconst EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];\nEVENTS.forEach(eventName => {\n document.addEventListener(eventName, function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n Array.from(document.querySelectorAll('.ql-container')).forEach(node => {\n const quill = instances.get(node);\n if (quill && quill.emitter) {\n quill.emitter.handleDOM(...args);\n }\n });\n });\n});\nclass Emitter extends EventEmitter {\n static events = {\n EDITOR_CHANGE: 'editor-change',\n SCROLL_BEFORE_UPDATE: 'scroll-before-update',\n SCROLL_BLOT_MOUNT: 'scroll-blot-mount',\n SCROLL_BLOT_UNMOUNT: 'scroll-blot-unmount',\n SCROLL_OPTIMIZE: 'scroll-optimize',\n SCROLL_UPDATE: 'scroll-update',\n SCROLL_EMBED_UPDATE: 'scroll-embed-update',\n SELECTION_CHANGE: 'selection-change',\n TEXT_CHANGE: 'text-change',\n COMPOSITION_BEFORE_START: 'composition-before-start',\n COMPOSITION_START: 'composition-start',\n COMPOSITION_BEFORE_END: 'composition-before-end',\n COMPOSITION_END: 'composition-end'\n };\n static sources = {\n API: 'api',\n SILENT: 'silent',\n USER: 'user'\n };\n constructor() {\n super();\n this.domListeners = {};\n this.on('error', debug.error);\n }\n emit() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n debug.log.call(debug, ...args);\n // @ts-expect-error\n return super.emit(...args);\n }\n handleDOM(event) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n (this.domListeners[event.type] || []).forEach(_ref => {\n let {\n node,\n handler\n } = _ref;\n if (event.target === node || node.contains(event.target)) {\n handler(event, ...args);\n }\n });\n }\n listenDOM(eventName, node, handler) {\n if (!this.domListeners[eventName]) {\n this.domListeners[eventName] = [];\n }\n this.domListeners[eventName].push({\n node,\n handler\n });\n }\n}\nexport default Emitter;\n//# sourceMappingURL=emitter.js.map","import { LeafBlot, Scope } from 'parchment';\nimport { cloneDeep, isEqual } from 'lodash-es';\nimport Emitter from './emitter.js';\nimport logger from './logger.js';\nconst debug = logger('quill:selection');\nexport class Range {\n constructor(index) {\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n this.index = index;\n this.length = length;\n }\n}\nclass Selection {\n constructor(scroll, emitter) {\n this.emitter = emitter;\n this.scroll = scroll;\n this.composing = false;\n this.mouseDown = false;\n this.root = this.scroll.domNode;\n // @ts-expect-error\n this.cursor = this.scroll.create('cursor', this);\n // savedRange is last non-null range\n this.savedRange = new Range(0, 0);\n this.lastRange = this.savedRange;\n this.lastNative = null;\n this.handleComposition();\n this.handleDragging();\n this.emitter.listenDOM('selectionchange', document, () => {\n if (!this.mouseDown && !this.composing) {\n setTimeout(this.update.bind(this, Emitter.sources.USER), 1);\n }\n });\n this.emitter.on(Emitter.events.SCROLL_BEFORE_UPDATE, () => {\n if (!this.hasFocus()) return;\n const native = this.getNativeRange();\n if (native == null) return;\n if (native.start.node === this.cursor.textNode) return; // cursor.restore() will handle\n this.emitter.once(Emitter.events.SCROLL_UPDATE, (source, mutations) => {\n try {\n if (this.root.contains(native.start.node) && this.root.contains(native.end.node)) {\n this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);\n }\n const triggeredByTyping = mutations.some(mutation => mutation.type === 'characterData' || mutation.type === 'childList' || mutation.type === 'attributes' && mutation.target === this.root);\n this.update(triggeredByTyping ? Emitter.sources.SILENT : source);\n } catch (ignored) {\n // ignore\n }\n });\n });\n this.emitter.on(Emitter.events.SCROLL_OPTIMIZE, (mutations, context) => {\n if (context.range) {\n const {\n startNode,\n startOffset,\n endNode,\n endOffset\n } = context.range;\n this.setNativeRange(startNode, startOffset, endNode, endOffset);\n this.update(Emitter.sources.SILENT);\n }\n });\n this.update(Emitter.sources.SILENT);\n }\n handleComposition() {\n this.emitter.on(Emitter.events.COMPOSITION_BEFORE_START, () => {\n this.composing = true;\n });\n this.emitter.on(Emitter.events.COMPOSITION_END, () => {\n this.composing = false;\n if (this.cursor.parent) {\n const range = this.cursor.restore();\n if (!range) return;\n setTimeout(() => {\n this.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n }, 1);\n }\n });\n }\n handleDragging() {\n this.emitter.listenDOM('mousedown', document.body, () => {\n this.mouseDown = true;\n });\n this.emitter.listenDOM('mouseup', document.body, () => {\n this.mouseDown = false;\n this.update(Emitter.sources.USER);\n });\n }\n focus() {\n if (this.hasFocus()) return;\n this.root.focus({\n preventScroll: true\n });\n this.setRange(this.savedRange);\n }\n format(format, value) {\n this.scroll.update();\n const nativeRange = this.getNativeRange();\n if (nativeRange == null || !nativeRange.native.collapsed || this.scroll.query(format, Scope.BLOCK)) return;\n if (nativeRange.start.node !== this.cursor.textNode) {\n const blot = this.scroll.find(nativeRange.start.node, false);\n if (blot == null) return;\n // TODO Give blot ability to not split\n if (blot instanceof LeafBlot) {\n const after = blot.split(nativeRange.start.offset);\n blot.parent.insertBefore(this.cursor, after);\n } else {\n // @ts-expect-error TODO: nativeRange.start.node doesn't seem to match function signature\n blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen\n }\n this.cursor.attach();\n }\n this.cursor.format(format, value);\n this.scroll.optimize();\n this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n this.update();\n }\n getBounds(index) {\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n const scrollLength = this.scroll.length();\n index = Math.min(index, scrollLength - 1);\n length = Math.min(index + length, scrollLength - 1) - index;\n let node;\n let [leaf, offset] = this.scroll.leaf(index);\n if (leaf == null) return null;\n if (length > 0 && offset === leaf.length()) {\n const [next] = this.scroll.leaf(index + 1);\n if (next) {\n const [line] = this.scroll.line(index);\n const [nextLine] = this.scroll.line(index + 1);\n if (line === nextLine) {\n leaf = next;\n offset = 0;\n }\n }\n }\n [node, offset] = leaf.position(offset, true);\n const range = document.createRange();\n if (length > 0) {\n range.setStart(node, offset);\n [leaf, offset] = this.scroll.leaf(index + length);\n if (leaf == null) return null;\n [node, offset] = leaf.position(offset, true);\n range.setEnd(node, offset);\n return range.getBoundingClientRect();\n }\n let side = 'left';\n let rect;\n if (node instanceof Text) {\n // Return null if the text node is empty because it is\n // not able to get a useful client rect:\n // https://github.com/w3c/csswg-drafts/issues/2514.\n // Empty text nodes are most likely caused by TextBlot#optimize()\n // not getting called when editor content changes.\n if (!node.data.length) {\n return null;\n }\n if (offset < node.data.length) {\n range.setStart(node, offset);\n range.setEnd(node, offset + 1);\n } else {\n range.setStart(node, offset - 1);\n range.setEnd(node, offset);\n side = 'right';\n }\n rect = range.getBoundingClientRect();\n } else {\n if (!(leaf.domNode instanceof Element)) return null;\n rect = leaf.domNode.getBoundingClientRect();\n if (offset > 0) side = 'right';\n }\n return {\n bottom: rect.top + rect.height,\n height: rect.height,\n left: rect[side],\n right: rect[side],\n top: rect.top,\n width: 0\n };\n }\n getNativeRange() {\n const selection = document.getSelection();\n if (selection == null || selection.rangeCount <= 0) return null;\n const nativeRange = selection.getRangeAt(0);\n if (nativeRange == null) return null;\n const range = this.normalizeNative(nativeRange);\n debug.info('getNativeRange', range);\n return range;\n }\n getRange() {\n const root = this.scroll.domNode;\n if ('isConnected' in root && !root.isConnected) {\n // document.getSelection() forces layout on Blink, so we trend to\n // not calling it.\n return [null, null];\n }\n const normalized = this.getNativeRange();\n if (normalized == null) return [null, null];\n const range = this.normalizedToRange(normalized);\n return [range, normalized];\n }\n hasFocus() {\n return document.activeElement === this.root || document.activeElement != null && contains(this.root, document.activeElement);\n }\n normalizedToRange(range) {\n const positions = [[range.start.node, range.start.offset]];\n if (!range.native.collapsed) {\n positions.push([range.end.node, range.end.offset]);\n }\n const indexes = positions.map(position => {\n const [node, offset] = position;\n const blot = this.scroll.find(node, true);\n // @ts-expect-error Fix me later\n const index = blot.offset(this.scroll);\n if (offset === 0) {\n return index;\n }\n if (blot instanceof LeafBlot) {\n return index + blot.index(node, offset);\n }\n // @ts-expect-error Fix me later\n return index + blot.length();\n });\n const end = Math.min(Math.max(...indexes), this.scroll.length() - 1);\n const start = Math.min(end, ...indexes);\n return new Range(start, end - start);\n }\n normalizeNative(nativeRange) {\n if (!contains(this.root, nativeRange.startContainer) || !nativeRange.collapsed && !contains(this.root, nativeRange.endContainer)) {\n return null;\n }\n const range = {\n start: {\n node: nativeRange.startContainer,\n offset: nativeRange.startOffset\n },\n end: {\n node: nativeRange.endContainer,\n offset: nativeRange.endOffset\n },\n native: nativeRange\n };\n [range.start, range.end].forEach(position => {\n let {\n node,\n offset\n } = position;\n while (!(node instanceof Text) && node.childNodes.length > 0) {\n if (node.childNodes.length > offset) {\n node = node.childNodes[offset];\n offset = 0;\n } else if (node.childNodes.length === offset) {\n // @ts-expect-error Fix me later\n node = node.lastChild;\n if (node instanceof Text) {\n offset = node.data.length;\n } else if (node.childNodes.length > 0) {\n // Container case\n offset = node.childNodes.length;\n } else {\n // Embed case\n offset = node.childNodes.length + 1;\n }\n } else {\n break;\n }\n }\n position.node = node;\n position.offset = offset;\n });\n return range;\n }\n rangeToNative(range) {\n const scrollLength = this.scroll.length();\n const getPosition = (index, inclusive) => {\n index = Math.min(scrollLength - 1, index);\n const [leaf, leafOffset] = this.scroll.leaf(index);\n return leaf ? leaf.position(leafOffset, inclusive) : [null, -1];\n };\n return [...getPosition(range.index, false), ...getPosition(range.index + range.length, true)];\n }\n setNativeRange(startNode, startOffset) {\n let endNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : startNode;\n let endOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : startOffset;\n let force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);\n if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null ||\n // @ts-expect-error Fix me later\n endNode.parentNode == null)) {\n return;\n }\n const selection = document.getSelection();\n if (selection == null) return;\n if (startNode != null) {\n if (!this.hasFocus()) this.root.focus({\n preventScroll: true\n });\n const {\n native\n } = this.getNativeRange() || {};\n if (native == null || force || startNode !== native.startContainer || startOffset !== native.startOffset || endNode !== native.endContainer || endOffset !== native.endOffset) {\n if (startNode instanceof Element && startNode.tagName === 'BR') {\n // @ts-expect-error Fix me later\n startOffset = Array.from(startNode.parentNode.childNodes).indexOf(startNode);\n startNode = startNode.parentNode;\n }\n if (endNode instanceof Element && endNode.tagName === 'BR') {\n // @ts-expect-error Fix me later\n endOffset = Array.from(endNode.parentNode.childNodes).indexOf(endNode);\n endNode = endNode.parentNode;\n }\n const range = document.createRange();\n // @ts-expect-error Fix me later\n range.setStart(startNode, startOffset);\n // @ts-expect-error Fix me later\n range.setEnd(endNode, endOffset);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n } else {\n selection.removeAllRanges();\n this.root.blur();\n }\n }\n setRange(range) {\n let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n let source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Emitter.sources.API;\n if (typeof force === 'string') {\n source = force;\n force = false;\n }\n debug.info('setRange', range);\n if (range != null) {\n const args = this.rangeToNative(range);\n this.setNativeRange(...args, force);\n } else {\n this.setNativeRange(null);\n }\n this.update(source);\n }\n update() {\n let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Emitter.sources.USER;\n const oldRange = this.lastRange;\n const [lastRange, nativeRange] = this.getRange();\n this.lastRange = lastRange;\n this.lastNative = nativeRange;\n if (this.lastRange != null) {\n this.savedRange = this.lastRange;\n }\n if (!isEqual(oldRange, this.lastRange)) {\n if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {\n const range = this.cursor.restore();\n if (range) {\n this.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n }\n }\n const args = [Emitter.events.SELECTION_CHANGE, cloneDeep(this.lastRange), cloneDeep(oldRange), source];\n this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n if (source !== Emitter.sources.SILENT) {\n this.emitter.emit(...args);\n }\n }\n }\n}\nfunction contains(parent, descendant) {\n try {\n // Firefox inserts inaccessible nodes around video elements\n descendant.parentNode; // eslint-disable-line @typescript-eslint/no-unused-expressions\n } catch (e) {\n return false;\n }\n return parent.contains(descendant);\n}\nexport default Selection;\n//# sourceMappingURL=selection.js.map","import { cloneDeep, isEqual, merge } from 'lodash-es';\nimport { LeafBlot, EmbedBlot, Scope, ParentBlot } from 'parchment';\nimport Delta, { AttributeMap, Op } from 'quill-delta';\nimport Block, { BlockEmbed, bubbleFormats } from '../blots/block.js';\nimport Break from '../blots/break.js';\nimport CursorBlot from '../blots/cursor.js';\nimport TextBlot, { escapeText } from '../blots/text.js';\nimport { Range } from './selection.js';\nconst ASCII = /^[ -~]*$/;\nclass Editor {\n constructor(scroll) {\n this.scroll = scroll;\n this.delta = this.getDelta();\n }\n applyDelta(delta) {\n this.scroll.update();\n let scrollLength = this.scroll.length();\n this.scroll.batchStart();\n const normalizedDelta = normalizeDelta(delta);\n const deleteDelta = new Delta();\n const normalizedOps = splitOpLines(normalizedDelta.ops.slice());\n normalizedOps.reduce((index, op) => {\n const length = Op.length(op);\n let attributes = op.attributes || {};\n let isImplicitNewlinePrepended = false;\n let isImplicitNewlineAppended = false;\n if (op.insert != null) {\n deleteDelta.retain(length);\n if (typeof op.insert === 'string') {\n const text = op.insert;\n isImplicitNewlineAppended = !text.endsWith('\\n') && (scrollLength <= index || !!this.scroll.descendant(BlockEmbed, index)[0]);\n this.scroll.insertAt(index, text);\n const [line, offset] = this.scroll.line(index);\n let formats = merge({}, bubbleFormats(line));\n if (line instanceof Block) {\n const [leaf] = line.descendant(LeafBlot, offset);\n if (leaf) {\n formats = merge(formats, bubbleFormats(leaf));\n }\n }\n attributes = AttributeMap.diff(formats, attributes) || {};\n } else if (typeof op.insert === 'object') {\n const key = Object.keys(op.insert)[0]; // There should only be one key\n if (key == null) return index;\n const isInlineEmbed = this.scroll.query(key, Scope.INLINE) != null;\n if (isInlineEmbed) {\n if (scrollLength <= index || !!this.scroll.descendant(BlockEmbed, index)[0]) {\n isImplicitNewlineAppended = true;\n }\n } else if (index > 0) {\n const [leaf, offset] = this.scroll.descendant(LeafBlot, index - 1);\n if (leaf instanceof TextBlot) {\n const text = leaf.value();\n if (text[offset] !== '\\n') {\n isImplicitNewlinePrepended = true;\n }\n } else if (leaf instanceof EmbedBlot && leaf.statics.scope === Scope.INLINE_BLOT) {\n isImplicitNewlinePrepended = true;\n }\n }\n this.scroll.insertAt(index, key, op.insert[key]);\n if (isInlineEmbed) {\n const [leaf] = this.scroll.descendant(LeafBlot, index);\n if (leaf) {\n const formats = merge({}, bubbleFormats(leaf));\n attributes = AttributeMap.diff(formats, attributes) || {};\n }\n }\n }\n scrollLength += length;\n } else {\n deleteDelta.push(op);\n if (op.retain !== null && typeof op.retain === 'object') {\n const key = Object.keys(op.retain)[0];\n if (key == null) return index;\n this.scroll.updateEmbedAt(index, key, op.retain[key]);\n }\n }\n Object.keys(attributes).forEach(name => {\n this.scroll.formatAt(index, length, name, attributes[name]);\n });\n const prependedLength = isImplicitNewlinePrepended ? 1 : 0;\n const addedLength = isImplicitNewlineAppended ? 1 : 0;\n scrollLength += prependedLength + addedLength;\n deleteDelta.retain(prependedLength);\n deleteDelta.delete(addedLength);\n return index + length + prependedLength + addedLength;\n }, 0);\n deleteDelta.reduce((index, op) => {\n if (typeof op.delete === 'number') {\n this.scroll.deleteAt(index, op.delete);\n return index;\n }\n return index + Op.length(op);\n }, 0);\n this.scroll.batchEnd();\n this.scroll.optimize();\n return this.update(normalizedDelta);\n }\n deleteText(index, length) {\n this.scroll.deleteAt(index, length);\n return this.update(new Delta().retain(index).delete(length));\n }\n formatLine(index, length) {\n let formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.scroll.update();\n Object.keys(formats).forEach(format => {\n this.scroll.lines(index, Math.max(length, 1)).forEach(line => {\n line.format(format, formats[format]);\n });\n });\n this.scroll.optimize();\n const delta = new Delta().retain(index).retain(length, cloneDeep(formats));\n return this.update(delta);\n }\n formatText(index, length) {\n let formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.keys(formats).forEach(format => {\n this.scroll.formatAt(index, length, format, formats[format]);\n });\n const delta = new Delta().retain(index).retain(length, cloneDeep(formats));\n return this.update(delta);\n }\n getContents(index, length) {\n return this.delta.slice(index, index + length);\n }\n getDelta() {\n return this.scroll.lines().reduce((delta, line) => {\n return delta.concat(line.delta());\n }, new Delta());\n }\n getFormat(index) {\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let lines = [];\n let leaves = [];\n if (length === 0) {\n this.scroll.path(index).forEach(path => {\n const [blot] = path;\n if (blot instanceof Block) {\n lines.push(blot);\n } else if (blot instanceof LeafBlot) {\n leaves.push(blot);\n }\n });\n } else {\n lines = this.scroll.lines(index, length);\n leaves = this.scroll.descendants(LeafBlot, index, length);\n }\n const [lineFormats, leafFormats] = [lines, leaves].map(blots => {\n const blot = blots.shift();\n if (blot == null) return {};\n let formats = bubbleFormats(blot);\n while (Object.keys(formats).length > 0) {\n const blot = blots.shift();\n if (blot == null) return formats;\n formats = combineFormats(bubbleFormats(blot), formats);\n }\n return formats;\n });\n return {\n ...lineFormats,\n ...leafFormats\n };\n }\n getHTML(index, length) {\n const [line, lineOffset] = this.scroll.line(index);\n if (line) {\n const lineLength = line.length();\n const isWithinLine = line.length() >= lineOffset + length;\n if (isWithinLine && !(lineOffset === 0 && length === lineLength)) {\n return convertHTML(line, lineOffset, length, true);\n }\n return convertHTML(this.scroll, index, length, true);\n }\n return '';\n }\n getText(index, length) {\n return this.getContents(index, length).filter(op => typeof op.insert === 'string').map(op => op.insert).join('');\n }\n insertContents(index, contents) {\n const normalizedDelta = normalizeDelta(contents);\n const change = new Delta().retain(index).concat(normalizedDelta);\n this.scroll.insertContents(index, normalizedDelta);\n return this.update(change);\n }\n insertEmbed(index, embed, value) {\n this.scroll.insertAt(index, embed, value);\n return this.update(new Delta().retain(index).insert({\n [embed]: value\n }));\n }\n insertText(index, text) {\n let formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n this.scroll.insertAt(index, text);\n Object.keys(formats).forEach(format => {\n this.scroll.formatAt(index, text.length, format, formats[format]);\n });\n return this.update(new Delta().retain(index).insert(text, cloneDeep(formats)));\n }\n isBlank() {\n if (this.scroll.children.length === 0) return true;\n if (this.scroll.children.length > 1) return false;\n const blot = this.scroll.children.head;\n if (blot?.statics.blotName !== Block.blotName) return false;\n const block = blot;\n if (block.children.length > 1) return false;\n return block.children.head instanceof Break;\n }\n removeFormat(index, length) {\n const text = this.getText(index, length);\n const [line, offset] = this.scroll.line(index + length);\n let suffixLength = 0;\n let suffix = new Delta();\n if (line != null) {\n suffixLength = line.length() - offset;\n suffix = line.delta().slice(offset, offset + suffixLength - 1).insert('\\n');\n }\n const contents = this.getContents(index, length + suffixLength);\n const diff = contents.diff(new Delta().insert(text).concat(suffix));\n const delta = new Delta().retain(index).concat(diff);\n return this.applyDelta(delta);\n }\n update(change) {\n let mutations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n let selectionInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n const oldDelta = this.delta;\n if (mutations.length === 1 && mutations[0].type === 'characterData' &&\n // @ts-expect-error Fix me later\n mutations[0].target.data.match(ASCII) && this.scroll.find(mutations[0].target)) {\n // Optimization for character changes\n const textBlot = this.scroll.find(mutations[0].target);\n const formats = bubbleFormats(textBlot);\n const index = textBlot.offset(this.scroll);\n // @ts-expect-error Fix me later\n const oldValue = mutations[0].oldValue.replace(CursorBlot.CONTENTS, '');\n const oldText = new Delta().insert(oldValue);\n // @ts-expect-error\n const newText = new Delta().insert(textBlot.value());\n const relativeSelectionInfo = selectionInfo && {\n oldRange: shiftRange(selectionInfo.oldRange, -index),\n newRange: shiftRange(selectionInfo.newRange, -index)\n };\n const diffDelta = new Delta().retain(index).concat(oldText.diff(newText, relativeSelectionInfo));\n change = diffDelta.reduce((delta, op) => {\n if (op.insert) {\n return delta.insert(op.insert, formats);\n }\n return delta.push(op);\n }, new Delta());\n this.delta = oldDelta.compose(change);\n } else {\n this.delta = this.getDelta();\n if (!change || !isEqual(oldDelta.compose(change), this.delta)) {\n change = oldDelta.diff(this.delta, selectionInfo);\n }\n }\n return change;\n }\n}\nfunction convertListHTML(items, lastIndent, types) {\n if (items.length === 0) {\n const [endTag] = getListType(types.pop());\n if (lastIndent <= 0) {\n return ``;\n }\n return `${convertListHTML([], lastIndent - 1, types)}`;\n }\n const [{\n child,\n offset,\n length,\n indent,\n type\n }, ...rest] = items;\n const [tag, attribute] = getListType(type);\n if (indent > lastIndent) {\n types.push(type);\n if (indent === lastIndent + 1) {\n return `<${tag}>${convertHTML(child, offset, length)}${convertListHTML(rest, indent, types)}`;\n }\n return `<${tag}>
  • ${convertListHTML(items, lastIndent + 1, types)}`;\n }\n const previousType = types[types.length - 1];\n if (indent === lastIndent && type === previousType) {\n return `
  • ${convertHTML(child, offset, length)}${convertListHTML(rest, indent, types)}`;\n }\n const [endTag] = getListType(types.pop());\n return `${convertListHTML(items, lastIndent - 1, types)}`;\n}\nfunction convertHTML(blot, index, length) {\n let isRoot = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if ('html' in blot && typeof blot.html === 'function') {\n return blot.html(index, length);\n }\n if (blot instanceof TextBlot) {\n const escapedText = escapeText(blot.value().slice(index, index + length));\n return escapedText.replaceAll(' ', ' ');\n }\n if (blot instanceof ParentBlot) {\n // TODO fix API\n if (blot.statics.blotName === 'list-container') {\n const items = [];\n blot.children.forEachAt(index, length, (child, offset, childLength) => {\n const formats = 'formats' in child && typeof child.formats === 'function' ? child.formats() : {};\n items.push({\n child,\n offset,\n length: childLength,\n indent: formats.indent || 0,\n type: formats.list\n });\n });\n return convertListHTML(items, -1, []);\n }\n const parts = [];\n blot.children.forEachAt(index, length, (child, offset, childLength) => {\n parts.push(convertHTML(child, offset, childLength));\n });\n if (isRoot || blot.statics.blotName === 'list') {\n return parts.join('');\n }\n const {\n outerHTML,\n innerHTML\n } = blot.domNode;\n const [start, end] = outerHTML.split(`>${innerHTML}<`);\n // TODO cleanup\n if (start === '${parts.join('')}<${end}`;\n }\n return `${start}>${parts.join('')}<${end}`;\n }\n return blot.domNode instanceof Element ? blot.domNode.outerHTML : '';\n}\nfunction combineFormats(formats, combined) {\n return Object.keys(combined).reduce((merged, name) => {\n if (formats[name] == null) return merged;\n const combinedValue = combined[name];\n if (combinedValue === formats[name]) {\n merged[name] = combinedValue;\n } else if (Array.isArray(combinedValue)) {\n if (combinedValue.indexOf(formats[name]) < 0) {\n merged[name] = combinedValue.concat([formats[name]]);\n } else {\n // If style already exists, don't add to an array, but don't lose other styles\n merged[name] = combinedValue;\n }\n } else {\n merged[name] = [combinedValue, formats[name]];\n }\n return merged;\n }, {});\n}\nfunction getListType(type) {\n const tag = type === 'ordered' ? 'ol' : 'ul';\n switch (type) {\n case 'checked':\n return [tag, ' data-list=\"checked\"'];\n case 'unchecked':\n return [tag, ' data-list=\"unchecked\"'];\n default:\n return [tag, ''];\n }\n}\nfunction normalizeDelta(delta) {\n return delta.reduce((normalizedDelta, op) => {\n if (typeof op.insert === 'string') {\n const text = op.insert.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n return normalizedDelta.insert(text, op.attributes);\n }\n return normalizedDelta.push(op);\n }, new Delta());\n}\nfunction shiftRange(_ref, amount) {\n let {\n index,\n length\n } = _ref;\n return new Range(index + amount, length);\n}\nfunction splitOpLines(ops) {\n const split = [];\n ops.forEach(op => {\n if (typeof op.insert === 'string') {\n const lines = op.insert.split('\\n');\n lines.forEach((line, index) => {\n if (index) split.push({\n insert: '\\n',\n attributes: op.attributes\n });\n if (line) split.push({\n insert: line,\n attributes: op.attributes\n });\n });\n } else {\n split.push(op);\n }\n });\n return split;\n}\nexport default Editor;\n//# sourceMappingURL=editor.js.map","class Module {\n static DEFAULTS = {};\n constructor(quill) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.quill = quill;\n this.options = options;\n }\n}\nexport default Module;\n//# sourceMappingURL=module.js.map","import { EmbedBlot } from 'parchment';\nimport TextBlot from './text.js';\nconst GUARD_TEXT = '\\uFEFF';\nclass Embed extends EmbedBlot {\n constructor(scroll, node) {\n super(scroll, node);\n this.contentNode = document.createElement('span');\n this.contentNode.setAttribute('contenteditable', 'false');\n Array.from(this.domNode.childNodes).forEach(childNode => {\n this.contentNode.appendChild(childNode);\n });\n this.leftGuard = document.createTextNode(GUARD_TEXT);\n this.rightGuard = document.createTextNode(GUARD_TEXT);\n this.domNode.appendChild(this.leftGuard);\n this.domNode.appendChild(this.contentNode);\n this.domNode.appendChild(this.rightGuard);\n }\n index(node, offset) {\n if (node === this.leftGuard) return 0;\n if (node === this.rightGuard) return 1;\n return super.index(node, offset);\n }\n restore(node) {\n let range = null;\n let textNode;\n const text = node.data.split(GUARD_TEXT).join('');\n if (node === this.leftGuard) {\n if (this.prev instanceof TextBlot) {\n const prevLength = this.prev.length();\n this.prev.insertAt(prevLength, text);\n range = {\n startNode: this.prev.domNode,\n startOffset: prevLength + text.length\n };\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(this.scroll.create(textNode), this);\n range = {\n startNode: textNode,\n startOffset: text.length\n };\n }\n } else if (node === this.rightGuard) {\n if (this.next instanceof TextBlot) {\n this.next.insertAt(0, text);\n range = {\n startNode: this.next.domNode,\n startOffset: text.length\n };\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(this.scroll.create(textNode), this.next);\n range = {\n startNode: textNode,\n startOffset: text.length\n };\n }\n }\n node.data = GUARD_TEXT;\n return range;\n }\n update(mutations, context) {\n mutations.forEach(mutation => {\n if (mutation.type === 'characterData' && (mutation.target === this.leftGuard || mutation.target === this.rightGuard)) {\n const range = this.restore(mutation.target);\n if (range) context.range = range;\n }\n });\n }\n}\nexport default Embed;\n//# sourceMappingURL=embed.js.map","import Embed from '../blots/embed.js';\nimport Emitter from './emitter.js';\nclass Composition {\n isComposing = false;\n constructor(scroll, emitter) {\n this.scroll = scroll;\n this.emitter = emitter;\n this.setupListeners();\n }\n setupListeners() {\n this.scroll.domNode.addEventListener('compositionstart', event => {\n if (!this.isComposing) {\n this.handleCompositionStart(event);\n }\n });\n this.scroll.domNode.addEventListener('compositionend', event => {\n if (this.isComposing) {\n // Webkit makes DOM changes after compositionend, so we use microtask to\n // ensure the order.\n // https://bugs.webkit.org/show_bug.cgi?id=31902\n queueMicrotask(() => {\n this.handleCompositionEnd(event);\n });\n }\n });\n }\n handleCompositionStart(event) {\n const blot = event.target instanceof Node ? this.scroll.find(event.target, true) : null;\n if (blot && !(blot instanceof Embed)) {\n this.emitter.emit(Emitter.events.COMPOSITION_BEFORE_START, event);\n this.scroll.batchStart();\n this.emitter.emit(Emitter.events.COMPOSITION_START, event);\n this.isComposing = true;\n }\n }\n handleCompositionEnd(event) {\n this.emitter.emit(Emitter.events.COMPOSITION_BEFORE_END, event);\n this.scroll.batchEnd();\n this.emitter.emit(Emitter.events.COMPOSITION_END, event);\n this.isComposing = false;\n }\n}\nexport default Composition;\n//# sourceMappingURL=composition.js.map","class Theme {\n static DEFAULTS = {\n modules: {}\n };\n static themes = {\n default: Theme\n };\n modules = {};\n constructor(quill, options) {\n this.quill = quill;\n this.options = options;\n }\n init() {\n Object.keys(this.options.modules).forEach(name => {\n if (this.modules[name] == null) {\n this.addModule(name);\n }\n });\n }\n addModule(name) {\n // @ts-expect-error\n const ModuleClass = this.quill.constructor.import(`modules/${name}`);\n this.modules[name] = new ModuleClass(this.quill, this.options.modules[name] || {});\n return this.modules[name];\n }\n}\nexport default Theme;\n//# sourceMappingURL=theme.js.map","const getParentElement = element => element.parentElement || element.getRootNode().host || null;\nconst getElementRect = element => {\n const rect = element.getBoundingClientRect();\n const scaleX = 'offsetWidth' in element && Math.abs(rect.width) / element.offsetWidth || 1;\n const scaleY = 'offsetHeight' in element && Math.abs(rect.height) / element.offsetHeight || 1;\n return {\n top: rect.top,\n right: rect.left + element.clientWidth * scaleX,\n bottom: rect.top + element.clientHeight * scaleY,\n left: rect.left\n };\n};\nconst paddingValueToInt = value => {\n const number = parseInt(value, 10);\n return Number.isNaN(number) ? 0 : number;\n};\n\n// Follow the steps described in https://www.w3.org/TR/cssom-view-1/#element-scrolling-members,\n// assuming that the scroll option is set to 'nearest'.\nconst getScrollDistance = (targetStart, targetEnd, scrollStart, scrollEnd, scrollPaddingStart, scrollPaddingEnd) => {\n if (targetStart < scrollStart && targetEnd > scrollEnd) {\n return 0;\n }\n if (targetStart < scrollStart) {\n return -(scrollStart - targetStart + scrollPaddingStart);\n }\n if (targetEnd > scrollEnd) {\n return targetEnd - targetStart > scrollEnd - scrollStart ? targetStart + scrollPaddingStart - scrollStart : targetEnd - scrollEnd + scrollPaddingEnd;\n }\n return 0;\n};\nconst scrollRectIntoView = (root, targetRect) => {\n const document = root.ownerDocument;\n let rect = targetRect;\n let current = root;\n while (current) {\n const isDocumentBody = current === document.body;\n const bounding = isDocumentBody ? {\n top: 0,\n right: window.visualViewport?.width ?? document.documentElement.clientWidth,\n bottom: window.visualViewport?.height ?? document.documentElement.clientHeight,\n left: 0\n } : getElementRect(current);\n const style = getComputedStyle(current);\n const scrollDistanceX = getScrollDistance(rect.left, rect.right, bounding.left, bounding.right, paddingValueToInt(style.scrollPaddingLeft), paddingValueToInt(style.scrollPaddingRight));\n const scrollDistanceY = getScrollDistance(rect.top, rect.bottom, bounding.top, bounding.bottom, paddingValueToInt(style.scrollPaddingTop), paddingValueToInt(style.scrollPaddingBottom));\n if (scrollDistanceX || scrollDistanceY) {\n if (isDocumentBody) {\n document.defaultView?.scrollBy(scrollDistanceX, scrollDistanceY);\n } else {\n const {\n scrollLeft,\n scrollTop\n } = current;\n if (scrollDistanceY) {\n current.scrollTop += scrollDistanceY;\n }\n if (scrollDistanceX) {\n current.scrollLeft += scrollDistanceX;\n }\n const scrolledLeft = current.scrollLeft - scrollLeft;\n const scrolledTop = current.scrollTop - scrollTop;\n rect = {\n left: rect.left - scrolledLeft,\n top: rect.top - scrolledTop,\n right: rect.right - scrolledLeft,\n bottom: rect.bottom - scrolledTop\n };\n }\n }\n current = isDocumentBody || style.position === 'fixed' ? null : getParentElement(current);\n }\n};\nexport default scrollRectIntoView;\n//# sourceMappingURL=scrollRectIntoView.js.map","import { Registry } from 'parchment';\nconst MAX_REGISTER_ITERATIONS = 100;\nconst CORE_FORMATS = ['block', 'break', 'cursor', 'inline', 'scroll', 'text'];\nconst createRegistryWithFormats = (formats, sourceRegistry, debug) => {\n const registry = new Registry();\n CORE_FORMATS.forEach(name => {\n const coreBlot = sourceRegistry.query(name);\n if (coreBlot) registry.register(coreBlot);\n });\n formats.forEach(name => {\n let format = sourceRegistry.query(name);\n if (!format) {\n debug.error(`Cannot register \"${name}\" specified in \"formats\" config. Are you sure it was registered?`);\n }\n let iterations = 0;\n while (format) {\n registry.register(format);\n format = 'blotName' in format ? format.requiredContainer ?? null : null;\n iterations += 1;\n if (iterations > MAX_REGISTER_ITERATIONS) {\n debug.error(`Cycle detected in registering blot requiredContainer: \"${name}\"`);\n break;\n }\n }\n });\n return registry;\n};\nexport default createRegistryWithFormats;\n//# sourceMappingURL=createRegistryWithFormats.js.map","import { merge } from 'lodash-es';\nimport * as Parchment from 'parchment';\nimport Delta from 'quill-delta';\nimport Editor from './editor.js';\nimport Emitter from './emitter.js';\nimport instances from './instances.js';\nimport logger from './logger.js';\nimport Module from './module.js';\nimport Selection, { Range } from './selection.js';\nimport Composition from './composition.js';\nimport Theme from './theme.js';\nimport scrollRectIntoView from './utils/scrollRectIntoView.js';\nimport createRegistryWithFormats from './utils/createRegistryWithFormats.js';\nconst debug = logger('quill');\nconst globalRegistry = new Parchment.Registry();\nParchment.ParentBlot.uiClass = 'ql-ui';\n\n/**\n * Options for initializing a Quill instance\n */\n\n/**\n * Similar to QuillOptions, but with all properties expanded to their default values,\n * and all selectors resolved to HTMLElements.\n */\n\nclass Quill {\n static DEFAULTS = {\n bounds: null,\n modules: {\n clipboard: true,\n keyboard: true,\n history: true,\n uploader: true\n },\n placeholder: '',\n readOnly: false,\n registry: globalRegistry,\n theme: 'default'\n };\n static events = Emitter.events;\n static sources = Emitter.sources;\n static version = typeof \"2.0.3\" === 'undefined' ? 'dev' : \"2.0.3\";\n static imports = {\n delta: Delta,\n parchment: Parchment,\n 'core/module': Module,\n 'core/theme': Theme\n };\n static debug(limit) {\n if (limit === true) {\n limit = 'log';\n }\n logger.level(limit);\n }\n static find(node) {\n let bubble = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return instances.get(node) || globalRegistry.find(node, bubble);\n }\n static import(name) {\n if (this.imports[name] == null) {\n debug.error(`Cannot import ${name}. Are you sure it was registered?`);\n }\n return this.imports[name];\n }\n static register() {\n if (typeof (arguments.length <= 0 ? undefined : arguments[0]) !== 'string') {\n const target = arguments.length <= 0 ? undefined : arguments[0];\n const overwrite = !!(arguments.length <= 1 ? undefined : arguments[1]);\n const name = 'attrName' in target ? target.attrName : target.blotName;\n if (typeof name === 'string') {\n // Shortcut for formats:\n // register(Blot | Attributor, overwrite)\n this.register(`formats/${name}`, target, overwrite);\n } else {\n Object.keys(target).forEach(key => {\n this.register(key, target[key], overwrite);\n });\n }\n } else {\n const path = arguments.length <= 0 ? undefined : arguments[0];\n const target = arguments.length <= 1 ? undefined : arguments[1];\n const overwrite = !!(arguments.length <= 2 ? undefined : arguments[2]);\n if (this.imports[path] != null && !overwrite) {\n debug.warn(`Overwriting ${path} with`, target);\n }\n this.imports[path] = target;\n if ((path.startsWith('blots/') || path.startsWith('formats/')) && target && typeof target !== 'boolean' && target.blotName !== 'abstract') {\n globalRegistry.register(target);\n }\n if (typeof target.register === 'function') {\n target.register(globalRegistry);\n }\n }\n }\n constructor(container) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.options = expandConfig(container, options);\n this.container = this.options.container;\n if (this.container == null) {\n debug.error('Invalid Quill container', container);\n return;\n }\n if (this.options.debug) {\n Quill.debug(this.options.debug);\n }\n const html = this.container.innerHTML.trim();\n this.container.classList.add('ql-container');\n this.container.innerHTML = '';\n instances.set(this.container, this);\n this.root = this.addContainer('ql-editor');\n this.root.classList.add('ql-blank');\n this.emitter = new Emitter();\n const scrollBlotName = Parchment.ScrollBlot.blotName;\n const ScrollBlot = this.options.registry.query(scrollBlotName);\n if (!ScrollBlot || !('blotName' in ScrollBlot)) {\n throw new Error(`Cannot initialize Quill without \"${scrollBlotName}\" blot`);\n }\n this.scroll = new ScrollBlot(this.options.registry, this.root, {\n emitter: this.emitter\n });\n this.editor = new Editor(this.scroll);\n this.selection = new Selection(this.scroll, this.emitter);\n this.composition = new Composition(this.scroll, this.emitter);\n this.theme = new this.options.theme(this, this.options); // eslint-disable-line new-cap\n this.keyboard = this.theme.addModule('keyboard');\n this.clipboard = this.theme.addModule('clipboard');\n this.history = this.theme.addModule('history');\n this.uploader = this.theme.addModule('uploader');\n this.theme.addModule('input');\n this.theme.addModule('uiNode');\n this.theme.init();\n this.emitter.on(Emitter.events.EDITOR_CHANGE, type => {\n if (type === Emitter.events.TEXT_CHANGE) {\n this.root.classList.toggle('ql-blank', this.editor.isBlank());\n }\n });\n this.emitter.on(Emitter.events.SCROLL_UPDATE, (source, mutations) => {\n const oldRange = this.selection.lastRange;\n const [newRange] = this.selection.getRange();\n const selectionInfo = oldRange && newRange ? {\n oldRange,\n newRange\n } : undefined;\n modify.call(this, () => this.editor.update(null, mutations, selectionInfo), source);\n });\n this.emitter.on(Emitter.events.SCROLL_EMBED_UPDATE, (blot, delta) => {\n const oldRange = this.selection.lastRange;\n const [newRange] = this.selection.getRange();\n const selectionInfo = oldRange && newRange ? {\n oldRange,\n newRange\n } : undefined;\n modify.call(this, () => {\n const change = new Delta().retain(blot.offset(this)).retain({\n [blot.statics.blotName]: delta\n });\n return this.editor.update(change, [], selectionInfo);\n }, Quill.sources.USER);\n });\n if (html) {\n const contents = this.clipboard.convert({\n html: `${html}


    `,\n text: '\\n'\n });\n this.setContents(contents);\n }\n this.history.clear();\n if (this.options.placeholder) {\n this.root.setAttribute('data-placeholder', this.options.placeholder);\n }\n if (this.options.readOnly) {\n this.disable();\n }\n this.allowReadOnlyEdits = false;\n }\n addContainer(container) {\n let refNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (typeof container === 'string') {\n const className = container;\n container = document.createElement('div');\n container.classList.add(className);\n }\n this.container.insertBefore(container, refNode);\n return container;\n }\n blur() {\n this.selection.setRange(null);\n }\n deleteText(index, length, source) {\n // @ts-expect-error\n [index, length,, source] = overload(index, length, source);\n return modify.call(this, () => {\n return this.editor.deleteText(index, length);\n }, source, index, -1 * length);\n }\n disable() {\n this.enable(false);\n }\n editReadOnly(modifier) {\n this.allowReadOnlyEdits = true;\n const value = modifier();\n this.allowReadOnlyEdits = false;\n return value;\n }\n enable() {\n let enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.scroll.enable(enabled);\n this.container.classList.toggle('ql-disabled', !enabled);\n }\n focus() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.selection.focus();\n if (!options.preventScroll) {\n this.scrollSelectionIntoView();\n }\n }\n format(name, value) {\n let source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Emitter.sources.API;\n return modify.call(this, () => {\n const range = this.getSelection(true);\n let change = new Delta();\n if (range == null) return change;\n if (this.scroll.query(name, Parchment.Scope.BLOCK)) {\n change = this.editor.formatLine(range.index, range.length, {\n [name]: value\n });\n } else if (range.length === 0) {\n this.selection.format(name, value);\n return change;\n } else {\n change = this.editor.formatText(range.index, range.length, {\n [name]: value\n });\n }\n this.setSelection(range, Emitter.sources.SILENT);\n return change;\n }, source);\n }\n formatLine(index, length, name, value, source) {\n let formats;\n // eslint-disable-next-line prefer-const\n [index, length, formats, source] = overload(index, length,\n // @ts-expect-error\n name, value, source);\n return modify.call(this, () => {\n return this.editor.formatLine(index, length, formats);\n }, source, index, 0);\n }\n formatText(index, length, name, value, source) {\n let formats;\n // eslint-disable-next-line prefer-const\n [index, length, formats, source] = overload(\n // @ts-expect-error\n index, length, name, value, source);\n return modify.call(this, () => {\n return this.editor.formatText(index, length, formats);\n }, source, index, 0);\n }\n getBounds(index) {\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let bounds = null;\n if (typeof index === 'number') {\n bounds = this.selection.getBounds(index, length);\n } else {\n bounds = this.selection.getBounds(index.index, index.length);\n }\n if (!bounds) return null;\n const containerBounds = this.container.getBoundingClientRect();\n return {\n bottom: bounds.bottom - containerBounds.top,\n height: bounds.height,\n left: bounds.left - containerBounds.left,\n right: bounds.right - containerBounds.left,\n top: bounds.top - containerBounds.top,\n width: bounds.width\n };\n }\n getContents() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n [index, length] = overload(index, length);\n return this.editor.getContents(index, length);\n }\n getFormat() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getSelection(true);\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (typeof index === 'number') {\n return this.editor.getFormat(index, length);\n }\n return this.editor.getFormat(index.index, index.length);\n }\n getIndex(blot) {\n return blot.offset(this.scroll);\n }\n getLength() {\n return this.scroll.length();\n }\n getLeaf(index) {\n return this.scroll.leaf(index);\n }\n getLine(index) {\n return this.scroll.line(index);\n }\n getLines() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n if (typeof index !== 'number') {\n return this.scroll.lines(index.index, index.length);\n }\n return this.scroll.lines(index, length);\n }\n getModule(name) {\n return this.theme.modules[name];\n }\n getSelection() {\n let focus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (focus) this.focus();\n this.update(); // Make sure we access getRange with editor in consistent state\n return this.selection.getRange()[0];\n }\n getSemanticHTML() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let length = arguments.length > 1 ? arguments[1] : undefined;\n if (typeof index === 'number') {\n length = length ?? this.getLength() - index;\n }\n // @ts-expect-error\n [index, length] = overload(index, length);\n return this.editor.getHTML(index, length);\n }\n getText() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let length = arguments.length > 1 ? arguments[1] : undefined;\n if (typeof index === 'number') {\n length = length ?? this.getLength() - index;\n }\n // @ts-expect-error\n [index, length] = overload(index, length);\n return this.editor.getText(index, length);\n }\n hasFocus() {\n return this.selection.hasFocus();\n }\n insertEmbed(index, embed, value) {\n let source = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Quill.sources.API;\n return modify.call(this, () => {\n return this.editor.insertEmbed(index, embed, value);\n }, source, index);\n }\n insertText(index, text, name, value, source) {\n let formats;\n // eslint-disable-next-line prefer-const\n // @ts-expect-error\n [index,, formats, source] = overload(index, 0, name, value, source);\n return modify.call(this, () => {\n return this.editor.insertText(index, text, formats);\n }, source, index, text.length);\n }\n isEnabled() {\n return this.scroll.isEnabled();\n }\n off() {\n return this.emitter.off(...arguments);\n }\n on() {\n return this.emitter.on(...arguments);\n }\n once() {\n return this.emitter.once(...arguments);\n }\n removeFormat(index, length, source) {\n [index, length,, source] = overload(index, length, source);\n return modify.call(this, () => {\n return this.editor.removeFormat(index, length);\n }, source, index);\n }\n scrollRectIntoView(rect) {\n scrollRectIntoView(this.root, rect);\n }\n\n /**\n * @deprecated Use Quill#scrollSelectionIntoView() instead.\n */\n scrollIntoView() {\n console.warn('Quill#scrollIntoView() has been deprecated and will be removed in the near future. Please use Quill#scrollSelectionIntoView() instead.');\n this.scrollSelectionIntoView();\n }\n\n /**\n * Scroll the current selection into the visible area.\n * If the selection is already visible, no scrolling will occur.\n */\n scrollSelectionIntoView() {\n const range = this.selection.lastRange;\n const bounds = range && this.selection.getBounds(range.index, range.length);\n if (bounds) {\n this.scrollRectIntoView(bounds);\n }\n }\n setContents(delta) {\n let source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Emitter.sources.API;\n return modify.call(this, () => {\n delta = new Delta(delta);\n const length = this.getLength();\n // Quill will set empty editor to \\n\n const delete1 = this.editor.deleteText(0, length);\n const applied = this.editor.insertContents(0, delta);\n // Remove extra \\n from empty editor initialization\n const delete2 = this.editor.deleteText(this.getLength() - 1, 1);\n return delete1.compose(applied).compose(delete2);\n }, source);\n }\n setSelection(index, length, source) {\n if (index == null) {\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/22609\n this.selection.setRange(null, length || Quill.sources.API);\n } else {\n // @ts-expect-error\n [index, length,, source] = overload(index, length, source);\n this.selection.setRange(new Range(Math.max(0, index), length), source);\n if (source !== Emitter.sources.SILENT) {\n this.scrollSelectionIntoView();\n }\n }\n }\n setText(text) {\n let source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Emitter.sources.API;\n const delta = new Delta().insert(text);\n return this.setContents(delta, source);\n }\n update() {\n let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Emitter.sources.USER;\n const change = this.scroll.update(source); // Will update selection before selection.update() does if text changes\n this.selection.update(source);\n // TODO this is usually undefined\n return change;\n }\n updateContents(delta) {\n let source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Emitter.sources.API;\n return modify.call(this, () => {\n delta = new Delta(delta);\n return this.editor.applyDelta(delta);\n }, source, true);\n }\n}\nfunction resolveSelector(selector) {\n return typeof selector === 'string' ? document.querySelector(selector) : selector;\n}\nfunction expandModuleConfig(config) {\n return Object.entries(config ?? {}).reduce((expanded, _ref) => {\n let [key, value] = _ref;\n return {\n ...expanded,\n [key]: value === true ? {} : value\n };\n }, {});\n}\nfunction omitUndefinedValuesFromOptions(obj) {\n return Object.fromEntries(Object.entries(obj).filter(entry => entry[1] !== undefined));\n}\nfunction expandConfig(containerOrSelector, options) {\n const container = resolveSelector(containerOrSelector);\n if (!container) {\n throw new Error('Invalid Quill container');\n }\n const shouldUseDefaultTheme = !options.theme || options.theme === Quill.DEFAULTS.theme;\n const theme = shouldUseDefaultTheme ? Theme : Quill.import(`themes/${options.theme}`);\n if (!theme) {\n throw new Error(`Invalid theme ${options.theme}. Did you register it?`);\n }\n const {\n modules: quillModuleDefaults,\n ...quillDefaults\n } = Quill.DEFAULTS;\n const {\n modules: themeModuleDefaults,\n ...themeDefaults\n } = theme.DEFAULTS;\n let userModuleOptions = expandModuleConfig(options.modules);\n // Special case toolbar shorthand\n if (userModuleOptions != null && userModuleOptions.toolbar && userModuleOptions.toolbar.constructor !== Object) {\n userModuleOptions = {\n ...userModuleOptions,\n toolbar: {\n container: userModuleOptions.toolbar\n }\n };\n }\n const modules = merge({}, expandModuleConfig(quillModuleDefaults), expandModuleConfig(themeModuleDefaults), userModuleOptions);\n const config = {\n ...quillDefaults,\n ...omitUndefinedValuesFromOptions(themeDefaults),\n ...omitUndefinedValuesFromOptions(options)\n };\n let registry = options.registry;\n if (registry) {\n if (options.formats) {\n debug.warn('Ignoring \"formats\" option because \"registry\" is specified');\n }\n } else {\n registry = options.formats ? createRegistryWithFormats(options.formats, config.registry, debug) : config.registry;\n }\n return {\n ...config,\n registry,\n container,\n theme,\n modules: Object.entries(modules).reduce((modulesWithDefaults, _ref2) => {\n let [name, value] = _ref2;\n if (!value) return modulesWithDefaults;\n const moduleClass = Quill.import(`modules/${name}`);\n if (moduleClass == null) {\n debug.error(`Cannot load ${name} module. Are you sure you registered it?`);\n return modulesWithDefaults;\n }\n return {\n ...modulesWithDefaults,\n // @ts-expect-error\n [name]: merge({}, moduleClass.DEFAULTS || {}, value)\n };\n }, {}),\n bounds: resolveSelector(config.bounds)\n };\n}\n\n// Handle selection preservation and TEXT_CHANGE emission\n// common to modification APIs\nfunction modify(modifier, source, index, shift) {\n if (!this.isEnabled() && source === Emitter.sources.USER && !this.allowReadOnlyEdits) {\n return new Delta();\n }\n let range = index == null ? null : this.getSelection();\n const oldDelta = this.editor.delta;\n const change = modifier();\n if (range != null) {\n if (index === true) {\n index = range.index; // eslint-disable-line prefer-destructuring\n }\n if (shift == null) {\n range = shiftRange(range, change, source);\n } else if (shift !== 0) {\n // @ts-expect-error index should always be number\n range = shiftRange(range, index, shift, source);\n }\n this.setSelection(range, Emitter.sources.SILENT);\n }\n if (change.length() > 0) {\n const args = [Emitter.events.TEXT_CHANGE, change, oldDelta, source];\n this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n if (source !== Emitter.sources.SILENT) {\n this.emitter.emit(...args);\n }\n }\n return change;\n}\nfunction overload(index, length, name, value, source) {\n let formats = {};\n // @ts-expect-error\n if (typeof index.index === 'number' && typeof index.length === 'number') {\n // Allow for throwaway end (used by insertText/insertEmbed)\n if (typeof length !== 'number') {\n // @ts-expect-error\n source = value;\n value = name;\n name = length;\n // @ts-expect-error\n length = index.length; // eslint-disable-line prefer-destructuring\n // @ts-expect-error\n index = index.index; // eslint-disable-line prefer-destructuring\n } else {\n // @ts-expect-error\n length = index.length; // eslint-disable-line prefer-destructuring\n // @ts-expect-error\n index = index.index; // eslint-disable-line prefer-destructuring\n }\n } else if (typeof length !== 'number') {\n // @ts-expect-error\n source = value;\n value = name;\n name = length;\n length = 0;\n }\n // Handle format being object, two format name/value strings or excluded\n if (typeof name === 'object') {\n // @ts-expect-error Fix me later\n formats = name;\n // @ts-expect-error\n source = value;\n } else if (typeof name === 'string') {\n if (value != null) {\n formats[name] = value;\n } else {\n // @ts-expect-error\n source = name;\n }\n }\n // Handle optional source\n source = source || Emitter.sources.API;\n // @ts-expect-error\n return [index, length, formats, source];\n}\nfunction shiftRange(range, index, lengthOrSource, source) {\n const length = typeof lengthOrSource === 'number' ? lengthOrSource : 0;\n if (range == null) return null;\n let start;\n let end;\n // @ts-expect-error -- TODO: add a better type guard around `index`\n if (index && typeof index.transformPosition === 'function') {\n [start, end] = [range.index, range.index + range.length].map(pos =>\n // @ts-expect-error -- TODO: add a better type guard around `index`\n index.transformPosition(pos, source !== Emitter.sources.USER));\n } else {\n [start, end] = [range.index, range.index + range.length].map(pos => {\n // @ts-expect-error -- TODO: add a better type guard around `index`\n if (pos < index || pos === index && source === Emitter.sources.USER) return pos;\n if (length >= 0) {\n return pos + length;\n }\n // @ts-expect-error -- TODO: add a better type guard around `index`\n return Math.max(index, pos + length);\n });\n }\n return new Range(start, end - start);\n}\nexport { Parchment, Range };\nexport { globalRegistry, expandConfig, overload, Quill as default };\n//# sourceMappingURL=quill.js.map","import { ContainerBlot } from 'parchment';\nclass Container extends ContainerBlot {}\nexport default Container;\n//# sourceMappingURL=container.js.map","import { ContainerBlot, LeafBlot, Scope, ScrollBlot } from 'parchment';\nimport Delta, { AttributeMap, Op } from 'quill-delta';\nimport Emitter from '../core/emitter.js';\nimport Block, { BlockEmbed, bubbleFormats } from './block.js';\nimport Break from './break.js';\nimport Container from './container.js';\nfunction isLine(blot) {\n return blot instanceof Block || blot instanceof BlockEmbed;\n}\nfunction isUpdatable(blot) {\n return typeof blot.updateContent === 'function';\n}\nclass Scroll extends ScrollBlot {\n static blotName = 'scroll';\n static className = 'ql-editor';\n static tagName = 'DIV';\n static defaultChild = Block;\n static allowedChildren = [Block, BlockEmbed, Container];\n constructor(registry, domNode, _ref) {\n let {\n emitter\n } = _ref;\n super(registry, domNode);\n this.emitter = emitter;\n this.batch = false;\n this.optimize();\n this.enable();\n this.domNode.addEventListener('dragstart', e => this.handleDragStart(e));\n }\n batchStart() {\n if (!Array.isArray(this.batch)) {\n this.batch = [];\n }\n }\n batchEnd() {\n if (!this.batch) return;\n const mutations = this.batch;\n this.batch = false;\n this.update(mutations);\n }\n emitMount(blot) {\n this.emitter.emit(Emitter.events.SCROLL_BLOT_MOUNT, blot);\n }\n emitUnmount(blot) {\n this.emitter.emit(Emitter.events.SCROLL_BLOT_UNMOUNT, blot);\n }\n emitEmbedUpdate(blot, change) {\n this.emitter.emit(Emitter.events.SCROLL_EMBED_UPDATE, blot, change);\n }\n deleteAt(index, length) {\n const [first, offset] = this.line(index);\n const [last] = this.line(index + length);\n super.deleteAt(index, length);\n if (last != null && first !== last && offset > 0) {\n if (first instanceof BlockEmbed || last instanceof BlockEmbed) {\n this.optimize();\n return;\n }\n const ref = last.children.head instanceof Break ? null : last.children.head;\n // @ts-expect-error\n first.moveChildren(last, ref);\n // @ts-expect-error\n first.remove();\n }\n this.optimize();\n }\n enable() {\n let enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.domNode.setAttribute('contenteditable', enabled ? 'true' : 'false');\n }\n formatAt(index, length, format, value) {\n super.formatAt(index, length, format, value);\n this.optimize();\n }\n insertAt(index, value, def) {\n if (index >= this.length()) {\n if (def == null || this.scroll.query(value, Scope.BLOCK) == null) {\n const blot = this.scroll.create(this.statics.defaultChild.blotName);\n this.appendChild(blot);\n if (def == null && value.endsWith('\\n')) {\n blot.insertAt(0, value.slice(0, -1), def);\n } else {\n blot.insertAt(0, value, def);\n }\n } else {\n const embed = this.scroll.create(value, def);\n this.appendChild(embed);\n }\n } else {\n super.insertAt(index, value, def);\n }\n this.optimize();\n }\n insertBefore(blot, ref) {\n if (blot.statics.scope === Scope.INLINE_BLOT) {\n const wrapper = this.scroll.create(this.statics.defaultChild.blotName);\n wrapper.appendChild(blot);\n super.insertBefore(wrapper, ref);\n } else {\n super.insertBefore(blot, ref);\n }\n }\n insertContents(index, delta) {\n const renderBlocks = this.deltaToRenderBlocks(delta.concat(new Delta().insert('\\n')));\n const last = renderBlocks.pop();\n if (last == null) return;\n this.batchStart();\n const first = renderBlocks.shift();\n if (first) {\n const shouldInsertNewlineChar = first.type === 'block' && (first.delta.length() === 0 || !this.descendant(BlockEmbed, index)[0] && index < this.length());\n const delta = first.type === 'block' ? first.delta : new Delta().insert({\n [first.key]: first.value\n });\n insertInlineContents(this, index, delta);\n const newlineCharLength = first.type === 'block' ? 1 : 0;\n const lineEndIndex = index + delta.length() + newlineCharLength;\n if (shouldInsertNewlineChar) {\n this.insertAt(lineEndIndex - 1, '\\n');\n }\n const formats = bubbleFormats(this.line(index)[0]);\n const attributes = AttributeMap.diff(formats, first.attributes) || {};\n Object.keys(attributes).forEach(name => {\n this.formatAt(lineEndIndex - 1, 1, name, attributes[name]);\n });\n index = lineEndIndex;\n }\n let [refBlot, refBlotOffset] = this.children.find(index);\n if (renderBlocks.length) {\n if (refBlot) {\n refBlot = refBlot.split(refBlotOffset);\n refBlotOffset = 0;\n }\n renderBlocks.forEach(renderBlock => {\n if (renderBlock.type === 'block') {\n const block = this.createBlock(renderBlock.attributes, refBlot || undefined);\n insertInlineContents(block, 0, renderBlock.delta);\n } else {\n const blockEmbed = this.create(renderBlock.key, renderBlock.value);\n this.insertBefore(blockEmbed, refBlot || undefined);\n Object.keys(renderBlock.attributes).forEach(name => {\n blockEmbed.format(name, renderBlock.attributes[name]);\n });\n }\n });\n }\n if (last.type === 'block' && last.delta.length()) {\n const offset = refBlot ? refBlot.offset(refBlot.scroll) + refBlotOffset : this.length();\n insertInlineContents(this, offset, last.delta);\n }\n this.batchEnd();\n this.optimize();\n }\n isEnabled() {\n return this.domNode.getAttribute('contenteditable') === 'true';\n }\n leaf(index) {\n const last = this.path(index).pop();\n if (!last) {\n return [null, -1];\n }\n const [blot, offset] = last;\n return blot instanceof LeafBlot ? [blot, offset] : [null, -1];\n }\n line(index) {\n if (index === this.length()) {\n return this.line(index - 1);\n }\n // @ts-expect-error TODO: make descendant() generic\n return this.descendant(isLine, index);\n }\n lines() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n const getLines = (blot, blotIndex, blotLength) => {\n let lines = [];\n let lengthLeft = blotLength;\n blot.children.forEachAt(blotIndex, blotLength, (child, childIndex, childLength) => {\n if (isLine(child)) {\n lines.push(child);\n } else if (child instanceof ContainerBlot) {\n lines = lines.concat(getLines(child, childIndex, lengthLeft));\n }\n lengthLeft -= childLength;\n });\n return lines;\n };\n return getLines(this, index, length);\n }\n optimize() {\n let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this.batch) return;\n super.optimize(mutations, context);\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_OPTIMIZE, mutations, context);\n }\n }\n path(index) {\n return super.path(index).slice(1); // Exclude self\n }\n remove() {\n // Never remove self\n }\n update(mutations) {\n if (this.batch) {\n if (Array.isArray(mutations)) {\n this.batch = this.batch.concat(mutations);\n }\n return;\n }\n let source = Emitter.sources.USER;\n if (typeof mutations === 'string') {\n source = mutations;\n }\n if (!Array.isArray(mutations)) {\n mutations = this.observer.takeRecords();\n }\n mutations = mutations.filter(_ref2 => {\n let {\n target\n } = _ref2;\n const blot = this.find(target, true);\n return blot && !isUpdatable(blot);\n });\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_BEFORE_UPDATE, source, mutations);\n }\n super.update(mutations.concat([])); // pass copy\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_UPDATE, source, mutations);\n }\n }\n updateEmbedAt(index, key, change) {\n // Currently it only supports top-level embeds (BlockEmbed).\n // We can update `ParentBlot` in parchment to support inline embeds.\n const [blot] = this.descendant(b => b instanceof BlockEmbed, index);\n if (blot && blot.statics.blotName === key && isUpdatable(blot)) {\n blot.updateContent(change);\n }\n }\n handleDragStart(event) {\n event.preventDefault();\n }\n deltaToRenderBlocks(delta) {\n const renderBlocks = [];\n let currentBlockDelta = new Delta();\n delta.forEach(op => {\n const insert = op?.insert;\n if (!insert) return;\n if (typeof insert === 'string') {\n const splitted = insert.split('\\n');\n splitted.slice(0, -1).forEach(text => {\n currentBlockDelta.insert(text, op.attributes);\n renderBlocks.push({\n type: 'block',\n delta: currentBlockDelta,\n attributes: op.attributes ?? {}\n });\n currentBlockDelta = new Delta();\n });\n const last = splitted[splitted.length - 1];\n if (last) {\n currentBlockDelta.insert(last, op.attributes);\n }\n } else {\n const key = Object.keys(insert)[0];\n if (!key) return;\n if (this.query(key, Scope.INLINE)) {\n currentBlockDelta.push(op);\n } else {\n if (currentBlockDelta.length()) {\n renderBlocks.push({\n type: 'block',\n delta: currentBlockDelta,\n attributes: {}\n });\n }\n currentBlockDelta = new Delta();\n renderBlocks.push({\n type: 'blockEmbed',\n key,\n value: insert[key],\n attributes: op.attributes ?? {}\n });\n }\n }\n });\n if (currentBlockDelta.length()) {\n renderBlocks.push({\n type: 'block',\n delta: currentBlockDelta,\n attributes: {}\n });\n }\n return renderBlocks;\n }\n createBlock(attributes, refBlot) {\n let blotName;\n const formats = {};\n Object.entries(attributes).forEach(_ref3 => {\n let [key, value] = _ref3;\n const isBlockBlot = this.query(key, Scope.BLOCK & Scope.BLOT) != null;\n if (isBlockBlot) {\n blotName = key;\n } else {\n formats[key] = value;\n }\n });\n const block = this.create(blotName || this.statics.defaultChild.blotName, blotName ? attributes[blotName] : undefined);\n this.insertBefore(block, refBlot || undefined);\n const length = block.length();\n Object.entries(formats).forEach(_ref4 => {\n let [key, value] = _ref4;\n block.formatAt(0, length, key, value);\n });\n return block;\n }\n}\nfunction insertInlineContents(parent, index, inlineContents) {\n inlineContents.reduce((index, op) => {\n const length = Op.length(op);\n let attributes = op.attributes || {};\n if (op.insert != null) {\n if (typeof op.insert === 'string') {\n const text = op.insert;\n parent.insertAt(index, text);\n const [leaf] = parent.descendant(LeafBlot, index);\n const formats = bubbleFormats(leaf);\n attributes = AttributeMap.diff(formats, attributes) || {};\n } else if (typeof op.insert === 'object') {\n const key = Object.keys(op.insert)[0]; // There should only be one key\n if (key == null) return index;\n parent.insertAt(index, key, op.insert[key]);\n const isInlineEmbed = parent.scroll.query(key, Scope.INLINE) != null;\n if (isInlineEmbed) {\n const [leaf] = parent.descendant(LeafBlot, index);\n const formats = bubbleFormats(leaf);\n attributes = AttributeMap.diff(formats, attributes) || {};\n }\n }\n }\n Object.keys(attributes).forEach(key => {\n parent.formatAt(index, length, key, attributes[key]);\n });\n return index + length;\n }, index);\n}\nexport default Scroll;\n//# sourceMappingURL=scroll.js.map","import { Attributor, ClassAttributor, Scope, StyleAttributor } from 'parchment';\nconst config = {\n scope: Scope.BLOCK,\n whitelist: ['right', 'center', 'justify']\n};\nconst AlignAttribute = new Attributor('align', 'align', config);\nconst AlignClass = new ClassAttributor('align', 'ql-align', config);\nconst AlignStyle = new StyleAttributor('align', 'text-align', config);\nexport { AlignAttribute, AlignClass, AlignStyle };\n//# sourceMappingURL=align.js.map","import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\nclass ColorAttributor extends StyleAttributor {\n value(domNode) {\n let value = super.value(domNode);\n if (!value.startsWith('rgb(')) return value;\n value = value.replace(/^[^\\d]+/, '').replace(/[^\\d]+$/, '');\n const hex = value.split(',').map(component => `00${parseInt(component, 10).toString(16)}`.slice(-2)).join('');\n return `#${hex}`;\n }\n}\nconst ColorClass = new ClassAttributor('color', 'ql-color', {\n scope: Scope.INLINE\n});\nconst ColorStyle = new ColorAttributor('color', 'color', {\n scope: Scope.INLINE\n});\nexport { ColorAttributor, ColorClass, ColorStyle };\n//# sourceMappingURL=color.js.map","import { ClassAttributor, Scope } from 'parchment';\nimport { ColorAttributor } from './color.js';\nconst BackgroundClass = new ClassAttributor('background', 'ql-bg', {\n scope: Scope.INLINE\n});\nconst BackgroundStyle = new ColorAttributor('background', 'background-color', {\n scope: Scope.INLINE\n});\nexport { BackgroundClass, BackgroundStyle };\n//# sourceMappingURL=background.js.map","import Block from '../blots/block.js';\nimport Break from '../blots/break.js';\nimport Cursor from '../blots/cursor.js';\nimport Inline from '../blots/inline.js';\nimport TextBlot, { escapeText } from '../blots/text.js';\nimport Container from '../blots/container.js';\nimport Quill from '../core/quill.js';\nclass CodeBlockContainer extends Container {\n static create(value) {\n const domNode = super.create(value);\n domNode.setAttribute('spellcheck', 'false');\n return domNode;\n }\n code(index, length) {\n return this.children\n // @ts-expect-error\n .map(child => child.length() <= 1 ? '' : child.domNode.innerText).join('\\n').slice(index, index + length);\n }\n html(index, length) {\n // `\\n`s are needed in order to support empty lines at the beginning and the end.\n // https://html.spec.whatwg.org/multipage/syntax.html#element-restrictions\n return `
    \\n${escapeText(this.code(index, length))}\\n
    `;\n }\n}\nclass CodeBlock extends Block {\n static TAB = ' ';\n static register() {\n Quill.register(CodeBlockContainer);\n }\n}\nclass Code extends Inline {}\nCode.blotName = 'code';\nCode.tagName = 'CODE';\nCodeBlock.blotName = 'code-block';\nCodeBlock.className = 'ql-code-block';\nCodeBlock.tagName = 'DIV';\nCodeBlockContainer.blotName = 'code-block-container';\nCodeBlockContainer.className = 'ql-code-block-container';\nCodeBlockContainer.tagName = 'DIV';\nCodeBlockContainer.allowedChildren = [CodeBlock];\nCodeBlock.allowedChildren = [TextBlot, Break, Cursor];\nCodeBlock.requiredContainer = CodeBlockContainer;\nexport { Code, CodeBlockContainer, CodeBlock as default };\n//# sourceMappingURL=code.js.map","import { Attributor, ClassAttributor, Scope, StyleAttributor } from 'parchment';\nconst config = {\n scope: Scope.BLOCK,\n whitelist: ['rtl']\n};\nconst DirectionAttribute = new Attributor('direction', 'dir', config);\nconst DirectionClass = new ClassAttributor('direction', 'ql-direction', config);\nconst DirectionStyle = new StyleAttributor('direction', 'direction', config);\nexport { DirectionAttribute, DirectionClass, DirectionStyle };\n//# sourceMappingURL=direction.js.map","import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\nconst config = {\n scope: Scope.INLINE,\n whitelist: ['serif', 'monospace']\n};\nconst FontClass = new ClassAttributor('font', 'ql-font', config);\nclass FontStyleAttributor extends StyleAttributor {\n value(node) {\n return super.value(node).replace(/[\"']/g, '');\n }\n}\nconst FontStyle = new FontStyleAttributor('font', 'font-family', config);\nexport { FontStyle, FontClass };\n//# sourceMappingURL=font.js.map","import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\nconst SizeClass = new ClassAttributor('size', 'ql-size', {\n scope: Scope.INLINE,\n whitelist: ['small', 'large', 'huge']\n});\nconst SizeStyle = new StyleAttributor('size', 'font-size', {\n scope: Scope.INLINE,\n whitelist: ['10px', '18px', '32px']\n});\nexport { SizeClass, SizeStyle };\n//# sourceMappingURL=size.js.map","import { cloneDeep, isEqual } from 'lodash-es';\nimport Delta, { AttributeMap } from 'quill-delta';\nimport { EmbedBlot, Scope, TextBlot } from 'parchment';\nimport Quill from '../core/quill.js';\nimport logger from '../core/logger.js';\nimport Module from '../core/module.js';\nconst debug = logger('quill:keyboard');\nconst SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';\nclass Keyboard extends Module {\n static match(evt, binding) {\n if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(key => {\n return !!binding[key] !== evt[key] && binding[key] !== null;\n })) {\n return false;\n }\n return binding.key === evt.key || binding.key === evt.which;\n }\n constructor(quill, options) {\n super(quill, options);\n this.bindings = {};\n // @ts-expect-error Fix me later\n Object.keys(this.options.bindings).forEach(name => {\n // @ts-expect-error Fix me later\n if (this.options.bindings[name]) {\n // @ts-expect-error Fix me later\n this.addBinding(this.options.bindings[name]);\n }\n });\n this.addBinding({\n key: 'Enter',\n shiftKey: null\n }, this.handleEnter);\n this.addBinding({\n key: 'Enter',\n metaKey: null,\n ctrlKey: null,\n altKey: null\n }, () => {});\n if (/Firefox/i.test(navigator.userAgent)) {\n // Need to handle delete and backspace for Firefox in the general case #1171\n this.addBinding({\n key: 'Backspace'\n }, {\n collapsed: true\n }, this.handleBackspace);\n this.addBinding({\n key: 'Delete'\n }, {\n collapsed: true\n }, this.handleDelete);\n } else {\n this.addBinding({\n key: 'Backspace'\n }, {\n collapsed: true,\n prefix: /^.?$/\n }, this.handleBackspace);\n this.addBinding({\n key: 'Delete'\n }, {\n collapsed: true,\n suffix: /^.?$/\n }, this.handleDelete);\n }\n this.addBinding({\n key: 'Backspace'\n }, {\n collapsed: false\n }, this.handleDeleteRange);\n this.addBinding({\n key: 'Delete'\n }, {\n collapsed: false\n }, this.handleDeleteRange);\n this.addBinding({\n key: 'Backspace',\n altKey: null,\n ctrlKey: null,\n metaKey: null,\n shiftKey: null\n }, {\n collapsed: true,\n offset: 0\n }, this.handleBackspace);\n this.listen();\n }\n addBinding(keyBinding) {\n let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const binding = normalize(keyBinding);\n if (binding == null) {\n debug.warn('Attempted to add invalid keyboard binding', binding);\n return;\n }\n if (typeof context === 'function') {\n context = {\n handler: context\n };\n }\n if (typeof handler === 'function') {\n handler = {\n handler\n };\n }\n const keys = Array.isArray(binding.key) ? binding.key : [binding.key];\n keys.forEach(key => {\n const singleBinding = {\n ...binding,\n key,\n ...context,\n ...handler\n };\n this.bindings[singleBinding.key] = this.bindings[singleBinding.key] || [];\n this.bindings[singleBinding.key].push(singleBinding);\n });\n }\n listen() {\n this.quill.root.addEventListener('keydown', evt => {\n if (evt.defaultPrevented || evt.isComposing) return;\n\n // evt.isComposing is false when pressing Enter/Backspace when composing in Safari\n // https://bugs.webkit.org/show_bug.cgi?id=165004\n const isComposing = evt.keyCode === 229 && (evt.key === 'Enter' || evt.key === 'Backspace');\n if (isComposing) return;\n const bindings = (this.bindings[evt.key] || []).concat(this.bindings[evt.which] || []);\n const matches = bindings.filter(binding => Keyboard.match(evt, binding));\n if (matches.length === 0) return;\n // @ts-expect-error\n const blot = Quill.find(evt.target, true);\n if (blot && blot.scroll !== this.quill.scroll) return;\n const range = this.quill.getSelection();\n if (range == null || !this.quill.hasFocus()) return;\n const [line, offset] = this.quill.getLine(range.index);\n const [leafStart, offsetStart] = this.quill.getLeaf(range.index);\n const [leafEnd, offsetEnd] = range.length === 0 ? [leafStart, offsetStart] : this.quill.getLeaf(range.index + range.length);\n const prefixText = leafStart instanceof TextBlot ? leafStart.value().slice(0, offsetStart) : '';\n const suffixText = leafEnd instanceof TextBlot ? leafEnd.value().slice(offsetEnd) : '';\n const curContext = {\n collapsed: range.length === 0,\n // @ts-expect-error Fix me later\n empty: range.length === 0 && line.length() <= 1,\n format: this.quill.getFormat(range),\n line,\n offset,\n prefix: prefixText,\n suffix: suffixText,\n event: evt\n };\n const prevented = matches.some(binding => {\n if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) {\n return false;\n }\n if (binding.empty != null && binding.empty !== curContext.empty) {\n return false;\n }\n if (binding.offset != null && binding.offset !== curContext.offset) {\n return false;\n }\n if (Array.isArray(binding.format)) {\n // any format is present\n if (binding.format.every(name => curContext.format[name] == null)) {\n return false;\n }\n } else if (typeof binding.format === 'object') {\n // all formats must match\n if (!Object.keys(binding.format).every(name => {\n // @ts-expect-error Fix me later\n if (binding.format[name] === true) return curContext.format[name] != null;\n // @ts-expect-error Fix me later\n if (binding.format[name] === false) return curContext.format[name] == null;\n // @ts-expect-error Fix me later\n return isEqual(binding.format[name], curContext.format[name]);\n })) {\n return false;\n }\n }\n if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) {\n return false;\n }\n if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) {\n return false;\n }\n // @ts-expect-error Fix me later\n return binding.handler.call(this, range, curContext, binding) !== true;\n });\n if (prevented) {\n evt.preventDefault();\n }\n });\n }\n handleBackspace(range, context) {\n // Check for astral symbols\n const length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix) ? 2 : 1;\n if (range.index === 0 || this.quill.getLength() <= 1) return;\n let formats = {};\n const [line] = this.quill.getLine(range.index);\n let delta = new Delta().retain(range.index - length).delete(length);\n if (context.offset === 0) {\n // Always deleting newline here, length always 1\n const [prev] = this.quill.getLine(range.index - 1);\n if (prev) {\n const isPrevLineEmpty = prev.statics.blotName === 'block' && prev.length() <= 1;\n if (!isPrevLineEmpty) {\n // @ts-expect-error Fix me later\n const curFormats = line.formats();\n const prevFormats = this.quill.getFormat(range.index - 1, 1);\n formats = AttributeMap.diff(curFormats, prevFormats) || {};\n if (Object.keys(formats).length > 0) {\n // line.length() - 1 targets \\n in line, another -1 for newline being deleted\n const formatDelta = new Delta()\n // @ts-expect-error Fix me later\n .retain(range.index + line.length() - 2).retain(1, formats);\n delta = delta.compose(formatDelta);\n }\n }\n }\n }\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.focus();\n }\n handleDelete(range, context) {\n // Check for astral symbols\n const length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix) ? 2 : 1;\n if (range.index >= this.quill.getLength() - length) return;\n let formats = {};\n const [line] = this.quill.getLine(range.index);\n let delta = new Delta().retain(range.index).delete(length);\n // @ts-expect-error Fix me later\n if (context.offset >= line.length() - 1) {\n const [next] = this.quill.getLine(range.index + 1);\n if (next) {\n // @ts-expect-error Fix me later\n const curFormats = line.formats();\n const nextFormats = this.quill.getFormat(range.index, 1);\n formats = AttributeMap.diff(curFormats, nextFormats) || {};\n if (Object.keys(formats).length > 0) {\n delta = delta.retain(next.length() - 1).retain(1, formats);\n }\n }\n }\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.focus();\n }\n handleDeleteRange(range) {\n deleteRange({\n range,\n quill: this.quill\n });\n this.quill.focus();\n }\n handleEnter(range, context) {\n const lineFormats = Object.keys(context.format).reduce((formats, format) => {\n if (this.quill.scroll.query(format, Scope.BLOCK) && !Array.isArray(context.format[format])) {\n formats[format] = context.format[format];\n }\n return formats;\n }, {});\n const delta = new Delta().retain(range.index).delete(range.length).insert('\\n', lineFormats);\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.focus();\n }\n}\nconst defaultOptions = {\n bindings: {\n bold: makeFormatHandler('bold'),\n italic: makeFormatHandler('italic'),\n underline: makeFormatHandler('underline'),\n indent: {\n // highlight tab or tab at beginning of list, indent or blockquote\n key: 'Tab',\n format: ['blockquote', 'indent', 'list'],\n handler(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '+1', Quill.sources.USER);\n return false;\n }\n },\n outdent: {\n key: 'Tab',\n shiftKey: true,\n format: ['blockquote', 'indent', 'list'],\n // highlight tab or tab at beginning of list, indent or blockquote\n handler(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '-1', Quill.sources.USER);\n return false;\n }\n },\n 'outdent backspace': {\n key: 'Backspace',\n collapsed: true,\n shiftKey: null,\n metaKey: null,\n ctrlKey: null,\n altKey: null,\n format: ['indent', 'list'],\n offset: 0,\n handler(range, context) {\n if (context.format.indent != null) {\n this.quill.format('indent', '-1', Quill.sources.USER);\n } else if (context.format.list != null) {\n this.quill.format('list', false, Quill.sources.USER);\n }\n }\n },\n 'indent code-block': makeCodeBlockHandler(true),\n 'outdent code-block': makeCodeBlockHandler(false),\n 'remove tab': {\n key: 'Tab',\n shiftKey: true,\n collapsed: true,\n prefix: /\\t$/,\n handler(range) {\n this.quill.deleteText(range.index - 1, 1, Quill.sources.USER);\n }\n },\n tab: {\n key: 'Tab',\n handler(range, context) {\n if (context.format.table) return true;\n this.quill.history.cutoff();\n const delta = new Delta().retain(range.index).delete(range.length).insert('\\t');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n return false;\n }\n },\n 'blockquote empty enter': {\n key: 'Enter',\n collapsed: true,\n format: ['blockquote'],\n empty: true,\n handler() {\n this.quill.format('blockquote', false, Quill.sources.USER);\n }\n },\n 'list empty enter': {\n key: 'Enter',\n collapsed: true,\n format: ['list'],\n empty: true,\n handler(range, context) {\n const formats = {\n list: false\n };\n if (context.format.indent) {\n formats.indent = false;\n }\n this.quill.formatLine(range.index, range.length, formats, Quill.sources.USER);\n }\n },\n 'checklist enter': {\n key: 'Enter',\n collapsed: true,\n format: {\n list: 'checked'\n },\n handler(range) {\n const [line, offset] = this.quill.getLine(range.index);\n const formats = {\n // @ts-expect-error Fix me later\n ...line.formats(),\n list: 'checked'\n };\n const delta = new Delta().retain(range.index).insert('\\n', formats)\n // @ts-expect-error Fix me later\n .retain(line.length() - offset - 1).retain(1, {\n list: 'unchecked'\n });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.scrollSelectionIntoView();\n }\n },\n 'header enter': {\n key: 'Enter',\n collapsed: true,\n format: ['header'],\n suffix: /^$/,\n handler(range, context) {\n const [line, offset] = this.quill.getLine(range.index);\n const delta = new Delta().retain(range.index).insert('\\n', context.format)\n // @ts-expect-error Fix me later\n .retain(line.length() - offset - 1).retain(1, {\n header: null\n });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.scrollSelectionIntoView();\n }\n },\n 'table backspace': {\n key: 'Backspace',\n format: ['table'],\n collapsed: true,\n offset: 0,\n handler() {}\n },\n 'table delete': {\n key: 'Delete',\n format: ['table'],\n collapsed: true,\n suffix: /^$/,\n handler() {}\n },\n 'table enter': {\n key: 'Enter',\n shiftKey: null,\n format: ['table'],\n handler(range) {\n const module = this.quill.getModule('table');\n if (module) {\n // @ts-expect-error\n const [table, row, cell, offset] = module.getTable(range);\n const shift = tableSide(table, row, cell, offset);\n if (shift == null) return;\n let index = table.offset();\n if (shift < 0) {\n const delta = new Delta().retain(index).insert('\\n');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, range.length, Quill.sources.SILENT);\n } else if (shift > 0) {\n index += table.length();\n const delta = new Delta().retain(index).insert('\\n');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(index, Quill.sources.USER);\n }\n }\n }\n },\n 'table tab': {\n key: 'Tab',\n shiftKey: null,\n format: ['table'],\n handler(range, context) {\n const {\n event,\n line: cell\n } = context;\n const offset = cell.offset(this.quill.scroll);\n if (event.shiftKey) {\n this.quill.setSelection(offset - 1, Quill.sources.USER);\n } else {\n this.quill.setSelection(offset + cell.length(), Quill.sources.USER);\n }\n }\n },\n 'list autofill': {\n key: ' ',\n shiftKey: null,\n collapsed: true,\n format: {\n 'code-block': false,\n blockquote: false,\n table: false\n },\n prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n handler(range, context) {\n if (this.quill.scroll.query('list') == null) return true;\n const {\n length\n } = context.prefix;\n const [line, offset] = this.quill.getLine(range.index);\n if (offset > length) return true;\n let value;\n switch (context.prefix.trim()) {\n case '[]':\n case '[ ]':\n value = 'unchecked';\n break;\n case '[x]':\n value = 'checked';\n break;\n case '-':\n case '*':\n value = 'bullet';\n break;\n default:\n value = 'ordered';\n }\n this.quill.insertText(range.index, ' ', Quill.sources.USER);\n this.quill.history.cutoff();\n const delta = new Delta().retain(range.index - offset).delete(length + 1)\n // @ts-expect-error Fix me later\n .retain(line.length() - 2 - offset).retain(1, {\n list: value\n });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index - length, Quill.sources.SILENT);\n return false;\n }\n },\n 'code exit': {\n key: 'Enter',\n collapsed: true,\n format: ['code-block'],\n prefix: /^$/,\n suffix: /^\\s*$/,\n handler(range) {\n const [line, offset] = this.quill.getLine(range.index);\n let numLines = 2;\n let cur = line;\n while (cur != null && cur.length() <= 1 && cur.formats()['code-block']) {\n // @ts-expect-error\n cur = cur.prev;\n numLines -= 1;\n // Requisite prev lines are empty\n if (numLines <= 0) {\n const delta = new Delta()\n // @ts-expect-error Fix me later\n .retain(range.index + line.length() - offset - 2).retain(1, {\n 'code-block': null\n }).delete(1);\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index - 1, Quill.sources.SILENT);\n return false;\n }\n }\n return true;\n }\n },\n 'embed left': makeEmbedArrowHandler('ArrowLeft', false),\n 'embed left shift': makeEmbedArrowHandler('ArrowLeft', true),\n 'embed right': makeEmbedArrowHandler('ArrowRight', false),\n 'embed right shift': makeEmbedArrowHandler('ArrowRight', true),\n 'table down': makeTableArrowHandler(false),\n 'table up': makeTableArrowHandler(true)\n }\n};\nKeyboard.DEFAULTS = defaultOptions;\nfunction makeCodeBlockHandler(indent) {\n return {\n key: 'Tab',\n shiftKey: !indent,\n format: {\n 'code-block': true\n },\n handler(range, _ref) {\n let {\n event\n } = _ref;\n const CodeBlock = this.quill.scroll.query('code-block');\n // @ts-expect-error\n const {\n TAB\n } = CodeBlock;\n if (range.length === 0 && !event.shiftKey) {\n this.quill.insertText(range.index, TAB, Quill.sources.USER);\n this.quill.setSelection(range.index + TAB.length, Quill.sources.SILENT);\n return;\n }\n const lines = range.length === 0 ? this.quill.getLines(range.index, 1) : this.quill.getLines(range);\n let {\n index,\n length\n } = range;\n lines.forEach((line, i) => {\n if (indent) {\n line.insertAt(0, TAB);\n if (i === 0) {\n index += TAB.length;\n } else {\n length += TAB.length;\n }\n // @ts-expect-error Fix me later\n } else if (line.domNode.textContent.startsWith(TAB)) {\n line.deleteAt(0, TAB.length);\n if (i === 0) {\n index -= TAB.length;\n } else {\n length -= TAB.length;\n }\n }\n });\n this.quill.update(Quill.sources.USER);\n this.quill.setSelection(index, length, Quill.sources.SILENT);\n }\n };\n}\nfunction makeEmbedArrowHandler(key, shiftKey) {\n const where = key === 'ArrowLeft' ? 'prefix' : 'suffix';\n return {\n key,\n shiftKey,\n altKey: null,\n [where]: /^$/,\n handler(range) {\n let {\n index\n } = range;\n if (key === 'ArrowRight') {\n index += range.length + 1;\n }\n const [leaf] = this.quill.getLeaf(index);\n if (!(leaf instanceof EmbedBlot)) return true;\n if (key === 'ArrowLeft') {\n if (shiftKey) {\n this.quill.setSelection(range.index - 1, range.length + 1, Quill.sources.USER);\n } else {\n this.quill.setSelection(range.index - 1, Quill.sources.USER);\n }\n } else if (shiftKey) {\n this.quill.setSelection(range.index, range.length + 1, Quill.sources.USER);\n } else {\n this.quill.setSelection(range.index + range.length + 1, Quill.sources.USER);\n }\n return false;\n }\n };\n}\nfunction makeFormatHandler(format) {\n return {\n key: format[0],\n shortKey: true,\n handler(range, context) {\n this.quill.format(format, !context.format[format], Quill.sources.USER);\n }\n };\n}\nfunction makeTableArrowHandler(up) {\n return {\n key: up ? 'ArrowUp' : 'ArrowDown',\n collapsed: true,\n format: ['table'],\n handler(range, context) {\n // TODO move to table module\n const key = up ? 'prev' : 'next';\n const cell = context.line;\n const targetRow = cell.parent[key];\n if (targetRow != null) {\n if (targetRow.statics.blotName === 'table-row') {\n // @ts-expect-error\n let targetCell = targetRow.children.head;\n let cur = cell;\n while (cur.prev != null) {\n // @ts-expect-error\n cur = cur.prev;\n targetCell = targetCell.next;\n }\n const index = targetCell.offset(this.quill.scroll) + Math.min(context.offset, targetCell.length() - 1);\n this.quill.setSelection(index, 0, Quill.sources.USER);\n }\n } else {\n // @ts-expect-error\n const targetLine = cell.table()[key];\n if (targetLine != null) {\n if (up) {\n this.quill.setSelection(targetLine.offset(this.quill.scroll) + targetLine.length() - 1, 0, Quill.sources.USER);\n } else {\n this.quill.setSelection(targetLine.offset(this.quill.scroll), 0, Quill.sources.USER);\n }\n }\n }\n return false;\n }\n };\n}\nfunction normalize(binding) {\n if (typeof binding === 'string' || typeof binding === 'number') {\n binding = {\n key: binding\n };\n } else if (typeof binding === 'object') {\n binding = cloneDeep(binding);\n } else {\n return null;\n }\n if (binding.shortKey) {\n binding[SHORTKEY] = binding.shortKey;\n delete binding.shortKey;\n }\n return binding;\n}\n\n// TODO: Move into quill.ts or editor.ts\nfunction deleteRange(_ref2) {\n let {\n quill,\n range\n } = _ref2;\n const lines = quill.getLines(range);\n let formats = {};\n if (lines.length > 1) {\n const firstFormats = lines[0].formats();\n const lastFormats = lines[lines.length - 1].formats();\n formats = AttributeMap.diff(lastFormats, firstFormats) || {};\n }\n quill.deleteText(range, Quill.sources.USER);\n if (Object.keys(formats).length > 0) {\n quill.formatLine(range.index, 1, formats, Quill.sources.USER);\n }\n quill.setSelection(range.index, Quill.sources.SILENT);\n}\nfunction tableSide(_table, row, cell, offset) {\n if (row.prev == null && row.next == null) {\n if (cell.prev == null && cell.next == null) {\n return offset === 0 ? -1 : 1;\n }\n return cell.prev == null ? -1 : 1;\n }\n if (row.prev == null) {\n return -1;\n }\n if (row.next == null) {\n return 1;\n }\n return null;\n}\nexport { Keyboard as default, SHORTKEY, normalize, deleteRange };\n//# sourceMappingURL=keyboard.js.map","const normalWeightRegexp = /font-weight:\\s*normal/;\nconst blockTagNames = ['P', 'OL', 'UL'];\nconst isBlockElement = element => {\n return element && blockTagNames.includes(element.tagName);\n};\nconst normalizeEmptyLines = doc => {\n Array.from(doc.querySelectorAll('br')).filter(br => isBlockElement(br.previousElementSibling) && isBlockElement(br.nextElementSibling)).forEach(br => {\n br.parentNode?.removeChild(br);\n });\n};\nconst normalizeFontWeight = doc => {\n Array.from(doc.querySelectorAll('b[style*=\"font-weight\"]')).filter(node => node.getAttribute('style')?.match(normalWeightRegexp)).forEach(node => {\n const fragment = doc.createDocumentFragment();\n fragment.append(...node.childNodes);\n node.parentNode?.replaceChild(fragment, node);\n });\n};\nexport default function normalize(doc) {\n if (doc.querySelector('[id^=\"docs-internal-guid-\"]')) {\n normalizeFontWeight(doc);\n normalizeEmptyLines(doc);\n }\n}\n//# sourceMappingURL=googleDocs.js.map","const ignoreRegexp = /\\bmso-list:[^;]*ignore/i;\nconst idRegexp = /\\bmso-list:[^;]*\\bl(\\d+)/i;\nconst indentRegexp = /\\bmso-list:[^;]*\\blevel(\\d+)/i;\nconst parseListItem = (element, html) => {\n const style = element.getAttribute('style');\n const idMatch = style?.match(idRegexp);\n if (!idMatch) {\n return null;\n }\n const id = Number(idMatch[1]);\n const indentMatch = style?.match(indentRegexp);\n const indent = indentMatch ? Number(indentMatch[1]) : 1;\n const typeRegexp = new RegExp(`@list l${id}:level${indent}\\\\s*\\\\{[^\\\\}]*mso-level-number-format:\\\\s*([\\\\w-]+)`, 'i');\n const typeMatch = html.match(typeRegexp);\n const type = typeMatch && typeMatch[1] === 'bullet' ? 'bullet' : 'ordered';\n return {\n id,\n indent,\n type,\n element\n };\n};\n\n// list items are represented as `p` tags with styles like `mso-list: l0 level1` where:\n// 1. \"0\" in \"l0\" means the list item id;\n// 2. \"1\" in \"level1\" means the indent level, starting from 1.\nconst normalizeListItem = doc => {\n const msoList = Array.from(doc.querySelectorAll('[style*=mso-list]'));\n const ignored = [];\n const others = [];\n msoList.forEach(node => {\n const shouldIgnore = (node.getAttribute('style') || '').match(ignoreRegexp);\n if (shouldIgnore) {\n ignored.push(node);\n } else {\n others.push(node);\n }\n });\n\n // Each list item contains a marker wrapped with \"mso-list: Ignore\".\n ignored.forEach(node => node.parentNode?.removeChild(node));\n\n // The list stype is not defined inline with the tag, instead, it's in the\n // style tag so we need to pass the html as a string.\n const html = doc.documentElement.innerHTML;\n const listItems = others.map(element => parseListItem(element, html)).filter(parsed => parsed);\n while (listItems.length) {\n const childListItems = [];\n let current = listItems.shift();\n // Group continuous items into the same group (aka \"ul\")\n while (current) {\n childListItems.push(current);\n current = listItems.length && listItems[0]?.element === current.element.nextElementSibling &&\n // Different id means the next item doesn't belong to this group.\n listItems[0].id === current.id ? listItems.shift() : null;\n }\n const ul = document.createElement('ul');\n childListItems.forEach(listItem => {\n const li = document.createElement('li');\n li.setAttribute('data-list', listItem.type);\n if (listItem.indent > 1) {\n li.setAttribute('class', `ql-indent-${listItem.indent - 1}`);\n }\n li.innerHTML = listItem.element.innerHTML;\n ul.appendChild(li);\n });\n const element = childListItems[0]?.element;\n const {\n parentNode\n } = element ?? {};\n if (element) {\n parentNode?.replaceChild(ul, element);\n }\n childListItems.slice(1).forEach(_ref => {\n let {\n element: e\n } = _ref;\n parentNode?.removeChild(e);\n });\n }\n};\nexport default function normalize(doc) {\n if (doc.documentElement.getAttribute('xmlns:w') === 'urn:schemas-microsoft-com:office:word') {\n normalizeListItem(doc);\n }\n}\n//# sourceMappingURL=msWord.js.map","import googleDocs from './normalizers/googleDocs.js';\nimport msWord from './normalizers/msWord.js';\nconst NORMALIZERS = [msWord, googleDocs];\nconst normalizeExternalHTML = doc => {\n if (doc.documentElement) {\n NORMALIZERS.forEach(normalize => {\n normalize(doc);\n });\n }\n};\nexport default normalizeExternalHTML;\n//# sourceMappingURL=index.js.map","import { Attributor, BlockBlot, ClassAttributor, EmbedBlot, Scope, StyleAttributor } from 'parchment';\nimport Delta from 'quill-delta';\nimport { BlockEmbed } from '../blots/block.js';\nimport logger from '../core/logger.js';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\nimport { AlignAttribute, AlignStyle } from '../formats/align.js';\nimport { BackgroundStyle } from '../formats/background.js';\nimport CodeBlock from '../formats/code.js';\nimport { ColorStyle } from '../formats/color.js';\nimport { DirectionAttribute, DirectionStyle } from '../formats/direction.js';\nimport { FontStyle } from '../formats/font.js';\nimport { SizeStyle } from '../formats/size.js';\nimport { deleteRange } from './keyboard.js';\nimport normalizeExternalHTML from './normalizeExternalHTML/index.js';\nconst debug = logger('quill:clipboard');\nconst CLIPBOARD_CONFIG = [[Node.TEXT_NODE, matchText], [Node.TEXT_NODE, matchNewline], ['br', matchBreak], [Node.ELEMENT_NODE, matchNewline], [Node.ELEMENT_NODE, matchBlot], [Node.ELEMENT_NODE, matchAttributor], [Node.ELEMENT_NODE, matchStyles], ['li', matchIndent], ['ol, ul', matchList], ['pre', matchCodeBlock], ['tr', matchTable], ['b', createMatchAlias('bold')], ['i', createMatchAlias('italic')], ['strike', createMatchAlias('strike')], ['style', matchIgnore]];\nconst ATTRIBUTE_ATTRIBUTORS = [AlignAttribute, DirectionAttribute].reduce((memo, attr) => {\n memo[attr.keyName] = attr;\n return memo;\n}, {});\nconst STYLE_ATTRIBUTORS = [AlignStyle, BackgroundStyle, ColorStyle, DirectionStyle, FontStyle, SizeStyle].reduce((memo, attr) => {\n memo[attr.keyName] = attr;\n return memo;\n}, {});\nclass Clipboard extends Module {\n static DEFAULTS = {\n matchers: []\n };\n constructor(quill, options) {\n super(quill, options);\n this.quill.root.addEventListener('copy', e => this.onCaptureCopy(e, false));\n this.quill.root.addEventListener('cut', e => this.onCaptureCopy(e, true));\n this.quill.root.addEventListener('paste', this.onCapturePaste.bind(this));\n this.matchers = [];\n CLIPBOARD_CONFIG.concat(this.options.matchers ?? []).forEach(_ref => {\n let [selector, matcher] = _ref;\n this.addMatcher(selector, matcher);\n });\n }\n addMatcher(selector, matcher) {\n this.matchers.push([selector, matcher]);\n }\n convert(_ref2) {\n let {\n html,\n text\n } = _ref2;\n let formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (formats[CodeBlock.blotName]) {\n return new Delta().insert(text || '', {\n [CodeBlock.blotName]: formats[CodeBlock.blotName]\n });\n }\n if (!html) {\n return new Delta().insert(text || '', formats);\n }\n const delta = this.convertHTML(html);\n // Remove trailing newline\n if (deltaEndsWith(delta, '\\n') && (delta.ops[delta.ops.length - 1].attributes == null || formats.table)) {\n return delta.compose(new Delta().retain(delta.length() - 1).delete(1));\n }\n return delta;\n }\n normalizeHTML(doc) {\n normalizeExternalHTML(doc);\n }\n convertHTML(html) {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n this.normalizeHTML(doc);\n const container = doc.body;\n const nodeMatches = new WeakMap();\n const [elementMatchers, textMatchers] = this.prepareMatching(container, nodeMatches);\n return traverse(this.quill.scroll, container, elementMatchers, textMatchers, nodeMatches);\n }\n dangerouslyPasteHTML(index, html) {\n let source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Quill.sources.API;\n if (typeof index === 'string') {\n const delta = this.convert({\n html: index,\n text: ''\n });\n // @ts-expect-error\n this.quill.setContents(delta, html);\n this.quill.setSelection(0, Quill.sources.SILENT);\n } else {\n const paste = this.convert({\n html,\n text: ''\n });\n this.quill.updateContents(new Delta().retain(index).concat(paste), source);\n this.quill.setSelection(index + paste.length(), Quill.sources.SILENT);\n }\n }\n onCaptureCopy(e) {\n let isCut = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (e.defaultPrevented) return;\n e.preventDefault();\n const [range] = this.quill.selection.getRange();\n if (range == null) return;\n const {\n html,\n text\n } = this.onCopy(range, isCut);\n e.clipboardData?.setData('text/plain', text);\n e.clipboardData?.setData('text/html', html);\n if (isCut) {\n deleteRange({\n range,\n quill: this.quill\n });\n }\n }\n\n /*\n * https://www.iana.org/assignments/media-types/text/uri-list\n */\n normalizeURIList(urlList) {\n return urlList.split(/\\r?\\n/)\n // Ignore all comments\n .filter(url => url[0] !== '#').join('\\n');\n }\n onCapturePaste(e) {\n if (e.defaultPrevented || !this.quill.isEnabled()) return;\n e.preventDefault();\n const range = this.quill.getSelection(true);\n if (range == null) return;\n const html = e.clipboardData?.getData('text/html');\n let text = e.clipboardData?.getData('text/plain');\n if (!html && !text) {\n const urlList = e.clipboardData?.getData('text/uri-list');\n if (urlList) {\n text = this.normalizeURIList(urlList);\n }\n }\n const files = Array.from(e.clipboardData?.files || []);\n if (!html && files.length > 0) {\n this.quill.uploader.upload(range, files);\n return;\n }\n if (html && files.length > 0) {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n if (doc.body.childElementCount === 1 && doc.body.firstElementChild?.tagName === 'IMG') {\n this.quill.uploader.upload(range, files);\n return;\n }\n }\n this.onPaste(range, {\n html,\n text\n });\n }\n onCopy(range) {\n const text = this.quill.getText(range);\n const html = this.quill.getSemanticHTML(range);\n return {\n html,\n text\n };\n }\n onPaste(range, _ref3) {\n let {\n text,\n html\n } = _ref3;\n const formats = this.quill.getFormat(range.index);\n const pastedDelta = this.convert({\n text,\n html\n }, formats);\n debug.log('onPaste', pastedDelta, {\n text,\n html\n });\n const delta = new Delta().retain(range.index).delete(range.length).concat(pastedDelta);\n this.quill.updateContents(delta, Quill.sources.USER);\n // range.length contributes to delta.length()\n this.quill.setSelection(delta.length() - range.length, Quill.sources.SILENT);\n this.quill.scrollSelectionIntoView();\n }\n prepareMatching(container, nodeMatches) {\n const elementMatchers = [];\n const textMatchers = [];\n this.matchers.forEach(pair => {\n const [selector, matcher] = pair;\n switch (selector) {\n case Node.TEXT_NODE:\n textMatchers.push(matcher);\n break;\n case Node.ELEMENT_NODE:\n elementMatchers.push(matcher);\n break;\n default:\n Array.from(container.querySelectorAll(selector)).forEach(node => {\n if (nodeMatches.has(node)) {\n const matches = nodeMatches.get(node);\n matches?.push(matcher);\n } else {\n nodeMatches.set(node, [matcher]);\n }\n });\n break;\n }\n });\n return [elementMatchers, textMatchers];\n }\n}\nfunction applyFormat(delta, format, value, scroll) {\n if (!scroll.query(format)) {\n return delta;\n }\n return delta.reduce((newDelta, op) => {\n if (!op.insert) return newDelta;\n if (op.attributes && op.attributes[format]) {\n return newDelta.push(op);\n }\n const formats = value ? {\n [format]: value\n } : {};\n return newDelta.insert(op.insert, {\n ...formats,\n ...op.attributes\n });\n }, new Delta());\n}\nfunction deltaEndsWith(delta, text) {\n let endText = '';\n for (let i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i // eslint-disable-line no-plusplus\n ) {\n const op = delta.ops[i];\n if (typeof op.insert !== 'string') break;\n endText = op.insert + endText;\n }\n return endText.slice(-1 * text.length) === text;\n}\nfunction isLine(node, scroll) {\n if (!(node instanceof Element)) return false;\n const match = scroll.query(node);\n // @ts-expect-error\n if (match && match.prototype instanceof EmbedBlot) return false;\n return ['address', 'article', 'blockquote', 'canvas', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'iframe', 'li', 'main', 'nav', 'ol', 'output', 'p', 'pre', 'section', 'table', 'td', 'tr', 'ul', 'video'].includes(node.tagName.toLowerCase());\n}\nfunction isBetweenInlineElements(node, scroll) {\n return node.previousElementSibling && node.nextElementSibling && !isLine(node.previousElementSibling, scroll) && !isLine(node.nextElementSibling, scroll);\n}\nconst preNodes = new WeakMap();\nfunction isPre(node) {\n if (node == null) return false;\n if (!preNodes.has(node)) {\n // @ts-expect-error\n if (node.tagName === 'PRE') {\n preNodes.set(node, true);\n } else {\n preNodes.set(node, isPre(node.parentNode));\n }\n }\n return preNodes.get(node);\n}\nfunction traverse(scroll, node, elementMatchers, textMatchers, nodeMatches) {\n // Post-order\n if (node.nodeType === node.TEXT_NODE) {\n return textMatchers.reduce((delta, matcher) => {\n return matcher(node, delta, scroll);\n }, new Delta());\n }\n if (node.nodeType === node.ELEMENT_NODE) {\n return Array.from(node.childNodes || []).reduce((delta, childNode) => {\n let childrenDelta = traverse(scroll, childNode, elementMatchers, textMatchers, nodeMatches);\n if (childNode.nodeType === node.ELEMENT_NODE) {\n childrenDelta = elementMatchers.reduce((reducedDelta, matcher) => {\n return matcher(childNode, reducedDelta, scroll);\n }, childrenDelta);\n childrenDelta = (nodeMatches.get(childNode) || []).reduce((reducedDelta, matcher) => {\n return matcher(childNode, reducedDelta, scroll);\n }, childrenDelta);\n }\n return delta.concat(childrenDelta);\n }, new Delta());\n }\n return new Delta();\n}\nfunction createMatchAlias(format) {\n return (_node, delta, scroll) => {\n return applyFormat(delta, format, true, scroll);\n };\n}\nfunction matchAttributor(node, delta, scroll) {\n const attributes = Attributor.keys(node);\n const classes = ClassAttributor.keys(node);\n const styles = StyleAttributor.keys(node);\n const formats = {};\n attributes.concat(classes).concat(styles).forEach(name => {\n let attr = scroll.query(name, Scope.ATTRIBUTE);\n if (attr != null) {\n formats[attr.attrName] = attr.value(node);\n if (formats[attr.attrName]) return;\n }\n attr = ATTRIBUTE_ATTRIBUTORS[name];\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n attr = STYLE_ATTRIBUTORS[name];\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n attr = STYLE_ATTRIBUTORS[name];\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n });\n return Object.entries(formats).reduce((newDelta, _ref4) => {\n let [name, value] = _ref4;\n return applyFormat(newDelta, name, value, scroll);\n }, delta);\n}\nfunction matchBlot(node, delta, scroll) {\n const match = scroll.query(node);\n if (match == null) return delta;\n // @ts-expect-error\n if (match.prototype instanceof EmbedBlot) {\n const embed = {};\n // @ts-expect-error\n const value = match.value(node);\n if (value != null) {\n // @ts-expect-error\n embed[match.blotName] = value;\n // @ts-expect-error\n return new Delta().insert(embed, match.formats(node, scroll));\n }\n } else {\n // @ts-expect-error\n if (match.prototype instanceof BlockBlot && !deltaEndsWith(delta, '\\n')) {\n delta.insert('\\n');\n }\n if ('blotName' in match && 'formats' in match && typeof match.formats === 'function') {\n return applyFormat(delta, match.blotName, match.formats(node, scroll), scroll);\n }\n }\n return delta;\n}\nfunction matchBreak(node, delta) {\n if (!deltaEndsWith(delta, '\\n')) {\n delta.insert('\\n');\n }\n return delta;\n}\nfunction matchCodeBlock(node, delta, scroll) {\n const match = scroll.query('code-block');\n const language = match && 'formats' in match && typeof match.formats === 'function' ? match.formats(node, scroll) : true;\n return applyFormat(delta, 'code-block', language, scroll);\n}\nfunction matchIgnore() {\n return new Delta();\n}\nfunction matchIndent(node, delta, scroll) {\n const match = scroll.query(node);\n if (match == null ||\n // @ts-expect-error\n match.blotName !== 'list' || !deltaEndsWith(delta, '\\n')) {\n return delta;\n }\n let indent = -1;\n let parent = node.parentNode;\n while (parent != null) {\n // @ts-expect-error\n if (['OL', 'UL'].includes(parent.tagName)) {\n indent += 1;\n }\n parent = parent.parentNode;\n }\n if (indent <= 0) return delta;\n return delta.reduce((composed, op) => {\n if (!op.insert) return composed;\n if (op.attributes && typeof op.attributes.indent === 'number') {\n return composed.push(op);\n }\n return composed.insert(op.insert, {\n indent,\n ...(op.attributes || {})\n });\n }, new Delta());\n}\nfunction matchList(node, delta, scroll) {\n const element = node;\n let list = element.tagName === 'OL' ? 'ordered' : 'bullet';\n const checkedAttr = element.getAttribute('data-checked');\n if (checkedAttr) {\n list = checkedAttr === 'true' ? 'checked' : 'unchecked';\n }\n return applyFormat(delta, 'list', list, scroll);\n}\nfunction matchNewline(node, delta, scroll) {\n if (!deltaEndsWith(delta, '\\n')) {\n if (isLine(node, scroll) && (node.childNodes.length > 0 || node instanceof HTMLParagraphElement)) {\n return delta.insert('\\n');\n }\n if (delta.length() > 0 && node.nextSibling) {\n let nextSibling = node.nextSibling;\n while (nextSibling != null) {\n if (isLine(nextSibling, scroll)) {\n return delta.insert('\\n');\n }\n const match = scroll.query(nextSibling);\n // @ts-expect-error\n if (match && match.prototype instanceof BlockEmbed) {\n return delta.insert('\\n');\n }\n nextSibling = nextSibling.firstChild;\n }\n }\n }\n return delta;\n}\nfunction matchStyles(node, delta, scroll) {\n const formats = {};\n const style = node.style || {};\n if (style.fontStyle === 'italic') {\n formats.italic = true;\n }\n if (style.textDecoration === 'underline') {\n formats.underline = true;\n }\n if (style.textDecoration === 'line-through') {\n formats.strike = true;\n }\n if (style.fontWeight?.startsWith('bold') ||\n // @ts-expect-error Fix me later\n parseInt(style.fontWeight, 10) >= 700) {\n formats.bold = true;\n }\n delta = Object.entries(formats).reduce((newDelta, _ref5) => {\n let [name, value] = _ref5;\n return applyFormat(newDelta, name, value, scroll);\n }, delta);\n // @ts-expect-error\n if (parseFloat(style.textIndent || 0) > 0) {\n // Could be 0.5in\n return new Delta().insert('\\t').concat(delta);\n }\n return delta;\n}\nfunction matchTable(node, delta, scroll) {\n const table = node.parentElement?.tagName === 'TABLE' ? node.parentElement : node.parentElement?.parentElement;\n if (table != null) {\n const rows = Array.from(table.querySelectorAll('tr'));\n const row = rows.indexOf(node) + 1;\n return applyFormat(delta, 'table', row, scroll);\n }\n return delta;\n}\nfunction matchText(node, delta, scroll) {\n // @ts-expect-error\n let text = node.data;\n // Word represents empty line with  \n if (node.parentElement?.tagName === 'O:P') {\n return delta.insert(text.trim());\n }\n if (!isPre(node)) {\n if (text.trim().length === 0 && text.includes('\\n') && !isBetweenInlineElements(node, scroll)) {\n return delta;\n }\n // convert all non-nbsp whitespace into regular space\n text = text.replace(/[^\\S\\u00a0]/g, ' ');\n // collapse consecutive spaces into one\n text = text.replace(/ {2,}/g, ' ');\n if (node.previousSibling == null && node.parentElement != null && isLine(node.parentElement, scroll) || node.previousSibling instanceof Element && isLine(node.previousSibling, scroll)) {\n // block structure means we don't need leading space\n text = text.replace(/^ /, '');\n }\n if (node.nextSibling == null && node.parentElement != null && isLine(node.parentElement, scroll) || node.nextSibling instanceof Element && isLine(node.nextSibling, scroll)) {\n // block structure means we don't need trailing space\n text = text.replace(/ $/, '');\n }\n // done removing whitespace and can normalize all to regular space\n text = text.replaceAll('\\u00a0', ' ');\n }\n return delta.insert(text);\n}\nexport { Clipboard as default, matchAttributor, matchBlot, matchNewline, matchText, traverse };\n//# sourceMappingURL=clipboard.js.map","import { Scope } from 'parchment';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\nclass History extends Module {\n static DEFAULTS = {\n delay: 1000,\n maxStack: 100,\n userOnly: false\n };\n lastRecorded = 0;\n ignoreChange = false;\n stack = {\n undo: [],\n redo: []\n };\n currentRange = null;\n constructor(quill, options) {\n super(quill, options);\n this.quill.on(Quill.events.EDITOR_CHANGE, (eventName, value, oldValue, source) => {\n if (eventName === Quill.events.SELECTION_CHANGE) {\n if (value && source !== Quill.sources.SILENT) {\n this.currentRange = value;\n }\n } else if (eventName === Quill.events.TEXT_CHANGE) {\n if (!this.ignoreChange) {\n if (!this.options.userOnly || source === Quill.sources.USER) {\n this.record(value, oldValue);\n } else {\n this.transform(value);\n }\n }\n this.currentRange = transformRange(this.currentRange, value);\n }\n });\n this.quill.keyboard.addBinding({\n key: 'z',\n shortKey: true\n }, this.undo.bind(this));\n this.quill.keyboard.addBinding({\n key: ['z', 'Z'],\n shortKey: true,\n shiftKey: true\n }, this.redo.bind(this));\n if (/Win/i.test(navigator.platform)) {\n this.quill.keyboard.addBinding({\n key: 'y',\n shortKey: true\n }, this.redo.bind(this));\n }\n this.quill.root.addEventListener('beforeinput', event => {\n if (event.inputType === 'historyUndo') {\n this.undo();\n event.preventDefault();\n } else if (event.inputType === 'historyRedo') {\n this.redo();\n event.preventDefault();\n }\n });\n }\n change(source, dest) {\n if (this.stack[source].length === 0) return;\n const item = this.stack[source].pop();\n if (!item) return;\n const base = this.quill.getContents();\n const inverseDelta = item.delta.invert(base);\n this.stack[dest].push({\n delta: inverseDelta,\n range: transformRange(item.range, inverseDelta)\n });\n this.lastRecorded = 0;\n this.ignoreChange = true;\n this.quill.updateContents(item.delta, Quill.sources.USER);\n this.ignoreChange = false;\n this.restoreSelection(item);\n }\n clear() {\n this.stack = {\n undo: [],\n redo: []\n };\n }\n cutoff() {\n this.lastRecorded = 0;\n }\n record(changeDelta, oldDelta) {\n if (changeDelta.ops.length === 0) return;\n this.stack.redo = [];\n let undoDelta = changeDelta.invert(oldDelta);\n let undoRange = this.currentRange;\n const timestamp = Date.now();\n if (\n // @ts-expect-error Fix me later\n this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0) {\n const item = this.stack.undo.pop();\n if (item) {\n undoDelta = undoDelta.compose(item.delta);\n undoRange = item.range;\n }\n } else {\n this.lastRecorded = timestamp;\n }\n if (undoDelta.length() === 0) return;\n this.stack.undo.push({\n delta: undoDelta,\n range: undoRange\n });\n // @ts-expect-error Fix me later\n if (this.stack.undo.length > this.options.maxStack) {\n this.stack.undo.shift();\n }\n }\n redo() {\n this.change('redo', 'undo');\n }\n transform(delta) {\n transformStack(this.stack.undo, delta);\n transformStack(this.stack.redo, delta);\n }\n undo() {\n this.change('undo', 'redo');\n }\n restoreSelection(stackItem) {\n if (stackItem.range) {\n this.quill.setSelection(stackItem.range, Quill.sources.USER);\n } else {\n const index = getLastChangeIndex(this.quill.scroll, stackItem.delta);\n this.quill.setSelection(index, Quill.sources.USER);\n }\n }\n}\nfunction transformStack(stack, delta) {\n let remoteDelta = delta;\n for (let i = stack.length - 1; i >= 0; i -= 1) {\n const oldItem = stack[i];\n stack[i] = {\n delta: remoteDelta.transform(oldItem.delta, true),\n range: oldItem.range && transformRange(oldItem.range, remoteDelta)\n };\n remoteDelta = oldItem.delta.transform(remoteDelta);\n if (stack[i].delta.length() === 0) {\n stack.splice(i, 1);\n }\n }\n}\nfunction endsWithNewlineChange(scroll, delta) {\n const lastOp = delta.ops[delta.ops.length - 1];\n if (lastOp == null) return false;\n if (lastOp.insert != null) {\n return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\\n');\n }\n if (lastOp.attributes != null) {\n return Object.keys(lastOp.attributes).some(attr => {\n return scroll.query(attr, Scope.BLOCK) != null;\n });\n }\n return false;\n}\nfunction getLastChangeIndex(scroll, delta) {\n const deleteLength = delta.reduce((length, op) => {\n return length + (op.delete || 0);\n }, 0);\n let changeIndex = delta.length() - deleteLength;\n if (endsWithNewlineChange(scroll, delta)) {\n changeIndex -= 1;\n }\n return changeIndex;\n}\nfunction transformRange(range, delta) {\n if (!range) return range;\n const start = delta.transformPosition(range.index);\n const end = delta.transformPosition(range.index + range.length);\n return {\n index: start,\n length: end - start\n };\n}\nexport { History as default, getLastChangeIndex };\n//# sourceMappingURL=history.js.map","import Delta from 'quill-delta';\nimport Emitter from '../core/emitter.js';\nimport Module from '../core/module.js';\nclass Uploader extends Module {\n constructor(quill, options) {\n super(quill, options);\n quill.root.addEventListener('drop', e => {\n e.preventDefault();\n let native = null;\n if (document.caretRangeFromPoint) {\n native = document.caretRangeFromPoint(e.clientX, e.clientY);\n // @ts-expect-error\n } else if (document.caretPositionFromPoint) {\n // @ts-expect-error\n const position = document.caretPositionFromPoint(e.clientX, e.clientY);\n native = document.createRange();\n native.setStart(position.offsetNode, position.offset);\n native.setEnd(position.offsetNode, position.offset);\n }\n const normalized = native && quill.selection.normalizeNative(native);\n if (normalized) {\n const range = quill.selection.normalizedToRange(normalized);\n if (e.dataTransfer?.files) {\n this.upload(range, e.dataTransfer.files);\n }\n }\n });\n }\n upload(range, files) {\n const uploads = [];\n Array.from(files).forEach(file => {\n if (file && this.options.mimetypes?.includes(file.type)) {\n uploads.push(file);\n }\n });\n if (uploads.length > 0) {\n // @ts-expect-error Fix me later\n this.options.handler.call(this, range, uploads);\n }\n }\n}\nUploader.DEFAULTS = {\n mimetypes: ['image/png', 'image/jpeg'],\n handler(range, files) {\n if (!this.quill.scroll.query('image')) {\n return;\n }\n const promises = files.map(file => {\n return new Promise(resolve => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(reader.result);\n };\n reader.readAsDataURL(file);\n });\n });\n Promise.all(promises).then(images => {\n const update = images.reduce((delta, image) => {\n return delta.insert({\n image\n });\n }, new Delta().retain(range.index).delete(range.length));\n this.quill.updateContents(update, Emitter.sources.USER);\n this.quill.setSelection(range.index + images.length, Emitter.sources.SILENT);\n });\n }\n};\nexport default Uploader;\n//# sourceMappingURL=uploader.js.map","import Delta from 'quill-delta';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\nimport { deleteRange } from './keyboard.js';\nconst INSERT_TYPES = ['insertText', 'insertReplacementText'];\nclass Input extends Module {\n constructor(quill, options) {\n super(quill, options);\n quill.root.addEventListener('beforeinput', event => {\n this.handleBeforeInput(event);\n });\n\n // Gboard with English input on Android triggers `compositionstart` sometimes even\n // users are not going to type anything.\n if (!/Android/i.test(navigator.userAgent)) {\n quill.on(Quill.events.COMPOSITION_BEFORE_START, () => {\n this.handleCompositionStart();\n });\n }\n }\n deleteRange(range) {\n deleteRange({\n range,\n quill: this.quill\n });\n }\n replaceText(range) {\n let text = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n if (range.length === 0) return false;\n if (text) {\n // Follow the native behavior that inherits the formats of the first character\n const formats = this.quill.getFormat(range.index, 1);\n this.deleteRange(range);\n this.quill.updateContents(new Delta().retain(range.index).insert(text, formats), Quill.sources.USER);\n } else {\n this.deleteRange(range);\n }\n this.quill.setSelection(range.index + text.length, 0, Quill.sources.SILENT);\n return true;\n }\n handleBeforeInput(event) {\n if (this.quill.composition.isComposing || event.defaultPrevented || !INSERT_TYPES.includes(event.inputType)) {\n return;\n }\n const staticRange = event.getTargetRanges ? event.getTargetRanges()[0] : null;\n if (!staticRange || staticRange.collapsed === true) {\n return;\n }\n const text = getPlainTextFromInputEvent(event);\n if (text == null) {\n return;\n }\n const normalized = this.quill.selection.normalizeNative(staticRange);\n const range = normalized ? this.quill.selection.normalizedToRange(normalized) : null;\n if (range && this.replaceText(range, text)) {\n event.preventDefault();\n }\n }\n handleCompositionStart() {\n const range = this.quill.getSelection();\n if (range) {\n this.replaceText(range);\n }\n }\n}\nfunction getPlainTextFromInputEvent(event) {\n // When `inputType` is \"insertText\":\n // - `event.data` should be string (Safari uses `event.dataTransfer`).\n // - `event.dataTransfer` should be null.\n // When `inputType` is \"insertReplacementText\":\n // - `event.data` should be null.\n // - `event.dataTransfer` should contain \"text/plain\" data.\n\n if (typeof event.data === 'string') {\n return event.data;\n }\n if (event.dataTransfer?.types.includes('text/plain')) {\n return event.dataTransfer.getData('text/plain');\n }\n return null;\n}\nexport default Input;\n//# sourceMappingURL=input.js.map","import { ParentBlot } from 'parchment';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\nconst isMac = /Mac/i.test(navigator.platform);\n\n// Export for testing\nexport const TTL_FOR_VALID_SELECTION_CHANGE = 100;\n\n// A loose check to determine if the shortcut can move the caret before a UI node:\n// [CARET]
    [CONTENT]
    \nconst canMoveCaretBeforeUINode = event => {\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight' ||\n // RTL scripts or moving from the end of the previous line\n event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'Home') {\n return true;\n }\n if (isMac && event.key === 'a' && event.ctrlKey === true) {\n return true;\n }\n return false;\n};\nclass UINode extends Module {\n isListening = false;\n selectionChangeDeadline = 0;\n constructor(quill, options) {\n super(quill, options);\n this.handleArrowKeys();\n this.handleNavigationShortcuts();\n }\n handleArrowKeys() {\n this.quill.keyboard.addBinding({\n key: ['ArrowLeft', 'ArrowRight'],\n offset: 0,\n shiftKey: null,\n handler(range, _ref) {\n let {\n line,\n event\n } = _ref;\n if (!(line instanceof ParentBlot) || !line.uiNode) {\n return true;\n }\n const isRTL = getComputedStyle(line.domNode)['direction'] === 'rtl';\n if (isRTL && event.key !== 'ArrowRight' || !isRTL && event.key !== 'ArrowLeft') {\n return true;\n }\n this.quill.setSelection(range.index - 1, range.length + (event.shiftKey ? 1 : 0), Quill.sources.USER);\n return false;\n }\n });\n }\n handleNavigationShortcuts() {\n this.quill.root.addEventListener('keydown', event => {\n if (!event.defaultPrevented && canMoveCaretBeforeUINode(event)) {\n this.ensureListeningToSelectionChange();\n }\n });\n }\n\n /**\n * We only listen to the `selectionchange` event when\n * there is an intention of moving the caret to the beginning using shortcuts.\n * This is primarily implemented to prevent infinite loops, as we are changing\n * the selection within the handler of a `selectionchange` event.\n */\n ensureListeningToSelectionChange() {\n this.selectionChangeDeadline = Date.now() + TTL_FOR_VALID_SELECTION_CHANGE;\n if (this.isListening) return;\n this.isListening = true;\n const listener = () => {\n this.isListening = false;\n if (Date.now() <= this.selectionChangeDeadline) {\n this.handleSelectionChange();\n }\n };\n document.addEventListener('selectionchange', listener, {\n once: true\n });\n }\n handleSelectionChange() {\n const selection = document.getSelection();\n if (!selection) return;\n const range = selection.getRangeAt(0);\n if (range.collapsed !== true || range.startOffset !== 0) return;\n const line = this.quill.scroll.find(range.startContainer);\n if (!(line instanceof ParentBlot) || !line.uiNode) return;\n const newRange = document.createRange();\n newRange.setStartAfter(line.uiNode);\n newRange.setEndAfter(line.uiNode);\n selection.removeAllRanges();\n selection.addRange(newRange);\n }\n}\nexport default UINode;\n//# sourceMappingURL=uiNode.js.map","import Quill, { Parchment, Range } from './core/quill.js';\nimport Block, { BlockEmbed } from './blots/block.js';\nimport Break from './blots/break.js';\nimport Container from './blots/container.js';\nimport Cursor from './blots/cursor.js';\nimport Embed from './blots/embed.js';\nimport Inline from './blots/inline.js';\nimport Scroll from './blots/scroll.js';\nimport TextBlot from './blots/text.js';\nimport Clipboard from './modules/clipboard.js';\nimport History from './modules/history.js';\nimport Keyboard from './modules/keyboard.js';\nimport Uploader from './modules/uploader.js';\nimport Delta, { Op, OpIterator, AttributeMap } from 'quill-delta';\nimport Input from './modules/input.js';\nimport UINode from './modules/uiNode.js';\nexport { default as Module } from './core/module.js';\nexport { Delta, Op, OpIterator, AttributeMap, Parchment, Range };\nQuill.register({\n 'blots/block': Block,\n 'blots/block/embed': BlockEmbed,\n 'blots/break': Break,\n 'blots/container': Container,\n 'blots/cursor': Cursor,\n 'blots/embed': Embed,\n 'blots/inline': Inline,\n 'blots/scroll': Scroll,\n 'blots/text': TextBlot,\n 'modules/clipboard': Clipboard,\n 'modules/history': History,\n 'modules/keyboard': Keyboard,\n 'modules/uploader': Uploader,\n 'modules/input': Input,\n 'modules/uiNode': UINode\n});\nexport default Quill;\n//# sourceMappingURL=core.js.map","import { ClassAttributor, Scope } from 'parchment';\nclass IndentAttributor extends ClassAttributor {\n add(node, value) {\n let normalizedValue = 0;\n if (value === '+1' || value === '-1') {\n const indent = this.value(node) || 0;\n normalizedValue = value === '+1' ? indent + 1 : indent - 1;\n } else if (typeof value === 'number') {\n normalizedValue = value;\n }\n if (normalizedValue === 0) {\n this.remove(node);\n return true;\n }\n return super.add(node, normalizedValue.toString());\n }\n canAdd(node, value) {\n return super.canAdd(node, value) || super.canAdd(node, parseInt(value, 10));\n }\n value(node) {\n return parseInt(super.value(node), 10) || undefined; // Don't return NaN\n }\n}\nconst IndentClass = new IndentAttributor('indent', 'ql-indent', {\n scope: Scope.BLOCK,\n // @ts-expect-error\n whitelist: [1, 2, 3, 4, 5, 6, 7, 8]\n});\nexport default IndentClass;\n//# sourceMappingURL=indent.js.map","import Block from '../blots/block.js';\nclass Blockquote extends Block {\n static blotName = 'blockquote';\n static tagName = 'blockquote';\n}\nexport default Blockquote;\n//# sourceMappingURL=blockquote.js.map","import Block from '../blots/block.js';\nclass Header extends Block {\n static blotName = 'header';\n static tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n static formats(domNode) {\n return this.tagName.indexOf(domNode.tagName) + 1;\n }\n}\nexport default Header;\n//# sourceMappingURL=header.js.map","import Block from '../blots/block.js';\nimport Container from '../blots/container.js';\nimport Quill from '../core/quill.js';\nclass ListContainer extends Container {}\nListContainer.blotName = 'list-container';\nListContainer.tagName = 'OL';\nclass ListItem extends Block {\n static create(value) {\n const node = super.create();\n node.setAttribute('data-list', value);\n return node;\n }\n static formats(domNode) {\n return domNode.getAttribute('data-list') || undefined;\n }\n static register() {\n Quill.register(ListContainer);\n }\n constructor(scroll, domNode) {\n super(scroll, domNode);\n const ui = domNode.ownerDocument.createElement('span');\n const listEventHandler = e => {\n if (!scroll.isEnabled()) return;\n const format = this.statics.formats(domNode, scroll);\n if (format === 'checked') {\n this.format('list', 'unchecked');\n e.preventDefault();\n } else if (format === 'unchecked') {\n this.format('list', 'checked');\n e.preventDefault();\n }\n };\n ui.addEventListener('mousedown', listEventHandler);\n ui.addEventListener('touchstart', listEventHandler);\n this.attachUI(ui);\n }\n format(name, value) {\n if (name === this.statics.blotName && value) {\n this.domNode.setAttribute('data-list', value);\n } else {\n super.format(name, value);\n }\n }\n}\nListItem.blotName = 'list';\nListItem.tagName = 'LI';\nListContainer.allowedChildren = [ListItem];\nListItem.requiredContainer = ListContainer;\nexport { ListContainer, ListItem as default };\n//# sourceMappingURL=list.js.map","import Inline from '../blots/inline.js';\nclass Bold extends Inline {\n static blotName = 'bold';\n static tagName = ['STRONG', 'B'];\n static create() {\n return super.create();\n }\n static formats() {\n return true;\n }\n optimize(context) {\n super.optimize(context);\n if (this.domNode.tagName !== this.statics.tagName[0]) {\n this.replaceWith(this.statics.blotName);\n }\n }\n}\nexport default Bold;\n//# sourceMappingURL=bold.js.map","import Bold from './bold.js';\nclass Italic extends Bold {\n static blotName = 'italic';\n static tagName = ['EM', 'I'];\n}\nexport default Italic;\n//# sourceMappingURL=italic.js.map","import Inline from '../blots/inline.js';\nclass Link extends Inline {\n static blotName = 'link';\n static tagName = 'A';\n static SANITIZED_URL = 'about:blank';\n static PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel', 'sms'];\n static create(value) {\n const node = super.create(value);\n node.setAttribute('href', this.sanitize(value));\n node.setAttribute('rel', 'noopener noreferrer');\n node.setAttribute('target', '_blank');\n return node;\n }\n static formats(domNode) {\n return domNode.getAttribute('href');\n }\n static sanitize(url) {\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;\n }\n format(name, value) {\n if (name !== this.statics.blotName || !value) {\n super.format(name, value);\n } else {\n // @ts-expect-error\n this.domNode.setAttribute('href', this.constructor.sanitize(value));\n }\n }\n}\nfunction sanitize(url, protocols) {\n const anchor = document.createElement('a');\n anchor.href = url;\n const protocol = anchor.href.slice(0, anchor.href.indexOf(':'));\n return protocols.indexOf(protocol) > -1;\n}\nexport { Link as default, sanitize };\n//# sourceMappingURL=link.js.map","import Inline from '../blots/inline.js';\nclass Script extends Inline {\n static blotName = 'script';\n static tagName = ['SUB', 'SUP'];\n static create(value) {\n if (value === 'super') {\n return document.createElement('sup');\n }\n if (value === 'sub') {\n return document.createElement('sub');\n }\n return super.create(value);\n }\n static formats(domNode) {\n if (domNode.tagName === 'SUB') return 'sub';\n if (domNode.tagName === 'SUP') return 'super';\n return undefined;\n }\n}\nexport default Script;\n//# sourceMappingURL=script.js.map","import Bold from './bold.js';\nclass Strike extends Bold {\n static blotName = 'strike';\n static tagName = ['S', 'STRIKE'];\n}\nexport default Strike;\n//# sourceMappingURL=strike.js.map","import Inline from '../blots/inline.js';\nclass Underline extends Inline {\n static blotName = 'underline';\n static tagName = 'U';\n}\nexport default Underline;\n//# sourceMappingURL=underline.js.map","import Embed from '../blots/embed.js';\nclass Formula extends Embed {\n static blotName = 'formula';\n static className = 'ql-formula';\n static tagName = 'SPAN';\n static create(value) {\n // @ts-expect-error\n if (window.katex == null) {\n throw new Error('Formula module requires KaTeX.');\n }\n const node = super.create(value);\n if (typeof value === 'string') {\n // @ts-expect-error\n window.katex.render(value, node, {\n throwOnError: false,\n errorColor: '#f00'\n });\n node.setAttribute('data-value', value);\n }\n return node;\n }\n static value(domNode) {\n return domNode.getAttribute('data-value');\n }\n html() {\n const {\n formula\n } = this.value();\n return `${formula}`;\n }\n}\nexport default Formula;\n//# sourceMappingURL=formula.js.map","import { EmbedBlot } from 'parchment';\nimport { sanitize } from './link.js';\nconst ATTRIBUTES = ['alt', 'height', 'width'];\nclass Image extends EmbedBlot {\n static blotName = 'image';\n static tagName = 'IMG';\n static create(value) {\n const node = super.create(value);\n if (typeof value === 'string') {\n node.setAttribute('src', this.sanitize(value));\n }\n return node;\n }\n static formats(domNode) {\n return ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n }, {});\n }\n static match(url) {\n return /\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url);\n }\n static sanitize(url) {\n return sanitize(url, ['http', 'https', 'data']) ? url : '//:0';\n }\n static value(domNode) {\n return domNode.getAttribute('src');\n }\n format(name, value) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n super.format(name, value);\n }\n }\n}\nexport default Image;\n//# sourceMappingURL=image.js.map","import { BlockEmbed } from '../blots/block.js';\nimport Link from './link.js';\nconst ATTRIBUTES = ['height', 'width'];\nclass Video extends BlockEmbed {\n static blotName = 'video';\n static className = 'ql-video';\n static tagName = 'IFRAME';\n static create(value) {\n const node = super.create(value);\n node.setAttribute('frameborder', '0');\n node.setAttribute('allowfullscreen', 'true');\n node.setAttribute('src', this.sanitize(value));\n return node;\n }\n static formats(domNode) {\n return ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n }, {});\n }\n static sanitize(url) {\n return Link.sanitize(url);\n }\n static value(domNode) {\n return domNode.getAttribute('src');\n }\n format(name, value) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n super.format(name, value);\n }\n }\n html() {\n const {\n video\n } = this.value();\n return `${video}`;\n }\n}\nexport default Video;\n//# sourceMappingURL=video.js.map","import Delta from 'quill-delta';\nimport { ClassAttributor, Scope } from 'parchment';\nimport Inline from '../blots/inline.js';\nimport Quill from '../core/quill.js';\nimport Module from '../core/module.js';\nimport { blockDelta } from '../blots/block.js';\nimport BreakBlot from '../blots/break.js';\nimport CursorBlot from '../blots/cursor.js';\nimport TextBlot, { escapeText } from '../blots/text.js';\nimport CodeBlock, { CodeBlockContainer } from '../formats/code.js';\nimport { traverse } from './clipboard.js';\nconst TokenAttributor = new ClassAttributor('code-token', 'hljs', {\n scope: Scope.INLINE\n});\nclass CodeToken extends Inline {\n static formats(node, scroll) {\n while (node != null && node !== scroll.domNode) {\n if (node.classList && node.classList.contains(CodeBlock.className)) {\n // @ts-expect-error\n return super.formats(node, scroll);\n }\n // @ts-expect-error\n node = node.parentNode;\n }\n return undefined;\n }\n constructor(scroll, domNode, value) {\n // @ts-expect-error\n super(scroll, domNode, value);\n TokenAttributor.add(this.domNode, value);\n }\n format(format, value) {\n if (format !== CodeToken.blotName) {\n super.format(format, value);\n } else if (value) {\n TokenAttributor.add(this.domNode, value);\n } else {\n TokenAttributor.remove(this.domNode);\n this.domNode.classList.remove(this.statics.className);\n }\n }\n optimize() {\n // @ts-expect-error\n super.optimize(...arguments);\n if (!TokenAttributor.value(this.domNode)) {\n this.unwrap();\n }\n }\n}\nCodeToken.blotName = 'code-token';\nCodeToken.className = 'ql-token';\nclass SyntaxCodeBlock extends CodeBlock {\n static create(value) {\n const domNode = super.create(value);\n if (typeof value === 'string') {\n domNode.setAttribute('data-language', value);\n }\n return domNode;\n }\n static formats(domNode) {\n // @ts-expect-error\n return domNode.getAttribute('data-language') || 'plain';\n }\n static register() {} // Syntax module will register\n\n format(name, value) {\n if (name === this.statics.blotName && value) {\n // @ts-expect-error\n this.domNode.setAttribute('data-language', value);\n } else {\n super.format(name, value);\n }\n }\n replaceWith(name, value) {\n this.formatAt(0, this.length(), CodeToken.blotName, false);\n return super.replaceWith(name, value);\n }\n}\nclass SyntaxCodeBlockContainer extends CodeBlockContainer {\n attach() {\n super.attach();\n this.forceNext = false;\n // @ts-expect-error\n this.scroll.emitMount(this);\n }\n format(name, value) {\n if (name === SyntaxCodeBlock.blotName) {\n this.forceNext = true;\n this.children.forEach(child => {\n // @ts-expect-error\n child.format(name, value);\n });\n }\n }\n formatAt(index, length, name, value) {\n if (name === SyntaxCodeBlock.blotName) {\n this.forceNext = true;\n }\n super.formatAt(index, length, name, value);\n }\n highlight(highlight) {\n let forced = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (this.children.head == null) return;\n const nodes = Array.from(this.domNode.childNodes).filter(node => node !== this.uiNode);\n const text = `${nodes.map(node => node.textContent).join('\\n')}\\n`;\n const language = SyntaxCodeBlock.formats(this.children.head.domNode);\n if (forced || this.forceNext || this.cachedText !== text) {\n if (text.trim().length > 0 || this.cachedText == null) {\n const oldDelta = this.children.reduce((delta, child) => {\n // @ts-expect-error\n return delta.concat(blockDelta(child, false));\n }, new Delta());\n const delta = highlight(text, language);\n oldDelta.diff(delta).reduce((index, _ref) => {\n let {\n retain,\n attributes\n } = _ref;\n // Should be all retains\n if (!retain) return index;\n if (attributes) {\n Object.keys(attributes).forEach(format => {\n if ([SyntaxCodeBlock.blotName, CodeToken.blotName].includes(format)) {\n // @ts-expect-error\n this.formatAt(index, retain, format, attributes[format]);\n }\n });\n }\n // @ts-expect-error\n return index + retain;\n }, 0);\n }\n this.cachedText = text;\n this.forceNext = false;\n }\n }\n html(index, length) {\n const [codeBlock] = this.children.find(index);\n const language = codeBlock ? SyntaxCodeBlock.formats(codeBlock.domNode) : 'plain';\n return `
    \\n${escapeText(this.code(index, length))}\\n
    `;\n }\n optimize(context) {\n super.optimize(context);\n if (this.parent != null && this.children.head != null && this.uiNode != null) {\n const language = SyntaxCodeBlock.formats(this.children.head.domNode);\n // @ts-expect-error\n if (language !== this.uiNode.value) {\n // @ts-expect-error\n this.uiNode.value = language;\n }\n }\n }\n}\nSyntaxCodeBlockContainer.allowedChildren = [SyntaxCodeBlock];\nSyntaxCodeBlock.requiredContainer = SyntaxCodeBlockContainer;\nSyntaxCodeBlock.allowedChildren = [CodeToken, CursorBlot, TextBlot, BreakBlot];\nconst highlight = (lib, language, text) => {\n if (typeof lib.versionString === 'string') {\n const majorVersion = lib.versionString.split('.')[0];\n if (parseInt(majorVersion, 10) >= 11) {\n return lib.highlight(text, {\n language\n }).value;\n }\n }\n return lib.highlight(language, text).value;\n};\nclass Syntax extends Module {\n static register() {\n Quill.register(CodeToken, true);\n Quill.register(SyntaxCodeBlock, true);\n Quill.register(SyntaxCodeBlockContainer, true);\n }\n constructor(quill, options) {\n super(quill, options);\n if (this.options.hljs == null) {\n throw new Error('Syntax module requires highlight.js. Please include the library on the page before Quill.');\n }\n // @ts-expect-error Fix me later\n this.languages = this.options.languages.reduce((memo, _ref2) => {\n let {\n key\n } = _ref2;\n memo[key] = true;\n return memo;\n }, {});\n this.highlightBlot = this.highlightBlot.bind(this);\n this.initListener();\n this.initTimer();\n }\n initListener() {\n this.quill.on(Quill.events.SCROLL_BLOT_MOUNT, blot => {\n if (!(blot instanceof SyntaxCodeBlockContainer)) return;\n const select = this.quill.root.ownerDocument.createElement('select');\n // @ts-expect-error Fix me later\n this.options.languages.forEach(_ref3 => {\n let {\n key,\n label\n } = _ref3;\n const option = select.ownerDocument.createElement('option');\n option.textContent = label;\n option.setAttribute('value', key);\n select.appendChild(option);\n });\n select.addEventListener('change', () => {\n blot.format(SyntaxCodeBlock.blotName, select.value);\n this.quill.root.focus(); // Prevent scrolling\n this.highlight(blot, true);\n });\n if (blot.uiNode == null) {\n blot.attachUI(select);\n if (blot.children.head) {\n select.value = SyntaxCodeBlock.formats(blot.children.head.domNode);\n }\n }\n });\n }\n initTimer() {\n let timer = null;\n this.quill.on(Quill.events.SCROLL_OPTIMIZE, () => {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n this.highlight();\n timer = null;\n }, this.options.interval);\n });\n }\n highlight() {\n let blot = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (this.quill.selection.composing) return;\n this.quill.update(Quill.sources.USER);\n const range = this.quill.getSelection();\n const blots = blot == null ? this.quill.scroll.descendants(SyntaxCodeBlockContainer) : [blot];\n blots.forEach(container => {\n container.highlight(this.highlightBlot, force);\n });\n this.quill.update(Quill.sources.SILENT);\n if (range != null) {\n this.quill.setSelection(range, Quill.sources.SILENT);\n }\n }\n highlightBlot(text) {\n let language = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'plain';\n language = this.languages[language] ? language : 'plain';\n if (language === 'plain') {\n return escapeText(text).split('\\n').reduce((delta, line, i) => {\n if (i !== 0) {\n delta.insert('\\n', {\n [CodeBlock.blotName]: language\n });\n }\n return delta.insert(line);\n }, new Delta());\n }\n const container = this.quill.root.ownerDocument.createElement('div');\n container.classList.add(CodeBlock.className);\n container.innerHTML = highlight(this.options.hljs, language, text);\n return traverse(this.quill.scroll, container, [(node, delta) => {\n // @ts-expect-error\n const value = TokenAttributor.value(node);\n if (value) {\n return delta.compose(new Delta().retain(delta.length(), {\n [CodeToken.blotName]: value\n }));\n }\n return delta;\n }], [(node, delta) => {\n // @ts-expect-error\n return node.data.split('\\n').reduce((memo, nodeText, i) => {\n if (i !== 0) memo.insert('\\n', {\n [CodeBlock.blotName]: language\n });\n return memo.insert(nodeText);\n }, delta);\n }], new WeakMap());\n }\n}\nSyntax.DEFAULTS = {\n hljs: (() => {\n return window.hljs;\n })(),\n interval: 1000,\n languages: [{\n key: 'plain',\n label: 'Plain'\n }, {\n key: 'bash',\n label: 'Bash'\n }, {\n key: 'cpp',\n label: 'C++'\n }, {\n key: 'cs',\n label: 'C#'\n }, {\n key: 'css',\n label: 'CSS'\n }, {\n key: 'diff',\n label: 'Diff'\n }, {\n key: 'xml',\n label: 'HTML/XML'\n }, {\n key: 'java',\n label: 'Java'\n }, {\n key: 'javascript',\n label: 'JavaScript'\n }, {\n key: 'markdown',\n label: 'Markdown'\n }, {\n key: 'php',\n label: 'PHP'\n }, {\n key: 'python',\n label: 'Python'\n }, {\n key: 'ruby',\n label: 'Ruby'\n }, {\n key: 'sql',\n label: 'SQL'\n }]\n};\nexport { SyntaxCodeBlock as CodeBlock, CodeToken, Syntax as default };\n//# sourceMappingURL=syntax.js.map","import Block from '../blots/block.js';\nimport Container from '../blots/container.js';\nclass TableCell extends Block {\n static blotName = 'table';\n static tagName = 'TD';\n static create(value) {\n const node = super.create();\n if (value) {\n node.setAttribute('data-row', value);\n } else {\n node.setAttribute('data-row', tableId());\n }\n return node;\n }\n static formats(domNode) {\n if (domNode.hasAttribute('data-row')) {\n return domNode.getAttribute('data-row');\n }\n return undefined;\n }\n cellOffset() {\n if (this.parent) {\n return this.parent.children.indexOf(this);\n }\n return -1;\n }\n format(name, value) {\n if (name === TableCell.blotName && value) {\n this.domNode.setAttribute('data-row', value);\n } else {\n super.format(name, value);\n }\n }\n row() {\n return this.parent;\n }\n rowOffset() {\n if (this.row()) {\n return this.row().rowOffset();\n }\n return -1;\n }\n table() {\n return this.row() && this.row().table();\n }\n}\nclass TableRow extends Container {\n static blotName = 'table-row';\n static tagName = 'TR';\n checkMerge() {\n // @ts-expect-error\n if (super.checkMerge() && this.next.children.head != null) {\n // @ts-expect-error\n const thisHead = this.children.head.formats();\n // @ts-expect-error\n const thisTail = this.children.tail.formats();\n // @ts-expect-error\n const nextHead = this.next.children.head.formats();\n // @ts-expect-error\n const nextTail = this.next.children.tail.formats();\n return thisHead.table === thisTail.table && thisHead.table === nextHead.table && thisHead.table === nextTail.table;\n }\n return false;\n }\n optimize(context) {\n super.optimize(context);\n this.children.forEach(child => {\n if (child.next == null) return;\n const childFormats = child.formats();\n const nextFormats = child.next.formats();\n if (childFormats.table !== nextFormats.table) {\n const next = this.splitAfter(child);\n if (next) {\n // @ts-expect-error TODO: parameters of optimize() should be a optional\n next.optimize();\n }\n // We might be able to merge with prev now\n if (this.prev) {\n // @ts-expect-error TODO: parameters of optimize() should be a optional\n this.prev.optimize();\n }\n }\n });\n }\n rowOffset() {\n if (this.parent) {\n return this.parent.children.indexOf(this);\n }\n return -1;\n }\n table() {\n return this.parent && this.parent.parent;\n }\n}\nclass TableBody extends Container {\n static blotName = 'table-body';\n static tagName = 'TBODY';\n}\nclass TableContainer extends Container {\n static blotName = 'table-container';\n static tagName = 'TABLE';\n balanceCells() {\n const rows = this.descendants(TableRow);\n const maxColumns = rows.reduce((max, row) => {\n return Math.max(row.children.length, max);\n }, 0);\n rows.forEach(row => {\n new Array(maxColumns - row.children.length).fill(0).forEach(() => {\n let value;\n if (row.children.head != null) {\n value = TableCell.formats(row.children.head.domNode);\n }\n const blot = this.scroll.create(TableCell.blotName, value);\n row.appendChild(blot);\n // @ts-expect-error TODO: parameters of optimize() should be a optional\n blot.optimize(); // Add break blot\n });\n });\n }\n cells(column) {\n return this.rows().map(row => row.children.at(column));\n }\n deleteColumn(index) {\n // @ts-expect-error\n const [body] = this.descendant(TableBody);\n if (body == null || body.children.head == null) return;\n body.children.forEach(row => {\n const cell = row.children.at(index);\n if (cell != null) {\n cell.remove();\n }\n });\n }\n insertColumn(index) {\n // @ts-expect-error\n const [body] = this.descendant(TableBody);\n if (body == null || body.children.head == null) return;\n body.children.forEach(row => {\n const ref = row.children.at(index);\n // @ts-expect-error\n const value = TableCell.formats(row.children.head.domNode);\n const cell = this.scroll.create(TableCell.blotName, value);\n row.insertBefore(cell, ref);\n });\n }\n insertRow(index) {\n // @ts-expect-error\n const [body] = this.descendant(TableBody);\n if (body == null || body.children.head == null) return;\n const id = tableId();\n const row = this.scroll.create(TableRow.blotName);\n body.children.head.children.forEach(() => {\n const cell = this.scroll.create(TableCell.blotName, id);\n row.appendChild(cell);\n });\n const ref = body.children.at(index);\n body.insertBefore(row, ref);\n }\n rows() {\n const body = this.children.head;\n if (body == null) return [];\n return body.children.map(row => row);\n }\n}\nTableContainer.allowedChildren = [TableBody];\nTableBody.requiredContainer = TableContainer;\nTableBody.allowedChildren = [TableRow];\nTableRow.requiredContainer = TableBody;\nTableRow.allowedChildren = [TableCell];\nTableCell.requiredContainer = TableRow;\nfunction tableId() {\n const id = Math.random().toString(36).slice(2, 6);\n return `row-${id}`;\n}\nexport { TableCell, TableRow, TableBody, TableContainer, tableId };\n//# sourceMappingURL=table.js.map","import Delta from 'quill-delta';\nimport Quill from '../core/quill.js';\nimport Module from '../core/module.js';\nimport { TableCell, TableRow, TableBody, TableContainer, tableId } from '../formats/table.js';\nclass Table extends Module {\n static register() {\n Quill.register(TableCell);\n Quill.register(TableRow);\n Quill.register(TableBody);\n Quill.register(TableContainer);\n }\n constructor() {\n super(...arguments);\n this.listenBalanceCells();\n }\n balanceTables() {\n this.quill.scroll.descendants(TableContainer).forEach(table => {\n table.balanceCells();\n });\n }\n deleteColumn() {\n const [table,, cell] = this.getTable();\n if (cell == null) return;\n // @ts-expect-error\n table.deleteColumn(cell.cellOffset());\n this.quill.update(Quill.sources.USER);\n }\n deleteRow() {\n const [, row] = this.getTable();\n if (row == null) return;\n row.remove();\n this.quill.update(Quill.sources.USER);\n }\n deleteTable() {\n const [table] = this.getTable();\n if (table == null) return;\n // @ts-expect-error\n const offset = table.offset();\n // @ts-expect-error\n table.remove();\n this.quill.update(Quill.sources.USER);\n this.quill.setSelection(offset, Quill.sources.SILENT);\n }\n getTable() {\n let range = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.quill.getSelection();\n if (range == null) return [null, null, null, -1];\n const [cell, offset] = this.quill.getLine(range.index);\n if (cell == null || cell.statics.blotName !== TableCell.blotName) {\n return [null, null, null, -1];\n }\n const row = cell.parent;\n const table = row.parent.parent;\n // @ts-expect-error\n return [table, row, cell, offset];\n }\n insertColumn(offset) {\n const range = this.quill.getSelection();\n if (!range) return;\n const [table, row, cell] = this.getTable(range);\n if (cell == null) return;\n const column = cell.cellOffset();\n table.insertColumn(column + offset);\n this.quill.update(Quill.sources.USER);\n let shift = row.rowOffset();\n if (offset === 0) {\n shift += 1;\n }\n this.quill.setSelection(range.index + shift, range.length, Quill.sources.SILENT);\n }\n insertColumnLeft() {\n this.insertColumn(0);\n }\n insertColumnRight() {\n this.insertColumn(1);\n }\n insertRow(offset) {\n const range = this.quill.getSelection();\n if (!range) return;\n const [table, row, cell] = this.getTable(range);\n if (cell == null) return;\n const index = row.rowOffset();\n table.insertRow(index + offset);\n this.quill.update(Quill.sources.USER);\n if (offset > 0) {\n this.quill.setSelection(range, Quill.sources.SILENT);\n } else {\n this.quill.setSelection(range.index + row.children.length, range.length, Quill.sources.SILENT);\n }\n }\n insertRowAbove() {\n this.insertRow(0);\n }\n insertRowBelow() {\n this.insertRow(1);\n }\n insertTable(rows, columns) {\n const range = this.quill.getSelection();\n if (range == null) return;\n const delta = new Array(rows).fill(0).reduce(memo => {\n const text = new Array(columns).fill('\\n').join('');\n return memo.insert(text, {\n table: tableId()\n });\n }, new Delta().retain(range.index));\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index, Quill.sources.SILENT);\n this.balanceTables();\n }\n listenBalanceCells() {\n this.quill.on(Quill.events.SCROLL_OPTIMIZE, mutations => {\n mutations.some(mutation => {\n if (['TD', 'TR', 'TBODY', 'TABLE'].includes(mutation.target.tagName)) {\n this.quill.once(Quill.events.TEXT_CHANGE, (delta, old, source) => {\n if (source !== Quill.sources.USER) return;\n this.balanceTables();\n });\n return true;\n }\n return false;\n });\n });\n }\n}\nexport default Table;\n//# sourceMappingURL=table.js.map","import Delta from 'quill-delta';\nimport { EmbedBlot, Scope } from 'parchment';\nimport Quill from '../core/quill.js';\nimport logger from '../core/logger.js';\nimport Module from '../core/module.js';\nconst debug = logger('quill:toolbar');\nclass Toolbar extends Module {\n constructor(quill, options) {\n super(quill, options);\n if (Array.isArray(this.options.container)) {\n const container = document.createElement('div');\n container.setAttribute('role', 'toolbar');\n addControls(container, this.options.container);\n quill.container?.parentNode?.insertBefore(container, quill.container);\n this.container = container;\n } else if (typeof this.options.container === 'string') {\n this.container = document.querySelector(this.options.container);\n } else {\n this.container = this.options.container;\n }\n if (!(this.container instanceof HTMLElement)) {\n debug.error('Container required for toolbar', this.options);\n return;\n }\n this.container.classList.add('ql-toolbar');\n this.controls = [];\n this.handlers = {};\n if (this.options.handlers) {\n Object.keys(this.options.handlers).forEach(format => {\n const handler = this.options.handlers?.[format];\n if (handler) {\n this.addHandler(format, handler);\n }\n });\n }\n Array.from(this.container.querySelectorAll('button, select')).forEach(input => {\n // @ts-expect-error\n this.attach(input);\n });\n this.quill.on(Quill.events.EDITOR_CHANGE, () => {\n const [range] = this.quill.selection.getRange(); // quill.getSelection triggers update\n this.update(range);\n });\n }\n addHandler(format, handler) {\n this.handlers[format] = handler;\n }\n attach(input) {\n let format = Array.from(input.classList).find(className => {\n return className.indexOf('ql-') === 0;\n });\n if (!format) return;\n format = format.slice('ql-'.length);\n if (input.tagName === 'BUTTON') {\n input.setAttribute('type', 'button');\n }\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\n debug.warn('ignoring attaching to nonexistent format', format, input);\n return;\n }\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click';\n input.addEventListener(eventName, e => {\n let value;\n if (input.tagName === 'SELECT') {\n // @ts-expect-error\n if (input.selectedIndex < 0) return;\n // @ts-expect-error\n const selected = input.options[input.selectedIndex];\n if (selected.hasAttribute('selected')) {\n value = false;\n } else {\n value = selected.value || false;\n }\n } else {\n if (input.classList.contains('ql-active')) {\n value = false;\n } else {\n // @ts-expect-error\n value = input.value || !input.hasAttribute('value');\n }\n e.preventDefault();\n }\n this.quill.focus();\n const [range] = this.quill.selection.getRange();\n if (this.handlers[format] != null) {\n this.handlers[format].call(this, value);\n } else if (\n // @ts-expect-error\n this.quill.scroll.query(format).prototype instanceof EmbedBlot) {\n value = prompt(`Enter ${format}`); // eslint-disable-line no-alert\n if (!value) return;\n this.quill.updateContents(new Delta()\n // @ts-expect-error Fix me later\n .retain(range.index)\n // @ts-expect-error Fix me later\n .delete(range.length).insert({\n [format]: value\n }), Quill.sources.USER);\n } else {\n this.quill.format(format, value, Quill.sources.USER);\n }\n this.update(range);\n });\n this.controls.push([format, input]);\n }\n update(range) {\n const formats = range == null ? {} : this.quill.getFormat(range);\n this.controls.forEach(pair => {\n const [format, input] = pair;\n if (input.tagName === 'SELECT') {\n let option = null;\n if (range == null) {\n option = null;\n } else if (formats[format] == null) {\n option = input.querySelector('option[selected]');\n } else if (!Array.isArray(formats[format])) {\n let value = formats[format];\n if (typeof value === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n }\n option = input.querySelector(`option[value=\"${value}\"]`);\n }\n if (option == null) {\n // @ts-expect-error TODO fix me later\n input.value = ''; // TODO make configurable?\n // @ts-expect-error TODO fix me later\n input.selectedIndex = -1;\n } else {\n option.selected = true;\n }\n } else if (range == null) {\n input.classList.remove('ql-active');\n input.setAttribute('aria-pressed', 'false');\n } else if (input.hasAttribute('value')) {\n // both being null should match (default values)\n // '1' should match with 1 (headers)\n const value = formats[format];\n const isActive = value === input.getAttribute('value') || value != null && value.toString() === input.getAttribute('value') || value == null && !input.getAttribute('value');\n input.classList.toggle('ql-active', isActive);\n input.setAttribute('aria-pressed', isActive.toString());\n } else {\n const isActive = formats[format] != null;\n input.classList.toggle('ql-active', isActive);\n input.setAttribute('aria-pressed', isActive.toString());\n }\n });\n }\n}\nToolbar.DEFAULTS = {};\nfunction addButton(container, format, value) {\n const input = document.createElement('button');\n input.setAttribute('type', 'button');\n input.classList.add(`ql-${format}`);\n input.setAttribute('aria-pressed', 'false');\n if (value != null) {\n input.value = value;\n input.setAttribute('aria-label', `${format}: ${value}`);\n } else {\n input.setAttribute('aria-label', format);\n }\n container.appendChild(input);\n}\nfunction addControls(container, groups) {\n if (!Array.isArray(groups[0])) {\n // @ts-expect-error\n groups = [groups];\n }\n groups.forEach(controls => {\n const group = document.createElement('span');\n group.classList.add('ql-formats');\n controls.forEach(control => {\n if (typeof control === 'string') {\n addButton(group, control);\n } else {\n const format = Object.keys(control)[0];\n const value = control[format];\n if (Array.isArray(value)) {\n addSelect(group, format, value);\n } else {\n addButton(group, format, value);\n }\n }\n });\n container.appendChild(group);\n });\n}\nfunction addSelect(container, format, values) {\n const input = document.createElement('select');\n input.classList.add(`ql-${format}`);\n values.forEach(value => {\n const option = document.createElement('option');\n if (value !== false) {\n option.setAttribute('value', String(value));\n } else {\n option.setAttribute('selected', 'selected');\n }\n input.appendChild(option);\n });\n container.appendChild(input);\n}\nToolbar.DEFAULTS = {\n container: null,\n handlers: {\n clean() {\n const range = this.quill.getSelection();\n if (range == null) return;\n if (range.length === 0) {\n const formats = this.quill.getFormat();\n Object.keys(formats).forEach(name => {\n // Clean functionality in existing apps only clean inline formats\n if (this.quill.scroll.query(name, Scope.INLINE) != null) {\n this.quill.format(name, false, Quill.sources.USER);\n }\n });\n } else {\n this.quill.removeFormat(range.index, range.length, Quill.sources.USER);\n }\n },\n direction(value) {\n const {\n align\n } = this.quill.getFormat();\n if (value === 'rtl' && align == null) {\n this.quill.format('align', 'right', Quill.sources.USER);\n } else if (!value && align === 'right') {\n this.quill.format('align', false, Quill.sources.USER);\n }\n this.quill.format('direction', value, Quill.sources.USER);\n },\n indent(value) {\n const range = this.quill.getSelection();\n // @ts-expect-error\n const formats = this.quill.getFormat(range);\n // @ts-expect-error\n const indent = parseInt(formats.indent || 0, 10);\n if (value === '+1' || value === '-1') {\n let modifier = value === '+1' ? 1 : -1;\n if (formats.direction === 'rtl') modifier *= -1;\n this.quill.format('indent', indent + modifier, Quill.sources.USER);\n }\n },\n link(value) {\n if (value === true) {\n value = prompt('Enter link URL:'); // eslint-disable-line no-alert\n }\n this.quill.format('link', value, Quill.sources.USER);\n },\n list(value) {\n const range = this.quill.getSelection();\n // @ts-expect-error\n const formats = this.quill.getFormat(range);\n if (value === 'check') {\n if (formats.list === 'checked' || formats.list === 'unchecked') {\n this.quill.format('list', false, Quill.sources.USER);\n } else {\n this.quill.format('list', 'unchecked', Quill.sources.USER);\n }\n } else {\n this.quill.format('list', value, Quill.sources.USER);\n }\n }\n }\n};\nexport { Toolbar as default, addControls };\n//# sourceMappingURL=toolbar.js.map","const alignLeftIcon = \"\";\nconst alignCenterIcon = \"\";\nconst alignRightIcon = \"\";\nconst alignJustifyIcon = \"\";\nconst backgroundIcon = \"\";\nconst blockquoteIcon = \"\";\nconst boldIcon = \"\";\nconst cleanIcon = \"\";\nconst codeIcon = \"\";\nconst colorIcon = \"\";\nconst directionLeftToRightIcon = \"\";\nconst directionRightToLeftIcon = \"\";\nconst formulaIcon = \"\";\nconst headerIcon = \"\";\nconst header2Icon = \"\";\nconst header3Icon = \"\";\nconst header4Icon = \"\";\nconst header5Icon = \"\";\nconst header6Icon = \"\";\nconst italicIcon = \"\";\nconst imageIcon = \"\";\nconst indentIcon = \"\";\nconst outdentIcon = \"\";\nconst linkIcon = \"\";\nconst listBulletIcon = \"\";\nconst listCheckIcon = \"\";\nconst listOrderedIcon = \"\";\nconst subscriptIcon = \"\";\nconst superscriptIcon = \"\";\nconst strikeIcon = \"\";\nconst tableIcon = \"\";\nconst underlineIcon = \"\";\nconst videoIcon = \"\";\nexport default {\n align: {\n '': alignLeftIcon,\n center: alignCenterIcon,\n right: alignRightIcon,\n justify: alignJustifyIcon\n },\n background: backgroundIcon,\n blockquote: blockquoteIcon,\n bold: boldIcon,\n clean: cleanIcon,\n code: codeIcon,\n 'code-block': codeIcon,\n color: colorIcon,\n direction: {\n '': directionLeftToRightIcon,\n rtl: directionRightToLeftIcon\n },\n formula: formulaIcon,\n header: {\n '1': headerIcon,\n '2': header2Icon,\n '3': header3Icon,\n '4': header4Icon,\n '5': header5Icon,\n '6': header6Icon\n },\n italic: italicIcon,\n image: imageIcon,\n indent: {\n '+1': indentIcon,\n '-1': outdentIcon\n },\n link: linkIcon,\n list: {\n bullet: listBulletIcon,\n check: listCheckIcon,\n ordered: listOrderedIcon\n },\n script: {\n sub: subscriptIcon,\n super: superscriptIcon\n },\n strike: strikeIcon,\n table: tableIcon,\n underline: underlineIcon,\n video: videoIcon\n};\n//# sourceMappingURL=icons.js.map","const DropdownIcon = \"\";\nlet optionsCounter = 0;\nfunction toggleAriaAttribute(element, attribute) {\n element.setAttribute(attribute, `${!(element.getAttribute(attribute) === 'true')}`);\n}\nclass Picker {\n constructor(select) {\n this.select = select;\n this.container = document.createElement('span');\n this.buildPicker();\n this.select.style.display = 'none';\n // @ts-expect-error Fix me later\n this.select.parentNode.insertBefore(this.container, this.select);\n this.label.addEventListener('mousedown', () => {\n this.togglePicker();\n });\n this.label.addEventListener('keydown', event => {\n switch (event.key) {\n case 'Enter':\n this.togglePicker();\n break;\n case 'Escape':\n this.escape();\n event.preventDefault();\n break;\n default:\n }\n });\n this.select.addEventListener('change', this.update.bind(this));\n }\n togglePicker() {\n this.container.classList.toggle('ql-expanded');\n // Toggle aria-expanded and aria-hidden to make the picker accessible\n toggleAriaAttribute(this.label, 'aria-expanded');\n // @ts-expect-error\n toggleAriaAttribute(this.options, 'aria-hidden');\n }\n buildItem(option) {\n const item = document.createElement('span');\n // @ts-expect-error\n item.tabIndex = '0';\n item.setAttribute('role', 'button');\n item.classList.add('ql-picker-item');\n const value = option.getAttribute('value');\n if (value) {\n item.setAttribute('data-value', value);\n }\n if (option.textContent) {\n item.setAttribute('data-label', option.textContent);\n }\n item.addEventListener('click', () => {\n this.selectItem(item, true);\n });\n item.addEventListener('keydown', event => {\n switch (event.key) {\n case 'Enter':\n this.selectItem(item, true);\n event.preventDefault();\n break;\n case 'Escape':\n this.escape();\n event.preventDefault();\n break;\n default:\n }\n });\n return item;\n }\n buildLabel() {\n const label = document.createElement('span');\n label.classList.add('ql-picker-label');\n label.innerHTML = DropdownIcon;\n // @ts-expect-error\n label.tabIndex = '0';\n label.setAttribute('role', 'button');\n label.setAttribute('aria-expanded', 'false');\n this.container.appendChild(label);\n return label;\n }\n buildOptions() {\n const options = document.createElement('span');\n options.classList.add('ql-picker-options');\n\n // Don't want screen readers to read this until options are visible\n options.setAttribute('aria-hidden', 'true');\n // @ts-expect-error\n options.tabIndex = '-1';\n\n // Need a unique id for aria-controls\n options.id = `ql-picker-options-${optionsCounter}`;\n optionsCounter += 1;\n this.label.setAttribute('aria-controls', options.id);\n\n // @ts-expect-error\n this.options = options;\n Array.from(this.select.options).forEach(option => {\n const item = this.buildItem(option);\n options.appendChild(item);\n if (option.selected === true) {\n this.selectItem(item);\n }\n });\n this.container.appendChild(options);\n }\n buildPicker() {\n Array.from(this.select.attributes).forEach(item => {\n this.container.setAttribute(item.name, item.value);\n });\n this.container.classList.add('ql-picker');\n this.label = this.buildLabel();\n this.buildOptions();\n }\n escape() {\n // Close menu and return focus to trigger label\n this.close();\n // Need setTimeout for accessibility to ensure that the browser executes\n // focus on the next process thread and after any DOM content changes\n setTimeout(() => this.label.focus(), 1);\n }\n close() {\n this.container.classList.remove('ql-expanded');\n this.label.setAttribute('aria-expanded', 'false');\n // @ts-expect-error\n this.options.setAttribute('aria-hidden', 'true');\n }\n selectItem(item) {\n let trigger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n const selected = this.container.querySelector('.ql-selected');\n if (item === selected) return;\n if (selected != null) {\n selected.classList.remove('ql-selected');\n }\n if (item == null) return;\n item.classList.add('ql-selected');\n // @ts-expect-error Fix me later\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(item);\n if (item.hasAttribute('data-value')) {\n // @ts-expect-error Fix me later\n this.label.setAttribute('data-value', item.getAttribute('data-value'));\n } else {\n this.label.removeAttribute('data-value');\n }\n if (item.hasAttribute('data-label')) {\n // @ts-expect-error Fix me later\n this.label.setAttribute('data-label', item.getAttribute('data-label'));\n } else {\n this.label.removeAttribute('data-label');\n }\n if (trigger) {\n this.select.dispatchEvent(new Event('change'));\n this.close();\n }\n }\n update() {\n let option;\n if (this.select.selectedIndex > -1) {\n const item =\n // @ts-expect-error Fix me later\n this.container.querySelector('.ql-picker-options').children[this.select.selectedIndex];\n option = this.select.options[this.select.selectedIndex];\n // @ts-expect-error\n this.selectItem(item);\n } else {\n this.selectItem(null);\n }\n const isActive = option != null && option !== this.select.querySelector('option[selected]');\n this.label.classList.toggle('ql-active', isActive);\n }\n}\nexport default Picker;\n//# sourceMappingURL=picker.js.map","import Picker from './picker.js';\nclass ColorPicker extends Picker {\n constructor(select, label) {\n super(select);\n this.label.innerHTML = label;\n this.container.classList.add('ql-color-picker');\n Array.from(this.container.querySelectorAll('.ql-picker-item')).slice(0, 7).forEach(item => {\n item.classList.add('ql-primary');\n });\n }\n buildItem(option) {\n const item = super.buildItem(option);\n item.style.backgroundColor = option.getAttribute('value') || '';\n return item;\n }\n selectItem(item, trigger) {\n super.selectItem(item, trigger);\n const colorLabel = this.label.querySelector('.ql-color-label');\n const value = item ? item.getAttribute('data-value') || '' : '';\n if (colorLabel) {\n if (colorLabel.tagName === 'line') {\n colorLabel.style.stroke = value;\n } else {\n colorLabel.style.fill = value;\n }\n }\n }\n}\nexport default ColorPicker;\n//# sourceMappingURL=color-picker.js.map","import Picker from './picker.js';\nclass IconPicker extends Picker {\n constructor(select, icons) {\n super(select);\n this.container.classList.add('ql-icon-picker');\n Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(item => {\n item.innerHTML = icons[item.getAttribute('data-value') || ''];\n });\n this.defaultItem = this.container.querySelector('.ql-selected');\n this.selectItem(this.defaultItem);\n }\n selectItem(target, trigger) {\n super.selectItem(target, trigger);\n const item = target || this.defaultItem;\n if (item != null) {\n if (this.label.innerHTML === item.innerHTML) return;\n this.label.innerHTML = item.innerHTML;\n }\n }\n}\nexport default IconPicker;\n//# sourceMappingURL=icon-picker.js.map","const isScrollable = el => {\n const {\n overflowY\n } = getComputedStyle(el, null);\n return overflowY !== 'visible' && overflowY !== 'clip';\n};\nclass Tooltip {\n constructor(quill, boundsContainer) {\n this.quill = quill;\n this.boundsContainer = boundsContainer || document.body;\n this.root = quill.addContainer('ql-tooltip');\n // @ts-expect-error\n this.root.innerHTML = this.constructor.TEMPLATE;\n if (isScrollable(this.quill.root)) {\n this.quill.root.addEventListener('scroll', () => {\n this.root.style.marginTop = `${-1 * this.quill.root.scrollTop}px`;\n });\n }\n this.hide();\n }\n hide() {\n this.root.classList.add('ql-hidden');\n }\n position(reference) {\n const left = reference.left + reference.width / 2 - this.root.offsetWidth / 2;\n // root.scrollTop should be 0 if scrollContainer !== root\n const top = reference.bottom + this.quill.root.scrollTop;\n this.root.style.left = `${left}px`;\n this.root.style.top = `${top}px`;\n this.root.classList.remove('ql-flip');\n const containerBounds = this.boundsContainer.getBoundingClientRect();\n const rootBounds = this.root.getBoundingClientRect();\n let shift = 0;\n if (rootBounds.right > containerBounds.right) {\n shift = containerBounds.right - rootBounds.right;\n this.root.style.left = `${left + shift}px`;\n }\n if (rootBounds.left < containerBounds.left) {\n shift = containerBounds.left - rootBounds.left;\n this.root.style.left = `${left + shift}px`;\n }\n if (rootBounds.bottom > containerBounds.bottom) {\n const height = rootBounds.bottom - rootBounds.top;\n const verticalShift = reference.bottom - reference.top + height;\n this.root.style.top = `${top - verticalShift}px`;\n this.root.classList.add('ql-flip');\n }\n return shift;\n }\n show() {\n this.root.classList.remove('ql-editing');\n this.root.classList.remove('ql-hidden');\n }\n}\nexport default Tooltip;\n//# sourceMappingURL=tooltip.js.map","import { merge } from 'lodash-es';\nimport Emitter from '../core/emitter.js';\nimport Theme from '../core/theme.js';\nimport ColorPicker from '../ui/color-picker.js';\nimport IconPicker from '../ui/icon-picker.js';\nimport Picker from '../ui/picker.js';\nimport Tooltip from '../ui/tooltip.js';\nconst ALIGNS = [false, 'center', 'right', 'justify'];\nconst COLORS = ['#000000', '#e60000', '#ff9900', '#ffff00', '#008a00', '#0066cc', '#9933ff', '#ffffff', '#facccc', '#ffebcc', '#ffffcc', '#cce8cc', '#cce0f5', '#ebd6ff', '#bbbbbb', '#f06666', '#ffc266', '#ffff66', '#66b966', '#66a3e0', '#c285ff', '#888888', '#a10000', '#b26b00', '#b2b200', '#006100', '#0047b2', '#6b24b2', '#444444', '#5c0000', '#663d00', '#666600', '#003700', '#002966', '#3d1466'];\nconst FONTS = [false, 'serif', 'monospace'];\nconst HEADERS = ['1', '2', '3', false];\nconst SIZES = ['small', false, 'large', 'huge'];\nclass BaseTheme extends Theme {\n constructor(quill, options) {\n super(quill, options);\n const listener = e => {\n if (!document.body.contains(quill.root)) {\n document.body.removeEventListener('click', listener);\n return;\n }\n if (this.tooltip != null &&\n // @ts-expect-error\n !this.tooltip.root.contains(e.target) &&\n // @ts-expect-error\n document.activeElement !== this.tooltip.textbox && !this.quill.hasFocus()) {\n this.tooltip.hide();\n }\n if (this.pickers != null) {\n this.pickers.forEach(picker => {\n // @ts-expect-error\n if (!picker.container.contains(e.target)) {\n picker.close();\n }\n });\n }\n };\n quill.emitter.listenDOM('click', document.body, listener);\n }\n addModule(name) {\n const module = super.addModule(name);\n if (name === 'toolbar') {\n // @ts-expect-error\n this.extendToolbar(module);\n }\n return module;\n }\n buildButtons(buttons, icons) {\n Array.from(buttons).forEach(button => {\n const className = button.getAttribute('class') || '';\n className.split(/\\s+/).forEach(name => {\n if (!name.startsWith('ql-')) return;\n name = name.slice('ql-'.length);\n if (icons[name] == null) return;\n if (name === 'direction') {\n // @ts-expect-error\n button.innerHTML = icons[name][''] + icons[name].rtl;\n } else if (typeof icons[name] === 'string') {\n // @ts-expect-error\n button.innerHTML = icons[name];\n } else {\n // @ts-expect-error\n const value = button.value || '';\n // @ts-expect-error\n if (value != null && icons[name][value]) {\n // @ts-expect-error\n button.innerHTML = icons[name][value];\n }\n }\n });\n });\n }\n buildPickers(selects, icons) {\n this.pickers = Array.from(selects).map(select => {\n if (select.classList.contains('ql-align')) {\n if (select.querySelector('option') == null) {\n fillSelect(select, ALIGNS);\n }\n if (typeof icons.align === 'object') {\n return new IconPicker(select, icons.align);\n }\n }\n if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\n const format = select.classList.contains('ql-background') ? 'background' : 'color';\n if (select.querySelector('option') == null) {\n fillSelect(select, COLORS, format === 'background' ? '#ffffff' : '#000000');\n }\n return new ColorPicker(select, icons[format]);\n }\n if (select.querySelector('option') == null) {\n if (select.classList.contains('ql-font')) {\n fillSelect(select, FONTS);\n } else if (select.classList.contains('ql-header')) {\n fillSelect(select, HEADERS);\n } else if (select.classList.contains('ql-size')) {\n fillSelect(select, SIZES);\n }\n }\n return new Picker(select);\n });\n const update = () => {\n this.pickers.forEach(picker => {\n picker.update();\n });\n };\n this.quill.on(Emitter.events.EDITOR_CHANGE, update);\n }\n}\nBaseTheme.DEFAULTS = merge({}, Theme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n formula() {\n this.quill.theme.tooltip.edit('formula');\n },\n image() {\n let fileInput = this.container.querySelector('input.ql-image[type=file]');\n if (fileInput == null) {\n fileInput = document.createElement('input');\n fileInput.setAttribute('type', 'file');\n fileInput.setAttribute('accept', this.quill.uploader.options.mimetypes.join(', '));\n fileInput.classList.add('ql-image');\n fileInput.addEventListener('change', () => {\n const range = this.quill.getSelection(true);\n this.quill.uploader.upload(range, fileInput.files);\n fileInput.value = '';\n });\n this.container.appendChild(fileInput);\n }\n fileInput.click();\n },\n video() {\n this.quill.theme.tooltip.edit('video');\n }\n }\n }\n }\n});\nclass BaseTooltip extends Tooltip {\n constructor(quill, boundsContainer) {\n super(quill, boundsContainer);\n this.textbox = this.root.querySelector('input[type=\"text\"]');\n this.listen();\n }\n listen() {\n // @ts-expect-error Fix me later\n this.textbox.addEventListener('keydown', event => {\n if (event.key === 'Enter') {\n this.save();\n event.preventDefault();\n } else if (event.key === 'Escape') {\n this.cancel();\n event.preventDefault();\n }\n });\n }\n cancel() {\n this.hide();\n this.restoreFocus();\n }\n edit() {\n let mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'link';\n let preview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n this.root.classList.remove('ql-hidden');\n this.root.classList.add('ql-editing');\n if (this.textbox == null) return;\n if (preview != null) {\n this.textbox.value = preview;\n } else if (mode !== this.root.getAttribute('data-mode')) {\n this.textbox.value = '';\n }\n const bounds = this.quill.getBounds(this.quill.selection.savedRange);\n if (bounds != null) {\n this.position(bounds);\n }\n this.textbox.select();\n this.textbox.setAttribute('placeholder', this.textbox.getAttribute(`data-${mode}`) || '');\n this.root.setAttribute('data-mode', mode);\n }\n restoreFocus() {\n this.quill.focus({\n preventScroll: true\n });\n }\n save() {\n // @ts-expect-error Fix me later\n let {\n value\n } = this.textbox;\n switch (this.root.getAttribute('data-mode')) {\n case 'link':\n {\n const {\n scrollTop\n } = this.quill.root;\n if (this.linkRange) {\n this.quill.formatText(this.linkRange, 'link', value, Emitter.sources.USER);\n delete this.linkRange;\n } else {\n this.restoreFocus();\n this.quill.format('link', value, Emitter.sources.USER);\n }\n this.quill.root.scrollTop = scrollTop;\n break;\n }\n case 'video':\n {\n value = extractVideoUrl(value);\n }\n // eslint-disable-next-line no-fallthrough\n case 'formula':\n {\n if (!value) break;\n const range = this.quill.getSelection(true);\n if (range != null) {\n const index = range.index + range.length;\n this.quill.insertEmbed(index,\n // @ts-expect-error Fix me later\n this.root.getAttribute('data-mode'), value, Emitter.sources.USER);\n if (this.root.getAttribute('data-mode') === 'formula') {\n this.quill.insertText(index + 1, ' ', Emitter.sources.USER);\n }\n this.quill.setSelection(index + 2, Emitter.sources.USER);\n }\n break;\n }\n default:\n }\n // @ts-expect-error Fix me later\n this.textbox.value = '';\n this.hide();\n }\n}\nfunction extractVideoUrl(url) {\n let match = url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtube\\.com\\/watch.*v=([a-zA-Z0-9_-]+)/) || url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n if (match) {\n return `${match[1] || 'https'}://www.youtube.com/embed/${match[2]}?showinfo=0`;\n }\n // eslint-disable-next-line no-cond-assign\n if (match = url.match(/^(?:(https?):\\/\\/)?(?:www\\.)?vimeo\\.com\\/(\\d+)/)) {\n return `${match[1] || 'https'}://player.vimeo.com/video/${match[2]}/`;\n }\n return url;\n}\nfunction fillSelect(select, values) {\n let defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n values.forEach(value => {\n const option = document.createElement('option');\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected');\n } else {\n option.setAttribute('value', String(value));\n }\n select.appendChild(option);\n });\n}\nexport { BaseTooltip, BaseTheme as default };\n//# sourceMappingURL=base.js.map","import { merge } from 'lodash-es';\nimport Emitter from '../core/emitter.js';\nimport BaseTheme, { BaseTooltip } from './base.js';\nimport { Range } from '../core/selection.js';\nimport icons from '../ui/icons.js';\nimport Quill from '../core/quill.js';\nconst TOOLBAR_CONFIG = [['bold', 'italic', 'link'], [{\n header: 1\n}, {\n header: 2\n}, 'blockquote']];\nclass BubbleTooltip extends BaseTooltip {\n static TEMPLATE = ['', '
    ', '', '', '
    '].join('');\n constructor(quill, bounds) {\n super(quill, bounds);\n this.quill.on(Emitter.events.EDITOR_CHANGE, (type, range, oldRange, source) => {\n if (type !== Emitter.events.SELECTION_CHANGE) return;\n if (range != null && range.length > 0 && source === Emitter.sources.USER) {\n this.show();\n // Lock our width so we will expand beyond our offsetParent boundaries\n this.root.style.left = '0px';\n this.root.style.width = '';\n this.root.style.width = `${this.root.offsetWidth}px`;\n const lines = this.quill.getLines(range.index, range.length);\n if (lines.length === 1) {\n const bounds = this.quill.getBounds(range);\n if (bounds != null) {\n this.position(bounds);\n }\n } else {\n const lastLine = lines[lines.length - 1];\n const index = this.quill.getIndex(lastLine);\n const length = Math.min(lastLine.length() - 1, range.index + range.length - index);\n const indexBounds = this.quill.getBounds(new Range(index, length));\n if (indexBounds != null) {\n this.position(indexBounds);\n }\n }\n } else if (document.activeElement !== this.textbox && this.quill.hasFocus()) {\n this.hide();\n }\n });\n }\n listen() {\n super.listen();\n // @ts-expect-error Fix me later\n this.root.querySelector('.ql-close').addEventListener('click', () => {\n this.root.classList.remove('ql-editing');\n });\n this.quill.on(Emitter.events.SCROLL_OPTIMIZE, () => {\n // Let selection be restored by toolbar handlers before repositioning\n setTimeout(() => {\n if (this.root.classList.contains('ql-hidden')) return;\n const range = this.quill.getSelection();\n if (range != null) {\n const bounds = this.quill.getBounds(range);\n if (bounds != null) {\n this.position(bounds);\n }\n }\n }, 1);\n });\n }\n cancel() {\n this.show();\n }\n position(reference) {\n const shift = super.position(reference);\n const arrow = this.root.querySelector('.ql-tooltip-arrow');\n // @ts-expect-error\n arrow.style.marginLeft = '';\n if (shift !== 0) {\n // @ts-expect-error\n arrow.style.marginLeft = `${-1 * shift - arrow.offsetWidth / 2}px`;\n }\n return shift;\n }\n}\nclass BubbleTheme extends BaseTheme {\n constructor(quill, options) {\n if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n options.modules.toolbar.container = TOOLBAR_CONFIG;\n }\n super(quill, options);\n this.quill.container.classList.add('ql-bubble');\n }\n extendToolbar(toolbar) {\n // @ts-expect-error\n this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n if (toolbar.container != null) {\n this.tooltip.root.appendChild(toolbar.container);\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons);\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons);\n }\n }\n}\nBubbleTheme.DEFAULTS = merge({}, BaseTheme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n link(value) {\n if (!value) {\n this.quill.format('link', false, Quill.sources.USER);\n } else {\n // @ts-expect-error\n this.quill.theme.tooltip.edit();\n }\n }\n }\n }\n }\n});\nexport { BubbleTooltip, BubbleTheme as default };\n//# sourceMappingURL=bubble.js.map","import { merge } from 'lodash-es';\nimport Emitter from '../core/emitter.js';\nimport BaseTheme, { BaseTooltip } from './base.js';\nimport LinkBlot from '../formats/link.js';\nimport { Range } from '../core/selection.js';\nimport icons from '../ui/icons.js';\nimport Quill from '../core/quill.js';\nconst TOOLBAR_CONFIG = [[{\n header: ['1', '2', '3', false]\n}], ['bold', 'italic', 'underline', 'link'], [{\n list: 'ordered'\n}, {\n list: 'bullet'\n}], ['clean']];\nclass SnowTooltip extends BaseTooltip {\n static TEMPLATE = ['', '', '', ''].join('');\n preview = this.root.querySelector('a.ql-preview');\n listen() {\n super.listen();\n // @ts-expect-error Fix me later\n this.root.querySelector('a.ql-action').addEventListener('click', event => {\n if (this.root.classList.contains('ql-editing')) {\n this.save();\n } else {\n // @ts-expect-error Fix me later\n this.edit('link', this.preview.textContent);\n }\n event.preventDefault();\n });\n // @ts-expect-error Fix me later\n this.root.querySelector('a.ql-remove').addEventListener('click', event => {\n if (this.linkRange != null) {\n const range = this.linkRange;\n this.restoreFocus();\n this.quill.formatText(range, 'link', false, Emitter.sources.USER);\n delete this.linkRange;\n }\n event.preventDefault();\n this.hide();\n });\n this.quill.on(Emitter.events.SELECTION_CHANGE, (range, oldRange, source) => {\n if (range == null) return;\n if (range.length === 0 && source === Emitter.sources.USER) {\n const [link, offset] = this.quill.scroll.descendant(LinkBlot, range.index);\n if (link != null) {\n this.linkRange = new Range(range.index - offset, link.length());\n const preview = LinkBlot.formats(link.domNode);\n // @ts-expect-error Fix me later\n this.preview.textContent = preview;\n // @ts-expect-error Fix me later\n this.preview.setAttribute('href', preview);\n this.show();\n const bounds = this.quill.getBounds(this.linkRange);\n if (bounds != null) {\n this.position(bounds);\n }\n return;\n }\n } else {\n delete this.linkRange;\n }\n this.hide();\n });\n }\n show() {\n super.show();\n this.root.removeAttribute('data-mode');\n }\n}\nclass SnowTheme extends BaseTheme {\n constructor(quill, options) {\n if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n options.modules.toolbar.container = TOOLBAR_CONFIG;\n }\n super(quill, options);\n this.quill.container.classList.add('ql-snow');\n }\n extendToolbar(toolbar) {\n if (toolbar.container != null) {\n toolbar.container.classList.add('ql-snow');\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons);\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons);\n // @ts-expect-error\n this.tooltip = new SnowTooltip(this.quill, this.options.bounds);\n if (toolbar.container.querySelector('.ql-link')) {\n this.quill.keyboard.addBinding({\n key: 'k',\n shortKey: true\n }, (_range, context) => {\n toolbar.handlers.link.call(toolbar, !context.format.link);\n });\n }\n }\n }\n}\nSnowTheme.DEFAULTS = merge({}, BaseTheme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n link(value) {\n if (value) {\n const range = this.quill.getSelection();\n if (range == null || range.length === 0) return;\n let preview = this.quill.getText(range);\n if (/^\\S+@\\S+\\.\\S+$/.test(preview) && preview.indexOf('mailto:') !== 0) {\n preview = `mailto:${preview}`;\n }\n // @ts-expect-error\n const {\n tooltip\n } = this.quill.theme;\n tooltip.edit('link', preview);\n } else {\n this.quill.format('link', false, Quill.sources.USER);\n }\n }\n }\n }\n }\n});\nexport default SnowTheme;\n//# sourceMappingURL=snow.js.map","import Quill from './core.js';\nimport { AlignClass, AlignStyle } from './formats/align.js';\nimport { DirectionAttribute, DirectionClass, DirectionStyle } from './formats/direction.js';\nimport Indent from './formats/indent.js';\nimport Blockquote from './formats/blockquote.js';\nimport Header from './formats/header.js';\nimport List from './formats/list.js';\nimport { BackgroundClass, BackgroundStyle } from './formats/background.js';\nimport { ColorClass, ColorStyle } from './formats/color.js';\nimport { FontClass, FontStyle } from './formats/font.js';\nimport { SizeClass, SizeStyle } from './formats/size.js';\nimport Bold from './formats/bold.js';\nimport Italic from './formats/italic.js';\nimport Link from './formats/link.js';\nimport Script from './formats/script.js';\nimport Strike from './formats/strike.js';\nimport Underline from './formats/underline.js';\nimport Formula from './formats/formula.js';\nimport Image from './formats/image.js';\nimport Video from './formats/video.js';\nimport CodeBlock, { Code as InlineCode } from './formats/code.js';\nimport Syntax from './modules/syntax.js';\nimport Table from './modules/table.js';\nimport Toolbar from './modules/toolbar.js';\nimport Icons from './ui/icons.js';\nimport Picker from './ui/picker.js';\nimport ColorPicker from './ui/color-picker.js';\nimport IconPicker from './ui/icon-picker.js';\nimport Tooltip from './ui/tooltip.js';\nimport BubbleTheme from './themes/bubble.js';\nimport SnowTheme from './themes/snow.js';\nQuill.register({\n 'attributors/attribute/direction': DirectionAttribute,\n 'attributors/class/align': AlignClass,\n 'attributors/class/background': BackgroundClass,\n 'attributors/class/color': ColorClass,\n 'attributors/class/direction': DirectionClass,\n 'attributors/class/font': FontClass,\n 'attributors/class/size': SizeClass,\n 'attributors/style/align': AlignStyle,\n 'attributors/style/background': BackgroundStyle,\n 'attributors/style/color': ColorStyle,\n 'attributors/style/direction': DirectionStyle,\n 'attributors/style/font': FontStyle,\n 'attributors/style/size': SizeStyle\n}, true);\nQuill.register({\n 'formats/align': AlignClass,\n 'formats/direction': DirectionClass,\n 'formats/indent': Indent,\n 'formats/background': BackgroundStyle,\n 'formats/color': ColorStyle,\n 'formats/font': FontClass,\n 'formats/size': SizeClass,\n 'formats/blockquote': Blockquote,\n 'formats/code-block': CodeBlock,\n 'formats/header': Header,\n 'formats/list': List,\n 'formats/bold': Bold,\n 'formats/code': InlineCode,\n 'formats/italic': Italic,\n 'formats/link': Link,\n 'formats/script': Script,\n 'formats/strike': Strike,\n 'formats/underline': Underline,\n 'formats/formula': Formula,\n 'formats/image': Image,\n 'formats/video': Video,\n 'modules/syntax': Syntax,\n 'modules/table': Table,\n 'modules/toolbar': Toolbar,\n 'themes/bubble': BubbleTheme,\n 'themes/snow': SnowTheme,\n 'ui/icons': Icons,\n 'ui/picker': Picker,\n 'ui/icon-picker': IconPicker,\n 'ui/color-picker': ColorPicker,\n 'ui/tooltip': Tooltip\n}, true);\nexport { AttributeMap, Delta, Module, Op, OpIterator, Parchment, Range } from './core.js';\nexport default Quill;\n//# sourceMappingURL=quill.js.map","\n\n"],"names":["freeGlobal","freeSelf","root","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","value","isOwn","tag","unmasked","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","isArray","isObject","type","identity","asyncTag","funcTag","genTag","proxyTag","isFunction","coreJsData","maskSrcKey","uid","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","getValue","object","key","getNative","WeakMap","objectCreate","baseCreate","proto","apply","thisArg","args","copyArray","source","array","index","length","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","count","lastCalled","stamp","remaining","constant","defineProperty","baseSetToString","string","setToString","arrayEach","iteratee","MAX_SAFE_INTEGER","reIsUint","isIndex","baseAssignValue","eq","other","assignValue","objValue","copyObject","props","customizer","isNew","newValue","nativeMax","overRest","start","transform","otherArgs","baseRest","isLength","isArrayLike","isIterateeCall","createAssigner","assigner","sources","guard","isPrototype","Ctor","baseTimes","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","types","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","overArg","arg","nativeKeys","baseKeys","keys","nativeKeysIn","baseKeysIn","isProto","keysIn","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","data","hashHas","hashSet","Hash","entries","entry","listCacheClear","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","isKeyable","getMapData","map","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","size","MapCache","arrayPush","values","offset","getPrototype","objectCtorString","isPlainObject","stackClear","stackDelete","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","baseAssign","baseAssignIn","allocUnsafe","cloneBuffer","buffer","isDeep","arrayFilter","predicate","resIndex","stubArray","nativeGetSymbols","getSymbols","symbol","copySymbols","getSymbolsIn","copySymbolsIn","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","getAllKeysIn","DataView","Promise","Set","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","initCloneArray","Uint8Array","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolProto","symbolValueOf","cloneSymbol","cloneTypedArray","typedArray","symbolTag","initCloneByTag","initCloneObject","baseIsMap","nodeIsMap","isMap","baseIsSet","nodeIsSet","isSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","bitmask","stack","isFlat","isFull","isFunc","stacked","subValue","cloneDeep","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","cache","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","set","equalByTag","convert","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","createBaseFor","fromRight","iterable","baseFor","assignMergeValue","isArrayLikeObject","safeGet","toPlainObject","baseMergeDeep","srcIndex","mergeFunc","srcValue","isCommon","isTyped","baseMerge","isEqual","merge","Scope","Scope2","Attributor","attrName","keyName","options","attributeBit","node","item","_node","ParchmentError","message","_Registry","bubble","parentNode","scroll","input","match2","blotClass","blot","query","scope","name","definitions","definition","isBlot","isAttr","tagName","Registry","match","prefix","ClassAttributor","ClassAttributor$1","camelize","parts","rest","part","StyleAttributor","StyleAttributor$1","AttributorStore","domNode","attribute","attributes","classes","styles","attr","target","AttributorStore$1","_ShadowBlot","rawValue","parent","def","ref","_context","replacement","_force","_mutations","wrapper","ShadowBlot","_LeafBlot","_domNode","_inclusive","LeafBlot","LeafBlot$1","LinkedList","nodes","next","cur","refNode","curNode","ret","inclusive","callback","startNode","curIndex","curLength","memo","makeAttachedBlot","found","child","_ParentBlot","err","childLength","criteria","descendants","lengthLeft","childIndex","done","childBlot","refBlot","refDomNode","targetParent","context","position","force","after","_length","split","mutations","addedNodes","removedNodes","mutation","a","b","ParentBlot","ParentBlot$1","obj1","obj2","prop","_InlineBlot","format","formats","InlineBlot","InlineBlot$1","_BlockBlot","BlockBlot","BlockBlot$1","_ContainerBlot","ContainerBlot","ContainerBlot$1","EmbedBlot","_scroll","EmbedBlot$1","OBSERVER_CONFIG","MAX_OPTIMIZE_ITERATIONS","_ScrollBlot","registry","mutationsMap","records","mark","markParent","optimize","i","grandChild","ScrollBlot","ScrollBlot$1","_TextBlot","TextBlot","TextBlot$1","DIFF_DELETE","DIFF_INSERT","DIFF_EQUAL","diff_main","text1","text2","cursor_pos","cleanup","_fix_unicode","editdiff","find_cursor_edit_diff","commonlength","diff_commonPrefix","commonprefix","diff_commonSuffix","commonsuffix","diffs","diff_compute_","diff_cleanupMerge","diff_cleanupSemantic","longtext","shorttext","hm","diff_halfMatch_","text1_a","text1_b","text2_a","text2_b","mid_common","diffs_a","diffs_b","diff_bisect_","text1_length","text2_length","max_d","v_offset","v_length","v1","v2","x","delta","front","k1start","k1end","k2start","k2end","d","k1","k1_offset","x1","y1","k2_offset","x2","diff_bisectSplit_","k2","y2","y","text1a","text2a","text1b","text2b","diffsb","pointermin","pointermax","pointermid","pointerstart","is_surrogate_pair_start","diff_commonOverlap_","text_length","best","pointerend","is_surrogate_pair_end","diff_halfMatchI_","seed","j","best_common","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","prefixLength","suffixLength","hm1","hm2","changes","equalities","equalitiesLength","lastequality","pointer","length_insertions1","length_deletions1","length_insertions2","length_deletions2","diff_cleanupSemanticLossless","deletion","insertion","overlap_length1","overlap_length2","nonAlphaNumericRegex_","whitespaceRegex_","linebreakRegex_","blanklineEndRegex_","blanklineStartRegex_","diff_cleanupSemanticScore_","one","two","char1","char2","nonAlphaNumeric1","nonAlphaNumeric2","whitespace1","whitespace2","lineBreak1","lineBreak2","blankLine1","blankLine2","equality1","edit","equality2","commonOffset","commonString","bestEquality1","bestEdit","bestEquality2","bestScore","score","fix_unicode","count_delete","count_insert","text_delete","text_insert","previous_equality","ends_with_pair_start","stray","k","starts_with_pair_end","n","charCode","str","remove_empty_tuples","tuples","make_edit_splice","before","oldMiddle","newMiddle","oldText","newText","oldRange","newRange","oldLength","newLength","oldCursor","oldBefore","oldAfter","maybeNewCursor","editBefore","newCursor","newBefore","newAfter","oldPrefix","newPrefix","editAfter","cursor","oldSuffix","newSuffix","replaceRange","diff","diff_1","global","exports","module","addMapEntry","pair","addSetEntry","arrayReduce","accumulator","initAccum","isHostObject","cloneMap","cloneFunc","cloneSet","AttributeMap_1","require$$0","require$$1","AttributeMap","compose","keepNull","copy","attrs","invert","base","baseInverted","priority","Op_1","Op","op","OpIterator","Iterator","ops","nextOp","opLength","retOp","require$$2","require$$3","require$$4","OpIterator_1","require$$5","NULL_CHARACTER","getEmbedTypeAndData","embedType","Delta","handler","newOp","lastOp","passed","failed","initialValue","elem","end","iter","thisIter","otherIter","firstOther","firstLeft","thisOp","otherOp","action","thisData","otherData","strings","prep","retDelta","diffResult","component","newline","line","inverted","baseIndex","baseOp","slice","opData","baseOpData","transformedData","nextType","Break","Text$1","entityMap","escapeText","text","s","_Inline","self","selfIndex","otherIndex","__publicField","Text","Inline","NEWLINE_LENGTH","Block","blockDelta","lines","block","lineIndex","head","clone","BlockEmbed","blocks","filter","leaf","bubbleFormats","_Cursor","selection","range","prevTextBlot","prevTextLength","nextTextBlot","nextText","textNode","mergedTextBlot","newTextNode","remapOffset","Cursor","has","Events","EE","fn","once","addListener","emitter","event","listener","evt","clearEvent","EventEmitter","names","events","handlers","l","ee","listeners","a1","a2","a3","a4","a5","len","instances","levels","level","debug","method","_len","_key","namespace","ns","logger","newLevel","EVENTS","eventName","quill","Emitter","_len2","_key2","_len3","_key3","_ref","Range","Selection","native","triggeredByTyping","startOffset","endNode","endOffset","nativeRange","scrollLength","nextLine","side","rect","normalized","contains","positions","indexes","getPosition","leafOffset","lastRange","descendant","ASCII","Editor","normalizedDelta","normalizeDelta","deleteDelta","splitOpLines","isImplicitNewlinePrepended","isImplicitNewlineAppended","isInlineEmbed","prependedLength","addedLength","leaves","path","lineFormats","leafFormats","blots","combineFormats","lineOffset","lineLength","convertHTML","contents","change","embed","suffix","selectionInfo","oldDelta","textBlot","oldValue","CursorBlot","relativeSelectionInfo","shiftRange","convertListHTML","items","lastIndent","endTag","getListType","indent","previousType","isRoot","outerHTML","innerHTML","combined","merged","combinedValue","amount","Module","GUARD_TEXT","Embed","childNode","prevLength","Composition","_Theme","ModuleClass","Theme","getParentElement","element","getElementRect","scaleX","scaleY","paddingValueToInt","number","getScrollDistance","targetStart","targetEnd","scrollStart","scrollEnd","scrollPaddingStart","scrollPaddingEnd","scrollRectIntoView","targetRect","document","current","isDocumentBody","bounding","_a","_b","style","scrollDistanceX","scrollDistanceY","_c","scrollLeft","scrollTop","scrolledLeft","scrolledTop","MAX_REGISTER_ITERATIONS","CORE_FORMATS","createRegistryWithFormats","sourceRegistry","coreBlot","iterations","globalRegistry","Parchment.Registry","Parchment.ParentBlot","_Quill","limit","overwrite","container","expandConfig","html","scrollBlotName","Parchment.ScrollBlot","modify","className","overload","modifier","enabled","Parchment.Scope","bounds","containerBounds","delete1","applied","delete2","Parchment","Quill","resolveSelector","selector","expandModuleConfig","config","expanded","omitUndefinedValuesFromOptions","obj","containerOrSelector","theme","quillModuleDefaults","quillDefaults","themeModuleDefaults","themeDefaults","userModuleOptions","modules","modulesWithDefaults","_ref2","moduleClass","shift","lengthOrSource","pos","Container","isLine","isUpdatable","Scroll","e","first","last","renderBlocks","shouldInsertNewlineChar","insertInlineContents","newlineCharLength","lineEndIndex","refBlotOffset","renderBlock","blockEmbed","getLines","blotIndex","blotLength","currentBlockDelta","insert","splitted","blotName","_ref3","_ref4","inlineContents","AlignAttribute","AlignClass","AlignStyle","ColorAttributor","ColorClass","ColorStyle","BackgroundClass","BackgroundStyle","CodeBlockContainer","CodeBlock","Code","DirectionAttribute","DirectionClass","DirectionStyle","FontClass","FontStyleAttributor","FontStyle","SizeClass","SizeStyle","SHORTKEY","Keyboard","binding","keyBinding","normalize","singleBinding","matches","leafStart","offsetStart","leafEnd","offsetEnd","prefixText","suffixText","curContext","prev","curFormats","prevFormats","formatDelta","nextFormats","deleteRange","defaultOptions","makeFormatHandler","makeCodeBlockHandler","table","row","cell","tableSide","numLines","makeEmbedArrowHandler","makeTableArrowHandler","TAB","shiftKey","up","targetRow","targetCell","targetLine","firstFormats","lastFormats","_table","normalWeightRegexp","blockTagNames","isBlockElement","normalizeEmptyLines","doc","br","normalizeFontWeight","fragment","ignoreRegexp","idRegexp","indentRegexp","parseListItem","idMatch","id","indentMatch","typeRegexp","typeMatch","normalizeListItem","msoList","ignored","others","listItems","parsed","childListItems","ul","listItem","li","NORMALIZERS","msWord","googleDocs","normalizeExternalHTML","CLIPBOARD_CONFIG","matchText","matchNewline","matchBreak","matchBlot","matchAttributor","matchStyles","matchIndent","matchList","matchCodeBlock","matchTable","createMatchAlias","matchIgnore","ATTRIBUTE_ATTRIBUTORS","STYLE_ATTRIBUTORS","Clipboard","matcher","deltaEndsWith","nodeMatches","elementMatchers","textMatchers","traverse","paste","isCut","urlList","url","files","_d","_e","pastedDelta","applyFormat","newDelta","endText","isBetweenInlineElements","preNodes","isPre","childrenDelta","reducedDelta","language","composed","list","checkedAttr","nextSibling","_ref5","History","transformRange","dest","inverseDelta","changeDelta","undoDelta","undoRange","timestamp","transformStack","stackItem","getLastChangeIndex","remoteDelta","oldItem","endsWithNewlineChange","deleteLength","changeIndex","Uploader","uploads","file","promises","resolve","reader","images","update","image","INSERT_TYPES","Input","staticRange","getPlainTextFromInputEvent","isMac","TTL_FOR_VALID_SELECTION_CHANGE","canMoveCaretBeforeUINode","UINode","isRTL","IndentAttributor","normalizedValue","IndentClass","Blockquote","Header","ListContainer","ListItem","ui","listEventHandler","Bold","Italic","Link","sanitize","protocols","anchor","protocol","Script","Strike","Underline","Formula","formula","ATTRIBUTES","Image","Video","video","TokenAttributor","CodeToken","SyntaxCodeBlock","SyntaxCodeBlockContainer","highlight","forced","retain","codeBlock","BreakBlot","lib","majorVersion","Syntax","select","label","option","timer","nodeText","_TableCell","tableId","TableCell","TableRow","thisHead","thisTail","nextHead","nextTail","childFormats","TableBody","TableContainer","rows","maxColumns","max","column","body","Table","columns","old","Toolbar","addControls","selected","isActive","addButton","groups","controls","group","control","addSelect","align","alignLeftIcon","alignCenterIcon","alignRightIcon","alignJustifyIcon","backgroundIcon","blockquoteIcon","boldIcon","cleanIcon","codeIcon","colorIcon","directionLeftToRightIcon","directionRightToLeftIcon","formulaIcon","headerIcon","header2Icon","header3Icon","header4Icon","header5Icon","header6Icon","italicIcon","imageIcon","indentIcon","outdentIcon","linkIcon","listBulletIcon","listCheckIcon","listOrderedIcon","subscriptIcon","superscriptIcon","strikeIcon","tableIcon","underlineIcon","videoIcon","Icons","DropdownIcon","optionsCounter","toggleAriaAttribute","Picker","trigger","ColorPicker","colorLabel","IconPicker","icons","isScrollable","el","overflowY","Tooltip","boundsContainer","reference","left","top","rootBounds","height","verticalShift","ALIGNS","COLORS","FONTS","HEADERS","SIZES","BaseTheme","picker","buttons","button","selects","fillSelect","fileInput","BaseTooltip","mode","preview","extractVideoUrl","defaultValue","TOOLBAR_CONFIG","BubbleTooltip","lastLine","indexBounds","arrow","BubbleTheme","toolbar","SnowTooltip","link","LinkBlot","SnowTheme","_range","tooltip","Indent","List","InlineCode","__props","emit","__emit","quillInstance","isInternalChange","setContents","content","initializeQuill","oldContents","onMounted","watch","onBeforeUnmount"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211]}