{"version":3,"file":"index.full.min.mjs","sources":["../../../packages/utils/index.ts","../../../packages/components/svg-icon/src/svg-icon.ts","../../../packages/components/check-select/src/check-select.ts","../../../packages/components/check-select/src/check-select.vue","../../../node_modules/.pnpm/@yujinjin+utils@0.0.3/node_modules/@yujinjin/utils/es/extend.mjs","../../../node_modules/.pnpm/@yujinjin+utils@0.0.3/node_modules/@yujinjin/utils/es/format.mjs","../../../node_modules/.pnpm/@yujinjin+utils@0.0.3/node_modules/@yujinjin/utils/es/others.mjs","../../../node_modules/.pnpm/cropperjs@1.6.2/node_modules/cropperjs/dist/cropper.esm.js","../../../packages/components/img-upload/src/img-upload.ts","../../../packages/components/img-upload/src/img-upload.vue","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/identity.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFunction.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_coreJsData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isMasked.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toSource.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNative.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getNative.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_WeakMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseCreate.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_apply.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_shortOut.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/constant.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_defineProperty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSetToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/eq.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overRest.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRest.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isLength.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIterateeCall.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createAssigner.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isPrototype.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTimes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubFalse.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnary.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nodeUtil.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overArg.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeCreate.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Hash.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assocIndexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_ListCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Map.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKeyable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMapData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_MapCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayPush.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getPrototype.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isPlainObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Stack.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssign.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayFilter.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbols.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbols.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbolsIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbolsIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_DataView.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Promise.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Set.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Uint8Array.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneArrayBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneDataView.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneRegExp.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneSymbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneByTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClone.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/cloneDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheAdd.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_SetCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arraySome.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalArrays.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalByTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalObjects.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqualDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqual.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseFor.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFor.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignMergeValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLikeObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_safeGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toPlainObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMergeDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMerge.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEqual.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/merge.js","../../../node_modules/.pnpm/parchment@3.0.0/node_modules/parchment/dist/parchment.js","../../../node_modules/.pnpm/fast-diff@1.3.0/node_modules/fast-diff/diff.js","../../../node_modules/.pnpm/lodash.clonedeep@4.5.0/node_modules/lodash.clonedeep/index.js","../../../node_modules/.pnpm/lodash.isequal@4.5.0/node_modules/lodash.isequal/index.js","../../../node_modules/.pnpm/quill-delta@5.1.0/node_modules/quill-delta/dist/AttributeMap.js","../../../node_modules/.pnpm/quill-delta@5.1.0/node_modules/quill-delta/dist/Op.js","../../../node_modules/.pnpm/quill-delta@5.1.0/node_modules/quill-delta/dist/OpIterator.js","../../../node_modules/.pnpm/quill-delta@5.1.0/node_modules/quill-delta/dist/Delta.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/blots/break.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/blots/text.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/blots/inline.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/blots/block.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/blots/cursor.js","../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core/instances.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core/logger.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core/emitter.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core/selection.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core/editor.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core/module.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/blots/embed.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core/composition.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core/theme.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core/utils/scrollRectIntoView.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core/utils/createRegistryWithFormats.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core/quill.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/blots/container.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/blots/scroll.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/align.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/color.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/background.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/code.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/direction.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/font.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/size.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/keyboard.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/normalizeExternalHTML/normalizers/googleDocs.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/normalizeExternalHTML/normalizers/msWord.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/normalizeExternalHTML/index.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/clipboard.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/history.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/uploader.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/input.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/uiNode.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/core.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/indent.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/blockquote.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/header.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/list.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/bold.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/italic.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/link.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/script.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/strike.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/underline.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/formula.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/image.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/video.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/syntax.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/formats/table.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/table.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/modules/toolbar.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/ui/icons.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/ui/picker.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/ui/color-picker.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/ui/icon-picker.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/ui/tooltip.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/themes/base.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/themes/bubble.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/themes/snow.js","../../../node_modules/.pnpm/quill@2.0.2/node_modules/quill/quill.js","../../../packages/components/web-editor/src/web-editor.ts","../../../packages/components/web-editor/src/web-editor.vue","../../../packages/components/input-field/src/input-field.ts","../../../packages/components/input-field/src/input-field.vue","../../../packages/components/action-bar/src/action-bar.ts","../../../packages/components/action-bar/src/action-bar.vue","../../../packages/components/search-field/src/search-field.ts","../../../packages/components/search-field/src/search-field.vue","../../../packages/components/data-table/src/data-table.ts","../../../packages/components/data-table/src/table-column-date.vue","../../../packages/components/data-table/src/table-column-number.vue","../../../packages/components/data-table/src/table-column-image.vue","../../../packages/components/data-table/src/table-column-enum.vue","../../../packages/components/data-table/src/table-column-action.vue","../../../packages/components/data-table/src/data-table.vue","../../../packages/components/input-form/src/input-form.ts","../../../packages/components/input-form/src/constants.ts","../../../packages/components/input-form/src/input-form.vue","../../../packages/components/search-form/src/search-form.ts","../../../packages/components/search-form/src/constants.ts","../../../packages/components/search-form/src/search-form.vue","../../../packages/components/dialog-form/src/dialog-form.ts","../../../packages/components/dialog-form/src/dialog-form.vue","../../../packages/components/search-page/src/search-page.ts","../../../packages/components/search-page/src/search-page.vue","../../../packages/main/components.ts","../../../packages/main/version.ts","../../../packages/main/defaults.ts","../../../packages/main/index.ts"],"sourcesContent":["/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-10-29 15:33:46\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2024-12-30 11:01:28\n * @项目的路径: \\CMS-components\\packages\\utils\\index.ts\n * @描述: 组件工具类\n */\nimport { type ComponentObjectPropsOptions } from \"vue\";\n\n/**\n * 构建并冻结组件属性对象。\n * @param props (T): 组件的属性对象，类型为 ComponentObjectPropsOptions 的子类型\n * @returns  Readonly<T>: 返回一个冻结的、只读的属性对象\n * @example const myProps = buildProps({ name: 'John', age: 30 });\n * myProps.name = 'Jane'; // 尝试修改属性将导致错误\n */\nexport function buildProps<T extends ComponentObjectPropsOptions>(props: T) {\n    return Object.freeze({ ...props }) as Readonly<T>;\n}\n\n/**\n * 转义字符串中的正则表达式特殊字符。\n * @param string (string): 需要转义的字符串，默认为空字符串\n * @returns string: 转义后的字符串\n * @example >>> escapeStringRegexp('hello+world')\n * 'hello\\\\+world'\n */\nexport function escapeStringRegexp(string = \"\") {\n    return string.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\").replace(/-/g, \"\\\\x2d\");\n}\n\n/**\n * 检查给定的值是否为字符串类型\n * @param value(any): 需要检查的值\n * @returns boolean: 如果值是字符串类型则返回true，否则返回false\n */\nexport function isString(value: any): value is string {\n    return typeof value === \"string\";\n}\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2023-03-30 19:32:10\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2024-10-31 16:32:09\n * @项目的路径: \\CMS-components\\packages\\components\\svg-icon\\src\\svg-icon.ts\n * @描述: svg icon\n */\n\nimport { type ExtractPublicPropTypes } from \"vue\";\nimport { buildProps } from \"@yujinjin/cms-components-utils\";\nimport { type NotReadonly } from \"../../types\";\n\nexport const svgIconProps = buildProps({\n    // svg的link名称\n    value: {\n        type: String,\n        required: true,\n        default: \"\"\n    }\n});\n\nexport type SvgIconProps = NotReadonly<ExtractPublicPropTypes<typeof svgIconProps>>;\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-10-25 16:24:25\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2024-11-01 14:47:32\n * @项目的路径: \\CMS-components\\packages\\components\\check-select\\src\\check-select.ts\n * @描述: checkselect 组件\n */\nimport { type PropType, type ExtractPublicPropTypes } from \"vue\";\nimport { buildProps } from \"@yujinjin/cms-components-utils\";\nimport { type NotReadonly } from \"../../types\";\n\nexport const checkSelectProps = buildProps({\n    data: {\n        type: Array as PropType<Array<Record<string, any> | string | number>>,\n        required: true\n    },\n    optionValueKey: {\n        type: String,\n        default: \"value\"\n    },\n    optionLabelKey: {\n        type: String,\n        default: \"label\"\n    },\n    props: {\n        type: Object as PropType<Record<string, any>>,\n        default: () => ({})\n    },\n    events: {\n        type: Object as PropType<Record<string, (...args: any[]) => any>>,\n        default: () => ({})\n    }\n});\n\nexport type CheckSelectProps = NotReadonly<ExtractPublicPropTypes<typeof checkSelectProps>>;\n\nexport const checkSelectEmits = {\n    change: (value: Array<object | string | number>) => Array.isArray(value)\n};\n\nexport type CheckSelectEmits = typeof checkSelectEmits;\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-10-25 11:03:53\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2024-11-05 10:41:58\n * @项目的路径: \\CMS-components\\packages\\components\\check-select\\src\\check-select.vue\n * @描述: 下拉选项带复选框的选项\n-->\n<template>\n    <el-select ref=\"checkSelectRef\" v-model=\"modelValue\" v-bind=\"selectProps || {}\" @change=\"value => emits('change', value)\" v-on=\"events || {}\">\n        <el-option v-if=\"isShowCheckAll\" :created=\"true\" value=\"\" label=\"\">\n            <div class=\"cms-check-select_option-inner\" @click.stop.prevent=\"checkAllChangeHandle\">\n                <el-checkbox :model-value=\"checkAllStatus.isCheckAll\" :indeterminate=\"checkAllStatus.isIndeterminate\" />\n                <span>全选</span>\n            </div>\n        </el-option>\n        <el-option\n            v-for=\"(item, index) in selectDataList\"\n            :key=\"(item[selectProps.valueKey || optionValueKey || 'value'] || '') + '_' + index\"\n            :label=\"item[optionLabelKey || 'label']\"\n            :value=\"item[optionValueKey || 'value']\"\n            :disabled=\"item.disabled === true\"\n        >\n            <div class=\"cms-check-select_option-inner\">\n                <el-checkbox\n                    :model-value=\"modelValue && modelValue.includes(item[optionValueKey || 'value'])\"\n                    :disabled=\"item.disabled === true\"\n                    @change=\"isCheck => checkChangeHandle(isCheck, item[optionValueKey || 'value'])\"\n                />\n                <span>{{ item[optionLabelKey || \"label\"] }}</span>\n            </div>\n        </el-option>\n    </el-select>\n</template>\n<script setup lang=\"ts\">\nimport { ElSelect, ElOption, ElCheckbox } from \"element-plus\";\nimport { type PropType, type ComputedRef, ref, computed, nextTick } from \"vue\";\nimport { checkSelectProps, checkSelectEmits } from \"./check-select\";\n\ndefineOptions({\n    name: \"CheckSelect\"\n});\n\nconst props = defineProps(checkSelectProps);\n\nconst emits = defineEmits(checkSelectEmits);\n\nconst modelValue = defineModel({ type: Array as PropType<Array<object | string | number>> });\n\n// select 实例\nconst checkSelectRef = ref<InstanceType<typeof ElSelect>>();\n\nconst selectDataList: ComputedRef<Array<Record<string, any>>> = computed(() => {\n    if (!props.data || props.data.length === 0) {\n        return [];\n    }\n    if (typeof props.data[0] === \"string\" || typeof props.data[0] === \"number\") {\n        return props.data.map(item => ({ label: item, value: item }));\n    }\n    return props.data as Array<Record<string, any>>;\n});\n\nconst selectProps = computed(() => {\n    return Object.assign(\n        {\n            collapseTags: true,\n            collapseTagsTooltip: true,\n            filterable: true\n        },\n        props.props || {},\n        { multiple: true }\n    );\n});\n\nconst isShowCheckAll = computed(() => {\n    if (selectDataList.value.length === 0 || !checkSelectRef.value) {\n        return false;\n    }\n    let isShow = false;\n    checkSelectRef.value!.states.options.forEach(item => {\n        if (item.isDisabled !== true && item.visible && !item.created) {\n            isShow = true;\n        }\n    });\n    return isShow;\n});\n\n// 初始化全选状态\nconst checkAllStatus = computed(() => {\n    const status = {\n        isCheckAll: false,\n        isIndeterminate: false\n    };\n    if (!isShowCheckAll.value || !modelValue.value || modelValue.value.length === 0 || !checkSelectRef.value?.states) {\n        return status;\n    }\n    checkSelectRef.value.states.options.forEach(item => {\n        if (!item.visible || item.created || (!status.isCheckAll && status.isIndeterminate)) {\n            return;\n        }\n        if (item.itemSelected) {\n            status.isCheckAll = true;\n        } else if (status.isCheckAll) {\n            status.isIndeterminate = true;\n            status.isCheckAll = false;\n        }\n    });\n    return status;\n});\n\nconst checkAllChangeHandle = async function () {\n    await nextTick();\n    const values = modelValue.value || [];\n    checkSelectRef.value?.states.options.forEach(item => {\n        if (!item.visible || item.created) {\n            return;\n        }\n        const findIndex = values.indexOf(item.value);\n        if (checkAllStatus.value.isCheckAll && findIndex !== -1) {\n            values.splice(findIndex, 1);\n        } else if (!checkAllStatus.value.isCheckAll && findIndex === -1) {\n            values.push(item.value);\n        }\n    });\n    modelValue.value = values;\n    emits(\"change\", modelValue.value);\n};\n\nconst checkChangeHandle = function (isCheck, value) {\n    const values = modelValue.value || [];\n    if (isCheck) {\n        values.splice(\n            values.findIndex(item => item === value),\n            1\n        );\n    } else {\n        values.push(value);\n    }\n    modelValue.value = values;\n    emits(\"change\", modelValue.value);\n};\n</script>\n","const class2type = {};\nconst toString = class2type.toString;\nconst hasOwn = class2type.hasOwnProperty;\n\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \").forEach(function(item) {\n  class2type[\"[object \" + item + \"]\"] = item.toLowerCase();\n});\nconst type = function(obj) {\n  if (obj === null) {\n    return obj + \"\";\n  }\n  return typeof obj === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : typeof obj;\n};\nconst isFunction = function(obj) {\n  return type(obj) === \"function\";\n};\nconst isWindow = function(obj) {\n  return obj !== null && obj === obj.window;\n};\nconst isPlainObject = function(obj) {\n  let key;\n  if (!obj || type(obj) !== \"object\" || obj.nodeType || isWindow(obj)) {\n    return false;\n  }\n  try {\n    if (obj.constructor && !hasOwn.call(obj, \"constructor\") && !hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\")) {\n      return false;\n    }\n  } catch (e) {\n    return false;\n  }\n  for (key in obj) {\n  }\n  return key === void 0 || hasOwn.call(obj, key);\n};\nconst isArray = Array.isArray || function(obj) {\n  return type(obj) === \"array\";\n};\nfunction extend(...args) {\n  let src, copyIsArray, copy, name, options, clone, target = args[0] || {}, i = 1, deep = false;\n  const length = args.length;\n  if (typeof target === \"boolean\") {\n    deep = target;\n    target = args[i] || {};\n    i++;\n  }\n  if (typeof target !== \"object\" && !isFunction(target)) {\n    target = {};\n  }\n  if (i === length) {\n    i--;\n  }\n  for (; i < length; i++) {\n    if ((options = args[i]) !== null) {\n      for (name in options) {\n        src = target[name];\n        copy = options[name];\n        if (target === copy) {\n          continue;\n        }\n        if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n          if (copyIsArray) {\n            copyIsArray = false;\n            clone = src && isArray(src) ? src : [];\n          } else {\n            clone = src && isPlainObject(src) ? src : {};\n          }\n          target[name] = extend(deep, clone, copy);\n        } else if (copy !== void 0) {\n          target[name] = copy;\n        }\n      }\n    }\n  }\n  return target;\n}\n\nexport { extend };\n//# sourceMappingURL=extend.mjs.map\n","function dateFormat(date, format = \"YYYY-MM-DD\") {\n  if (!(date instanceof Date)) {\n    date = new Date(date);\n  }\n  const dateConfig = {\n    \"(Y|y)+\": date.getFullYear(),\n    // 月份\n    \"M+\": date.getMonth() + 1,\n    // 月份\n    \"(d|D)+\": date.getDate(),\n    // 日\n    \"h+\": date.getHours() > 12 ? date.getHours() - 12 : date.getHours(),\n    // 小时\n    \"H+\": date.getHours(),\n    // 24小时\n    \"m+\": date.getMinutes(),\n    // 分\n    \"s+\": date.getSeconds(),\n    // 秒\n    \"q+\": Math.floor((date.getMonth() + 3) / 3),\n    // 季度\n    \"S+\": date.getMilliseconds()\n    // 毫秒\n  };\n  Object.keys(dateConfig).forEach((key) => {\n    if (new RegExp(key).test(format)) {\n      format = format.replace(new RegExp(\"(\" + key + \")\"), function(match) {\n        if (match.length > String(dateConfig[key]).length) {\n          return new Array(match.length - String(dateConfig[key]).length).fill(\"0\").join(\"\") + String(dateConfig[key]);\n        }\n        return String(dateConfig[key]);\n      });\n    }\n  });\n  return format;\n}\nfunction timeDifferenceFormat(date, separator = \"/\") {\n  const currentTime = /* @__PURE__ */ new Date(), compareTime = new Date(date);\n  const timeDifference = (currentTime.getTime() - compareTime.getTime()) / 1e3;\n  if (timeDifference < 60) {\n    return \"\\u521A\\u521A\\u4E4B\\u524D\";\n  } else if (timeDifference < 3600) {\n    return parseInt(String(timeDifference / 60), 10) + \"\\u5206\\u949F\\u524D\";\n  } else if (timeDifference < 60 * 60 * 24) {\n    return parseInt(String(timeDifference / 3600), 10) + \"\\u5C0F\\u65F6\\u524D\";\n  } else if (timeDifference < 60 * 60 * 24 * 30) {\n    return parseInt(String(timeDifference / (60 * 60 * 24)), 10) + \"\\u5929\\u524D\";\n  } else if (compareTime.getFullYear() === currentTime.getFullYear()) {\n    return dateFormat(compareTime, `MM${separator}DD`);\n  }\n  return dateFormat(compareTime, `YYYY${separator}MM${separator}DD`);\n}\nfunction numberFormat(value, digit = 0) {\n  if (typeof value === \"string\") {\n    value = value.replace(/\\$|,/g, \"\");\n    value = parseFloat(value);\n  }\n  if (digit < 0) {\n    digit = 0;\n  } else if (digit > 11) {\n    throw new Error(\"\\u6700\\u5927\\u652F\\u630111\\u4F4D\\u5C0F\\u6570\\u683C\\u5F0F\\u5316\");\n  }\n  value = value.toFixed(digit);\n  if (value.indexOf(\".\") === -1) {\n    value = value.replace(/\\B(?=(?:\\d{3})+$)/g, \",\");\n  } else {\n    value = value.substring(0, value.indexOf(\".\")).replace(/\\B(?=(?:\\d{3})+$)/g, \",\") + value.substring(value.indexOf(\".\"), value.length);\n  }\n  return value;\n}\nfunction stringFormat(contents, parameters) {\n  if (!parameters || !contents) {\n    return contents;\n  }\n  if (parameters.length > 0) {\n    parameters.forEach((value, index) => {\n      contents = contents.replace(new RegExp(\"\\\\{\" + index + \"\\\\}\", \"g\"), value === null ? \"\" : value);\n    });\n  } else {\n    Object.keys(parameters).forEach((key) => {\n      contents = contents.replace(new RegExp(\"\\\\{\" + key + \"\\\\}\", \"g\"), parameters[key] === null ? \"\" : parameters[key]);\n    });\n  }\n  return contents;\n}\n\nexport { dateFormat, numberFormat, stringFormat, timeDifferenceFormat };\n//# sourceMappingURL=format.mjs.map\n","function loadScript(url, id) {\n  return new Promise((resolve) => {\n    if (document.getElementById(id)) {\n      resolve(true);\n      return;\n    }\n    const script = document.createElement(\"script\");\n    script.type = \"text/javascript\";\n    script.id = id;\n    let timer = window.setTimeout(function() {\n      timer = null;\n      resolve(false);\n    }, 1e4);\n    script.onload = function() {\n      if (timer) {\n        clearTimeout(timer);\n        resolve(true);\n      }\n    };\n    script.src = url;\n    document.body.appendChild(script);\n  });\n}\nfunction throttle(fn, wait, { leading, trailing } = { leading: true, trailing: true }) {\n  let timeout = null;\n  let previous = 0;\n  return function(...args) {\n    const now = Date.now();\n    if (leading === false) previous = now;\n    const remaining = wait - (now - previous);\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      previous = now;\n      fn.apply(this, args);\n    } else if (!timeout && trailing !== false) {\n      timeout = window.setTimeout(() => {\n        previous = leading === false ? 0 : Date.now();\n        timeout = null;\n        fn.apply(this, args);\n      }, remaining);\n    }\n  };\n}\nfunction debounce(callback, wait) {\n  let timeout;\n  return function(...args) {\n    clearTimeout(timeout);\n    timeout = window.setTimeout(() => {\n      callback.apply(this, args);\n    }, wait);\n  };\n}\nfunction number2text(number, type = \"upper\") {\n  const confs = {\n    lower: {\n      num: [\"\\u96F6\", \"\\u4E00\", \"\\u4E8C\", \"\\u4E09\", \"\\u56DB\", \"\\u4E94\", \"\\u516D\", \"\\u4E03\", \"\\u516B\", \"\\u4E5D\"],\n      unit: [\"\", \"\\u5341\", \"\\u767E\", \"\\u5343\", \"\\u4E07\"],\n      level: [\"\", \"\\u4E07\", \"\\u4EBF\"]\n    },\n    upper: {\n      num: [\"\\u96F6\", \"\\u58F9\", \"\\u8D30\", \"\\u53C1\", \"\\u8086\", \"\\u4F0D\", \"\\u9646\", \"\\u67D2\", \"\\u634C\", \"\\u7396\"],\n      unit: [\"\", \"\\u62FE\", \"\\u4F70\", \"\\u4EDF\"],\n      level: [\"\", \"\\u4E07\", \"\\u4EBF\"]\n    },\n    decimal: {\n      unit: [\"\\u5206\", \"\\u89D2\"]\n    },\n    maxNumber: 99999999999999e-2\n  };\n  if (Number(number) > confs.maxNumber) {\n    return \"\";\n  }\n  const conf = confs[type];\n  const numbers = String(Number(number).toFixed(2)).split(\".\");\n  const integer = numbers[0].split(\"\");\n  const decimal = Number(numbers[1]) === 0 ? [] : numbers[1].split(\"\");\n  const levels = integer.reverse().reduce((pre, item, idx) => {\n    const level = pre[0] && pre[0].length < 4 ? pre[0] : [];\n    const value = item === \"0\" ? conf.num[item] : conf.num[item] + conf.unit[idx % 4];\n    level.unshift(value);\n    if (level.length === 1) {\n      pre.unshift(level);\n    } else {\n      pre[0] = level;\n    }\n    return pre;\n  }, []);\n  const _integer = levels.reduce((pre, item, idx) => {\n    let _level = conf.level[levels.length - idx - 1];\n    let _item = item.join(\"\").replace(/(零)\\1+/g, \"$1\");\n    if (_item === \"\\u96F6\") {\n      _item = \"\";\n      _level = \"\";\n    } else if (_item[_item.length - 1] === \"\\u96F6\") {\n      _item = _item.slice(0, _item.length - 1);\n    }\n    return pre + _item + _level;\n  }, \"\");\n  const _decimal = decimal.map((item, idx) => {\n    const unit = confs.decimal.unit;\n    const _unit = item !== \"0\" ? unit[unit.length - idx - 1] : \"\";\n    return `${conf.num[item]}${_unit}`;\n  }).join(\"\");\n  return `${_integer}\\u5143` + (_decimal || \"\\u6574\");\n}\nfunction setObjectProperty(object, path, value) {\n  if (!path) {\n    throw \"path \\u5C5E\\u6027\\u8DEF\\u5F84\\u4E0A\\u7684\\u503C\\u4E0D\\u80FD\\u4E3A\\u7A7A\";\n  } else if (!object || typeof object !== \"object\") {\n    throw \"\\u8BBE\\u7F6E\\u7684\\u76EE\\u6807\\u5FC5\\u987B\\u662F\\u5BF9\\u8C61\\u7C7B\\u578B\";\n  }\n  let keyArray = [];\n  if (typeof path === \"string\") {\n    path = path.replace(/\\[(\\w+)\\]/g, \".$1\");\n    path = path.replace(/^\\./, \"\");\n    keyArray = path.split(\".\");\n  } else if (Array.isArray(path)) {\n    keyArray = path;\n  } else {\n    throw \"path \\u5C5E\\u6027\\u8DEF\\u5F84\\u53EA\\u80FD\\u4E3A\\u5B57\\u7B26\\u4E32\\u7C7B\\u578B\\u6216\\u6570\\u7EC4\\u7C7B\\u578B\";\n  }\n  if (keyArray.length === 1) {\n    object[keyArray[0]] = value;\n    return { rootObject: { [keyArray[0]]: value } };\n  }\n  const getValue = function(targetObject, key, isArray) {\n    let value2 = targetObject[key];\n    if (value2 === void 0 || value2 === null || typeof value2 !== \"object\") {\n      targetObject[key] = value2 = isArray ? [] : {};\n    }\n    return value2;\n  };\n  let targetValue = getValue(object, keyArray[0], /^\\d+$/.test(keyArray[1]));\n  const rootName = keyArray[0];\n  const rootValue = targetValue;\n  for (let i = 1; i < keyArray.length - 1; i++) {\n    targetValue = getValue(targetValue, keyArray[i], /^\\d+$/.test(keyArray[i + 1]));\n  }\n  targetValue[keyArray[keyArray.length - 1]] = value;\n  return { rootObject: { [rootName]: rootValue } };\n}\nfunction getObjectProperty(object, path, defaultValue) {\n  if (!path) {\n    throw \"path \\u5C5E\\u6027\\u8DEF\\u5F84\\u4E0A\\u7684\\u503C\\u4E0D\\u80FD\\u4E3A\\u7A7A\";\n  } else if (!object || typeof object !== \"object\") {\n    throw \"\\u8BBE\\u7F6E\\u7684\\u76EE\\u6807\\u5FC5\\u987B\\u662F\\u5BF9\\u8C61\\u7C7B\\u578B\";\n  }\n  let keyArray = [];\n  if (typeof path === \"string\") {\n    path = path.replace(/\\[(\\w+)\\]/g, \".$1\");\n    path = path.replace(/^\\./, \"\");\n    keyArray = path.split(\".\");\n  } else if (path instanceof Array) {\n    keyArray = path;\n  } else {\n    throw \"path \\u5C5E\\u6027\\u8DEF\\u5F84\\u53EA\\u80FD\\u4E3A\\u5B57\\u7B26\\u4E32\\u7C7B\\u578B\\u6216\\u6570\\u7EC4\\u7C7B\\u578B\";\n  }\n  let targetValue = object;\n  for (let i = 0; i < keyArray.length; i++) {\n    if (Object.prototype.hasOwnProperty.call(targetValue, keyArray[i])) {\n      targetValue = targetValue[keyArray[i]];\n      if (targetValue === null) return null;\n    } else {\n      targetValue = void 0;\n    }\n    if (targetValue === void 0) {\n      return defaultValue;\n    }\n  }\n  return targetValue;\n}\n\nexport { debounce, getObjectProperty, loadScript, number2text, setObjectProperty, throttle };\n//# sourceMappingURL=others.mjs.map\n","/*!\n * Cropper.js v1.6.2\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2024-04-21T07:43:05.335Z\n */\n\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n  }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  Object.defineProperty(Constructor, \"prototype\", {\n    writable: false\n  });\n  return Constructor;\n}\nfunction _defineProperty(obj, key, value) {\n  key = _toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n  return arr2;\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nvar WINDOW = IS_BROWSER ? window : {};\nvar IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\nvar HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\nvar NAMESPACE = 'cropper';\n\n// Actions\nvar ACTION_ALL = 'all';\nvar ACTION_CROP = 'crop';\nvar ACTION_MOVE = 'move';\nvar ACTION_ZOOM = 'zoom';\nvar ACTION_EAST = 'e';\nvar ACTION_WEST = 'w';\nvar ACTION_SOUTH = 's';\nvar ACTION_NORTH = 'n';\nvar ACTION_NORTH_EAST = 'ne';\nvar ACTION_NORTH_WEST = 'nw';\nvar ACTION_SOUTH_EAST = 'se';\nvar ACTION_SOUTH_WEST = 'sw';\n\n// Classes\nvar CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\nvar CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\nvar CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\nvar CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\nvar CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\nvar CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\nvar CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n// Data keys\nvar DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\nvar DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n// Drag modes\nvar DRAG_MODE_CROP = 'crop';\nvar DRAG_MODE_MOVE = 'move';\nvar DRAG_MODE_NONE = 'none';\n\n// Events\nvar EVENT_CROP = 'crop';\nvar EVENT_CROP_END = 'cropend';\nvar EVENT_CROP_MOVE = 'cropmove';\nvar EVENT_CROP_START = 'cropstart';\nvar EVENT_DBLCLICK = 'dblclick';\nvar EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\nvar EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\nvar EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\nvar EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\nvar EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\nvar EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\nvar EVENT_READY = 'ready';\nvar EVENT_RESIZE = 'resize';\nvar EVENT_WHEEL = 'wheel';\nvar EVENT_ZOOM = 'zoom';\n\n// Mime types\nvar MIME_TYPE_JPEG = 'image/jpeg';\n\n// RegExps\nvar REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\nvar REGEXP_DATA_URL = /^data:/;\nvar REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\nvar REGEXP_TAG_NAME = /^img|canvas$/i;\n\n// Misc\n// Inspired by the default width and height of a canvas element.\nvar MIN_CONTAINER_WIDTH = 200;\nvar MIN_CONTAINER_HEIGHT = 100;\n\nvar DEFAULTS = {\n  // Define the view mode of the cropper\n  viewMode: 0,\n  // 0, 1, 2, 3\n\n  // Define the dragging mode of the cropper\n  dragMode: DRAG_MODE_CROP,\n  // 'crop', 'move' or 'none'\n\n  // Define the initial aspect ratio of the crop box\n  initialAspectRatio: NaN,\n  // Define the aspect ratio of the crop box\n  aspectRatio: NaN,\n  // An object with the previous cropping result data\n  data: null,\n  // A selector for adding extra containers to preview\n  preview: '',\n  // Re-render the cropper when resize the window\n  responsive: true,\n  // Restore the cropped area after resize the window\n  restore: true,\n  // Check if the current image is a cross-origin image\n  checkCrossOrigin: true,\n  // Check the current image's Exif Orientation information\n  checkOrientation: true,\n  // Show the black modal\n  modal: true,\n  // Show the dashed lines for guiding\n  guides: true,\n  // Show the center indicator for guiding\n  center: true,\n  // Show the white modal to highlight the crop box\n  highlight: true,\n  // Show the grid background\n  background: true,\n  // Enable to crop the image automatically when initialize\n  autoCrop: true,\n  // Define the percentage of automatic cropping area when initializes\n  autoCropArea: 0.8,\n  // Enable to move the image\n  movable: true,\n  // Enable to rotate the image\n  rotatable: true,\n  // Enable to scale the image\n  scalable: true,\n  // Enable to zoom the image\n  zoomable: true,\n  // Enable to zoom the image by dragging touch\n  zoomOnTouch: true,\n  // Enable to zoom the image by wheeling mouse\n  zoomOnWheel: true,\n  // Define zoom ratio when zoom the image by wheeling mouse\n  wheelZoomRatio: 0.1,\n  // Enable to move the crop box\n  cropBoxMovable: true,\n  // Enable to resize the crop box\n  cropBoxResizable: true,\n  // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n  toggleDragModeOnDblclick: true,\n  // Size limitation\n  minCanvasWidth: 0,\n  minCanvasHeight: 0,\n  minCropBoxWidth: 0,\n  minCropBoxHeight: 0,\n  minContainerWidth: MIN_CONTAINER_WIDTH,\n  minContainerHeight: MIN_CONTAINER_HEIGHT,\n  // Shortcuts of events\n  ready: null,\n  cropstart: null,\n  cropmove: null,\n  cropend: null,\n  crop: null,\n  zoom: null\n};\n\nvar TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\n\n/**\n * Check if the given value is not a number.\n */\nvar isNaN = Number.isNaN || WINDOW.isNaN;\n\n/**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\nfunction isNumber(value) {\n  return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\nvar isPositiveNumber = function isPositiveNumber(value) {\n  return value > 0 && value < Infinity;\n};\n\n/**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\nfunction isUndefined(value) {\n  return typeof value === 'undefined';\n}\n\n/**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\nfunction isObject(value) {\n  return _typeof(value) === 'object' && value !== null;\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\nfunction isPlainObject(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  try {\n    var _constructor = value.constructor;\n    var prototype = _constructor.prototype;\n    return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n  } catch (error) {\n    return false;\n  }\n}\n\n/**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\nfunction isFunction(value) {\n  return typeof value === 'function';\n}\nvar slice = Array.prototype.slice;\n\n/**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\nfunction toArray(value) {\n  return Array.from ? Array.from(value) : slice.call(value);\n}\n\n/**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\nfunction forEach(data, callback) {\n  if (data && isFunction(callback)) {\n    if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n      toArray(data).forEach(function (value, key) {\n        callback.call(data, value, key, data);\n      });\n    } else if (isObject(data)) {\n      Object.keys(data).forEach(function (key) {\n        callback.call(data, data[key], key, data);\n      });\n    }\n  }\n  return data;\n}\n\n/**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\nvar assign = Object.assign || function assign(target) {\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  if (isObject(target) && args.length > 0) {\n    args.forEach(function (arg) {\n      if (isObject(arg)) {\n        Object.keys(arg).forEach(function (key) {\n          target[key] = arg[key];\n        });\n      }\n    });\n  }\n  return target;\n};\nvar REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n/**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\nfunction normalizeDecimalNumber(value) {\n  var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n  return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n}\nvar REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n/**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\nfunction setStyle(element, styles) {\n  var style = element.style;\n  forEach(styles, function (value, property) {\n    if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n      value = \"\".concat(value, \"px\");\n    }\n    style[property] = value;\n  });\n}\n\n/**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\nfunction hasClass(element, value) {\n  return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n}\n\n/**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\nfunction addClass(element, value) {\n  if (!value) {\n    return;\n  }\n  if (isNumber(element.length)) {\n    forEach(element, function (elem) {\n      addClass(elem, value);\n    });\n    return;\n  }\n  if (element.classList) {\n    element.classList.add(value);\n    return;\n  }\n  var className = element.className.trim();\n  if (!className) {\n    element.className = value;\n  } else if (className.indexOf(value) < 0) {\n    element.className = \"\".concat(className, \" \").concat(value);\n  }\n}\n\n/**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\nfunction removeClass(element, value) {\n  if (!value) {\n    return;\n  }\n  if (isNumber(element.length)) {\n    forEach(element, function (elem) {\n      removeClass(elem, value);\n    });\n    return;\n  }\n  if (element.classList) {\n    element.classList.remove(value);\n    return;\n  }\n  if (element.className.indexOf(value) >= 0) {\n    element.className = element.className.replace(value, '');\n  }\n}\n\n/**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\nfunction toggleClass(element, value, added) {\n  if (!value) {\n    return;\n  }\n  if (isNumber(element.length)) {\n    forEach(element, function (elem) {\n      toggleClass(elem, value, added);\n    });\n    return;\n  }\n\n  // IE10-11 doesn't support the second parameter of `classList.toggle`\n  if (added) {\n    addClass(element, value);\n  } else {\n    removeClass(element, value);\n  }\n}\nvar REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n/**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\nfunction toParamCase(value) {\n  return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n}\n\n/**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\nfunction getData(element, name) {\n  if (isObject(element[name])) {\n    return element[name];\n  }\n  if (element.dataset) {\n    return element.dataset[name];\n  }\n  return element.getAttribute(\"data-\".concat(toParamCase(name)));\n}\n\n/**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\nfunction setData(element, name, data) {\n  if (isObject(data)) {\n    element[name] = data;\n  } else if (element.dataset) {\n    element.dataset[name] = data;\n  } else {\n    element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n  }\n}\n\n/**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\nfunction removeData(element, name) {\n  if (isObject(element[name])) {\n    try {\n      delete element[name];\n    } catch (error) {\n      element[name] = undefined;\n    }\n  } else if (element.dataset) {\n    // #128 Safari not allows to delete dataset property\n    try {\n      delete element.dataset[name];\n    } catch (error) {\n      element.dataset[name] = undefined;\n    }\n  } else {\n    element.removeAttribute(\"data-\".concat(toParamCase(name)));\n  }\n}\nvar REGEXP_SPACES = /\\s\\s*/;\nvar onceSupported = function () {\n  var supported = false;\n  if (IS_BROWSER) {\n    var once = false;\n    var listener = function listener() {};\n    var options = Object.defineProperty({}, 'once', {\n      get: function get() {\n        supported = true;\n        return once;\n      },\n      /**\n       * This setter can fix a `TypeError` in strict mode\n       * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n       * @param {boolean} value - The value to set\n       */\n      set: function set(value) {\n        once = value;\n      }\n    });\n    WINDOW.addEventListener('test', listener, options);\n    WINDOW.removeEventListener('test', listener, options);\n  }\n  return supported;\n}();\n\n/**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction removeListener(element, type, listener) {\n  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var handler = listener;\n  type.trim().split(REGEXP_SPACES).forEach(function (event) {\n    if (!onceSupported) {\n      var listeners = element.listeners;\n      if (listeners && listeners[event] && listeners[event][listener]) {\n        handler = listeners[event][listener];\n        delete listeners[event][listener];\n        if (Object.keys(listeners[event]).length === 0) {\n          delete listeners[event];\n        }\n        if (Object.keys(listeners).length === 0) {\n          delete element.listeners;\n        }\n      }\n    }\n    element.removeEventListener(event, handler, options);\n  });\n}\n\n/**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction addListener(element, type, listener) {\n  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  var _handler = listener;\n  type.trim().split(REGEXP_SPACES).forEach(function (event) {\n    if (options.once && !onceSupported) {\n      var _element$listeners = element.listeners,\n        listeners = _element$listeners === void 0 ? {} : _element$listeners;\n      _handler = function handler() {\n        delete listeners[event][listener];\n        element.removeEventListener(event, _handler, options);\n        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n        listener.apply(element, args);\n      };\n      if (!listeners[event]) {\n        listeners[event] = {};\n      }\n      if (listeners[event][listener]) {\n        element.removeEventListener(event, listeners[event][listener], options);\n      }\n      listeners[event][listener] = _handler;\n      element.listeners = listeners;\n    }\n    element.addEventListener(event, _handler, options);\n  });\n}\n\n/**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\nfunction dispatchEvent(element, type, data) {\n  var event;\n\n  // Event and CustomEvent on IE9-11 are global objects, not constructors\n  if (isFunction(Event) && isFunction(CustomEvent)) {\n    event = new CustomEvent(type, {\n      detail: data,\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    event = document.createEvent('CustomEvent');\n    event.initCustomEvent(type, true, true, data);\n  }\n  return element.dispatchEvent(event);\n}\n\n/**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\nfunction getOffset(element) {\n  var box = element.getBoundingClientRect();\n  return {\n    left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n    top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n  };\n}\nvar location = WINDOW.location;\nvar REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n/**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\nfunction isCrossOriginURL(url) {\n  var parts = url.match(REGEXP_ORIGINS);\n  return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n}\n\n/**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\nfunction addTimestamp(url) {\n  var timestamp = \"timestamp=\".concat(new Date().getTime());\n  return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n}\n\n/**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\nfunction getTransforms(_ref) {\n  var rotate = _ref.rotate,\n    scaleX = _ref.scaleX,\n    scaleY = _ref.scaleY,\n    translateX = _ref.translateX,\n    translateY = _ref.translateY;\n  var values = [];\n  if (isNumber(translateX) && translateX !== 0) {\n    values.push(\"translateX(\".concat(translateX, \"px)\"));\n  }\n  if (isNumber(translateY) && translateY !== 0) {\n    values.push(\"translateY(\".concat(translateY, \"px)\"));\n  }\n\n  // Rotate should come first before scale to match orientation transform\n  if (isNumber(rotate) && rotate !== 0) {\n    values.push(\"rotate(\".concat(rotate, \"deg)\"));\n  }\n  if (isNumber(scaleX) && scaleX !== 1) {\n    values.push(\"scaleX(\".concat(scaleX, \")\"));\n  }\n  if (isNumber(scaleY) && scaleY !== 1) {\n    values.push(\"scaleY(\".concat(scaleY, \")\"));\n  }\n  var transform = values.length ? values.join(' ') : 'none';\n  return {\n    WebkitTransform: transform,\n    msTransform: transform,\n    transform: transform\n  };\n}\n\n/**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\nfunction getMaxZoomRatio(pointers) {\n  var pointers2 = _objectSpread2({}, pointers);\n  var maxRatio = 0;\n  forEach(pointers, function (pointer, pointerId) {\n    delete pointers2[pointerId];\n    forEach(pointers2, function (pointer2) {\n      var x1 = Math.abs(pointer.startX - pointer2.startX);\n      var y1 = Math.abs(pointer.startY - pointer2.startY);\n      var x2 = Math.abs(pointer.endX - pointer2.endX);\n      var y2 = Math.abs(pointer.endY - pointer2.endY);\n      var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n      var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n      var ratio = (z2 - z1) / z1;\n      if (Math.abs(ratio) > Math.abs(maxRatio)) {\n        maxRatio = ratio;\n      }\n    });\n  });\n  return maxRatio;\n}\n\n/**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\nfunction getPointer(_ref2, endOnly) {\n  var pageX = _ref2.pageX,\n    pageY = _ref2.pageY;\n  var end = {\n    endX: pageX,\n    endY: pageY\n  };\n  return endOnly ? end : _objectSpread2({\n    startX: pageX,\n    startY: pageY\n  }, end);\n}\n\n/**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\nfunction getPointersCenter(pointers) {\n  var pageX = 0;\n  var pageY = 0;\n  var count = 0;\n  forEach(pointers, function (_ref3) {\n    var startX = _ref3.startX,\n      startY = _ref3.startY;\n    pageX += startX;\n    pageY += startY;\n    count += 1;\n  });\n  pageX /= count;\n  pageY /= count;\n  return {\n    pageX: pageX,\n    pageY: pageY\n  };\n}\n\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\nfunction getAdjustedSizes(_ref4) {\n  var aspectRatio = _ref4.aspectRatio,\n    height = _ref4.height,\n    width = _ref4.width;\n  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n  var isValidWidth = isPositiveNumber(width);\n  var isValidHeight = isPositiveNumber(height);\n  if (isValidWidth && isValidHeight) {\n    var adjustedWidth = height * aspectRatio;\n    if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n      height = width / aspectRatio;\n    } else {\n      width = height * aspectRatio;\n    }\n  } else if (isValidWidth) {\n    height = width / aspectRatio;\n  } else if (isValidHeight) {\n    width = height * aspectRatio;\n  }\n  return {\n    width: width,\n    height: height\n  };\n}\n\n/**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\nfunction getRotatedSizes(_ref5) {\n  var width = _ref5.width,\n    height = _ref5.height,\n    degree = _ref5.degree;\n  degree = Math.abs(degree) % 180;\n  if (degree === 90) {\n    return {\n      width: height,\n      height: width\n    };\n  }\n  var arc = degree % 90 * Math.PI / 180;\n  var sinArc = Math.sin(arc);\n  var cosArc = Math.cos(arc);\n  var newWidth = width * cosArc + height * sinArc;\n  var newHeight = width * sinArc + height * cosArc;\n  return degree > 90 ? {\n    width: newHeight,\n    height: newWidth\n  } : {\n    width: newWidth,\n    height: newHeight\n  };\n}\n\n/**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\nfunction getSourceCanvas(image, _ref6, _ref7, _ref8) {\n  var imageAspectRatio = _ref6.aspectRatio,\n    imageNaturalWidth = _ref6.naturalWidth,\n    imageNaturalHeight = _ref6.naturalHeight,\n    _ref6$rotate = _ref6.rotate,\n    rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n    _ref6$scaleX = _ref6.scaleX,\n    scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n    _ref6$scaleY = _ref6.scaleY,\n    scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n  var aspectRatio = _ref7.aspectRatio,\n    naturalWidth = _ref7.naturalWidth,\n    naturalHeight = _ref7.naturalHeight;\n  var _ref8$fillColor = _ref8.fillColor,\n    fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n    _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n    imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n    _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n    imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n    _ref8$maxWidth = _ref8.maxWidth,\n    maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n    _ref8$maxHeight = _ref8.maxHeight,\n    maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n    _ref8$minWidth = _ref8.minWidth,\n    minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n    _ref8$minHeight = _ref8.minHeight,\n    minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n  var canvas = document.createElement('canvas');\n  var context = canvas.getContext('2d');\n  var maxSizes = getAdjustedSizes({\n    aspectRatio: aspectRatio,\n    width: maxWidth,\n    height: maxHeight\n  });\n  var minSizes = getAdjustedSizes({\n    aspectRatio: aspectRatio,\n    width: minWidth,\n    height: minHeight\n  }, 'cover');\n  var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n  var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n  // Note: should always use image's natural sizes for drawing as\n  // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n  var destMaxSizes = getAdjustedSizes({\n    aspectRatio: imageAspectRatio,\n    width: maxWidth,\n    height: maxHeight\n  });\n  var destMinSizes = getAdjustedSizes({\n    aspectRatio: imageAspectRatio,\n    width: minWidth,\n    height: minHeight\n  }, 'cover');\n  var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n  var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n  var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n  canvas.width = normalizeDecimalNumber(width);\n  canvas.height = normalizeDecimalNumber(height);\n  context.fillStyle = fillColor;\n  context.fillRect(0, 0, width, height);\n  context.save();\n  context.translate(width / 2, height / 2);\n  context.rotate(rotate * Math.PI / 180);\n  context.scale(scaleX, scaleY);\n  context.imageSmoothingEnabled = imageSmoothingEnabled;\n  context.imageSmoothingQuality = imageSmoothingQuality;\n  context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n    return Math.floor(normalizeDecimalNumber(param));\n  }))));\n  context.restore();\n  return canvas;\n}\nvar fromCharCode = String.fromCharCode;\n\n/**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\nfunction getStringFromCharCode(dataView, start, length) {\n  var str = '';\n  length += start;\n  for (var i = start; i < length; i += 1) {\n    str += fromCharCode(dataView.getUint8(i));\n  }\n  return str;\n}\nvar REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n/**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\nfunction dataURLToArrayBuffer(dataURL) {\n  var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n  var binary = atob(base64);\n  var arrayBuffer = new ArrayBuffer(binary.length);\n  var uint8 = new Uint8Array(arrayBuffer);\n  forEach(uint8, function (value, i) {\n    uint8[i] = binary.charCodeAt(i);\n  });\n  return arrayBuffer;\n}\n\n/**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\nfunction arrayBufferToDataURL(arrayBuffer, mimeType) {\n  var chunks = [];\n\n  // Chunk Typed Array for better performance (#435)\n  var chunkSize = 8192;\n  var uint8 = new Uint8Array(arrayBuffer);\n  while (uint8.length > 0) {\n    // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n    // eslint-disable-next-line prefer-spread\n    chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n    uint8 = uint8.subarray(chunkSize);\n  }\n  return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n}\n\n/**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\nfunction resetAndGetOrientation(arrayBuffer) {\n  var dataView = new DataView(arrayBuffer);\n  var orientation;\n\n  // Ignores range error when the image does not have correct Exif information\n  try {\n    var littleEndian;\n    var app1Start;\n    var ifdStart;\n\n    // Only handle JPEG image (start by 0xFFD8)\n    if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n      var length = dataView.byteLength;\n      var offset = 2;\n      while (offset + 1 < length) {\n        if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n          app1Start = offset;\n          break;\n        }\n        offset += 1;\n      }\n    }\n    if (app1Start) {\n      var exifIDCode = app1Start + 4;\n      var tiffOffset = app1Start + 10;\n      if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n        var endianness = dataView.getUint16(tiffOffset);\n        littleEndian = endianness === 0x4949;\n        if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n          if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n            var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n            if (firstIFDOffset >= 0x00000008) {\n              ifdStart = tiffOffset + firstIFDOffset;\n            }\n          }\n        }\n      }\n    }\n    if (ifdStart) {\n      var _length = dataView.getUint16(ifdStart, littleEndian);\n      var _offset;\n      var i;\n      for (i = 0; i < _length; i += 1) {\n        _offset = ifdStart + i * 12 + 2;\n        if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n          // 8 is the offset of the current tag's value\n          _offset += 8;\n\n          // Get the original orientation value\n          orientation = dataView.getUint16(_offset, littleEndian);\n\n          // Override the orientation with its default value\n          dataView.setUint16(_offset, 1, littleEndian);\n          break;\n        }\n      }\n    }\n  } catch (error) {\n    orientation = 1;\n  }\n  return orientation;\n}\n\n/**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\nfunction parseOrientation(orientation) {\n  var rotate = 0;\n  var scaleX = 1;\n  var scaleY = 1;\n  switch (orientation) {\n    // Flip horizontal\n    case 2:\n      scaleX = -1;\n      break;\n\n    // Rotate left 180°\n    case 3:\n      rotate = -180;\n      break;\n\n    // Flip vertical\n    case 4:\n      scaleY = -1;\n      break;\n\n    // Flip vertical and rotate right 90°\n    case 5:\n      rotate = 90;\n      scaleY = -1;\n      break;\n\n    // Rotate right 90°\n    case 6:\n      rotate = 90;\n      break;\n\n    // Flip horizontal and rotate right 90°\n    case 7:\n      rotate = 90;\n      scaleX = -1;\n      break;\n\n    // Rotate left 90°\n    case 8:\n      rotate = -90;\n      break;\n  }\n  return {\n    rotate: rotate,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n\nvar render = {\n  render: function render() {\n    this.initContainer();\n    this.initCanvas();\n    this.initCropBox();\n    this.renderCanvas();\n    if (this.cropped) {\n      this.renderCropBox();\n    }\n  },\n  initContainer: function initContainer() {\n    var element = this.element,\n      options = this.options,\n      container = this.container,\n      cropper = this.cropper;\n    var minWidth = Number(options.minContainerWidth);\n    var minHeight = Number(options.minContainerHeight);\n    addClass(cropper, CLASS_HIDDEN);\n    removeClass(element, CLASS_HIDDEN);\n    var containerData = {\n      width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n      height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n    };\n    this.containerData = containerData;\n    setStyle(cropper, {\n      width: containerData.width,\n      height: containerData.height\n    });\n    addClass(element, CLASS_HIDDEN);\n    removeClass(cropper, CLASS_HIDDEN);\n  },\n  // Canvas (image wrapper)\n  initCanvas: function initCanvas() {\n    var containerData = this.containerData,\n      imageData = this.imageData;\n    var viewMode = this.options.viewMode;\n    var rotated = Math.abs(imageData.rotate) % 180 === 90;\n    var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n    var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n    var aspectRatio = naturalWidth / naturalHeight;\n    var canvasWidth = containerData.width;\n    var canvasHeight = containerData.height;\n    if (containerData.height * aspectRatio > containerData.width) {\n      if (viewMode === 3) {\n        canvasWidth = containerData.height * aspectRatio;\n      } else {\n        canvasHeight = containerData.width / aspectRatio;\n      }\n    } else if (viewMode === 3) {\n      canvasHeight = containerData.width / aspectRatio;\n    } else {\n      canvasWidth = containerData.height * aspectRatio;\n    }\n    var canvasData = {\n      aspectRatio: aspectRatio,\n      naturalWidth: naturalWidth,\n      naturalHeight: naturalHeight,\n      width: canvasWidth,\n      height: canvasHeight\n    };\n    this.canvasData = canvasData;\n    this.limited = viewMode === 1 || viewMode === 2;\n    this.limitCanvas(true, true);\n    canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n    canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n    canvasData.left = (containerData.width - canvasData.width) / 2;\n    canvasData.top = (containerData.height - canvasData.height) / 2;\n    canvasData.oldLeft = canvasData.left;\n    canvasData.oldTop = canvasData.top;\n    this.initialCanvasData = assign({}, canvasData);\n  },\n  limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n    var options = this.options,\n      containerData = this.containerData,\n      canvasData = this.canvasData,\n      cropBoxData = this.cropBoxData;\n    var viewMode = options.viewMode;\n    var aspectRatio = canvasData.aspectRatio;\n    var cropped = this.cropped && cropBoxData;\n    if (sizeLimited) {\n      var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n      var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n      if (viewMode > 1) {\n        minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n        minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n        if (viewMode === 3) {\n          if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n            minCanvasWidth = minCanvasHeight * aspectRatio;\n          } else {\n            minCanvasHeight = minCanvasWidth / aspectRatio;\n          }\n        }\n      } else if (viewMode > 0) {\n        if (minCanvasWidth) {\n          minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n        } else if (minCanvasHeight) {\n          minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n        } else if (cropped) {\n          minCanvasWidth = cropBoxData.width;\n          minCanvasHeight = cropBoxData.height;\n          if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n            minCanvasWidth = minCanvasHeight * aspectRatio;\n          } else {\n            minCanvasHeight = minCanvasWidth / aspectRatio;\n          }\n        }\n      }\n      var _getAdjustedSizes = getAdjustedSizes({\n        aspectRatio: aspectRatio,\n        width: minCanvasWidth,\n        height: minCanvasHeight\n      });\n      minCanvasWidth = _getAdjustedSizes.width;\n      minCanvasHeight = _getAdjustedSizes.height;\n      canvasData.minWidth = minCanvasWidth;\n      canvasData.minHeight = minCanvasHeight;\n      canvasData.maxWidth = Infinity;\n      canvasData.maxHeight = Infinity;\n    }\n    if (positionLimited) {\n      if (viewMode > (cropped ? 0 : 1)) {\n        var newCanvasLeft = containerData.width - canvasData.width;\n        var newCanvasTop = containerData.height - canvasData.height;\n        canvasData.minLeft = Math.min(0, newCanvasLeft);\n        canvasData.minTop = Math.min(0, newCanvasTop);\n        canvasData.maxLeft = Math.max(0, newCanvasLeft);\n        canvasData.maxTop = Math.max(0, newCanvasTop);\n        if (cropped && this.limited) {\n          canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n          canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n          canvasData.maxLeft = cropBoxData.left;\n          canvasData.maxTop = cropBoxData.top;\n          if (viewMode === 2) {\n            if (canvasData.width >= containerData.width) {\n              canvasData.minLeft = Math.min(0, newCanvasLeft);\n              canvasData.maxLeft = Math.max(0, newCanvasLeft);\n            }\n            if (canvasData.height >= containerData.height) {\n              canvasData.minTop = Math.min(0, newCanvasTop);\n              canvasData.maxTop = Math.max(0, newCanvasTop);\n            }\n          }\n        }\n      } else {\n        canvasData.minLeft = -canvasData.width;\n        canvasData.minTop = -canvasData.height;\n        canvasData.maxLeft = containerData.width;\n        canvasData.maxTop = containerData.height;\n      }\n    }\n  },\n  renderCanvas: function renderCanvas(changed, transformed) {\n    var canvasData = this.canvasData,\n      imageData = this.imageData;\n    if (transformed) {\n      var _getRotatedSizes = getRotatedSizes({\n          width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n          height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n          degree: imageData.rotate || 0\n        }),\n        naturalWidth = _getRotatedSizes.width,\n        naturalHeight = _getRotatedSizes.height;\n      var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n      var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n      canvasData.left -= (width - canvasData.width) / 2;\n      canvasData.top -= (height - canvasData.height) / 2;\n      canvasData.width = width;\n      canvasData.height = height;\n      canvasData.aspectRatio = naturalWidth / naturalHeight;\n      canvasData.naturalWidth = naturalWidth;\n      canvasData.naturalHeight = naturalHeight;\n      this.limitCanvas(true, false);\n    }\n    if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n      canvasData.left = canvasData.oldLeft;\n    }\n    if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n      canvasData.top = canvasData.oldTop;\n    }\n    canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n    canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n    this.limitCanvas(false, true);\n    canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n    canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n    canvasData.oldLeft = canvasData.left;\n    canvasData.oldTop = canvasData.top;\n    setStyle(this.canvas, assign({\n      width: canvasData.width,\n      height: canvasData.height\n    }, getTransforms({\n      translateX: canvasData.left,\n      translateY: canvasData.top\n    })));\n    this.renderImage(changed);\n    if (this.cropped && this.limited) {\n      this.limitCropBox(true, true);\n    }\n  },\n  renderImage: function renderImage(changed) {\n    var canvasData = this.canvasData,\n      imageData = this.imageData;\n    var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n    var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n    assign(imageData, {\n      width: width,\n      height: height,\n      left: (canvasData.width - width) / 2,\n      top: (canvasData.height - height) / 2\n    });\n    setStyle(this.image, assign({\n      width: imageData.width,\n      height: imageData.height\n    }, getTransforms(assign({\n      translateX: imageData.left,\n      translateY: imageData.top\n    }, imageData))));\n    if (changed) {\n      this.output();\n    }\n  },\n  initCropBox: function initCropBox() {\n    var options = this.options,\n      canvasData = this.canvasData;\n    var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n    var autoCropArea = Number(options.autoCropArea) || 0.8;\n    var cropBoxData = {\n      width: canvasData.width,\n      height: canvasData.height\n    };\n    if (aspectRatio) {\n      if (canvasData.height * aspectRatio > canvasData.width) {\n        cropBoxData.height = cropBoxData.width / aspectRatio;\n      } else {\n        cropBoxData.width = cropBoxData.height * aspectRatio;\n      }\n    }\n    this.cropBoxData = cropBoxData;\n    this.limitCropBox(true, true);\n\n    // Initialize auto crop area\n    cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n    cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n    // The width/height of auto crop area must large than \"minWidth/Height\"\n    cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n    cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n    cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n    cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n    cropBoxData.oldLeft = cropBoxData.left;\n    cropBoxData.oldTop = cropBoxData.top;\n    this.initialCropBoxData = assign({}, cropBoxData);\n  },\n  limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n    var options = this.options,\n      containerData = this.containerData,\n      canvasData = this.canvasData,\n      cropBoxData = this.cropBoxData,\n      limited = this.limited;\n    var aspectRatio = options.aspectRatio;\n    if (sizeLimited) {\n      var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n      var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n      var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n      var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n      // The min/maxCropBoxWidth/Height must be less than container's width/height\n      minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n      minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n      if (aspectRatio) {\n        if (minCropBoxWidth && minCropBoxHeight) {\n          if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n            minCropBoxHeight = minCropBoxWidth / aspectRatio;\n          } else {\n            minCropBoxWidth = minCropBoxHeight * aspectRatio;\n          }\n        } else if (minCropBoxWidth) {\n          minCropBoxHeight = minCropBoxWidth / aspectRatio;\n        } else if (minCropBoxHeight) {\n          minCropBoxWidth = minCropBoxHeight * aspectRatio;\n        }\n        if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n          maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n        } else {\n          maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n        }\n      }\n\n      // The minWidth/Height must be less than maxWidth/Height\n      cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n      cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n      cropBoxData.maxWidth = maxCropBoxWidth;\n      cropBoxData.maxHeight = maxCropBoxHeight;\n    }\n    if (positionLimited) {\n      if (limited) {\n        cropBoxData.minLeft = Math.max(0, canvasData.left);\n        cropBoxData.minTop = Math.max(0, canvasData.top);\n        cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n        cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n      } else {\n        cropBoxData.minLeft = 0;\n        cropBoxData.minTop = 0;\n        cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n        cropBoxData.maxTop = containerData.height - cropBoxData.height;\n      }\n    }\n  },\n  renderCropBox: function renderCropBox() {\n    var options = this.options,\n      containerData = this.containerData,\n      cropBoxData = this.cropBoxData;\n    if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n      cropBoxData.left = cropBoxData.oldLeft;\n    }\n    if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n      cropBoxData.top = cropBoxData.oldTop;\n    }\n    cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n    cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n    this.limitCropBox(false, true);\n    cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n    cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n    cropBoxData.oldLeft = cropBoxData.left;\n    cropBoxData.oldTop = cropBoxData.top;\n    if (options.movable && options.cropBoxMovable) {\n      // Turn to move the canvas when the crop box is equal to the container\n      setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n    }\n    setStyle(this.cropBox, assign({\n      width: cropBoxData.width,\n      height: cropBoxData.height\n    }, getTransforms({\n      translateX: cropBoxData.left,\n      translateY: cropBoxData.top\n    })));\n    if (this.cropped && this.limited) {\n      this.limitCanvas(true, true);\n    }\n    if (!this.disabled) {\n      this.output();\n    }\n  },\n  output: function output() {\n    this.preview();\n    dispatchEvent(this.element, EVENT_CROP, this.getData());\n  }\n};\n\nvar preview = {\n  initPreview: function initPreview() {\n    var element = this.element,\n      crossOrigin = this.crossOrigin;\n    var preview = this.options.preview;\n    var url = crossOrigin ? this.crossOriginUrl : this.url;\n    var alt = element.alt || 'The image to preview';\n    var image = document.createElement('img');\n    if (crossOrigin) {\n      image.crossOrigin = crossOrigin;\n    }\n    image.src = url;\n    image.alt = alt;\n    this.viewBox.appendChild(image);\n    this.viewBoxImage = image;\n    if (!preview) {\n      return;\n    }\n    var previews = preview;\n    if (typeof preview === 'string') {\n      previews = element.ownerDocument.querySelectorAll(preview);\n    } else if (preview.querySelector) {\n      previews = [preview];\n    }\n    this.previews = previews;\n    forEach(previews, function (el) {\n      var img = document.createElement('img');\n\n      // Save the original size for recover\n      setData(el, DATA_PREVIEW, {\n        width: el.offsetWidth,\n        height: el.offsetHeight,\n        html: el.innerHTML\n      });\n      if (crossOrigin) {\n        img.crossOrigin = crossOrigin;\n      }\n      img.src = url;\n      img.alt = alt;\n\n      /**\n       * Override img element styles\n       * Add `display:block` to avoid margin top issue\n       * Add `height:auto` to override `height` attribute on IE8\n       * (Occur only when margin-top <= -height)\n       */\n      img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n      el.innerHTML = '';\n      el.appendChild(img);\n    });\n  },\n  resetPreview: function resetPreview() {\n    forEach(this.previews, function (element) {\n      var data = getData(element, DATA_PREVIEW);\n      setStyle(element, {\n        width: data.width,\n        height: data.height\n      });\n      element.innerHTML = data.html;\n      removeData(element, DATA_PREVIEW);\n    });\n  },\n  preview: function preview() {\n    var imageData = this.imageData,\n      canvasData = this.canvasData,\n      cropBoxData = this.cropBoxData;\n    var cropBoxWidth = cropBoxData.width,\n      cropBoxHeight = cropBoxData.height;\n    var width = imageData.width,\n      height = imageData.height;\n    var left = cropBoxData.left - canvasData.left - imageData.left;\n    var top = cropBoxData.top - canvasData.top - imageData.top;\n    if (!this.cropped || this.disabled) {\n      return;\n    }\n    setStyle(this.viewBoxImage, assign({\n      width: width,\n      height: height\n    }, getTransforms(assign({\n      translateX: -left,\n      translateY: -top\n    }, imageData))));\n    forEach(this.previews, function (element) {\n      var data = getData(element, DATA_PREVIEW);\n      var originalWidth = data.width;\n      var originalHeight = data.height;\n      var newWidth = originalWidth;\n      var newHeight = originalHeight;\n      var ratio = 1;\n      if (cropBoxWidth) {\n        ratio = originalWidth / cropBoxWidth;\n        newHeight = cropBoxHeight * ratio;\n      }\n      if (cropBoxHeight && newHeight > originalHeight) {\n        ratio = originalHeight / cropBoxHeight;\n        newWidth = cropBoxWidth * ratio;\n        newHeight = originalHeight;\n      }\n      setStyle(element, {\n        width: newWidth,\n        height: newHeight\n      });\n      setStyle(element.getElementsByTagName('img')[0], assign({\n        width: width * ratio,\n        height: height * ratio\n      }, getTransforms(assign({\n        translateX: -left * ratio,\n        translateY: -top * ratio\n      }, imageData))));\n    });\n  }\n};\n\nvar events = {\n  bind: function bind() {\n    var element = this.element,\n      options = this.options,\n      cropper = this.cropper;\n    if (isFunction(options.cropstart)) {\n      addListener(element, EVENT_CROP_START, options.cropstart);\n    }\n    if (isFunction(options.cropmove)) {\n      addListener(element, EVENT_CROP_MOVE, options.cropmove);\n    }\n    if (isFunction(options.cropend)) {\n      addListener(element, EVENT_CROP_END, options.cropend);\n    }\n    if (isFunction(options.crop)) {\n      addListener(element, EVENT_CROP, options.crop);\n    }\n    if (isFunction(options.zoom)) {\n      addListener(element, EVENT_ZOOM, options.zoom);\n    }\n    addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n    if (options.zoomable && options.zoomOnWheel) {\n      addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n        passive: false,\n        capture: true\n      });\n    }\n    if (options.toggleDragModeOnDblclick) {\n      addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n    }\n    addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n    addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n    if (options.responsive) {\n      addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n    }\n  },\n  unbind: function unbind() {\n    var element = this.element,\n      options = this.options,\n      cropper = this.cropper;\n    if (isFunction(options.cropstart)) {\n      removeListener(element, EVENT_CROP_START, options.cropstart);\n    }\n    if (isFunction(options.cropmove)) {\n      removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n    }\n    if (isFunction(options.cropend)) {\n      removeListener(element, EVENT_CROP_END, options.cropend);\n    }\n    if (isFunction(options.crop)) {\n      removeListener(element, EVENT_CROP, options.crop);\n    }\n    if (isFunction(options.zoom)) {\n      removeListener(element, EVENT_ZOOM, options.zoom);\n    }\n    removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n    if (options.zoomable && options.zoomOnWheel) {\n      removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n        passive: false,\n        capture: true\n      });\n    }\n    if (options.toggleDragModeOnDblclick) {\n      removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n    }\n    removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n    removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n    if (options.responsive) {\n      removeListener(window, EVENT_RESIZE, this.onResize);\n    }\n  }\n};\n\nvar handlers = {\n  resize: function resize() {\n    if (this.disabled) {\n      return;\n    }\n    var options = this.options,\n      container = this.container,\n      containerData = this.containerData;\n    var ratioX = container.offsetWidth / containerData.width;\n    var ratioY = container.offsetHeight / containerData.height;\n    var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n    // Resize when width changed or height changed\n    if (ratio !== 1) {\n      var canvasData;\n      var cropBoxData;\n      if (options.restore) {\n        canvasData = this.getCanvasData();\n        cropBoxData = this.getCropBoxData();\n      }\n      this.render();\n      if (options.restore) {\n        this.setCanvasData(forEach(canvasData, function (n, i) {\n          canvasData[i] = n * ratio;\n        }));\n        this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n          cropBoxData[i] = n * ratio;\n        }));\n      }\n    }\n  },\n  dblclick: function dblclick() {\n    if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n      return;\n    }\n    this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n  },\n  wheel: function wheel(event) {\n    var _this = this;\n    var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n    var delta = 1;\n    if (this.disabled) {\n      return;\n    }\n    event.preventDefault();\n\n    // Limit wheel speed to prevent zoom too fast (#21)\n    if (this.wheeling) {\n      return;\n    }\n    this.wheeling = true;\n    setTimeout(function () {\n      _this.wheeling = false;\n    }, 50);\n    if (event.deltaY) {\n      delta = event.deltaY > 0 ? 1 : -1;\n    } else if (event.wheelDelta) {\n      delta = -event.wheelDelta / 120;\n    } else if (event.detail) {\n      delta = event.detail > 0 ? 1 : -1;\n    }\n    this.zoom(-delta * ratio, event);\n  },\n  cropStart: function cropStart(event) {\n    var buttons = event.buttons,\n      button = event.button;\n    if (this.disabled\n\n    // Handle mouse event and pointer event and ignore touch event\n    || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n    // No primary button (Usually the left button)\n    isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n    // Open context menu\n    || event.ctrlKey)) {\n      return;\n    }\n    var options = this.options,\n      pointers = this.pointers;\n    var action;\n    if (event.changedTouches) {\n      // Handle touch event\n      forEach(event.changedTouches, function (touch) {\n        pointers[touch.identifier] = getPointer(touch);\n      });\n    } else {\n      // Handle mouse event and pointer event\n      pointers[event.pointerId || 0] = getPointer(event);\n    }\n    if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n      action = ACTION_ZOOM;\n    } else {\n      action = getData(event.target, DATA_ACTION);\n    }\n    if (!REGEXP_ACTIONS.test(action)) {\n      return;\n    }\n    if (dispatchEvent(this.element, EVENT_CROP_START, {\n      originalEvent: event,\n      action: action\n    }) === false) {\n      return;\n    }\n\n    // This line is required for preventing page zooming in iOS browsers\n    event.preventDefault();\n    this.action = action;\n    this.cropping = false;\n    if (action === ACTION_CROP) {\n      this.cropping = true;\n      addClass(this.dragBox, CLASS_MODAL);\n    }\n  },\n  cropMove: function cropMove(event) {\n    var action = this.action;\n    if (this.disabled || !action) {\n      return;\n    }\n    var pointers = this.pointers;\n    event.preventDefault();\n    if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n      originalEvent: event,\n      action: action\n    }) === false) {\n      return;\n    }\n    if (event.changedTouches) {\n      forEach(event.changedTouches, function (touch) {\n        // The first parameter should not be undefined (#432)\n        assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n      });\n    } else {\n      assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n    }\n    this.change(event);\n  },\n  cropEnd: function cropEnd(event) {\n    if (this.disabled) {\n      return;\n    }\n    var action = this.action,\n      pointers = this.pointers;\n    if (event.changedTouches) {\n      forEach(event.changedTouches, function (touch) {\n        delete pointers[touch.identifier];\n      });\n    } else {\n      delete pointers[event.pointerId || 0];\n    }\n    if (!action) {\n      return;\n    }\n    event.preventDefault();\n    if (!Object.keys(pointers).length) {\n      this.action = '';\n    }\n    if (this.cropping) {\n      this.cropping = false;\n      toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n    }\n    dispatchEvent(this.element, EVENT_CROP_END, {\n      originalEvent: event,\n      action: action\n    });\n  }\n};\n\nvar change = {\n  change: function change(event) {\n    var options = this.options,\n      canvasData = this.canvasData,\n      containerData = this.containerData,\n      cropBoxData = this.cropBoxData,\n      pointers = this.pointers;\n    var action = this.action;\n    var aspectRatio = options.aspectRatio;\n    var left = cropBoxData.left,\n      top = cropBoxData.top,\n      width = cropBoxData.width,\n      height = cropBoxData.height;\n    var right = left + width;\n    var bottom = top + height;\n    var minLeft = 0;\n    var minTop = 0;\n    var maxWidth = containerData.width;\n    var maxHeight = containerData.height;\n    var renderable = true;\n    var offset;\n\n    // Locking aspect ratio in \"free mode\" by holding shift key\n    if (!aspectRatio && event.shiftKey) {\n      aspectRatio = width && height ? width / height : 1;\n    }\n    if (this.limited) {\n      minLeft = cropBoxData.minLeft;\n      minTop = cropBoxData.minTop;\n      maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n      maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n    }\n    var pointer = pointers[Object.keys(pointers)[0]];\n    var range = {\n      x: pointer.endX - pointer.startX,\n      y: pointer.endY - pointer.startY\n    };\n    var check = function check(side) {\n      switch (side) {\n        case ACTION_EAST:\n          if (right + range.x > maxWidth) {\n            range.x = maxWidth - right;\n          }\n          break;\n        case ACTION_WEST:\n          if (left + range.x < minLeft) {\n            range.x = minLeft - left;\n          }\n          break;\n        case ACTION_NORTH:\n          if (top + range.y < minTop) {\n            range.y = minTop - top;\n          }\n          break;\n        case ACTION_SOUTH:\n          if (bottom + range.y > maxHeight) {\n            range.y = maxHeight - bottom;\n          }\n          break;\n      }\n    };\n    switch (action) {\n      // Move crop box\n      case ACTION_ALL:\n        left += range.x;\n        top += range.y;\n        break;\n\n      // Resize crop box\n      case ACTION_EAST:\n        if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n          renderable = false;\n          break;\n        }\n        check(ACTION_EAST);\n        width += range.x;\n        if (width < 0) {\n          action = ACTION_WEST;\n          width = -width;\n          left -= width;\n        }\n        if (aspectRatio) {\n          height = width / aspectRatio;\n          top += (cropBoxData.height - height) / 2;\n        }\n        break;\n      case ACTION_NORTH:\n        if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n          renderable = false;\n          break;\n        }\n        check(ACTION_NORTH);\n        height -= range.y;\n        top += range.y;\n        if (height < 0) {\n          action = ACTION_SOUTH;\n          height = -height;\n          top -= height;\n        }\n        if (aspectRatio) {\n          width = height * aspectRatio;\n          left += (cropBoxData.width - width) / 2;\n        }\n        break;\n      case ACTION_WEST:\n        if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n          renderable = false;\n          break;\n        }\n        check(ACTION_WEST);\n        width -= range.x;\n        left += range.x;\n        if (width < 0) {\n          action = ACTION_EAST;\n          width = -width;\n          left -= width;\n        }\n        if (aspectRatio) {\n          height = width / aspectRatio;\n          top += (cropBoxData.height - height) / 2;\n        }\n        break;\n      case ACTION_SOUTH:\n        if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n          renderable = false;\n          break;\n        }\n        check(ACTION_SOUTH);\n        height += range.y;\n        if (height < 0) {\n          action = ACTION_NORTH;\n          height = -height;\n          top -= height;\n        }\n        if (aspectRatio) {\n          width = height * aspectRatio;\n          left += (cropBoxData.width - width) / 2;\n        }\n        break;\n      case ACTION_NORTH_EAST:\n        if (aspectRatio) {\n          if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_NORTH);\n          height -= range.y;\n          top += range.y;\n          width = height * aspectRatio;\n        } else {\n          check(ACTION_NORTH);\n          check(ACTION_EAST);\n          if (range.x >= 0) {\n            if (right < maxWidth) {\n              width += range.x;\n            } else if (range.y <= 0 && top <= minTop) {\n              renderable = false;\n            }\n          } else {\n            width += range.x;\n          }\n          if (range.y <= 0) {\n            if (top > minTop) {\n              height -= range.y;\n              top += range.y;\n            }\n          } else {\n            height -= range.y;\n            top += range.y;\n          }\n        }\n        if (width < 0 && height < 0) {\n          action = ACTION_SOUTH_WEST;\n          height = -height;\n          width = -width;\n          top -= height;\n          left -= width;\n        } else if (width < 0) {\n          action = ACTION_NORTH_WEST;\n          width = -width;\n          left -= width;\n        } else if (height < 0) {\n          action = ACTION_SOUTH_EAST;\n          height = -height;\n          top -= height;\n        }\n        break;\n      case ACTION_NORTH_WEST:\n        if (aspectRatio) {\n          if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_NORTH);\n          height -= range.y;\n          top += range.y;\n          width = height * aspectRatio;\n          left += cropBoxData.width - width;\n        } else {\n          check(ACTION_NORTH);\n          check(ACTION_WEST);\n          if (range.x <= 0) {\n            if (left > minLeft) {\n              width -= range.x;\n              left += range.x;\n            } else if (range.y <= 0 && top <= minTop) {\n              renderable = false;\n            }\n          } else {\n            width -= range.x;\n            left += range.x;\n          }\n          if (range.y <= 0) {\n            if (top > minTop) {\n              height -= range.y;\n              top += range.y;\n            }\n          } else {\n            height -= range.y;\n            top += range.y;\n          }\n        }\n        if (width < 0 && height < 0) {\n          action = ACTION_SOUTH_EAST;\n          height = -height;\n          width = -width;\n          top -= height;\n          left -= width;\n        } else if (width < 0) {\n          action = ACTION_NORTH_EAST;\n          width = -width;\n          left -= width;\n        } else if (height < 0) {\n          action = ACTION_SOUTH_WEST;\n          height = -height;\n          top -= height;\n        }\n        break;\n      case ACTION_SOUTH_WEST:\n        if (aspectRatio) {\n          if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_WEST);\n          width -= range.x;\n          left += range.x;\n          height = width / aspectRatio;\n        } else {\n          check(ACTION_SOUTH);\n          check(ACTION_WEST);\n          if (range.x <= 0) {\n            if (left > minLeft) {\n              width -= range.x;\n              left += range.x;\n            } else if (range.y >= 0 && bottom >= maxHeight) {\n              renderable = false;\n            }\n          } else {\n            width -= range.x;\n            left += range.x;\n          }\n          if (range.y >= 0) {\n            if (bottom < maxHeight) {\n              height += range.y;\n            }\n          } else {\n            height += range.y;\n          }\n        }\n        if (width < 0 && height < 0) {\n          action = ACTION_NORTH_EAST;\n          height = -height;\n          width = -width;\n          top -= height;\n          left -= width;\n        } else if (width < 0) {\n          action = ACTION_SOUTH_EAST;\n          width = -width;\n          left -= width;\n        } else if (height < 0) {\n          action = ACTION_NORTH_WEST;\n          height = -height;\n          top -= height;\n        }\n        break;\n      case ACTION_SOUTH_EAST:\n        if (aspectRatio) {\n          if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_EAST);\n          width += range.x;\n          height = width / aspectRatio;\n        } else {\n          check(ACTION_SOUTH);\n          check(ACTION_EAST);\n          if (range.x >= 0) {\n            if (right < maxWidth) {\n              width += range.x;\n            } else if (range.y >= 0 && bottom >= maxHeight) {\n              renderable = false;\n            }\n          } else {\n            width += range.x;\n          }\n          if (range.y >= 0) {\n            if (bottom < maxHeight) {\n              height += range.y;\n            }\n          } else {\n            height += range.y;\n          }\n        }\n        if (width < 0 && height < 0) {\n          action = ACTION_NORTH_WEST;\n          height = -height;\n          width = -width;\n          top -= height;\n          left -= width;\n        } else if (width < 0) {\n          action = ACTION_SOUTH_WEST;\n          width = -width;\n          left -= width;\n        } else if (height < 0) {\n          action = ACTION_NORTH_EAST;\n          height = -height;\n          top -= height;\n        }\n        break;\n\n      // Move canvas\n      case ACTION_MOVE:\n        this.move(range.x, range.y);\n        renderable = false;\n        break;\n\n      // Zoom canvas\n      case ACTION_ZOOM:\n        this.zoom(getMaxZoomRatio(pointers), event);\n        renderable = false;\n        break;\n\n      // Create crop box\n      case ACTION_CROP:\n        if (!range.x || !range.y) {\n          renderable = false;\n          break;\n        }\n        offset = getOffset(this.cropper);\n        left = pointer.startX - offset.left;\n        top = pointer.startY - offset.top;\n        width = cropBoxData.minWidth;\n        height = cropBoxData.minHeight;\n        if (range.x > 0) {\n          action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n        } else if (range.x < 0) {\n          left -= width;\n          action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n        }\n        if (range.y < 0) {\n          top -= height;\n        }\n\n        // Show the crop box if is hidden\n        if (!this.cropped) {\n          removeClass(this.cropBox, CLASS_HIDDEN);\n          this.cropped = true;\n          if (this.limited) {\n            this.limitCropBox(true, true);\n          }\n        }\n        break;\n    }\n    if (renderable) {\n      cropBoxData.width = width;\n      cropBoxData.height = height;\n      cropBoxData.left = left;\n      cropBoxData.top = top;\n      this.action = action;\n      this.renderCropBox();\n    }\n\n    // Override\n    forEach(pointers, function (p) {\n      p.startX = p.endX;\n      p.startY = p.endY;\n    });\n  }\n};\n\nvar methods = {\n  // Show the crop box manually\n  crop: function crop() {\n    if (this.ready && !this.cropped && !this.disabled) {\n      this.cropped = true;\n      this.limitCropBox(true, true);\n      if (this.options.modal) {\n        addClass(this.dragBox, CLASS_MODAL);\n      }\n      removeClass(this.cropBox, CLASS_HIDDEN);\n      this.setCropBoxData(this.initialCropBoxData);\n    }\n    return this;\n  },\n  // Reset the image and crop box to their initial states\n  reset: function reset() {\n    if (this.ready && !this.disabled) {\n      this.imageData = assign({}, this.initialImageData);\n      this.canvasData = assign({}, this.initialCanvasData);\n      this.cropBoxData = assign({}, this.initialCropBoxData);\n      this.renderCanvas();\n      if (this.cropped) {\n        this.renderCropBox();\n      }\n    }\n    return this;\n  },\n  // Clear the crop box\n  clear: function clear() {\n    if (this.cropped && !this.disabled) {\n      assign(this.cropBoxData, {\n        left: 0,\n        top: 0,\n        width: 0,\n        height: 0\n      });\n      this.cropped = false;\n      this.renderCropBox();\n      this.limitCanvas(true, true);\n\n      // Render canvas after crop box rendered\n      this.renderCanvas();\n      removeClass(this.dragBox, CLASS_MODAL);\n      addClass(this.cropBox, CLASS_HIDDEN);\n    }\n    return this;\n  },\n  /**\n   * Replace the image's src and rebuild the cropper\n   * @param {string} url - The new URL.\n   * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n   * @returns {Cropper} this\n   */\n  replace: function replace(url) {\n    var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    if (!this.disabled && url) {\n      if (this.isImg) {\n        this.element.src = url;\n      }\n      if (hasSameSize) {\n        this.url = url;\n        this.image.src = url;\n        if (this.ready) {\n          this.viewBoxImage.src = url;\n          forEach(this.previews, function (element) {\n            element.getElementsByTagName('img')[0].src = url;\n          });\n        }\n      } else {\n        if (this.isImg) {\n          this.replaced = true;\n        }\n        this.options.data = null;\n        this.uncreate();\n        this.load(url);\n      }\n    }\n    return this;\n  },\n  // Enable (unfreeze) the cropper\n  enable: function enable() {\n    if (this.ready && this.disabled) {\n      this.disabled = false;\n      removeClass(this.cropper, CLASS_DISABLED);\n    }\n    return this;\n  },\n  // Disable (freeze) the cropper\n  disable: function disable() {\n    if (this.ready && !this.disabled) {\n      this.disabled = true;\n      addClass(this.cropper, CLASS_DISABLED);\n    }\n    return this;\n  },\n  /**\n   * Destroy the cropper and remove the instance from the image\n   * @returns {Cropper} this\n   */\n  destroy: function destroy() {\n    var element = this.element;\n    if (!element[NAMESPACE]) {\n      return this;\n    }\n    element[NAMESPACE] = undefined;\n    if (this.isImg && this.replaced) {\n      element.src = this.originalUrl;\n    }\n    this.uncreate();\n    return this;\n  },\n  /**\n   * Move the canvas with relative offsets\n   * @param {number} offsetX - The relative offset distance on the x-axis.\n   * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n   * @returns {Cropper} this\n   */\n  move: function move(offsetX) {\n    var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n    var _this$canvasData = this.canvasData,\n      left = _this$canvasData.left,\n      top = _this$canvasData.top;\n    return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n  },\n  /**\n   * Move the canvas to an absolute point\n   * @param {number} x - The x-axis coordinate.\n   * @param {number} [y=x] - The y-axis coordinate.\n   * @returns {Cropper} this\n   */\n  moveTo: function moveTo(x) {\n    var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n    var canvasData = this.canvasData;\n    var changed = false;\n    x = Number(x);\n    y = Number(y);\n    if (this.ready && !this.disabled && this.options.movable) {\n      if (isNumber(x)) {\n        canvasData.left = x;\n        changed = true;\n      }\n      if (isNumber(y)) {\n        canvasData.top = y;\n        changed = true;\n      }\n      if (changed) {\n        this.renderCanvas(true);\n      }\n    }\n    return this;\n  },\n  /**\n   * Zoom the canvas with a relative ratio\n   * @param {number} ratio - The target ratio.\n   * @param {Event} _originalEvent - The original event if any.\n   * @returns {Cropper} this\n   */\n  zoom: function zoom(ratio, _originalEvent) {\n    var canvasData = this.canvasData;\n    ratio = Number(ratio);\n    if (ratio < 0) {\n      ratio = 1 / (1 - ratio);\n    } else {\n      ratio = 1 + ratio;\n    }\n    return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n  },\n  /**\n   * Zoom the canvas to an absolute ratio\n   * @param {number} ratio - The target ratio.\n   * @param {Object} pivot - The zoom pivot point coordinate.\n   * @param {Event} _originalEvent - The original event if any.\n   * @returns {Cropper} this\n   */\n  zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n    var options = this.options,\n      canvasData = this.canvasData;\n    var width = canvasData.width,\n      height = canvasData.height,\n      naturalWidth = canvasData.naturalWidth,\n      naturalHeight = canvasData.naturalHeight;\n    ratio = Number(ratio);\n    if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n      var newWidth = naturalWidth * ratio;\n      var newHeight = naturalHeight * ratio;\n      if (dispatchEvent(this.element, EVENT_ZOOM, {\n        ratio: ratio,\n        oldRatio: width / naturalWidth,\n        originalEvent: _originalEvent\n      }) === false) {\n        return this;\n      }\n      if (_originalEvent) {\n        var pointers = this.pointers;\n        var offset = getOffset(this.cropper);\n        var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n          pageX: _originalEvent.pageX,\n          pageY: _originalEvent.pageY\n        };\n\n        // Zoom from the triggering point of the event\n        canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n        canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n      } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n        canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n        canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n      } else {\n        // Zoom from the center of the canvas\n        canvasData.left -= (newWidth - width) / 2;\n        canvasData.top -= (newHeight - height) / 2;\n      }\n      canvasData.width = newWidth;\n      canvasData.height = newHeight;\n      this.renderCanvas(true);\n    }\n    return this;\n  },\n  /**\n   * Rotate the canvas with a relative degree\n   * @param {number} degree - The rotate degree.\n   * @returns {Cropper} this\n   */\n  rotate: function rotate(degree) {\n    return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n  },\n  /**\n   * Rotate the canvas to an absolute degree\n   * @param {number} degree - The rotate degree.\n   * @returns {Cropper} this\n   */\n  rotateTo: function rotateTo(degree) {\n    degree = Number(degree);\n    if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n      this.imageData.rotate = degree % 360;\n      this.renderCanvas(true, true);\n    }\n    return this;\n  },\n  /**\n   * Scale the image on the x-axis.\n   * @param {number} scaleX - The scale ratio on the x-axis.\n   * @returns {Cropper} this\n   */\n  scaleX: function scaleX(_scaleX) {\n    var scaleY = this.imageData.scaleY;\n    return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n  },\n  /**\n   * Scale the image on the y-axis.\n   * @param {number} scaleY - The scale ratio on the y-axis.\n   * @returns {Cropper} this\n   */\n  scaleY: function scaleY(_scaleY) {\n    var scaleX = this.imageData.scaleX;\n    return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n  },\n  /**\n   * Scale the image\n   * @param {number} scaleX - The scale ratio on the x-axis.\n   * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n   * @returns {Cropper} this\n   */\n  scale: function scale(scaleX) {\n    var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n    var imageData = this.imageData;\n    var transformed = false;\n    scaleX = Number(scaleX);\n    scaleY = Number(scaleY);\n    if (this.ready && !this.disabled && this.options.scalable) {\n      if (isNumber(scaleX)) {\n        imageData.scaleX = scaleX;\n        transformed = true;\n      }\n      if (isNumber(scaleY)) {\n        imageData.scaleY = scaleY;\n        transformed = true;\n      }\n      if (transformed) {\n        this.renderCanvas(true, true);\n      }\n    }\n    return this;\n  },\n  /**\n   * Get the cropped area position and size data (base on the original image)\n   * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n   * @returns {Object} The result cropped data.\n   */\n  getData: function getData() {\n    var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var options = this.options,\n      imageData = this.imageData,\n      canvasData = this.canvasData,\n      cropBoxData = this.cropBoxData;\n    var data;\n    if (this.ready && this.cropped) {\n      data = {\n        x: cropBoxData.left - canvasData.left,\n        y: cropBoxData.top - canvasData.top,\n        width: cropBoxData.width,\n        height: cropBoxData.height\n      };\n      var ratio = imageData.width / imageData.naturalWidth;\n      forEach(data, function (n, i) {\n        data[i] = n / ratio;\n      });\n      if (rounded) {\n        // In case rounding off leads to extra 1px in right or bottom border\n        // we should round the top-left corner and the dimension (#343).\n        var bottom = Math.round(data.y + data.height);\n        var right = Math.round(data.x + data.width);\n        data.x = Math.round(data.x);\n        data.y = Math.round(data.y);\n        data.width = right - data.x;\n        data.height = bottom - data.y;\n      }\n    } else {\n      data = {\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n      };\n    }\n    if (options.rotatable) {\n      data.rotate = imageData.rotate || 0;\n    }\n    if (options.scalable) {\n      data.scaleX = imageData.scaleX || 1;\n      data.scaleY = imageData.scaleY || 1;\n    }\n    return data;\n  },\n  /**\n   * Set the cropped area position and size with new data\n   * @param {Object} data - The new data.\n   * @returns {Cropper} this\n   */\n  setData: function setData(data) {\n    var options = this.options,\n      imageData = this.imageData,\n      canvasData = this.canvasData;\n    var cropBoxData = {};\n    if (this.ready && !this.disabled && isPlainObject(data)) {\n      var transformed = false;\n      if (options.rotatable) {\n        if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n          imageData.rotate = data.rotate;\n          transformed = true;\n        }\n      }\n      if (options.scalable) {\n        if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n          imageData.scaleX = data.scaleX;\n          transformed = true;\n        }\n        if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n          imageData.scaleY = data.scaleY;\n          transformed = true;\n        }\n      }\n      if (transformed) {\n        this.renderCanvas(true, true);\n      }\n      var ratio = imageData.width / imageData.naturalWidth;\n      if (isNumber(data.x)) {\n        cropBoxData.left = data.x * ratio + canvasData.left;\n      }\n      if (isNumber(data.y)) {\n        cropBoxData.top = data.y * ratio + canvasData.top;\n      }\n      if (isNumber(data.width)) {\n        cropBoxData.width = data.width * ratio;\n      }\n      if (isNumber(data.height)) {\n        cropBoxData.height = data.height * ratio;\n      }\n      this.setCropBoxData(cropBoxData);\n    }\n    return this;\n  },\n  /**\n   * Get the container size data.\n   * @returns {Object} The result container data.\n   */\n  getContainerData: function getContainerData() {\n    return this.ready ? assign({}, this.containerData) : {};\n  },\n  /**\n   * Get the image position and size data.\n   * @returns {Object} The result image data.\n   */\n  getImageData: function getImageData() {\n    return this.sized ? assign({}, this.imageData) : {};\n  },\n  /**\n   * Get the canvas position and size data.\n   * @returns {Object} The result canvas data.\n   */\n  getCanvasData: function getCanvasData() {\n    var canvasData = this.canvasData;\n    var data = {};\n    if (this.ready) {\n      forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n        data[n] = canvasData[n];\n      });\n    }\n    return data;\n  },\n  /**\n   * Set the canvas position and size with new data.\n   * @param {Object} data - The new canvas data.\n   * @returns {Cropper} this\n   */\n  setCanvasData: function setCanvasData(data) {\n    var canvasData = this.canvasData;\n    var aspectRatio = canvasData.aspectRatio;\n    if (this.ready && !this.disabled && isPlainObject(data)) {\n      if (isNumber(data.left)) {\n        canvasData.left = data.left;\n      }\n      if (isNumber(data.top)) {\n        canvasData.top = data.top;\n      }\n      if (isNumber(data.width)) {\n        canvasData.width = data.width;\n        canvasData.height = data.width / aspectRatio;\n      } else if (isNumber(data.height)) {\n        canvasData.height = data.height;\n        canvasData.width = data.height * aspectRatio;\n      }\n      this.renderCanvas(true);\n    }\n    return this;\n  },\n  /**\n   * Get the crop box position and size data.\n   * @returns {Object} The result crop box data.\n   */\n  getCropBoxData: function getCropBoxData() {\n    var cropBoxData = this.cropBoxData;\n    var data;\n    if (this.ready && this.cropped) {\n      data = {\n        left: cropBoxData.left,\n        top: cropBoxData.top,\n        width: cropBoxData.width,\n        height: cropBoxData.height\n      };\n    }\n    return data || {};\n  },\n  /**\n   * Set the crop box position and size with new data.\n   * @param {Object} data - The new crop box data.\n   * @returns {Cropper} this\n   */\n  setCropBoxData: function setCropBoxData(data) {\n    var cropBoxData = this.cropBoxData;\n    var aspectRatio = this.options.aspectRatio;\n    var widthChanged;\n    var heightChanged;\n    if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n      if (isNumber(data.left)) {\n        cropBoxData.left = data.left;\n      }\n      if (isNumber(data.top)) {\n        cropBoxData.top = data.top;\n      }\n      if (isNumber(data.width) && data.width !== cropBoxData.width) {\n        widthChanged = true;\n        cropBoxData.width = data.width;\n      }\n      if (isNumber(data.height) && data.height !== cropBoxData.height) {\n        heightChanged = true;\n        cropBoxData.height = data.height;\n      }\n      if (aspectRatio) {\n        if (widthChanged) {\n          cropBoxData.height = cropBoxData.width / aspectRatio;\n        } else if (heightChanged) {\n          cropBoxData.width = cropBoxData.height * aspectRatio;\n        }\n      }\n      this.renderCropBox();\n    }\n    return this;\n  },\n  /**\n   * Get a canvas drawn the cropped image.\n   * @param {Object} [options={}] - The config options.\n   * @returns {HTMLCanvasElement} - The result canvas.\n   */\n  getCroppedCanvas: function getCroppedCanvas() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (!this.ready || !window.HTMLCanvasElement) {\n      return null;\n    }\n    var canvasData = this.canvasData;\n    var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n    // Returns the source canvas if it is not cropped.\n    if (!this.cropped) {\n      return source;\n    }\n    var _this$getData = this.getData(options.rounded),\n      initialX = _this$getData.x,\n      initialY = _this$getData.y,\n      initialWidth = _this$getData.width,\n      initialHeight = _this$getData.height;\n    var ratio = source.width / Math.floor(canvasData.naturalWidth);\n    if (ratio !== 1) {\n      initialX *= ratio;\n      initialY *= ratio;\n      initialWidth *= ratio;\n      initialHeight *= ratio;\n    }\n    var aspectRatio = initialWidth / initialHeight;\n    var maxSizes = getAdjustedSizes({\n      aspectRatio: aspectRatio,\n      width: options.maxWidth || Infinity,\n      height: options.maxHeight || Infinity\n    });\n    var minSizes = getAdjustedSizes({\n      aspectRatio: aspectRatio,\n      width: options.minWidth || 0,\n      height: options.minHeight || 0\n    }, 'cover');\n    var _getAdjustedSizes = getAdjustedSizes({\n        aspectRatio: aspectRatio,\n        width: options.width || (ratio !== 1 ? source.width : initialWidth),\n        height: options.height || (ratio !== 1 ? source.height : initialHeight)\n      }),\n      width = _getAdjustedSizes.width,\n      height = _getAdjustedSizes.height;\n    width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n    height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n    var canvas = document.createElement('canvas');\n    var context = canvas.getContext('2d');\n    canvas.width = normalizeDecimalNumber(width);\n    canvas.height = normalizeDecimalNumber(height);\n    context.fillStyle = options.fillColor || 'transparent';\n    context.fillRect(0, 0, width, height);\n    var _options$imageSmoothi = options.imageSmoothingEnabled,\n      imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n      imageSmoothingQuality = options.imageSmoothingQuality;\n    context.imageSmoothingEnabled = imageSmoothingEnabled;\n    if (imageSmoothingQuality) {\n      context.imageSmoothingQuality = imageSmoothingQuality;\n    }\n\n    // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n    var sourceWidth = source.width;\n    var sourceHeight = source.height;\n\n    // Source canvas parameters\n    var srcX = initialX;\n    var srcY = initialY;\n    var srcWidth;\n    var srcHeight;\n\n    // Destination canvas parameters\n    var dstX;\n    var dstY;\n    var dstWidth;\n    var dstHeight;\n    if (srcX <= -initialWidth || srcX > sourceWidth) {\n      srcX = 0;\n      srcWidth = 0;\n      dstX = 0;\n      dstWidth = 0;\n    } else if (srcX <= 0) {\n      dstX = -srcX;\n      srcX = 0;\n      srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n      dstWidth = srcWidth;\n    } else if (srcX <= sourceWidth) {\n      dstX = 0;\n      srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n      dstWidth = srcWidth;\n    }\n    if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n      srcY = 0;\n      srcHeight = 0;\n      dstY = 0;\n      dstHeight = 0;\n    } else if (srcY <= 0) {\n      dstY = -srcY;\n      srcY = 0;\n      srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n      dstHeight = srcHeight;\n    } else if (srcY <= sourceHeight) {\n      dstY = 0;\n      srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n      dstHeight = srcHeight;\n    }\n    var params = [srcX, srcY, srcWidth, srcHeight];\n\n    // Avoid \"IndexSizeError\"\n    if (dstWidth > 0 && dstHeight > 0) {\n      var scale = width / initialWidth;\n      params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n    }\n\n    // All the numerical parameters should be integer for `drawImage`\n    // https://github.com/fengyuanchen/cropper/issues/476\n    context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n      return Math.floor(normalizeDecimalNumber(param));\n    }))));\n    return canvas;\n  },\n  /**\n   * Change the aspect ratio of the crop box.\n   * @param {number} aspectRatio - The new aspect ratio.\n   * @returns {Cropper} this\n   */\n  setAspectRatio: function setAspectRatio(aspectRatio) {\n    var options = this.options;\n    if (!this.disabled && !isUndefined(aspectRatio)) {\n      // 0 -> NaN\n      options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n      if (this.ready) {\n        this.initCropBox();\n        if (this.cropped) {\n          this.renderCropBox();\n        }\n      }\n    }\n    return this;\n  },\n  /**\n   * Change the drag mode.\n   * @param {string} mode - The new drag mode.\n   * @returns {Cropper} this\n   */\n  setDragMode: function setDragMode(mode) {\n    var options = this.options,\n      dragBox = this.dragBox,\n      face = this.face;\n    if (this.ready && !this.disabled) {\n      var croppable = mode === DRAG_MODE_CROP;\n      var movable = options.movable && mode === DRAG_MODE_MOVE;\n      mode = croppable || movable ? mode : DRAG_MODE_NONE;\n      options.dragMode = mode;\n      setData(dragBox, DATA_ACTION, mode);\n      toggleClass(dragBox, CLASS_CROP, croppable);\n      toggleClass(dragBox, CLASS_MOVE, movable);\n      if (!options.cropBoxMovable) {\n        // Sync drag mode to crop box when it is not movable\n        setData(face, DATA_ACTION, mode);\n        toggleClass(face, CLASS_CROP, croppable);\n        toggleClass(face, CLASS_MOVE, movable);\n      }\n    }\n    return this;\n  }\n};\n\nvar AnotherCropper = WINDOW.Cropper;\nvar Cropper = /*#__PURE__*/function () {\n  /**\n   * Create a new Cropper.\n   * @param {Element} element - The target element for cropping.\n   * @param {Object} [options={}] - The configuration options.\n   */\n  function Cropper(element) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    _classCallCheck(this, Cropper);\n    if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n      throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n    }\n    this.element = element;\n    this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n    this.cropped = false;\n    this.disabled = false;\n    this.pointers = {};\n    this.ready = false;\n    this.reloading = false;\n    this.replaced = false;\n    this.sized = false;\n    this.sizing = false;\n    this.init();\n  }\n  return _createClass(Cropper, [{\n    key: \"init\",\n    value: function init() {\n      var element = this.element;\n      var tagName = element.tagName.toLowerCase();\n      var url;\n      if (element[NAMESPACE]) {\n        return;\n      }\n      element[NAMESPACE] = this;\n      if (tagName === 'img') {\n        this.isImg = true;\n\n        // e.g.: \"img/picture.jpg\"\n        url = element.getAttribute('src') || '';\n        this.originalUrl = url;\n\n        // Stop when it's a blank image\n        if (!url) {\n          return;\n        }\n\n        // e.g.: \"https://example.com/img/picture.jpg\"\n        url = element.src;\n      } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n        url = element.toDataURL();\n      }\n      this.load(url);\n    }\n  }, {\n    key: \"load\",\n    value: function load(url) {\n      var _this = this;\n      if (!url) {\n        return;\n      }\n      this.url = url;\n      this.imageData = {};\n      var element = this.element,\n        options = this.options;\n      if (!options.rotatable && !options.scalable) {\n        options.checkOrientation = false;\n      }\n\n      // Only IE10+ supports Typed Arrays\n      if (!options.checkOrientation || !window.ArrayBuffer) {\n        this.clone();\n        return;\n      }\n\n      // Detect the mime type of the image directly if it is a Data URL\n      if (REGEXP_DATA_URL.test(url)) {\n        // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n        if (REGEXP_DATA_URL_JPEG.test(url)) {\n          this.read(dataURLToArrayBuffer(url));\n        } else {\n          // Only a JPEG image may contains Exif Orientation information,\n          // the rest types of Data URLs are not necessary to check orientation at all.\n          this.clone();\n        }\n        return;\n      }\n\n      // 1. Detect the mime type of the image by a XMLHttpRequest.\n      // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n      var xhr = new XMLHttpRequest();\n      var clone = this.clone.bind(this);\n      this.reloading = true;\n      this.xhr = xhr;\n\n      // 1. Cross origin requests are only supported for protocol schemes:\n      // http, https, data, chrome, chrome-extension.\n      // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n      // in some browsers as IE11 and Safari.\n      xhr.onabort = clone;\n      xhr.onerror = clone;\n      xhr.ontimeout = clone;\n      xhr.onprogress = function () {\n        // Abort the request directly if it not a JPEG image for better performance\n        if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n          xhr.abort();\n        }\n      };\n      xhr.onload = function () {\n        _this.read(xhr.response);\n      };\n      xhr.onloadend = function () {\n        _this.reloading = false;\n        _this.xhr = null;\n      };\n\n      // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n      if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n        url = addTimestamp(url);\n      }\n\n      // The third parameter is required for avoiding side-effect (#682)\n      xhr.open('GET', url, true);\n      xhr.responseType = 'arraybuffer';\n      xhr.withCredentials = element.crossOrigin === 'use-credentials';\n      xhr.send();\n    }\n  }, {\n    key: \"read\",\n    value: function read(arrayBuffer) {\n      var options = this.options,\n        imageData = this.imageData;\n\n      // Reset the orientation value to its default value 1\n      // as some iOS browsers will render image with its orientation\n      var orientation = resetAndGetOrientation(arrayBuffer);\n      var rotate = 0;\n      var scaleX = 1;\n      var scaleY = 1;\n      if (orientation > 1) {\n        // Generate a new URL which has the default orientation value\n        this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n        var _parseOrientation = parseOrientation(orientation);\n        rotate = _parseOrientation.rotate;\n        scaleX = _parseOrientation.scaleX;\n        scaleY = _parseOrientation.scaleY;\n      }\n      if (options.rotatable) {\n        imageData.rotate = rotate;\n      }\n      if (options.scalable) {\n        imageData.scaleX = scaleX;\n        imageData.scaleY = scaleY;\n      }\n      this.clone();\n    }\n  }, {\n    key: \"clone\",\n    value: function clone() {\n      var element = this.element,\n        url = this.url;\n      var crossOrigin = element.crossOrigin;\n      var crossOriginUrl = url;\n      if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n        if (!crossOrigin) {\n          crossOrigin = 'anonymous';\n        }\n\n        // Bust cache when there is not a \"crossOrigin\" property (#519)\n        crossOriginUrl = addTimestamp(url);\n      }\n      this.crossOrigin = crossOrigin;\n      this.crossOriginUrl = crossOriginUrl;\n      var image = document.createElement('img');\n      if (crossOrigin) {\n        image.crossOrigin = crossOrigin;\n      }\n      image.src = crossOriginUrl || url;\n      image.alt = element.alt || 'The image to crop';\n      this.image = image;\n      image.onload = this.start.bind(this);\n      image.onerror = this.stop.bind(this);\n      addClass(image, CLASS_HIDE);\n      element.parentNode.insertBefore(image, element.nextSibling);\n    }\n  }, {\n    key: \"start\",\n    value: function start() {\n      var _this2 = this;\n      var image = this.image;\n      image.onload = null;\n      image.onerror = null;\n      this.sizing = true;\n\n      // Match all browsers that use WebKit as the layout engine in iOS devices,\n      // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n      var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n      var done = function done(naturalWidth, naturalHeight) {\n        assign(_this2.imageData, {\n          naturalWidth: naturalWidth,\n          naturalHeight: naturalHeight,\n          aspectRatio: naturalWidth / naturalHeight\n        });\n        _this2.initialImageData = assign({}, _this2.imageData);\n        _this2.sizing = false;\n        _this2.sized = true;\n        _this2.build();\n      };\n\n      // Most modern browsers (excepts iOS WebKit)\n      if (image.naturalWidth && !isIOSWebKit) {\n        done(image.naturalWidth, image.naturalHeight);\n        return;\n      }\n      var sizingImage = document.createElement('img');\n      var body = document.body || document.documentElement;\n      this.sizingImage = sizingImage;\n      sizingImage.onload = function () {\n        done(sizingImage.width, sizingImage.height);\n        if (!isIOSWebKit) {\n          body.removeChild(sizingImage);\n        }\n      };\n      sizingImage.src = image.src;\n\n      // iOS WebKit will convert the image automatically\n      // with its orientation once append it into DOM (#279)\n      if (!isIOSWebKit) {\n        sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n        body.appendChild(sizingImage);\n      }\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      var image = this.image;\n      image.onload = null;\n      image.onerror = null;\n      image.parentNode.removeChild(image);\n      this.image = null;\n    }\n  }, {\n    key: \"build\",\n    value: function build() {\n      if (!this.sized || this.ready) {\n        return;\n      }\n      var element = this.element,\n        options = this.options,\n        image = this.image;\n\n      // Create cropper elements\n      var container = element.parentNode;\n      var template = document.createElement('div');\n      template.innerHTML = TEMPLATE;\n      var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n      var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n      var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n      var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n      var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n      this.container = container;\n      this.cropper = cropper;\n      this.canvas = canvas;\n      this.dragBox = dragBox;\n      this.cropBox = cropBox;\n      this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n      this.face = face;\n      canvas.appendChild(image);\n\n      // Hide the original image\n      addClass(element, CLASS_HIDDEN);\n\n      // Inserts the cropper after to the current image\n      container.insertBefore(cropper, element.nextSibling);\n\n      // Show the hidden image\n      removeClass(image, CLASS_HIDE);\n      this.initPreview();\n      this.bind();\n      options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n      options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n      options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n      addClass(cropBox, CLASS_HIDDEN);\n      if (!options.guides) {\n        addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n      }\n      if (!options.center) {\n        addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n      }\n      if (options.background) {\n        addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n      }\n      if (!options.highlight) {\n        addClass(face, CLASS_INVISIBLE);\n      }\n      if (options.cropBoxMovable) {\n        addClass(face, CLASS_MOVE);\n        setData(face, DATA_ACTION, ACTION_ALL);\n      }\n      if (!options.cropBoxResizable) {\n        addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n        addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n      }\n      this.render();\n      this.ready = true;\n      this.setDragMode(options.dragMode);\n      if (options.autoCrop) {\n        this.crop();\n      }\n      this.setData(options.data);\n      if (isFunction(options.ready)) {\n        addListener(element, EVENT_READY, options.ready, {\n          once: true\n        });\n      }\n      dispatchEvent(element, EVENT_READY);\n    }\n  }, {\n    key: \"unbuild\",\n    value: function unbuild() {\n      if (!this.ready) {\n        return;\n      }\n      this.ready = false;\n      this.unbind();\n      this.resetPreview();\n      var parentNode = this.cropper.parentNode;\n      if (parentNode) {\n        parentNode.removeChild(this.cropper);\n      }\n      removeClass(this.element, CLASS_HIDDEN);\n    }\n  }, {\n    key: \"uncreate\",\n    value: function uncreate() {\n      if (this.ready) {\n        this.unbuild();\n        this.ready = false;\n        this.cropped = false;\n      } else if (this.sizing) {\n        this.sizingImage.onload = null;\n        this.sizing = false;\n        this.sized = false;\n      } else if (this.reloading) {\n        this.xhr.onabort = null;\n        this.xhr.abort();\n      } else if (this.image) {\n        this.stop();\n      }\n    }\n\n    /**\n     * Get the no conflict cropper class.\n     * @returns {Cropper} The cropper class.\n     */\n  }], [{\n    key: \"noConflict\",\n    value: function noConflict() {\n      window.Cropper = AnotherCropper;\n      return Cropper;\n    }\n\n    /**\n     * Change the default options.\n     * @param {Object} options - The new default options.\n     */\n  }, {\n    key: \"setDefaults\",\n    value: function setDefaults(options) {\n      assign(DEFAULTS, isPlainObject(options) && options);\n    }\n  }]);\n}();\nassign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\nexport { Cropper as default };\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-11-18 09:51:53\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-02-06 15:28:05\n * @项目的路径: \\CMS-components\\packages\\components\\img-upload\\src\\img-upload.ts\n * @描述: img-upload 组件\n */\nimport { type PropType, type ExtractPublicPropTypes } from \"vue\";\nimport { type UploadProps } from \"element-plus\";\nimport type Cropper from \"cropperjs\";\nimport { buildProps } from \"@yujinjin/cms-components-utils\";\nimport { type NotReadonly } from \"../../types\";\n\nexport const imgUploadProps = buildProps({\n    // 上传属性配置选项，具体见（element-plus upload文档）\n    uploadProps: {\n        type: Object as PropType<Partial<UploadProps>>\n    },\n    // 图片裁剪的配置选项，具体见（cropperjs文档）, 如果需要裁剪一次只能上传一张图片\n    cropperProps: {\n        type: [Boolean, Object] as PropType<boolean | Cropper.Options>,\n        default: false\n    },\n    // 上传图片的最大尺寸（单位KB）\n    maxSize: {\n        type: Number,\n        default: 2048\n    },\n    // 分隔符，modelValue可能是多个图片的路径用\"|\"隔开的字符串\n    separator: {\n        type: String,\n        default: \"|\"\n    },\n    // 上传图片的接口回调函数(必传)\n    uploadRequest: {\n        type: Function as PropType<(file: File) => Promise<string> | string>,\n        required: true\n    }\n});\n\nexport type ImgUploadProps = NotReadonly<ExtractPublicPropTypes<typeof imgUploadProps>>;\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-11-18 09:52:09\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-16 17:36:59\n * @项目的路径: \\CMS-components\\packages\\components\\img-upload\\src\\img-upload.vue\n * @描述: 图片上传支持剪切的组件\n-->\n<template>\n    <div class=\"img-upload\">\n        <el-upload v-bind=\"uploadInnerProps\" ref=\"updloadRef\" v-model:file-list=\"fileList\">\n            <template #default>\n                <slot><el-button type=\"primary\">点击上传</el-button></slot>\n            </template>\n            <template v-if=\"maxSize > 0\" #tip>\n                <div class=\"el-upload__tip\">只能上传图片文件，且不超过{{ maxSize > 1024 ? numberFormat(maxSize / 1024, 1) + \"M\" : maxSize + \"KB\" }}</div>\n            </template>\n        </el-upload>\n        <el-dialog v-model=\"isShowCropperDialog\" class=\"cms-cropper-dialog\" title=\"图片裁剪\" :append-to-body=\"true\" :close-on-click-modal=\"false\" width=\"1000px\">\n            <div class=\"cms-cropper-panel\">\n                <div class=\"cropper-box\">\n                    <img ref=\"cropperImgRef\" :src=\"cropperImg\" />\n                </div>\n                <div class=\"preview-box\">\n                    <div class=\"tips-text\">图片预览：</div>\n                    <div ref=\"previewImgRef\" class=\"preview-img-box\"></div>\n                </div>\n            </div>\n            <template #footer>\n                <div class=\"dialog-footer\">\n                    <el-button @click=\"closeCroppDialog()\">取消</el-button>\n                    <el-button @click=\"resetCropper\">复位</el-button>\n                    <el-button @click=\"rotateCropper\">旋转</el-button>\n                    <el-button @click=\"changeDirectionCropper\">换向</el-button>\n                    <el-button type=\"primary\" @click=\"saveCropper\">确定</el-button>\n                </div>\n            </template>\n        </el-dialog>\n    </div>\n</template>\n<script setup lang=\"ts\">\nimport { type Ref, type PropType, ref, watch, nextTick } from \"vue\";\nimport {\n    type UploadProps,\n    type UploadRequestOptions,\n    type UploadFile,\n    type UploadFiles,\n    type UploadUserFile,\n    type UploadRawFile,\n    ElDialog,\n    ElMessage,\n    ElMessageBox,\n    ElUpload,\n    ElButton,\n    genFileId\n} from \"element-plus\";\nimport { numberFormat } from \"@yujinjin/utils\";\nimport Cropper from \"cropperjs\";\nimport { imgUploadProps } from \"./img-upload\";\n\ndefineOptions({\n    name: \"ImgUpload\"\n});\n\nconst props = defineProps(imgUploadProps);\n\n// 上传的组件的值\nconst modelValue = defineModel({ type: [String, Array] as PropType<string | string[]> });\n\n// 上传组件内部属性\nconst uploadInnerProps: Ref<Partial<UploadProps>> = ref({});\n\n// 当前文件上传列表\nconst fileList: Ref<UploadUserFile[]> = ref([]);\n\n// 是否显示裁剪弹窗\nconst isShowCropperDialog: Ref<boolean> = ref(false);\n\nconst updloadRef = ref<InstanceType<typeof ElUpload>>();\n\n// 剪切图片ref\nconst cropperImgRef: Ref<HTMLImageElement | null> = ref(null);\n\n// 预览图片ref\nconst previewImgRef: Ref<HTMLDivElement | null> = ref(null);\n\n// 上传的图片地址\nconst cropperImg: Ref<string> = ref(\"\");\n\n// 图片裁剪实例化对象\nlet cropperInstance: Cropper;\n\n// ModelValue的string格式，解决双向绑定时与fileList的值并不是同样的数据而产生的多次修改ModelValue值\nlet newModelValue = \"\";\n\n// 剪切图片的方向\nlet directionCropper = false;\n\n// 把当前modelValue转换成upload组件所用的文件格式列表\nconst generateFileList = function () {\n    if (!modelValue.value) {\n        fileList.value = [];\n    } else if (Array.isArray(modelValue.value)) {\n        fileList.value = modelValue.value.map(item => ({ name: item.substring(item.lastIndexOf(\"/\") + 1), url: item }));\n    } else if (uploadInnerProps.value.limit === 1) {\n        fileList.value = [{ name: modelValue.value.substring(modelValue.value.lastIndexOf(\"/\") + 1), url: modelValue.value }];\n    } else {\n        fileList.value = modelValue.value.split(props.separator).map(url => ({ name: url.substring(url.lastIndexOf(\"/\") + 1), url }));\n    }\n};\n\n// 显示剪切图片弹窗\nconst showCroppDialogHandle = async function () {\n    isShowCropperDialog.value = true;\n    await nextTick();\n    if (cropperInstance) {\n        cropperInstance.replace(cropperImg.value);\n    } else {\n        cropperInstance = new Cropper(\n            cropperImgRef.value!,\n            Object.assign(\n                {\n                    viewMode: 1, // 0:无限制;1:将裁剪框限制为不超过画布的大小;2:限制最小画布尺寸以适应容器。如果画布和容器的比例不同，则最小画布将在其中一个维度中被额外的空格包围。3:限制最小画布尺寸以填充容器。如果画布和容器的比例不同，则容器将无法将整个画布适合其中一个尺寸。\n                    aspectRatio: 1 / 1, // 默认比例\n                    preview: previewImgRef.value, // 预览视图\n                    guides: false, // 裁剪框的虚线(九宫格)\n                    autoCropArea: 0.8, // 0-1之间的数值，定义自动剪裁区域的大小，默认0.8\n                    movable: false, // 是否允许移动图片\n                    dragCrop: true, // 是否允许移除当前的剪裁框，并通过拖动来新建一个剪裁框区域\n                    cropBoxMovable: true, // 是否允许移动剪裁框\n                    resizable: true, // 是否允许改变裁剪框的大小\n                    zoomable: false, // 是否允许缩放图片大小\n                    mouseWheelZoom: true, // 是否允许通过鼠标滚轮来缩放图片\n                    touchDragZoom: true, // 是否允许通过触摸移动来缩放图片\n                    rotatable: true // 是否允许旋转图片\n                },\n                props.cropperProps\n            ) as Cropper.Options\n        );\n    }\n};\n\n// 开始剪切操作\nconst startCroppHandle = async function (raw: UploadRawFile) {\n    const imgFileReader = new FileReader();\n    imgFileReader.onload = e => {\n        cropperImg.value = e.target!.result as string;\n        showCroppDialogHandle();\n    };\n    imgFileReader.readAsDataURL(raw!);\n};\n\n// 关闭裁剪弹窗\nconst closeCroppDialog = function () {\n    if (cropperInstance) {\n        cropperInstance.destroy();\n    }\n    isShowCropperDialog.value = false;\n};\n\n// 图片上传API\nconst imageUploadApi = async function (file: File | UploadRawFile) {\n    const img = (await props.uploadRequest(file)) as string;\n    if (uploadInnerProps.value.limit === 1) {\n        fileList.value = [{ name: img.substring(img.lastIndexOf(\"/\") + 1), url: img }];\n    } else if ((file as UploadRawFile).uid && fileList.value.some(item => item.uid === (file as UploadRawFile).uid)) {\n        const findFile: UploadUserFile = fileList.value.find(item => item.uid === (file as UploadRawFile).uid)!;\n        findFile.name = img.substring(img.lastIndexOf(\"/\") + 1);\n        findFile.url = img;\n    } else {\n        fileList.value.splice(0, 0, { name: img.substring(img.lastIndexOf(\"/\") + 1), url: img });\n    }\n};\n\n// 文件列表变化\nconst fileListChange = function () {\n    if (Array.isArray(modelValue.value)) {\n        newModelValue = JSON.stringify(fileList.value.map(item => item.url));\n        modelValue.value = JSON.parse(newModelValue);\n    } else {\n        newModelValue = fileList.value.map(item => item.url).join(props.separator);\n        modelValue.value = newModelValue;\n    }\n};\n\n// 复位\nconst resetCropper = function () {\n    cropperInstance?.reset();\n};\n\n// 旋转\nconst rotateCropper = function () {\n    cropperInstance?.rotate(45);\n};\n// 换向\nconst changeDirectionCropper = function () {\n    cropperInstance?.scaleX(directionCropper ? -1 : 1);\n    directionCropper = !directionCropper;\n};\n\n// 保存剪切的图\nconst saveCropper = function () {\n    cropperInstance.getCroppedCanvas().toBlob(async blob => {\n        if (blob!.size / 1024 > props.maxSize) {\n            ElMessage.error(\"文件大小超出限制！\");\n            return;\n        }\n        await imageUploadApi(new File([blob!], Date.now() + \".jpg\", { type: \"image/jpeg\", lastModified: Date.now() }));\n        fileListChange();\n        closeCroppDialog();\n    }, \"image/jpeg\");\n};\n\n// 默认上传属性\nconst defaultUploadProps = {\n    action: \"\", // 图片上传地址\n    autoUpload: true, // 默认自动上传\n    // 覆盖默认的 Xhr 行为，允许自行实现上传文件的请求\n    httpRequest: function (options: UploadRequestOptions): Promise<void> {\n        return imageUploadApi(options.file).then(() => {\n            fileListChange();\n            return;\n        });\n    },\n    // 图片上传变化\n    onChange: function (file: UploadFile, files: UploadFiles) {\n        if (props.cropperProps) {\n            // 由于element plus upload组件上传之后会自动添加一个预览文件。\n            // 这里是自定义实现的文件上传请求，所以必须是上传完文件之后才展示处理， 这里删除掉\n            files.pop();\n            startCroppHandle(file.raw!);\n        }\n    },\n    // 图片上传前操作\n    beforeUpload: async function (file) {\n        if (file.size / 1024 > props.maxSize) {\n            ElMessage.error(\"文件大小超出限制！\");\n            return false;\n        }\n        return true;\n    },\n    // 文件超出个数限制时的钩子\n    onExceed(files: File[]) {\n        if (uploadInnerProps.value.limit! > 1) {\n            ElMessageBox.alert(\"您最多只能上传\" + uploadInnerProps.value.limit + \"个图片!\", \"上传图片\", {\n                confirmButtonText: \"确定\",\n                type: \"warning\"\n            });\n        } else {\n            updloadRef.value!.clearFiles();\n            const file = files[0] as UploadRawFile;\n            file.uid = genFileId();\n            updloadRef.value!.handleStart(file);\n            if (uploadInnerProps.value.autoUpload !== false) {\n                updloadRef.value!.submit();\n            }\n        }\n    },\n    listType: \"picture\",\n    onRemove: function (uploadFile: UploadFile, uploadFiles: UploadFiles) {\n        fileList.value = uploadFiles;\n        fileListChange();\n    },\n    accept: \"image/*\",\n    multiple: false\n};\n\nwatch(\n    () => [props.uploadProps, props.cropperProps],\n    () => {\n        uploadInnerProps.value = Object.assign({}, defaultUploadProps, props.uploadProps, {\n            autoUpload: props.cropperProps || props.uploadProps?.autoUpload === false ? false : true,\n            multiple: props.cropperProps || props.uploadProps?.multiple !== true ? false : true\n        });\n    },\n    { immediate: true, deep: true }\n);\n\nwatch(\n    () => modelValue.value,\n    value => {\n        if ((!value && !newModelValue) || value === newModelValue || JSON.stringify(value) === newModelValue) {\n            return;\n        }\n        generateFileList();\n    },\n    {\n        immediate: true,\n        deep: true\n    }\n);\n</script>\n","/** 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.<string>} 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.<string>} 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.<!diff_match_patch.Diff>} 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: <del>abcxxx</del><ins>xxxdef</ins>\n  //   -> <del>abc</del>xxx<ins>def</ins>\n  // e.g: <del>xxxabc</del><ins>defxxx</ins>\n  //   -> <ins>def</ins>xxx<del>abc</del>\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 c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {!Array.<!diff_match_patch.Diff>} 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: A<ins>BA</ins>C -> <ins>AB</ins>AC\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) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\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) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\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 {}\nfunction escapeText(text) {\n  return text.replace(/[&<>\"']/g, s => {\n    // https://lodash.com/docs#escape\n    const entityMap = {\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      \"'\": '&#39;'\n    };\n    return entityMap[s];\n  });\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 <a> 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 `<a/>`.\n  // The reason is Safari pushes down `<a/>` 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  //    <a><span class=\"ql-cursor\">\\uFEFF{I}</span></a>\n  // When typing a char \"x\", `<a/>` will be pushed down inside the `<span>` first:\n  //    <span class=\"ql-cursor\"><a>\\uFEFF{I}</a></span>\n  // And then \"x\" will be inserted after `<a/>`:\n  //    <span class=\"ql-cursor\"><a>\\uFEFF</a>d{I}</span>\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 `</li></${endTag}>`;\n    }\n    return `</li></${endTag}>${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}><li${attribute}>${convertHTML(child, offset, length)}${convertListHTML(rest, indent, types)}`;\n    }\n    return `<${tag}><li>${convertListHTML(items, lastIndent + 1, types)}`;\n  }\n  const previousType = types[types.length - 1];\n  if (indent === lastIndent && type === previousType) {\n    return `</li><li${attribute}>${convertHTML(child, offset, length)}${convertListHTML(rest, indent, types)}`;\n  }\n  const [endTag] = getListType(types.pop());\n  return `</li></${endTag}>${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    return escapeText(blot.value().slice(index, index + length));\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 === '<table') {\n      return `<table style=\"border: 1px solid #000;\">${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.2\" === 'undefined' ? 'dev' : \"2.0.2\";\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}<p><br></p>`,\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 `<pre>\\n${escapeText(this.code(index, length))}\\n</pre>`;\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 <o:p>&nbsp;</o:p>\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    const replacer = (collapse, match) => {\n      const replaced = match.replace(/[^\\u00a0]/g, ''); // \\u00a0 is nbsp;\n      return replaced.length < 1 && collapse ? ' ' : replaced;\n    };\n    text = text.replace(/\\r\\n/g, ' ').replace(/\\n/g, ' ');\n    text = text.replace(/\\s\\s+/g, replacer.bind(replacer, true)); // collapse whitespace\n    if (node.previousSibling == null && node.parentElement != null && isLine(node.parentElement, scroll) || node.previousSibling instanceof Element && isLine(node.previousSibling, scroll)) {\n      text = text.replace(/^\\s+/, replacer.bind(replacer, false));\n    }\n    if (node.nextSibling == null && node.parentElement != null && isLine(node.parentElement, scroll) || node.nextSibling instanceof Element && isLine(node.nextSibling, scroll)) {\n      text = text.replace(/\\s+$/, replacer.bind(replacer, false));\n    }\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// <ANY_PARENT>[CARET]<div class=\"ql-ui\"></div>[CONTENT]</ANY_PARENT>\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 `<span>${formula}</span>`;\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 `<a href=\"${video}\">${video}</a>`;\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 `<pre data-language=\"${language}\">\\n${escapeText(this.code(index, length))}\\n</pre>`;\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 = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"3\\\" x2=\\\"15\\\" y1=\\\"9\\\" y2=\\\"9\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"3\\\" x2=\\\"13\\\" y1=\\\"14\\\" y2=\\\"14\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"3\\\" x2=\\\"9\\\" y1=\\\"4\\\" y2=\\\"4\\\"/></svg>\";\nconst alignCenterIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"15\\\" x2=\\\"3\\\" y1=\\\"9\\\" y2=\\\"9\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"14\\\" x2=\\\"4\\\" y1=\\\"14\\\" y2=\\\"14\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"12\\\" x2=\\\"6\\\" y1=\\\"4\\\" y2=\\\"4\\\"/></svg>\";\nconst alignRightIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"15\\\" x2=\\\"3\\\" y1=\\\"9\\\" y2=\\\"9\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"15\\\" x2=\\\"5\\\" y1=\\\"14\\\" y2=\\\"14\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"15\\\" x2=\\\"9\\\" y1=\\\"4\\\" y2=\\\"4\\\"/></svg>\";\nconst alignJustifyIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"15\\\" x2=\\\"3\\\" y1=\\\"9\\\" y2=\\\"9\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"15\\\" x2=\\\"3\\\" y1=\\\"14\\\" y2=\\\"14\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"15\\\" x2=\\\"3\\\" y1=\\\"4\\\" y2=\\\"4\\\"/></svg>\";\nconst backgroundIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><g class=\\\"ql-fill ql-color-label\\\"><polygon points=\\\"6 6.868 6 6 5 6 5 7 5.942 7 6 6.868\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"4\\\" y=\\\"4\\\"/><polygon points=\\\"6.817 5 6 5 6 6 6.38 6 6.817 5\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"2\\\" y=\\\"6\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"3\\\" y=\\\"5\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"4\\\" y=\\\"7\\\"/><polygon points=\\\"4 11.439 4 11 3 11 3 12 3.755 12 4 11.439\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"2\\\" y=\\\"12\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"2\\\" y=\\\"9\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"2\\\" y=\\\"15\\\"/><polygon points=\\\"4.63 10 4 10 4 11 4.192 11 4.63 10\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"3\\\" y=\\\"8\\\"/><path d=\\\"M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z\\\"/><path d=\\\"M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z\\\"/><path d=\\\"M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"12\\\" y=\\\"2\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"11\\\" y=\\\"3\\\"/><path d=\\\"M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"2\\\" y=\\\"3\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"6\\\" y=\\\"2\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"3\\\" y=\\\"2\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"5\\\" y=\\\"3\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"9\\\" y=\\\"2\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"15\\\" y=\\\"14\\\"/><polygon points=\\\"13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"13\\\" y=\\\"7\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"15\\\" y=\\\"5\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"14\\\" y=\\\"6\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"15\\\" y=\\\"8\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"14\\\" y=\\\"9\\\"/><path d=\\\"M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"14\\\" y=\\\"3\\\"/><polygon points=\\\"12 6.868 12 6 11.62 6 12 6.868\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"15\\\" y=\\\"2\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"12\\\" y=\\\"5\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"13\\\" y=\\\"4\\\"/><polygon points=\\\"12.933 9 13 9 13 8 12.495 8 12.933 9\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"9\\\" y=\\\"14\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"8\\\" y=\\\"15\\\"/><path d=\\\"M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"5\\\" y=\\\"15\\\"/><path d=\\\"M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"11\\\" y=\\\"15\\\"/><path d=\\\"M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"14\\\" y=\\\"15\\\"/><rect height=\\\"1\\\" width=\\\"1\\\" x=\\\"15\\\" y=\\\"11\\\"/></g><polyline class=\\\"ql-stroke\\\" points=\\\"5.5 13 9 5 12.5 13\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"11.63\\\" x2=\\\"6.38\\\" y1=\\\"11\\\" y2=\\\"11\\\"/></svg>\";\nconst blockquoteIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><rect class=\\\"ql-fill ql-stroke\\\" height=\\\"3\\\" width=\\\"3\\\" x=\\\"4\\\" y=\\\"5\\\"/><rect class=\\\"ql-fill ql-stroke\\\" height=\\\"3\\\" width=\\\"3\\\" x=\\\"11\\\" y=\\\"5\\\"/><path class=\\\"ql-even ql-fill ql-stroke\\\" d=\\\"M7,8c0,4.031-3,5-3,5\\\"/><path class=\\\"ql-even ql-fill ql-stroke\\\" d=\\\"M14,8c0,4.031-3,5-3,5\\\"/></svg>\";\nconst boldIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><path class=\\\"ql-stroke\\\" d=\\\"M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z\\\"/><path class=\\\"ql-stroke\\\" d=\\\"M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z\\\"/></svg>\";\nconst cleanIcon = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"5\\\" x2=\\\"13\\\" y1=\\\"3\\\" y2=\\\"3\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"6\\\" x2=\\\"9.35\\\" y1=\\\"12\\\" y2=\\\"3\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"11\\\" x2=\\\"15\\\" y1=\\\"11\\\" y2=\\\"15\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"15\\\" x2=\\\"11\\\" y1=\\\"11\\\" y2=\\\"15\\\"/><rect class=\\\"ql-fill\\\" height=\\\"1\\\" rx=\\\"0.5\\\" ry=\\\"0.5\\\" width=\\\"7\\\" x=\\\"2\\\" y=\\\"14\\\"/></svg>\";\nconst codeIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><polyline class=\\\"ql-even ql-stroke\\\" points=\\\"5 7 3 9 5 11\\\"/><polyline class=\\\"ql-even ql-stroke\\\" points=\\\"13 7 15 9 13 11\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"10\\\" x2=\\\"8\\\" y1=\\\"5\\\" y2=\\\"13\\\"/></svg>\";\nconst colorIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-color-label ql-stroke ql-transparent\\\" x1=\\\"3\\\" x2=\\\"15\\\" y1=\\\"15\\\" y2=\\\"15\\\"/><polyline class=\\\"ql-stroke\\\" points=\\\"5.5 11 9 3 12.5 11\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"11.63\\\" x2=\\\"6.38\\\" y1=\\\"9\\\" y2=\\\"9\\\"/></svg>\";\nconst directionLeftToRightIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"3 11 5 9 3 7 3 11\\\"/><line class=\\\"ql-stroke ql-fill\\\" x1=\\\"15\\\" x2=\\\"11\\\" y1=\\\"4\\\" y2=\\\"4\\\"/><path class=\\\"ql-fill\\\" d=\\\"M11,3a3,3,0,0,0,0,6h1V3H11Z\\\"/><rect class=\\\"ql-fill\\\" height=\\\"11\\\" width=\\\"1\\\" x=\\\"11\\\" y=\\\"4\\\"/><rect class=\\\"ql-fill\\\" height=\\\"11\\\" width=\\\"1\\\" x=\\\"13\\\" y=\\\"4\\\"/></svg>\";\nconst directionRightToLeftIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"15 12 13 10 15 8 15 12\\\"/><line class=\\\"ql-stroke ql-fill\\\" x1=\\\"9\\\" x2=\\\"5\\\" y1=\\\"4\\\" y2=\\\"4\\\"/><path class=\\\"ql-fill\\\" d=\\\"M5,3A3,3,0,0,0,5,9H6V3H5Z\\\"/><rect class=\\\"ql-fill\\\" height=\\\"11\\\" width=\\\"1\\\" x=\\\"5\\\" y=\\\"4\\\"/><rect class=\\\"ql-fill\\\" height=\\\"11\\\" width=\\\"1\\\" x=\\\"7\\\" y=\\\"4\\\"/></svg>\";\nconst formulaIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><path class=\\\"ql-fill\\\" d=\\\"M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z\\\"/><rect class=\\\"ql-fill\\\" height=\\\"1.6\\\" rx=\\\"0.8\\\" ry=\\\"0.8\\\" width=\\\"5\\\" x=\\\"5.15\\\" y=\\\"6.2\\\"/><path class=\\\"ql-fill\\\" d=\\\"M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z\\\"/></svg>\";\nconst headerIcon = \"<svg viewBox=\\\"0 0 18 18\\\"><path class=\\\"ql-fill\\\" d=\\\"M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z\\\"/></svg>\";\nconst header2Icon = \"<svg viewBox=\\\"0 0 18 18\\\"><path class=\\\"ql-fill\\\" d=\\\"M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z\\\"/></svg>\";\nconst header3Icon = \"<svg viewBox=\\\"0 0 18 18\\\"><path class=\\\"ql-fill\\\" d=\\\"M16.65186,12.30664a2.6742,2.6742,0,0,1-2.915,2.68457,3.96592,3.96592,0,0,1-2.25537-.6709.56007.56007,0,0,1-.13232-.83594L11.64648,13c.209-.34082.48389-.36328.82471-.1543a2.32654,2.32654,0,0,0,1.12256.33008c.71484,0,1.12207-.35156,1.12207-.78125,0-.61523-.61621-.86816-1.46338-.86816H13.2085a.65159.65159,0,0,1-.68213-.41895l-.05518-.10937a.67114.67114,0,0,1,.14307-.78125l.71533-.86914a8.55289,8.55289,0,0,1,.68213-.7373V8.58887a3.93913,3.93913,0,0,1-.748.05469H11.9873a.54085.54085,0,0,1-.605-.60547V7.59863a.54085.54085,0,0,1,.605-.60547h3.75146a.53773.53773,0,0,1,.60547.59375v.17676a1.03723,1.03723,0,0,1-.27539.748L14.74854,10.0293A2.31132,2.31132,0,0,1,16.65186,12.30664ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z\\\"/></svg>\";\nconst header4Icon = \"<svg viewBox=\\\"0 0 18 18\\\"><path class=\\\"ql-fill\\\" d=\\\"M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm7.05371,7.96582v.38477c0,.39648-.165.60547-.46191.60547h-.47314v1.29785a.54085.54085,0,0,1-.605.60547h-.69336a.54085.54085,0,0,1-.605-.60547V12.95605H11.333a.5412.5412,0,0,1-.60547-.60547v-.15332a1.199,1.199,0,0,1,.22021-.748l2.56348-4.05957a.7819.7819,0,0,1,.72607-.39648h1.27637a.54085.54085,0,0,1,.605.60547v3.7627h.33008A.54055.54055,0,0,1,17.05371,11.96582ZM14.28125,8.7207h-.022a4.18969,4.18969,0,0,1-.38525.81348l-1.188,1.80469v.02246h1.5293V9.60059A7.04058,7.04058,0,0,1,14.28125,8.7207Z\\\"/></svg>\";\nconst header5Icon = \"<svg viewBox=\\\"0 0 18 18\\\"><path class=\\\"ql-fill\\\" d=\\\"M16.74023,12.18555a2.75131,2.75131,0,0,1-2.91553,2.80566,3.908,3.908,0,0,1-2.25537-.68164.54809.54809,0,0,1-.13184-.8252L11.73438,13c.209-.34082.48389-.36328.8252-.1543a2.23757,2.23757,0,0,0,1.1001.33008,1.01827,1.01827,0,0,0,1.1001-.96777c0-.61621-.53906-.97949-1.25439-.97949a2.15554,2.15554,0,0,0-.64893.09961,1.15209,1.15209,0,0,1-.814.01074l-.12109-.04395a.64116.64116,0,0,1-.45117-.71484l.231-3.00391a.56666.56666,0,0,1,.62744-.583H15.541a.54085.54085,0,0,1,.605.60547v.43945a.54085.54085,0,0,1-.605.60547H13.41748l-.04395.72559a1.29306,1.29306,0,0,1-.04395.30859h.022a2.39776,2.39776,0,0,1,.57227-.07715A2.53266,2.53266,0,0,1,16.74023,12.18555ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z\\\"/></svg>\";\nconst header6Icon = \"<svg viewBox=\\\"0 0 18 18\\\"><path class=\\\"ql-fill\\\" d=\\\"M14.51758,9.64453a1.85627,1.85627,0,0,0-1.24316.38477H13.252a1.73532,1.73532,0,0,1,1.72754-1.4082,2.66491,2.66491,0,0,1,.5498.06641c.35254.05469.57227.01074.70508-.40723l.16406-.5166a.53393.53393,0,0,0-.373-.75977,4.83723,4.83723,0,0,0-1.17773-.14258c-2.43164,0-3.7627,2.17773-3.7627,4.43359,0,2.47559,1.60645,3.69629,3.19043,3.69629A2.70585,2.70585,0,0,0,16.96,12.19727,2.43861,2.43861,0,0,0,14.51758,9.64453Zm-.23047,3.58691c-.67187,0-1.22168-.81445-1.22168-1.45215,0-.47363.30762-.583.72559-.583.96875,0,1.27734.59375,1.27734,1.12207A.82182.82182,0,0,1,14.28711,13.23145ZM10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Z\\\"/></svg>\";\nconst italicIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"7\\\" x2=\\\"13\\\" y1=\\\"4\\\" y2=\\\"4\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"5\\\" x2=\\\"11\\\" y1=\\\"14\\\" y2=\\\"14\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"8\\\" x2=\\\"10\\\" y1=\\\"14\\\" y2=\\\"4\\\"/></svg>\";\nconst imageIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><rect class=\\\"ql-stroke\\\" height=\\\"10\\\" width=\\\"12\\\" x=\\\"3\\\" y=\\\"4\\\"/><circle class=\\\"ql-fill\\\" cx=\\\"6\\\" cy=\\\"7\\\" r=\\\"1\\\"/><polyline class=\\\"ql-even ql-fill\\\" points=\\\"5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12\\\"/></svg>\";\nconst indentIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"3\\\" x2=\\\"15\\\" y1=\\\"14\\\" y2=\\\"14\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"3\\\" x2=\\\"15\\\" y1=\\\"4\\\" y2=\\\"4\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"9\\\" x2=\\\"15\\\" y1=\\\"9\\\" y2=\\\"9\\\"/><polyline class=\\\"ql-fill ql-stroke\\\" points=\\\"3 7 3 11 5 9 3 7\\\"/></svg>\";\nconst outdentIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"3\\\" x2=\\\"15\\\" y1=\\\"14\\\" y2=\\\"14\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"3\\\" x2=\\\"15\\\" y1=\\\"4\\\" y2=\\\"4\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"9\\\" x2=\\\"15\\\" y1=\\\"9\\\" y2=\\\"9\\\"/><polyline class=\\\"ql-stroke\\\" points=\\\"5 7 5 11 3 9 5 7\\\"/></svg>\";\nconst linkIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"7\\\" x2=\\\"11\\\" y1=\\\"7\\\" y2=\\\"11\\\"/><path class=\\\"ql-even ql-stroke\\\" d=\\\"M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z\\\"/><path class=\\\"ql-even ql-stroke\\\" d=\\\"M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z\\\"/></svg>\";\nconst listBulletIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"6\\\" x2=\\\"15\\\" y1=\\\"4\\\" y2=\\\"4\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"6\\\" x2=\\\"15\\\" y1=\\\"9\\\" y2=\\\"9\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"6\\\" x2=\\\"15\\\" y1=\\\"14\\\" y2=\\\"14\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"3\\\" x2=\\\"3\\\" y1=\\\"4\\\" y2=\\\"4\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"3\\\" x2=\\\"3\\\" y1=\\\"9\\\" y2=\\\"9\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"3\\\" x2=\\\"3\\\" y1=\\\"14\\\" y2=\\\"14\\\"/></svg>\";\nconst listCheckIcon = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"9\\\" x2=\\\"15\\\" y1=\\\"4\\\" y2=\\\"4\\\"/><polyline class=\\\"ql-stroke\\\" points=\\\"3 4 4 5 6 3\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"9\\\" x2=\\\"15\\\" y1=\\\"14\\\" y2=\\\"14\\\"/><polyline class=\\\"ql-stroke\\\" points=\\\"3 14 4 15 6 13\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"9\\\" x2=\\\"15\\\" y1=\\\"9\\\" y2=\\\"9\\\"/><polyline class=\\\"ql-stroke\\\" points=\\\"3 9 4 10 6 8\\\"/></svg>\";\nconst listOrderedIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke\\\" x1=\\\"7\\\" x2=\\\"15\\\" y1=\\\"4\\\" y2=\\\"4\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"7\\\" x2=\\\"15\\\" y1=\\\"9\\\" y2=\\\"9\\\"/><line class=\\\"ql-stroke\\\" x1=\\\"7\\\" x2=\\\"15\\\" y1=\\\"14\\\" y2=\\\"14\\\"/><line class=\\\"ql-stroke ql-thin\\\" x1=\\\"2.5\\\" x2=\\\"4.5\\\" y1=\\\"5.5\\\" y2=\\\"5.5\\\"/><path class=\\\"ql-fill\\\" d=\\\"M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z\\\"/><path class=\\\"ql-stroke ql-thin\\\" d=\\\"M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156\\\"/><path class=\\\"ql-stroke ql-thin\\\" d=\\\"M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109\\\"/></svg>\";\nconst subscriptIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><path class=\\\"ql-fill\\\" d=\\\"M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z\\\"/><path class=\\\"ql-fill\\\" d=\\\"M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z\\\"/></svg>\";\nconst superscriptIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><path class=\\\"ql-fill\\\" d=\\\"M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z\\\"/><path class=\\\"ql-fill\\\" d=\\\"M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z\\\"/></svg>\";\nconst strikeIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><line class=\\\"ql-stroke ql-thin\\\" x1=\\\"15.5\\\" x2=\\\"2.5\\\" y1=\\\"8.5\\\" y2=\\\"9.5\\\"/><path class=\\\"ql-fill\\\" d=\\\"M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z\\\"/><path class=\\\"ql-fill\\\" d=\\\"M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z\\\"/></svg>\";\nconst tableIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><rect class=\\\"ql-stroke\\\" height=\\\"12\\\" width=\\\"12\\\" x=\\\"3\\\" y=\\\"3\\\"/><rect class=\\\"ql-fill\\\" height=\\\"2\\\" width=\\\"3\\\" x=\\\"5\\\" y=\\\"5\\\"/><rect class=\\\"ql-fill\\\" height=\\\"2\\\" width=\\\"4\\\" x=\\\"9\\\" y=\\\"5\\\"/><g class=\\\"ql-fill ql-transparent\\\"><rect height=\\\"2\\\" width=\\\"3\\\" x=\\\"5\\\" y=\\\"8\\\"/><rect height=\\\"2\\\" width=\\\"4\\\" x=\\\"9\\\" y=\\\"8\\\"/><rect height=\\\"2\\\" width=\\\"3\\\" x=\\\"5\\\" y=\\\"11\\\"/><rect height=\\\"2\\\" width=\\\"4\\\" x=\\\"9\\\" y=\\\"11\\\"/></g></svg>\";\nconst underlineIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><path class=\\\"ql-stroke\\\" d=\\\"M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3\\\"/><rect class=\\\"ql-fill\\\" height=\\\"1\\\" rx=\\\"0.5\\\" ry=\\\"0.5\\\" width=\\\"12\\\" x=\\\"3\\\" y=\\\"15\\\"/></svg>\";\nconst videoIcon = \"<svg viewbox=\\\"0 0 18 18\\\"><rect class=\\\"ql-stroke\\\" height=\\\"12\\\" width=\\\"12\\\" x=\\\"3\\\" y=\\\"3\\\"/><rect class=\\\"ql-fill\\\" height=\\\"12\\\" width=\\\"1\\\" x=\\\"5\\\" y=\\\"3\\\"/><rect class=\\\"ql-fill\\\" height=\\\"12\\\" width=\\\"1\\\" x=\\\"12\\\" y=\\\"3\\\"/><rect class=\\\"ql-fill\\\" height=\\\"2\\\" width=\\\"8\\\" x=\\\"5\\\" y=\\\"8\\\"/><rect class=\\\"ql-fill\\\" height=\\\"1\\\" width=\\\"3\\\" x=\\\"3\\\" y=\\\"5\\\"/><rect class=\\\"ql-fill\\\" height=\\\"1\\\" width=\\\"3\\\" x=\\\"3\\\" y=\\\"7\\\"/><rect class=\\\"ql-fill\\\" height=\\\"1\\\" width=\\\"3\\\" x=\\\"3\\\" y=\\\"10\\\"/><rect class=\\\"ql-fill\\\" height=\\\"1\\\" width=\\\"3\\\" x=\\\"3\\\" y=\\\"12\\\"/><rect class=\\\"ql-fill\\\" height=\\\"1\\\" width=\\\"3\\\" x=\\\"12\\\" y=\\\"5\\\"/><rect class=\\\"ql-fill\\\" height=\\\"1\\\" width=\\\"3\\\" x=\\\"12\\\" y=\\\"7\\\"/><rect class=\\\"ql-fill\\\" height=\\\"1\\\" width=\\\"3\\\" x=\\\"12\\\" y=\\\"10\\\"/><rect class=\\\"ql-fill\\\" height=\\\"1\\\" width=\\\"3\\\" x=\\\"12\\\" y=\\\"12\\\"/></svg>\";\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 = \"<svg viewbox=\\\"0 0 18 18\\\"><polygon class=\\\"ql-stroke\\\" points=\\\"7 11 9 13 11 11 7 11\\\"/><polygon class=\\\"ql-stroke\\\" points=\\\"7 7 9 5 11 7 7 7\\\"/></svg>\";\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 = ['<span class=\"ql-tooltip-arrow\"></span>', '<div class=\"ql-tooltip-editor\">', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-close\"></a>', '</div>'].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 = ['<a class=\"ql-preview\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"about:blank\"></a>', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-action\"></a>', '<a class=\"ql-remove\"></a>'].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, { Parchment, Range } 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 { Module } from './core.js';\nexport { Parchment, Range };\nexport default Quill;\n//# sourceMappingURL=quill.js.map","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-20 14:31:27\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2024-12-20 15:18:24\n * @项目的路径: \\CMS-components\\packages\\components\\web-editor\\src\\web-editor.ts\n * @描述: web 富文本框编辑器属性、事件声明\n */\nimport { type PropType, type ExtractPublicPropTypes } from \"vue\";\nimport { buildProps, isString } from \"@yujinjin/cms-components-utils\";\nimport { type NotReadonly } from \"../../types\";\n\nexport type OnImgUploadFunction = (file: any) => Promise<string> | string;\n\nexport const webEditorProps = buildProps({\n    modelValue: String,\n    disabled: {\n        type: Boolean,\n        default: null\n    },\n    onImgUpload: {\n        type: Function as PropType<OnImgUploadFunction>\n    }\n});\n\nexport type WebEditorProps = NotReadonly<ExtractPublicPropTypes<typeof webEditorProps>>;\n\nexport const webEditorEmits = {\n    \"update:modelValue\": (value: string) => isString(value)\n};\n\nexport type WebEditorEmits = typeof webEditorEmits;\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-20 14:55:48\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-02-21 10:54:16\n * @项目的路径: \\CMS-components\\packages\\components\\web-editor\\src\\web-editor.vue\n * @描述: web-editor 富文本框\n-->\n<template>\n    <div class=\"cms-web-editor-container\">\n        <div ref=\"webEditorRef\" class=\"web-editor\">\n            <p v-if=\"!isBrowser\">当前环境不支持</p>\n        </div>\n        <input v-show=\"false\" ref=\"inputFileRef\" type=\"file\" accept=\"image/*\" @change=\"imgFileChangeHandle\" />\n        <slot></slot>\n    </div>\n</template>\n<script setup lang=\"ts\">\nimport { onMounted, ref, watch, inject, computed, type Ref } from \"vue\";\nimport { type FormItemContext, type FormContext, formItemContextKey, formContextKey } from \"element-plus\";\nimport Quill from \"quill\";\nimport { debounce } from \"@yujinjin/utils\";\nimport { webEditorProps, webEditorEmits } from \"./web-editor\";\n\ndefineOptions({\n    name: \"WebEditor\"\n});\n\ndefineSlots<{\n    default(): any;\n}>();\n\nconst props = defineProps(webEditorProps);\n\nconst emits = defineEmits(webEditorEmits);\n\n// web 编辑器ref\nconst webEditorRef = ref(null);\n\n// inputFile ref\nconst inputFileRef: Ref<HTMLInputElement | null> = ref(null);\n\n// 当前elForm实例\nconst elForm = inject(formContextKey, {} as FormContext);\n\n// 当前elFormItem实例\nconst elFormItem = inject(formItemContextKey, {} as FormItemContext);\n\nconst isBrowser = computed(() => typeof window !== \"undefined\");\n\n// quill富文本框编辑器实例\nlet quillInstance;\n\n// 输入内容变化操作\nconst textChangeHandle = debounce(() => {\n    emits(\"update:modelValue\", quillInstance.getSemanticHTML());\n    elFormItem?.validate?.(\"change\", quillInstance.getSemanticHTML());\n}, 300);\n\n// 图片文件选择变化\nconst imgFileChangeHandle = async function (e) {\n    const img = (await props.onImgUpload!(e.target.files[0])) as string;\n    //图片上传成功之后的回调\n    let range = quillInstance.getSelection();\n    if (!range) {\n        quillInstance.focus();\n        range = quillInstance.getSelection();\n    }\n    quillInstance.insertEmbed(range.index, \"image\", img); //将上传好的图片，插入到富文本的range.index（当前光标处）\n};\n\n// 初始化quill\nconst initQuill = function () {\n    quillInstance = new Quill(webEditorRef.value!, {\n        modules: {\n            toolbar: {\n                container: [\"bold\", \"italic\", \"underline\", { header: 1 }, { header: 2 }, \"blockquote\", \"code-block\", \"code\", \"link\", { list: \"ordered\" }, { list: \"bullet\" }, \"image\", [\"clean\"]],\n                handlers: {\n                    image: props.onImgUpload ? () => inputFileRef.value!.click() : undefined\n                }\n            }\n        },\n        theme: \"snow\",\n        readOnly: props.disabled === true || (elForm?.disabled === true && props.disabled !== false),\n        placeholder: \"输入内容...\"\n    });\n    if (props.modelValue) {\n        // quillInstance.pasteHTML(props.modelValue);\n        quillInstance.setContents(quillInstance.clipboard.convert({ html: props.modelValue }));\n    }\n    // if (elForm?.disabled === true && props.disabled !== false) {\n    //     quillInstance.enable(false);\n    // }\n    quillInstance.on(\"text-change\", function () {\n        textChangeHandle();\n    });\n};\n\nwatch(\n    () => props.modelValue,\n    value => {\n        if (!quillInstance || value === quillInstance.getSemanticHTML()) return;\n        // quillInstance.pasteHTML(props.modelValue);\n        quillInstance.setContents(quillInstance.clipboard.convert({ html: props.modelValue }));\n    }\n);\n\nwatch(\n    () => props.disabled === true || (elForm?.disabled === true && props.disabled !== false),\n    value => {\n        if (!quillInstance) return;\n        quillInstance.enable(!value);\n    }\n);\n\nonMounted(() => {\n    if (isBrowser.value) {\n        initQuill();\n    }\n});\n</script>\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-19 17:33:09\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-02-11 11:03:28\n * @项目的路径: \\CMS-components\\packages\\components\\input-field\\src\\input-field.ts\n * @描述: 表单输入字段组件声明\n */\nimport { type PropType, type ExtractPublicPropTypes } from \"vue\";\nimport { buildProps } from \"@yujinjin/cms-components-utils\";\nimport { type NotReadonly } from \"../../types\";\n\ntype FieldType =\n    | \"input\"\n    | \"select\"\n    | \"selectV2\"\n    | \"checkSelect\"\n    | \"datePicker\"\n    | \"timePicker\"\n    | \"timeSelect\"\n    | \"label\"\n    | \"inputNumber\"\n    | \"radio\"\n    | \"slider\"\n    | \"switch\"\n    | \"imgUpload\"\n    | \"webEditor\"\n    | \"autocomplete\"\n    | \"cascader\"\n    | \"checkbox\"\n    | \"colorPicker\"\n    | \"upload\";\n\nexport const inputFieldProps = buildProps({\n    /** 是否使用插槽 */\n    slot: {\n        type: [String, Boolean],\n        default: false\n    },\n    /** 组件的类型 */\n    type: {\n        type: String as PropType<FieldType>,\n        default: \"input\"\n    },\n    /** 组件的数值 */\n    modelValue: {\n        type: [String, Number, Object, Boolean, Array] as PropType<any>,\n        default: null // 必须设置默认值，否则在没有值绑定的情况vue3会设置成false\n    },\n    /** 数据（比如：select的选项值列表） */\n    data: {\n        type: Array as PropType<Array<Record<string, any>>>,\n        default: function () {\n            return [];\n        }\n    },\n    /** data选项值value key属性名，默认是:value(type是select时有意义) */\n    optionValueKey: {\n        type: String,\n        default: \"value\"\n    },\n    /** data选项值label key属性名, 默认值是:label(type是select时有意义) */\n    optionLabelKey: {\n        type: String,\n        default: \"label\"\n    },\n    /** 组件自定义属性 */\n    props: {\n        type: Object,\n        default: function () {\n            return {};\n        }\n    },\n    /** 组件自定义事件 */\n    events: {\n        type: Object as PropType<Record<string, (...args: any[]) => any>>,\n        default: function () {\n            return {};\n        }\n    }\n});\n\nexport type InputFieldProps = NotReadonly<ExtractPublicPropTypes<typeof inputFieldProps>>;\n\nexport const inputFieldEmits = {\n    \"update:modelValue\": (value: string | number | object | boolean | Array<any>) => true\n};\n\nexport type InputFieldEmits = typeof inputFieldEmits;\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-20 10:29:22\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-21 17:30:02\n * @项目的路径: \\CMS-components\\packages\\components\\input-field\\src\\input-field.vue\n * @描述: 表单输入字段组件\n-->\n<template>\n    <!-- 自定义插件，插槽 -->\n    <slot v-if=\"slot\"></slot>\n\n    <!-- 标签内容 -->\n    <div v-else-if=\"type === 'label'\" class=\"cms-input-field_label-contents\">{{ modelValue }}</div>\n\n    <!-- input -->\n    <el-input v-else-if=\"type === 'input'\" v-bind=\"allProps\" :model-value=\"modelValue\" @update:model-value=\"value => changeValue(value)\" v-on=\"events\" />\n\n    <!-- 图片上传 -->\n    <img-upload v-else-if=\"type === 'imgUpload'\" v-bind=\"allProps\" :model-value=\"modelValue\" :upload-request=\"allProps!.uploadRequest\" @update:model-value=\"value => changeValue(value)\" />\n\n    <!-- 富文本框 -->\n    <web-editor v-else-if=\"type === 'webEditor'\" v-bind=\"allProps\" :model-value=\"modelValue\" @update:model-value=\"value => changeValue(value)\" />\n\n    <!-- select -->\n    <el-select v-else-if=\"type === 'select'\" v-bind=\"allProps\" :model-value=\"modelValue\" @update:model-value=\"value => changeValue(value)\" v-on=\"events\">\n        <el-option v-for=\"(item, index) in data\" :key=\"(item[optionValueKey] || '') + '_' + index\" :label=\"item[optionLabelKey]\" :value=\"item[optionValueKey]\" :disabled=\"item.disabled === true\" />\n    </el-select>\n\n    <!-- check-select -->\n    <check-select v-else-if=\"type === 'checkSelect'\" v-bind=\"allProps\" :model-value=\"modelValue\" :data=\"data\" @update:model-value=\"changeValue\" v-on=\"events\" />\n\n    <!-- checkbox -->\n    <el-checkbox-group v-else-if=\"type === 'checkbox'\" v-bind=\"allProps\" :model-value=\"modelValue\" @update:model-value=\"value => changeValue(value)\" v-on=\"events\">\n        <el-checkbox v-for=\"(item, index) in data\" :key=\"(item[optionValueKey] || '') + '_' + index\" :value=\"item[optionValueKey]\" :disabled=\"item.disabled === true\">\n            {{ item[optionLabelKey] }}\n        </el-checkbox>\n    </el-checkbox-group>\n\n    <!-- radio -->\n    <el-radio-group v-else-if=\"type === 'radio'\" v-bind=\"allProps\" :model-value=\"modelValue\" @update:model-value=\"value => changeValue(value)\" v-on=\"events\">\n        <el-radio v-for=\"(item, index) in data\" :key=\"(item[optionValueKey] || '') + '_' + index\" :value=\"item[optionValueKey]\" :disabled=\"item.disabled === true\">\n            {{ item[optionLabelKey] }}\n        </el-radio>\n    </el-radio-group>\n\n    <!-- element 组件 -->\n    <component :is=\"getElComponentName(type)\" v-else-if=\"!!type\" v-bind=\"allProps\" :model-value=\"modelValue\" @update:model-value=\"value => changeValue(value)\" v-on=\"events\" />\n</template>\n<script setup lang=\"ts\">\nimport { computed, useAttrs } from \"vue\";\nimport { ElSelect, ElOption, ElCheckboxGroup, ElCheckbox, ElRadioGroup, ElRadio, ElInput } from \"element-plus\";\nimport { inputFieldProps, inputFieldEmits } from \"./input-field\";\nimport { ImgUpload } from \"@yujinjin/cms-components-modules/img-upload\";\nimport { CheckSelect } from \"@yujinjin/cms-components-modules/check-select\";\nimport { WebEditor } from \"@yujinjin/cms-components-modules/web-editor\";\n\ndefineOptions({\n    name: \"InputField\",\n    inheritAttrs: false\n});\n\n// 定义插槽\ndefineSlots<{\n    default(): any;\n}>();\n\nconst props = defineProps(inputFieldProps);\n\nconst attrs = useAttrs();\n\nconst emits = defineEmits(inputFieldEmits);\n\nconst allProps = computed(() => {\n    return {\n        ...attrs,\n        ...(props.props || {})\n    };\n});\n\n// 获取elment 组件名称\nconst getElComponentName = function (type) {\n    return \"el-\" + type?.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n};\n\nconst changeValue = function (value) {\n    emits(\"update:modelValue\", value);\n};\n</script>\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-26 14:25:48\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-15 11:03:23\n * @项目的路径: \\CMS-components\\packages\\components\\action-bar\\src\\action-bar.ts\n * @描述: action-bar组件入口\n */\nimport { type PropType, type ExtractPublicPropTypes, type Component } from \"vue\";\nimport { buildProps } from \"@yujinjin/cms-components-utils\";\nimport { type ButtonProps } from \"element-plus\";\nimport { type NotReadonly } from \"../../types\";\n\nexport type ActionButton = NotReadonly<Partial<ButtonProps>> & {\n    /** 当前按钮操作CODE */\n    handleCode?: string;\n\n    /** 按钮文案内容 */\n    contents?: string;\n\n    /** 自定义插槽名称（如有值其他选项无效） */\n    slot?: string;\n\n    /** 自定义图标 */\n    customIcon?: string | Component;\n\n    /** 按钮是否正在加载 */\n    // isLoading?: boolean;\n\n    /** 是否显示(通过当前固定展示数目来判断是否展示) */\n    isShow?: boolean;\n\n    /** 按钮点击函数事件 */\n    click?: (selectRows: Array<any>, button: ActionButton) => Promise<void> | void;\n};\n\nexport type ActionButtonSlotScope = {\n    button: ActionButton;\n};\n\n/** 列表操作栏实例 */\nexport interface ActionBarRef {\n    /** 修改当前生成的button按钮值 */\n    changeButtons: (callback: (actionButtons: ActionButton[]) => void) => void;\n}\n\nexport const actionBarProps = buildProps({\n    buttons: {\n        type: Array as PropType<ActionButton[]>,\n        default: function () {\n            return [];\n        }\n    },\n    // 当前选中的行数据列表\n    selectRows: {\n        type: Array,\n        default: function () {\n            return [];\n        }\n    },\n    // 按钮默认位置,该位置会影响默认插槽内容\n    align: {\n        type: String as PropType<\"center\" | \"left\" | \"right\">,\n        default: \"left\"\n    }\n});\n\nexport type ActionBarProps = NotReadonly<ExtractPublicPropTypes<typeof actionBarProps>>;\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-26 16:02:37\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-15 16:47:50\n * @项目的路径: \\CMS-components\\packages\\components\\action-bar\\src\\action-bar.vue\n * @描述: action-bar(数据表格操作栏)组件\n-->\n<template>\n    <div class=\"cms-action-bar-panel\">\n        <slot v-if=\"align === 'right' || align === 'center'\"></slot>\n        <div v-if=\"actionButtons.length > 0\" class=\"buttons-panel\" :style=\"{ textAlign: align }\">\n            <template v-for=\"(button, index) in actionButtons\">\n                <slot v-if=\"button.slot\" :name=\"button.slot\" :button=\"button\"></slot>\n                <el-button v-else :key=\"(button.handleCode || '') + '_' + index\" v-bind=\"button\" @click=\"clickHandle(button)\">\n                    <template v-if=\"button.customIcon\">\n                        <i v-if=\"typeof button.customIcon === 'string'\" :class=\"[button.customIcon]\"></i>\n                        <el-icon v-else><component :is=\"button.customIcon\" /></el-icon>\n                    </template>\n                    {{ button.contents }}\n                </el-button>\n            </template>\n        </div>\n        <slot v-if=\"align === 'left'\"></slot>\n    </div>\n</template>\n<script setup lang=\"ts\">\nimport { ref, watch, markRaw } from \"vue\";\nimport { ElButton, ElIcon } from \"element-plus\";\nimport { type ActionButton, type ActionButtonSlotScope, type ActionBarRef, actionBarProps } from \"./action-bar\";\n\ndefineOptions({\n    name: \"ActionBar\"\n});\n\ndefineSlots<{\n    default(): any;\n    [key: string]: (props: ActionButtonSlotScope) => any;\n}>();\n\nconst props = defineProps(actionBarProps);\n\n// 实际数据列中的操作按钮列表\n// handleCode: 用户操作CODE\n// contents: 按钮操作文案\n// click: 按钮点击事件\nconst actionButtons = ref<ActionButton[]>([]);\n\n// 初始化操作按钮列表\nconst initActionButtons = function () {\n    actionButtons.value = [];\n    props.buttons.forEach(button => {\n        button = Object.assign({ loading: false }, button);\n        if (button.customIcon && typeof button.customIcon === \"object\") {\n            button.customIcon = markRaw(button.customIcon);\n        }\n        if (button.icon && typeof button.icon === \"object\") {\n            button.icon = markRaw(button.icon);\n        }\n        actionButtons.value.push(button);\n    });\n};\n\n// 按钮点击操作\nconst clickHandle = async function (button: ActionButton) {\n    if (button.loading) {\n        return;\n    }\n    button.loading = true;\n    try {\n        if (button.click) {\n            await button.click(props.selectRows, button);\n        }\n    } catch (error) {\n        console.error(error);\n    }\n    button.loading = false;\n};\n\nwatch(\n    () => props.buttons,\n    () => {\n        initActionButtons();\n    },\n    { deep: true, immediate: true }\n);\n\ndefineExpose<ActionBarRef>({\n    // 修改当前生成的button按钮属性值，比如根据选择数据列表列的数据变化动态设置disabled值\n    changeButtons: function (callback: (actionButtons: ActionButton[]) => void) {\n        if (callback && typeof callback === \"function\") {\n            callback(actionButtons.value);\n        } else {\n            console.error(\"callback 必须是一个函数\");\n        }\n    }\n});\n</script>\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-26 21:29:51\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2024-12-27 17:30:51\n * @项目的路径: \\CMS-components\\packages\\components\\search-field\\src\\search-field.ts\n * @描述: 搜索表单字段组件声明\n */\nimport { type PropType, type ExtractPublicPropTypes } from \"vue\";\nimport { buildProps } from \"@yujinjin/cms-components-utils\";\nimport { type NotReadonly } from \"../../types\";\n\ntype FieldType = \"input\" | \"inputNumber\" | \"select\" | \"checkSelect\" | \"datePicker\";\n\nexport const searchFieldProps = buildProps({\n    /** 当前数据字段插槽 */\n    slot: {\n        type: [String, Boolean]\n    },\n    /** 组件的类型 */\n    type: {\n        type: String as PropType<FieldType>,\n        default: \"input\"\n    },\n    /** 组件的数值 */\n    modelValue: {\n        type: [String, Number, Object, Boolean, Array] as PropType<any>,\n        default: null // 必须设置默认值，否则在没有值绑定的情况vue3会设置成false\n    },\n    /** 数据（比如：select的选项值列表） */\n    data: {\n        type: Array as PropType<Array<Record<string, any>>>,\n        default: function () {\n            return [];\n        }\n    },\n    /** data选项值value key属性名，默认是:value(type是select时有意义) */\n    optionValueKey: {\n        type: String,\n        default: \"value\"\n    },\n    /** data选项值label key属性名, 默认值是:label(type是select时有意义) */\n    optionLabelKey: {\n        type: String,\n        default: \"label\"\n    },\n    /** 组件自定义属性 */\n    props: {\n        type: Object,\n        default: function () {\n            return {};\n        }\n    },\n    /** 组件自定义事件 */\n    events: {\n        type: Object as PropType<Record<string, (...args: any[]) => any>>,\n        default: function () {\n            return {};\n        }\n    }\n});\n\nexport type SearchFieldProps = NotReadonly<ExtractPublicPropTypes<typeof searchFieldProps>>;\n\nexport const searchFieldEmits = {\n    \"update:modelValue\": (value: string | number | object | boolean | Array<any>) => true,\n    \"change\": (value: string | number | object | boolean | Array<any>) => true\n};\n\nexport type SearchFieldEmits = typeof searchFieldEmits;\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-26 21:29:56\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-16 21:03:42\n * @项目的路径: \\CMS-components\\packages\\components\\search-field\\src\\search-field.vue\n * @描述: 表单输入字段组件\n-->\n<template>\n    <!-- 自定义插件，插槽 -->\n    <slot v-if=\"slot\"></slot>\n\n    <!-- input -->\n    <el-input v-else-if=\"type === 'input'\" :model-value=\"modelValue\" v-bind=\"allProps\" @update:model-value=\"value => changeValue(value?.trim())\" v-on=\"events\" />\n\n    <!-- input-number -->\n    <el-input-number v-else-if=\"type === 'inputNumber'\" :model-value=\"modelValue\" v-bind=\"allProps\" @update:model-value=\"changeValue\" v-on=\"events\" />\n\n    <!-- select -->\n    <el-select v-else-if=\"type === 'select'\" :model-value=\"modelValue\" v-bind=\"allProps\" @update:model-value=\"changeValue\" v-on=\"events\">\n        <el-option v-for=\"(item, index) in data\" :key=\"(item[optionValueKey] || '') + '_' + index\" :label=\"item[optionLabelKey]\" :value=\"item[optionValueKey]\" :disabled=\"item.disabled === true\" />\n    </el-select>\n\n    <!-- checkbox-select -->\n    <check-select v-else-if=\"type === 'checkSelect'\" :model-value=\"modelValue\" :data=\"data\" v-bind=\"allProps\" @update:model-value=\"changeValue\" v-on=\"events\" />\n\n    <!-- date-picker -->\n    <el-date-picker v-else-if=\"type === 'datePicker'\" :model-value=\"modelValue\" v-bind=\"allProps\" @update:model-value=\"changeValue\" v-on=\"events\" />\n</template>\n<script setup lang=\"ts\">\nimport { computed, useAttrs } from \"vue\";\nimport { ElInput, ElInputNumber, ElSelect, ElOption, ElDatePicker } from \"element-plus\";\nimport { searchFieldProps, searchFieldEmits } from \"./search-field\";\nimport { CheckSelect } from \"@yujinjin/cms-components-modules/check-select\";\n\ndefineOptions({\n    name: \"SearchField\",\n    inheritAttrs: false\n});\n\n// 定义插槽\ndefineSlots<{\n    default(): any;\n}>();\n\nconst props = defineProps(searchFieldProps);\n\nconst attrs = useAttrs();\n\nconst emits = defineEmits(searchFieldEmits);\n\nconst allProps = computed(() => {\n    return {\n        ...attrs,\n        ...(props.props || {})\n    };\n});\n\nconst changeValue = function (value) {\n    emits(\"update:modelValue\", value);\n    emits(\"change\", value);\n};\n</script>\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-27 16:17:56\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-20 15:01:15\n * @项目的路径: \\CMS-components\\packages\\components\\data-table\\src\\data-table.ts\n * @描述: data-table组件声明\n */\nimport { type PropType, type ExtractPublicPropTypes } from \"vue\";\nimport { buildProps } from \"@yujinjin/cms-components-utils\";\nimport { type TableProps, type PaginationProps, type TableColumnCtx, type ButtonProps } from \"element-plus\";\nimport { type NotReadonly } from \"../../types\";\n\nexport type TableButton = NotReadonly<Partial<ButtonProps>> & {\n    /** 当前按钮操作CODE */\n    handleCode?: string;\n\n    /** 按钮文案内容 */\n    contents?: string;\n\n    /** 自定义插槽名称（如有值其他选项无效） */\n    slot?: string;\n\n    /** 按钮是否正在加载 */\n    // isLoading?: boolean;\n\n    /** 是否显示(通过当前固定展示数目来判断是否展示) */\n    isShow?: boolean;\n\n    /** 是否显示(根据当前列的数据情况来判断是否展示) */\n    display?: (row: any) => boolean;\n\n    /** 按钮点击函数事件 */\n    click?: (selectRows: Array<any>, button: TableButton) => Promise<void> | void;\n};\n\nexport interface DataTableColumn<T> extends Partial<TableColumnCtx<T>> {\n    /** 数据列的自定义类型 */\n    type?: \"selection\" | \"index\" | \"expand\" | \"number\" | \"action\" | \"date\" | \"enum\" | \"image\";\n\n    /** 操作按钮列表(type是action有用) */\n    buttons?: TableButton[];\n\n    /** 数字格式化小数点位数(默认是0, type是number有用) */\n    digit?: number;\n\n    /** 数据列分隔符，比如type是image、enum等会用到 */\n    separator?: string;\n\n    /** 日期格式化字符串(默认是YYYY-MM-DD, type是date有用) */\n    formate?: string;\n\n    /** 数据枚举列表(type是enum有用) */\n    data?: Array<Record<string, any>>;\n\n    /** header 插槽 */\n    slotHeader?: string;\n\n    /** 默认插槽 */\n    slot?: string;\n\n    /** 是否展示数据列 */\n    isShow?: boolean;\n}\n\nexport const dataTableProps = buildProps({\n    // 当前列表查询函数, 可返回Promise\n    query: {\n        type: Function as PropType<(...args) => Promise<any> | any>,\n        required: true\n    },\n    // type: \"number|action|date|enum|image\" // 数据列的自定义类型，可以不传\n    // type是action => buttons: [], // 操作按钮列表| maxNumShow: 3, // 最多展示数 (默认是3)\n    // type是number => digit: 0, // 数字格式化小数点位数(默认是0)\n    // type是date => formate: 0, // 日期格式化字符串(默认是YYYY-MM-DD) | separator 分隔符，多个日期展示用。默认是“-”\n    // type是enum => data: [] // 数据枚举列表 | separator: \",\" // 多个内容的分隔符(默认是\",\") | valueKey: 枚举列表中value对应的属性值 | textKey: valueKey: 枚举列表中name对应的属性值\n    // props: el-table-column 的属性值具体参照element plus Table-column 属性，注意：如果有type有值prop值必传\n    columns: {\n        type: Array as PropType<DataTableColumn<any>[]>,\n        default() {\n            return [];\n        },\n        required: true\n    },\n    // 是否自动初始化查询\n    autoInitQuery: {\n        type: Boolean,\n        default: true\n    },\n    // 当前选中的行数据列表\n    selectRows: {\n        type: Array,\n        default: function () {\n            return [];\n        }\n    },\n    // 当前列表查询滤参数\n    filters: {\n        type: Object,\n        default() {\n            return {};\n        }\n    },\n    // table 其他属性具体参照element plus table文档\n    props: {\n        type: Object as PropType<Partial<TableProps<any>>>,\n        default() {\n            return {};\n        }\n    },\n    // table 其他事件具体参照element plus table文档\n    events: {\n        type: Object as PropType<Record<string, (...args: any[]) => any>>,\n        default() {\n            return {};\n        }\n    },\n    // 查询参数数据加工（查询前参数处理函数）\n    queryParametersProcess: {\n        type: Function as PropType<(parameters?: any) => any>\n    },\n    // 查询数据结果加工（查询后数据结果处理函数）\n    queryResponseProcess: {\n        type: Function as PropType<(reponseData: any) => any>\n    },\n    // 是否显示分页\n    isShowPagination: {\n        type: Boolean,\n        default: true\n    },\n    // 数据分页属性\n    pagination: {\n        type: Object as PropType<Partial<PaginationProps>>,\n        default() {\n            return {};\n        }\n    }\n});\n\nexport type DataTableProps = NotReadonly<ExtractPublicPropTypes<typeof dataTableProps>>;\n\nexport const dataTableEmits = {\n    \"update:selectRows\": (value: Array<any>) => Array.isArray(value),\n    \"search\": (value: boolean) => typeof value === \"boolean\"\n};\n\nexport type DataTableEmits = typeof dataTableEmits;\n\n/** 数据表格实例 */\nexport interface DataTableRef {\n    /** 查询数据函数 */\n    queryDataList: (isInit?: boolean) => Promise<any>;\n\n    /** 初始化表格最大高度 */\n    initTableMaxHeight: () => Promise<void>;\n\n    /**\n     * 更新数据列显示状态\n     * @param columnKeys 显示列key值数组（不传值表示都展示）\n     */\n    updateTableColumnsShowStatus: (columnKeys?: string[]) => void;\n}\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-30 09:51:01\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-21 17:13:23\n * @项目的路径: \\CMS-components\\packages\\components\\data-table\\src\\table-column-date.vue\n * @描述: 日期格式化数据列\n-->\n<template>\n    <div class=\"cms-table-column-date\">{{ dateText }}</div>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { dateFormat } from \"@yujinjin/utils\";\n\ndefineOptions({\n    name: \"TableColumnDate\"\n});\n\nconst props = defineProps({\n    // 日期值\n    value: {\n        type: [String, Number, Array],\n        default: null\n    },\n    // 日期格式化字符串\n    formate: {\n        type: String,\n        default: \"YYYY-MM-DD\"\n    },\n    // 分隔符，value是数组时时用到\n    separator: {\n        type: String,\n        default: \" ~ \"\n    }\n});\n\nconst dateText = computed(() => {\n    if (!props.value) {\n        return \"-\";\n    }\n    if (Object.prototype.toString.call(props.value) === \"[object Array]\") {\n        if ((props.value as Array<any>).length === 0) {\n            return \"-\";\n        }\n        return (props.value as Array<any>).map(item => (item ? dateFormat(item, props.formate) : \"\")).join(props.separator);\n    }\n    return props.value ? dateFormat(props.value as number | string, props.formate) : \"-\";\n});\n</script>\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-30 10:16:17\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-21 17:15:51\n * @项目的路径: \\CMS-components\\packages\\components\\data-table\\src\\table-column-number.vue\n * @描述: 数字数据列\n-->\n<template>\n    <div class=\"cms-table-column-number\">{{ numberText }}</div>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { numberFormat } from \"@yujinjin/utils\";\n\ndefineOptions({\n    name: \"TableColumnNumber\"\n});\n\nconst props = defineProps({\n    // 日期值\n    value: {\n        type: [String, Number],\n        default: null\n    },\n    // 日期格式化字符串\n    digit: {\n        type: Number,\n        default: 0\n    }\n});\n\nconst numberText = computed(() => {\n    if (props.value === null || props.value === undefined || String(props.value).trim() === \"\") {\n        return \"-\";\n    }\n    return numberFormat(props.value, props.digit);\n});\n</script>\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-30 10:11:12\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-21 17:15:17\n * @项目的路径: \\CMS-components\\packages\\components\\data-table\\src\\table-column-image.vue\n * @描述: 图片数据列\n-->\n<template>\n    <div class=\"cms-table-column-img\">\n        <div v-if=\"!previewImgList || previewImgList.length === 0\" class=\"no-image\">没有图片</div>\n        <template v-else>\n            <el-image\n                v-for=\"(img, index) in previewImgList\"\n                :key=\"img + '_' + index\"\n                :src=\"img\"\n                :initial-index=\"initialIndex\"\n                :preview-src-list=\"previewImgList\"\n                fit=\"contain\"\n                :preview-teleported=\"true\"\n                @click=\"initialIndex = index\"\n            >\n                <template #error>\n                    <div class=\"error-box\">\n                        <el-icon><Picture /></el-icon>\n                    </div>\n                </template>\n            </el-image>\n        </template>\n    </div>\n</template>\n<script setup lang=\"ts\">\nimport { type PropType, ref, computed } from \"vue\";\nimport { ElImage, ElIcon } from \"element-plus\";\nimport { Picture } from \"@element-plus/icons-vue\";\n\ndefineOptions({\n    name: \"TableColumnImgage\"\n});\n\n// TODO: 支持SVGA 图片格式\nconst props = defineProps({\n    value: {\n        type: [String, Array] as PropType<string | Array<string>>,\n        default: null\n    },\n    // value 是string,分隔符传值才有效\n    separator: {\n        type: String,\n        default: null\n    }\n});\n\n// 图片预览列表\nconst previewImgList = computed<string[]>(() => {\n    if (!props.value) return [];\n    if (Array.isArray(props.value)) {\n        return props.value;\n    }\n    return props.separator ? props.value.split(props.separator) : [props.value];\n});\n\n// 初始预览图像索引\nconst initialIndex = ref(0);\n</script>\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-30 10:09:59\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-21 17:13:59\n * @项目的路径: \\CMS-components\\packages\\components\\data-table\\src\\table-column-enum.vue\n * @描述: 枚举数据列\n-->\n<template>\n    <div class=\"cms-table-column-enum\">{{ enumText }}</div>\n</template>\n<script setup lang=\"ts\">\nimport { type PropType, computed } from \"vue\";\n\ndefineOptions({\n    name: \"TableColumnEnum\"\n});\n\nconst props = defineProps({\n    value: {\n        type: [String, Number, Boolean],\n        default: null\n    },\n    data: {\n        type: Array as PropType<Record<string, any>[]>,\n        default: function () {\n            return [];\n        },\n        required: true\n    },\n    // 分隔符，value值用','隔开时\n    separator: {\n        type: String,\n        default: \",\"\n    },\n    valueKey: {\n        type: String,\n        default: \"value\"\n    },\n    textKey: {\n        type: String,\n        default: \"label\"\n    }\n});\n\nconst enumText = computed(() => {\n    if (typeof props.value === \"number\" || typeof props.value === \"boolean\") {\n        const findItem = props.data.find(dateItem => dateItem[props.valueKey] === props.value);\n        return findItem ? findItem[props.textKey] : props.value;\n    }\n    if (!props.value) {\n        return \"-\";\n    }\n    return props.value\n        .split(props.separator)\n        .map(item => {\n            if (!item) {\n                return \"\";\n            }\n            const findItem = props.data.find(dateItem => dateItem[props.valueKey] === item || dateItem[props.valueKey] === parseInt(item, 10));\n            if (findItem) {\n                return findItem[props.textKey];\n            }\n            return item;\n        })\n        .join(props.separator);\n});\n</script>\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-30 09:37:21\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-21 17:12:54\n * @项目的路径: \\CMS-components\\packages\\components\\data-table\\src\\table-column-action.vue\n * @描述: table的按钮操作列\n-->\n<template>\n    <div class=\"cms-table-column-action\">\n        <el-button v-for=\"(button, index) in showStatusButtons\" :key=\"(button.handleCode || '') + '_' + index\" v-bind=\"button\" @click=\"clickHandle(button)\">\n            {{ button.contents }}\n        </el-button>\n        <el-dropdown v-if=\"hideStatusButtons.length > 0\" popper-class=\"cms-custom-action-dropdown\" @command=\"dropdownCommandHandle\">\n            <span>\n                <i class=\"icomoon-more\"></i>\n            </span>\n            <template #dropdown>\n                <el-dropdown-menu>\n                    <el-dropdown-item v-for=\"(button, index) in hideStatusButtons\" :key=\"(button.handleCode || '') + '_' + index\" :command=\"index\">\n                        <el-icon v-if=\"button.loading\" class=\"is-loading\">\n                            <Loading />\n                        </el-icon>\n                        {{ button.contents }}\n                    </el-dropdown-item>\n                </el-dropdown-menu>\n            </template>\n        </el-dropdown>\n    </div>\n</template>\n<script setup lang=\"ts\">\nimport { type PropType, markRaw, ref, watch, computed } from \"vue\";\nimport { ElButton, ElDropdown, ElDropdownMenu, ElDropdownItem, ElIcon } from \"element-plus\";\nimport { Loading } from \"@element-plus/icons-vue\";\nimport { type TableButton } from \"./data-table\";\n\ndefineOptions({\n    name: \"TableColumnAction\"\n});\n\nconst props = defineProps({\n    buttons: {\n        type: Array as PropType<Array<TableButton>>,\n        default: function () {\n            return [];\n        }\n    },\n    row: {\n        type: Object,\n        default: function () {\n            return {};\n        }\n    },\n    // 最多显示操作的按钮，超过之后就会隐藏起来\n    maxNumShow: {\n        type: Number,\n        default: 3\n    }\n});\n\n// 实际数据列中的操作按钮列表\nconst actionButtons = ref<TableButton[]>([]);\n\nconst showStatusButtons = computed(() => {\n    return actionButtons.value.filter(button => button.isShow);\n});\n\nconst hideStatusButtons = computed(() => {\n    return actionButtons.value.filter(button => !button.isShow);\n});\n\n// 初始化操作按钮列表\nconst initActionButtons = function () {\n    actionButtons.value = [];\n    props.buttons.forEach(button => {\n        if (!button.display || button.display(props.row)) {\n            button = Object.assign({ loading: false, isShow: true, link: true, type: \"primary\" }, button);\n            if (button.icon && typeof button.icon === \"object\") {\n                button.icon = markRaw(button.icon);\n            }\n            actionButtons.value.push(button);\n        }\n    });\n    if (props.maxNumShow && actionButtons.value.length > props.maxNumShow) {\n        actionButtons.value.slice(props.maxNumShow).forEach(button => {\n            button.isShow = false;\n        });\n    }\n};\n\n// 按钮点击操作\nconst clickHandle = async function (button) {\n    if (button.loading) {\n        return;\n    }\n    button.loading = true;\n    try {\n        if (button.click) {\n            await button.click(props.row, button);\n        }\n    } catch (error) {\n        console.error(error);\n    }\n    button.loading = false;\n};\n\n// dropdown 按钮点击事件\nconst dropdownCommandHandle = function (index) {\n    clickHandle(actionButtons.value[showStatusButtons.value.length + index]);\n};\n\nwatch(\n    () => [props.buttons, props.row],\n    () => {\n        initActionButtons();\n    },\n    { immediate: true, deep: true }\n);\n</script>\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-12-30 10:21:26\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-21 17:10:39\n * @项目的路径: \\CMS-components\\packages\\components\\data-table\\src\\data-table.vue\n * @描述: 数据列表组件\n-->\n<template>\n    <div ref=\"dataTablePanelRef\" class=\"cms-data-table-panel\">\n        <el-table v-loading=\"isLoadingForSearch\" v-bind=\"tableProps\" :data=\"dataList\" element-loading-text=\"拼命加载中...\" v-on=\"events\" @selection-change=\"selectionChangeHandle\">\n            <template v-for=\"(columnItem, index) in columnList\">\n                <el-table-column v-if=\"columnItem.isShow\" :key=\"(columnItem.prop || '') + '_' + index\" v-bind=\"columnItem\">\n                    <template v-if=\"columnItem.slotHeader\" #header=\"scope\">\n                        <slot :name=\"columnItem.slotHeader\" v-bind=\"scope\"></slot>\n                    </template>\n                    <template #default=\"scope\">\n                        <slot v-if=\"columnItem.slot\" :name=\"columnItem.slot\" v-bind=\"scope\"></slot>\n                        <!-- 日期 -->\n                        <table-column-date v-else-if=\"columnItem.type === 'date'\" :value=\"getCellValue(scope.row, columnItem, scope.$index)\" :formate=\"columnItem.formate\" />\n                        <!-- 数字 -->\n                        <table-column-number v-else-if=\"columnItem.type === 'number'\" :value=\"getCellValue(scope.row, columnItem, scope.$index)\" :digit=\"columnItem.digit || 0\" />\n                        <!-- 图片 -->\n                        <table-column-image v-else-if=\"columnItem.type === 'image'\" v-bind=\"columnItem\" :value=\"getCellValue(scope.row, columnItem, scope.$index)\" />\n                        <!-- 枚举 -->\n                        <table-column-enum v-else-if=\"columnItem.type === 'enum'\" v-bind=\"columnItem\" :value=\"getCellValue(scope.row, columnItem, scope.$index)\" />\n                        <!-- 操作按钮 -->\n                        <table-column-action v-else-if=\"columnItem.type === 'action'\" v-bind=\"columnItem\" :row=\"scope.row\" />\n                    </template>\n                </el-table-column>\n            </template>\n        </el-table>\n        <div v-if=\"isShowPagination\" ref=\"paginationRef\" class=\"pagination-wrapper\">\n            <el-pagination v-bind=\"paginationData\" @size-change=\"pageSizeChangeHandle\" @current-change=\"currentPageChangeHandle\" />\n        </div>\n    </div>\n</template>\n<script setup lang=\"ts\">\nimport { type PaginationProps, type TableProps, ElTable, ElPagination, ElTableColumn } from \"element-plus\";\nimport { type Ref, onMounted, onUnmounted, ref, watch, nextTick } from \"vue\";\nimport { extend, debounce } from \"@yujinjin/utils\";\nimport { type DataTableColumn, type DataTableRef, dataTableProps, dataTableEmits } from \"./data-table\";\nimport tableColumnDate from \"./table-column-date.vue\";\nimport tableColumnNumber from \"./table-column-number.vue\";\nimport tableColumnImage from \"./table-column-image.vue\";\nimport tableColumnEnum from \"./table-column-enum.vue\";\nimport tableColumnAction from \"./table-column-action.vue\";\nimport { type NotReadonly } from \"@yujinjin/cms-components-modules/types\";\n\ndefineOptions({\n    name: \"DataTable\"\n});\n\ndefineSlots<{\n    default(): any;\n    [key: string]: (props: any) => any;\n}>();\n\nconst props = defineProps(dataTableProps);\n\nconst emits = defineEmits(dataTableEmits);\n\n// table 默认属性\nconst tableProps: Ref<Partial<TableProps<any>>> = ref({});\n\n// 数据列表\nconst dataList = ref([]);\n\n// 处理后的数据列表\nconst columnList: Ref<DataTableColumn<any>[]> = ref([]);\n\n// 查询是否正在加载\nconst isLoadingForSearch: Ref<boolean> = ref(false);\n\n// 数据分页属性\nconst paginationData: Ref<Partial<NotReadonly<PaginationProps>>> = ref({\n    total: 0, // 总记录数\n    currentPage: 1 // 当前页数\n});\n\nconst dataTablePanelRef: Ref<HTMLDivElement | null> = ref(null);\n\nconst paginationRef: Ref<HTMLDivElement | null> = ref(null);\n\n// 当选择项发生变化时会触发该事件\nconst selectionChangeHandle = function (selectRows) {\n    emits(\"update:selectRows\", selectRows);\n};\n\n// 初始化分页数据\nconst initPaginationData = function () {\n    if (!props.isShowPagination) {\n        return;\n    }\n    const { total, currentPage } = paginationData.value;\n    paginationData.value = Object.assign(\n        {\n            pageSize: 20,\n            layout: \"total, sizes, prev, pager, next, jumper\",\n            pageSizes: [10, 20, 30, 50, 100]\n            // background: true,\n            // size: \"small\"\n        },\n        props.pagination,\n        { total, currentPage }\n    );\n};\n\n// TODO: 收起/展开事件触发\n// 初始化table 最大高度\nconst initTableMaxHeight = async function () {\n    if (props.props && (props.props.height || props.props.maxHeight)) {\n        // 当前数据表格已经指定高度，就不再自动计算了\n        return;\n    }\n    await nextTick();\n    tableProps.value.maxHeight = dataTablePanelRef.value!.clientHeight - (paginationRef.value ? paginationRef.value.offsetHeight : 0) - 15;\n    if (tableProps.value.maxHeight < 100) {\n        tableProps.value.maxHeight = 100;\n    }\n    // console.info(\"=========initTableMaxHeight\", dataTablePanelRef.value.clientHeight, paginationRef.value.offsetHeight);\n};\n\n// 初始化table属性\nconst initTableProps = function () {\n    tableProps.value = Object.assign(\n        {\n            stripe: true, // 隔行变色\n            border: false, // 是否带有纵向边框\n            rowKey: \"id\",\n            // size: \"small\",\n            scrollbarAlwaysOn: true,\n            tooltipEffect: \"light\",\n            tooltipOptions: {\n                popperClass: \"cms-ellipsis-table-tooltip-popover\"\n            },\n            style: {\n                width: \"100%\"\n            },\n            maxHeight: tableProps.value.maxHeight\n        },\n        props.props || {}\n    );\n};\n\n// TODO: selectRows 事件\n\n// 初始化columns 数据\nconst initColumns = function () {\n    columnList.value = [];\n    props.columns.forEach(columnItem => {\n        const newColumnItem = extend(true, { isShow: true }, columnItem);\n        if (newColumnItem.type === \"action\" && newColumnItem.buttons && newColumnItem.buttons.length > 0) {\n            if (newColumnItem.fixed === undefined) {\n                newColumnItem.fixed = \"right\";\n            }\n            if (!newColumnItem.label) {\n                newColumnItem.label = \"操作\";\n            }\n        } else if (newColumnItem.type === \"index\" && !newColumnItem.index) {\n            newColumnItem.index = function (index) {\n                if (props.isShowPagination) {\n                    return (paginationData.value.currentPage! - 1) * paginationData.value.pageSize! + index + 1;\n                }\n                return index + 1;\n            };\n        } else if (!newColumnItem.type && !newColumnItem.formatter) {\n            newColumnItem.formatter = function (row, column, cellValue) {\n                return cellValue === null || cellValue === undefined ? \"-\" : cellValue;\n            };\n        }\n        columnList.value.push(newColumnItem);\n    });\n};\n\n// 查询数据\nconst queryDataList = async function (isInit = true) {\n    if (isLoadingForSearch.value) {\n        return;\n    }\n    isLoadingForSearch.value = true;\n    emits(\"search\", true);\n    try {\n        if (isInit && props.isShowPagination) {\n            paginationData.value.currentPage = 1;\n        }\n        let parameters = Object.assign({}, props.filters, props.isShowPagination ? { pageNo: paginationData.value.currentPage, pageSize: paginationData.value.pageSize } : {});\n        if (props.queryParametersProcess) {\n            parameters = props.queryParametersProcess(parameters);\n        }\n        let queryResult = await props.query(parameters);\n        if (props.queryResponseProcess) {\n            queryResult = props.queryResponseProcess(queryResult);\n        }\n        if (props.isShowPagination) {\n            dataList.value = queryResult.rows || [];\n            paginationData.value.total = queryResult.total || 0;\n        } else {\n            dataList.value = queryResult || [];\n        }\n    } catch (error) {\n        console.error(error);\n    }\n    isLoadingForSearch.value = false;\n    emits(\"search\", false);\n};\n\n// 获取当前数据列的值\nconst getCellValue = function (row, columnItem, index: number) {\n    if (columnItem.formatter) {\n        return columnItem.formatter(row, columnItem, columnItem.prop ? row[columnItem.prop] : null, index);\n    }\n    if (!columnItem.prop) {\n        return null;\n    }\n    if (columnItem.prop.split(\",\").length > 1) {\n        return columnItem.prop.split(\",\").map(key => row[key]);\n    }\n    return row[columnItem.prop];\n};\n\n// 分页中每页条目数据变换\nconst pageSizeChangeHandle = function (pageSize: number) {\n    paginationData.value.pageSize = pageSize;\n    queryDataList();\n};\n\n// 分页中的当前页码变换\nconst currentPageChangeHandle = function (currentPage) {\n    paginationData.value.currentPage = currentPage;\n    queryDataList(false);\n};\n\nwatch(\n    () => props.pagination,\n    () => {\n        initPaginationData();\n    },\n    { deep: true, immediate: true }\n);\n\nwatch(\n    () => props.props,\n    () => {\n        initTableProps();\n    },\n    { deep: true, immediate: true }\n);\n\nwatch(\n    () => props.columns,\n    () => {\n        initColumns();\n    },\n    { deep: true, immediate: true }\n);\n\n// window resize 事件函数\nlet resizeHandle: (e: UIEvent) => any;\n\nif (!props.props || (!props.props.height && !props.props.maxHeight)) {\n    resizeHandle = debounce(initTableMaxHeight, 100);\n    // 当前数据表格已经指定高度，就不再自动计算了\n    window.addEventListener(\"resize\", resizeHandle);\n}\n\nonMounted(async () => {\n    await initTableMaxHeight();\n    if (props.autoInitQuery) {\n        queryDataList();\n    }\n});\n\nonUnmounted(() => {\n    if (resizeHandle) {\n        window.removeEventListener(\"resize\", resizeHandle);\n    }\n});\n\ndefineExpose<DataTableRef>({\n    /** 初始化表格最大高度 */\n    initTableMaxHeight,\n\n    /** 查询数据列表 */\n    queryDataList,\n\n    /**\n     * 更新数据列显示状态\n     * @param columnKeys 显示列key值数组（不传值表示都展示）\n     */\n    updateTableColumnsShowStatus(columnKeys?: string[]) {\n        columnList.value.forEach(column => {\n            if (column.prop) {\n                column.isShow = !columnKeys || columnKeys.includes(column.prop);\n            }\n        });\n    }\n});\n</script>\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2025-01-02 18:01:06\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-02-11 15:32:50\n * @项目的路径: \\CMS-components\\packages\\components\\input-form\\src\\input-form.ts\n * @描述: input-form组件属性、事件声明\n */\nimport { type PropType, type ExtractPublicPropTypes } from \"vue\";\nimport { type FormProps, type FormItemProps, type FormItemRule, type FormInstance, type FormValidateCallback, type FormValidationResult } from \"element-plus\";\nimport { buildProps } from \"@yujinjin/cms-components-utils\";\nimport { type NotReadonly } from \"../../types\";\nimport { type InputFieldProps } from \"@yujinjin/cms-components-modules/input-field\";\n\nexport type InputFormField = InputFieldProps & {\n    /** 查询项的名称，同时也是组件的双向绑定值属性 */\n    name: string;\n\n    /** 当前数据字段插槽 */\n    slot?: string;\n\n    /** 当前内容是否去除空格，只针对input输入框有效。默认false */\n    trim?: boolean;\n\n    /**  字段标签 */\n    label?: string;\n\n    /** 选项的值 */\n    value?: any;\n\n    /** label宽度 */\n    labelWidth?: number;\n\n    /** 表单组件的宽度 */\n    inputWidth?: number;\n\n    /** 组件所占的列数,默认是24 */\n    span?: number;\n\n    /** 是否显示 */\n    isShow?: boolean;\n\n    /** 表单验证规则 */\n    rules?: FormItemRule | FormItemRule[];\n\n    /** Form Item 属性 */\n    formItemProps?: Partial<NotReadonly<FormItemProps>>;\n};\n\nexport type InputFormSlotScope = {\n    /** 当前表单字段 */\n    field: InputFormField;\n\n    /** 字段值 */\n    value: any;\n\n    /** 表单值 */\n    formValue: Record<string, any>;\n\n    /** 所有表单字段列表 */\n    formFields: InputFormField[];\n};\n\nexport const inputFormProps = buildProps({\n    fields: {\n        type: Array as PropType<InputFormField[]>,\n        default() {\n            return [];\n        },\n        required: true\n    },\n    isLoading: {\n        type: Boolean,\n        default: false\n    },\n    // 一行表单数\n    columns: {\n        type: Number,\n        default: 1\n    },\n    // form表单属性\n    props: {\n        type: Object as PropType<Partial<NotReadonly<FormProps>>>\n    },\n    // form表单事件\n    events: {\n        type: Object as PropType<Record<string, (...args: any[]) => any>>\n    },\n    // 表单数据默认值\n    value: {\n        type: Object as PropType<Record<string, any>>,\n        default: function () {\n            return {};\n        }\n    }\n});\n\nexport type InputFormProps = NotReadonly<ExtractPublicPropTypes<typeof inputFormProps>>;\n\nexport const inputFormEmits = {\n    fieldValueChange: (field: InputFormField, fieldValue: any, formFields: InputFormField[], inputFormValue: Record<string, any>) => true\n};\n\nexport type InputFormEmits = typeof inputFormEmits;\n\n/** 数据输入表单实例 */\nexport interface InputFormRef {\n    /** 获取表单的value */\n    getInputValue: () => Record<string, any> | null;\n\n    /** 设置表单的属性值 */\n    setInputPropertyValue: (propertyName: string, value: any) => void;\n\n    /** 修改表单字段属性 */\n    changeFormFields: (callback: (formFields: InputFormField[]) => void) => void;\n\n    // 获取form Ref\n    getFormRef: () => FormInstance;\n\n    // 表单验证\n    validate: (callback?: FormValidateCallback) => FormValidationResult;\n}\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2025-01-06 10:20:51\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-06 10:22:22\n * @项目的路径: \\CMS-components\\packages\\components\\input-form\\src\\constants.ts\n * @描述: input-form组件常量集合\n */\n// 数据输入表单中的组件默认属性\nexport const INPUT_FORM_FIELD_DEFAULT_ATTRIBUTES = {\n    // input 输入框默认配置选项(具体见element plus Input 输入框文档)\n    input: {\n        placeholder: \"请输入\",\n        clearable: true\n    },\n    // autocomplete 自动补全输入框默认配置选项(具体见element plus Autodcomplete 输入框文档)\n    autocomplete: {\n        placeholder: \"请输入\",\n        clearable: true\n    },\n    // select 选择器默认配置选项（具体见element plus Select 选择器文档）\n    select: {\n        clearable: true,\n        collapseTags: true,\n        collapseTagsTooltip: true,\n        filterable: true,\n        placeholder: \"请选择\"\n    },\n    // Cascader 级联选择器默认配置选项（具体见element plus Cascader 选择器文档）\n    cascader: {\n        clearable: true,\n        collapseTags: true,\n        filterable: true,\n        placeholder: \"请选择\"\n    },\n    // Checkbox 多选框默认配置选项（具体见element plus Checkbox 文档）\n    checkbox: {},\n    // Radio 单选框默认配置选项（具体见element plus Radio文档）\n    radio: {},\n    // ColorPicker 颜色选择器默认配置选项（具体见element plus ColorPicker 文档）\n    colorPicker: {},\n    // date-picker 日期时间选择器（具体见element plus date-picker文档）\n    datePicker: {\n        //year/month/date/dates/datetime/week/datetimerange/daterange/monthrange\n        year: {\n            type: \"year\",\n            placeholder: \"请选择\"\n        },\n        month: {\n            type: \"month\",\n            placeholder: \"请选择\",\n            valueFormat: \"YYYY-MM\"\n        },\n        date: {\n            type: \"date\",\n            placeholder: \"请选择\",\n            valueFormat: \"YYYY-MM-DD\",\n            disabledDate: function (time) {\n                return time.getTime() > Date.now();\n            }\n        },\n        dates: {\n            type: \"dates\",\n            placeholder: \"请选择一个或者多个日期\",\n            valueFormat: \"YYYY-MM-DD\"\n        },\n        datetime: {\n            type: \"datetime\",\n            placeholder: \"请选择日期和时间\",\n            valueFormat: \"YYYY-MM-DD HH:mm:ss\"\n        },\n        week: {\n            type: \"week\",\n            placeholder: \"请选择\",\n            format: \"[第]ww[周]\"\n        },\n        datetimerange: {\n            type: \"datetimerange\",\n            startPlaceholder: \"开始日期时间\",\n            endPlaceholder: \"结束日期时间\",\n            valueFormat: \"YYYY-MM-DD HH:mm:ss\",\n            rangeSeparator: \"-\"\n        },\n        daterange: {\n            type: \"daterange\",\n            startPlaceholder: \"开始日期\",\n            endPlaceholder: \"结束日期\",\n            valueFormat: \"YYYY-MM-DD\",\n            rangeSeparator: \" - \"\n        },\n        monthrange: {\n            type: \"monthrange\",\n            startPlaceholder: \"开始月份\",\n            endPlaceholder: \"结束月份\",\n            valueFormat: \"YYYY-MM\",\n            rangeSeparator: \"-\"\n        }\n    },\n    // TimePicker 时间选择器默认配置选项（具体见element plus TimePicker文档）\n    timePicker: {\n        placeholder: \"请选择\"\n    },\n    // TimeSelect 时间选择默认配置选项（具体见element plus TimeSelect文档）\n    timeSelect: {\n        placeholder: \"请选择\"\n    },\n    // Input Number 数字输入框默认配置选项（具体见element plus Input Number文档）\n    inputNumber: {\n        placeholder: \"请输入\",\n        valueOnClear: null\n    },\n    // Slider 滑块默认配置选项（具体见element plus Slider文档）\n    slider: {},\n    // Switch 开关默认配置选项（具体见element plus Switch文档）\n    switch: {},\n    // 图片上传配置选项\n    imgUpload: {},\n    // web 富文本框编辑器\n    webEditor: {\n        style: {\n            width: \"100%\"\n        }\n    }\n};\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2025-01-02 18:01:10\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-21 17:31:12\n * @项目的路径: \\CMS-components\\packages\\components\\input-form\\src\\input-form.vue\n * @描述: 输入表单\n-->\n<template>\n    <div v-loading=\"isLoading\" class=\"cms-input-form\">\n        <el-form v-bind=\"formProps\" ref=\"inputFormRef\" :model=\"inputFormValue\">\n            <el-row>\n                <template v-for=\"(field, index) in formFields\" :key=\"(field.name || '') + '_' + index\">\n                    <el-col v-if=\"field.isShow !== false\" :key=\"index\" :span=\"field.span\">\n                        <el-form-item v-bind=\"field.formItemProps\">\n                            <input-field v-bind=\"field\" :model-value=\"getObjectProperty(inputFormValue, field.name)\" @update:model-value=\"value => setFieldValue(value, field)\">\n                                <!-- 自定义插件，插槽 -->\n                                <slot\n                                    v-if=\"field.slot\"\n                                    :name=\"field.slot\"\n                                    :field=\"field\"\n                                    :value=\"getObjectProperty(inputFormValue, field.name)\"\n                                    :form-value=\"inputFormValue\"\n                                    :form-fields=\"formFields\"\n                                ></slot>\n                            </input-field>\n                        </el-form-item>\n                    </el-col>\n                </template>\n            </el-row>\n        </el-form>\n    </div>\n</template>\n<script setup lang=\"ts\">\nimport { type FormInstance, type FormValidateCallback, ElForm, ElRow, ElCol, ElFormItem } from \"element-plus\";\nimport { type Ref, ref, watch } from \"vue\";\nimport { setObjectProperty, getObjectProperty, extend } from \"@yujinjin/utils\";\nimport { type InputFormField, type InputFormRef, type InputFormSlotScope, inputFormProps, inputFormEmits } from \"./input-form\";\nimport { INPUT_FORM_FIELD_DEFAULT_ATTRIBUTES } from \"./constants\";\nimport { InputField } from \"@yujinjin/cms-components-modules/input-field\";\n\ndefineOptions({\n    name: \"InputForm\"\n});\n\ndefineSlots<{\n    [key: string]: (props: InputFormSlotScope) => any;\n}>();\n\nconst props = defineProps(inputFormProps);\n\nconst emits = defineEmits(inputFormEmits);\n\n// 表单属性\nconst formProps = ref({});\n\n// form ref\nconst inputFormRef = ref<FormInstance>();\n\n// 表单数据\nconst inputFormValue: Ref<Record<string, any>> = ref({});\n\n// 表单字段列表\nconst formFields: Ref<InputFormField[]> = ref([]);\n\n// 输入字段列表（由于formField和inputField属性并不完全一致，使用\"v-bind=formField\" vue 会提示警告“Extraneous non-props attributes”）\n// const getInputFieldProps = function (field: InputFormField) {\n//     const props = {};\n//     Object.keys(inputFieldProps).forEach(key => {\n//         if (Object.prototype.hasOwnProperty.call(field, key)) {\n//             props[key] = field[key];\n//         }\n//     });\n//     return props;\n// };\n\n// 初始化表单数据\nconst initInputFormValue = function () {\n    inputFormValue.value = extend(true, {}, props.value);\n    formFields.value.forEach(field => {\n        if (!field.name) {\n            console.error(\"字段没有属性name值\", field);\n            return;\n        }\n        // 设置field 的value值\n        let fieldValue = getObjectProperty(inputFormValue.value, field.name);\n        if (fieldValue === undefined) {\n            fieldValue = Object.prototype.hasOwnProperty.call(field, \"value\") ? field.value : null;\n            setObjectProperty(inputFormValue.value, field.name, fieldValue);\n            // emits(\"fieldValueChange\", field, fieldValue, formFields.value, inputFormValue.value);\n        }\n    });\n};\n\n// 生成表单字段列表\nconst generateFormFields = function () {\n    formFields.value = [];\n    if (!props.fields || props.fields.length === 0) {\n        return;\n    }\n    const style = { width: \"400px\" };\n    if (props.columns === 2) {\n        style.width = \"220px\";\n    }\n    props.fields.forEach(field => {\n        if (!field.name) {\n            console.error(\"字段没有属性name值\", field);\n            return;\n        }\n        const newField: InputFormField = extend(true, { isShow: true, type: \"input\" }, field);\n        if (!newField.span) {\n            newField.span = 24 / props.columns;\n        }\n        if (!newField.formItemProps) {\n            newField.formItemProps = {};\n        }\n        if (!newField.props) {\n            newField.props = {};\n        }\n        if (newField.type && INPUT_FORM_FIELD_DEFAULT_ATTRIBUTES[newField.type]) {\n            if (newField.type === \"datePicker\") {\n                newField.props = Object.assign({}, INPUT_FORM_FIELD_DEFAULT_ATTRIBUTES[newField.type][newField.props.type || \"date\"], newField.props);\n            } else {\n                if (!newField.props.placeholder) {\n                    newField.props.placeholder = (INPUT_FORM_FIELD_DEFAULT_ATTRIBUTES[newField.type].placeholder || \"\") + (newField.label || \"\");\n                }\n                newField.props = Object.assign({}, INPUT_FORM_FIELD_DEFAULT_ATTRIBUTES[newField.type], newField.props);\n            }\n        }\n        if (newField.inputWidth) {\n            newField.props!.style = newField.props!.style || {};\n            newField.props!.style.width = newField.inputWidth + \"px\";\n        } else {\n            newField.props!.style = Object.assign({}, style, newField.props!.style);\n        }\n        if (newField.label) {\n            newField.formItemProps.label = newField.label;\n        }\n        if (newField.labelWidth) {\n            newField.formItemProps.labelWidth = newField.labelWidth;\n        }\n        if (!newField.formItemProps.prop) {\n            newField.formItemProps.prop = newField.name;\n        }\n        if (newField.rules) {\n            newField.formItemProps.rules = newField.rules;\n        }\n        formFields.value.push(newField);\n    });\n    initInputFormValue();\n};\n\n// 设置字段的值\nconst setFieldValue = function (fieldValue, field: InputFormField) {\n    if (field.type === \"input\" && field.trim === true && fieldValue) {\n        // 注意：当trim为true用户手动输入的内容无法空格，除非通过粘贴方式或回过头来在内容中间空格\n        fieldValue = fieldValue.trim();\n    }\n    setObjectProperty(inputFormValue.value, field.name, fieldValue);\n    emits(\"fieldValueChange\", field, fieldValue, formFields.value, inputFormValue.value);\n};\n\nwatch(\n    () => props.fields,\n    () => {\n        generateFormFields();\n    },\n    {\n        immediate: true,\n        deep: true\n    }\n);\n\nwatch(\n    () => props.value,\n    () => {\n        initInputFormValue();\n    },\n    {\n        deep: true\n    }\n);\n\nwatch(\n    () => props.props,\n    value => {\n        formProps.value = Object.assign(\n            {\n                labelWidth: 120,\n                labelSuffix: \"：\"\n            },\n            value\n        );\n    },\n    {\n        immediate: true,\n        deep: true\n    }\n);\n\ndefineExpose<InputFormRef>({\n    // 获取表单的value\n    getInputValue: function () {\n        return JSON.parse(JSON.stringify(inputFormValue.value));\n    },\n    /**\n     * 设置表单的属性值\n     * @param propertyName 属性名\n     * @param value 属性值\n     */\n    setInputPropertyValue: function (propertyName: string, value: any) {\n        const findField = formFields.value.find(field => field.name === propertyName);\n        if (findField) {\n            setFieldValue(value, findField);\n        } else {\n            setObjectProperty(inputFormValue.value, propertyName, value);\n        }\n    },\n    // 修改当前form字段的属性\n    changeFormFields: function (callback: (formFields: InputFormField[]) => void) {\n        if (callback && typeof callback === \"function\") {\n            callback(formFields.value);\n        } else {\n            console.error(\"callback 必须是一个函数\");\n        }\n    },\n    // 获取form Ref\n    getFormRef: function () {\n        return inputFormRef.value!;\n    },\n    // 表单验证\n    validate(callback?: FormValidateCallback) {\n        return inputFormRef.value!.validate(callback);\n    }\n});\n</script>\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2025-01-06 19:28:41\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-02-10 16:31:39\n * @项目的路径: \\CMS-components\\packages\\components\\search-form\\src\\search-form.ts\n * @描述: search-form组件属性、事件声明\n */\nimport { type PropType, type ExtractPublicPropTypes } from \"vue\";\nimport { type ButtonProps } from \"element-plus\";\nimport { buildProps } from \"@yujinjin/cms-components-utils\";\nimport { type NotReadonly } from \"../../types\";\nimport { type SearchFieldProps } from \"@yujinjin/cms-components-modules/search-field\";\n\n// 搜索表单按钮\nexport type SearchFormButton = NotReadonly<Partial<ButtonProps>> & {\n    /** 当前按钮操作CODE */\n    handleCode?: string;\n\n    /** 按钮文案内容 */\n    contents?: string;\n\n    /** 自定义插槽名称（如有值其他选项无效） */\n    slot?: string;\n\n    /** 按钮是否正在加载 */\n    // isLoading?: boolean;\n\n    /** 是否显示*/\n    isShow?: boolean;\n\n    /** 按钮点击函数事件 */\n    click?: (button: SearchFormButton) => Promise<void> | void;\n};\n\n// 搜索表单字段\nexport type SearchFormField = SearchFieldProps & {\n    /** 查询项的名称，同时也是组件的双向绑定值属性 */\n    name: string;\n\n    /** 当前数据字段插槽 */\n    slot?: string;\n\n    /** 当前内容是否去除空格，只针对input输入框有效。默认false */\n    trim?: boolean;\n\n    /**  选项的标签名称 */\n    label?: string;\n\n    /** 当前字段的值 */\n    value?: any;\n\n    /** 当前字段的默认值 */\n    defaultValue?: any;\n\n    /** label宽度 */\n    labelWidth?: number;\n\n    /** 表单组件的宽度 */\n    inputWidth?: number;\n\n    /** 是否显示 */\n    isShow?: boolean;\n};\n\nexport type SearchFormSlotScope = {\n    // 当前表单字段\n    field: SearchFormField;\n\n    // 当前表单字段列表\n    formFields: SearchFormField[];\n};\n\nexport const searchFormProps = buildProps({\n    // 查询表单字段列表 [{name: 查询项的名称，同时也是父级组件的字段属性, label: 选项的标签名称, value: 选项的值, type: 组件的类型, labelWidth: label宽度,  inputWidth: 表单宽度, data: 数据（比如：select的选项值列表）, props: 组件的自定义选项(可无), events: 组件自定义事件 slot: 自定义插槽名称（可无，如有值其他选项无效）}]\n    fields: {\n        type: Array as PropType<SearchFormField[]>,\n        default() {\n            return [];\n        },\n        required: true\n    },\n    // 是否正在搜索加载\n    isSearchLoading: {\n        type: Boolean,\n        default: false\n    },\n    // 是否显示折叠\n    isShowCollapse: {\n        type: Boolean,\n        default: true\n    },\n    // 是否显示搜索按钮\n    isShowSearchButton: {\n        type: Boolean,\n        default: true\n    },\n    // 是否显示重置按钮\n    isShowResetButton: {\n        type: Boolean,\n        default: true\n    },\n    // label宽度\n    labelWidth: {\n        type: Number,\n        default: 120\n    },\n    // 表单宽度\n    inputWidth: {\n        type: Number,\n        default: 200\n    },\n    // 标签的后缀\n    labelSuffix: {\n        type: String,\n        default: \"：\"\n    },\n    // 操作按钮\n    buttons: {\n        type: Array as PropType<SearchFormButton[]>,\n        default() {\n            return [];\n        }\n    }\n});\n\nexport type SearchFormProps = NotReadonly<ExtractPublicPropTypes<typeof searchFormProps>>;\n\nexport const searchFormEmits = {\n    // 当前表单字段变化事件\n    fieldsChange: (formFields: SearchFormField[]) => Array.isArray(formFields),\n\n    // 搜索操作\n    search: (searchFormValue: Record<string, any>) => searchFormValue !== null && typeof searchFormValue === \"object\",\n\n    // 表单字段值变化事件\n    change: (formField: SearchFormField, formFields: SearchFormField[]) => formField !== null && typeof formField === \"object\" && Array.isArray(formFields),\n\n    // 折叠状态变化事件\n    collapseStatusChange: (status: boolean) => typeof status === \"boolean\"\n};\n\nexport type SearchFormEmits = typeof searchFormEmits;\n\n// 搜索表单实例\nexport interface SearchFormRef {\n    // 修改当前form字段的属性\n    changeFormFields: (callback: (formFields: SearchFormField[]) => void) => void;\n\n    // 获取当前搜索表单的数据对象\n    getValue: () => Record<string, any>;\n}\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2025-01-07 10:52:30\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-22 11:42:51\n * @项目的路径: \\CMS-components\\packages\\components\\search-form\\src\\constants.ts\n * @描述: search-form组件常量集合\n */\n// 查询表单中的组件默认属性\nexport const SEARCH_FORM_FIELD_DEFAULT_ATTRIBUTES = {\n    // input 输入框默认配置选项(具体见element Input 输入框文档)\n    input: {\n        placeholder: \"请输入\",\n        clearable: true\n    },\n    // Input Number 数字输入框默认配置选项(具体见element plus Input Number 输入框文档)\n    inputNumber: {\n        placeholder: \"请输入\",\n        controls: false,\n        valueOnClear: null\n    },\n    // select 选择器默认配置选项（具体见element Select 选择器文档）\n    select: {\n        clearable: true,\n        collapseTags: true,\n        filterable: true,\n        placeholder: \"请选择\"\n    },\n    // date-picker 日期时间选择器（具体见element plus date-picker文档）\n    datePicker: {\n        //year/month/date/dates/datetime/week/datetimerange/daterange/monthrange\n        year: {\n            type: \"year\",\n            placeholder: \"请选择\"\n        },\n        month: {\n            type: \"month\",\n            placeholder: \"请选择\",\n            valueFormat: \"YYYY-MM\"\n        },\n        date: {\n            type: \"date\",\n            placeholder: \"请选择\",\n            valueFormat: \"YYYY-MM-DD\",\n            disabledDate: function (time) {\n                return time.getTime() > Date.now();\n            }\n        },\n        dates: {\n            type: \"dates\",\n            placeholder: \"请选择一个或者多个日期\",\n            valueFormat: \"YYYY-MM-DD\"\n        },\n        datetime: {\n            type: \"datetime\",\n            placeholder: \"请选择日期和时间\",\n            valueFormat: \"YYYY-MM-DD HH:mm:ss\"\n        },\n        week: {\n            type: \"week\",\n            placeholder: \"请选择\",\n            format: \"[第]ww[周]\"\n        },\n        datetimerange: {\n            type: \"datetimerange\",\n            startPlaceholder: \"开始日期时间\",\n            endPlaceholder: \"结束日期时间\",\n            name: null,\n            valueFormat: \"YYYY-MM-DD HH:mm:ss\",\n            rangeSeparator: \"-\",\n            style: {\n                width: \"250px\"\n            }\n        },\n        daterange: {\n            type: \"daterange\",\n            startPlaceholder: \"开始日期\",\n            endPlaceholder: \"结束日期\",\n            valueFormat: \"YYYY-MM-DD\",\n            name: null,\n            rangeSeparator: \" - \",\n            style: {\n                width: \"200px\"\n            }\n        },\n        monthrange: {\n            type: \"monthrange\",\n            startPlaceholder: \"开始月份\",\n            endPlaceholder: \"结束月份\",\n            valueFormat: \"YYYY-MM\",\n            name: null,\n            rangeSeparator: \"-\"\n        }\n    }\n};\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2025-01-06 19:28:46\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-21 10:47:02\n * @项目的路径: \\CMS-components\\packages\\components\\search-form\\src\\search-form.vue\n * @描述: 搜索表单\n-->\n<template>\n    <div class=\"cms-search-panel\" :class=\"{ collapse: !collapseStatus }\" :style=\"{ paddingRight: collapseStatus ? '' : buttonBoxWidth + 'px' }\">\n        <template v-for=\"(field, index) in formFields\" :key=\"(field.name || '') + '_' + index\">\n            <div v-if=\"field.isShow !== false\" class=\"field-box\">\n                <div v-if=\"field.label\" class=\"label-text\" :style=\"{ width: (field.labelWidth || labelWidth) + 'px' }\">{{ field.label }}{{ labelSuffix }}</div>\n                <div class=\"input-box\" :style=\"{ width: (field.inputWidth || inputWidth) + 'px' }\">\n                    <search-field v-model=\"field.value\" v-bind=\"field\" @change=\"changeHandle(field)\">\n                        <template v-if=\"field.slot\">\n                            <slot :name=\"field.slot\" :field=\"field\" :form-fields=\"formFields\"></slot>\n                        </template>\n                    </search-field>\n                </div>\n            </div>\n        </template>\n        <!-- 占位 -->\n        <div v-show=\"isShowCollapse && collapseStatus\" class=\"placeholder-button-box\" :style=\"{ width: buttonBoxWidth + 'px' }\"></div>\n        <div ref=\"buttonBoxRef\" class=\"button-box\">\n            <el-button v-for=\"(button, index) in extendButtons\" :key=\"(button.handleCode || '') + '_' + index\" v-bind=\"button\" @click=\"extendButtonClickHandle(button)\">\n                {{ button.contents }}\n            </el-button>\n            <el-button v-if=\"isShowSearchButton\" :loading=\"isSearchLoading\" type=\"primary\" @click=\"searchHandle\">查询</el-button>\n            <el-button v-if=\"isShowResetButton\" @click=\"resetHandle\">重置</el-button>\n            <el-button v-if=\"isShowCollapse\" type=\"primary\" link @click=\"collapseStatus = !collapseStatus\">{{ collapseStatus ? \"收起\" : \"展开\" }}</el-button>\n        </div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { type Ref, onMounted, ref, markRaw, watch, nextTick } from \"vue\";\nimport { ElButton } from \"element-plus\";\nimport { setObjectProperty, extend, dateFormat } from \"@yujinjin/utils\";\nimport { type SearchFormButton, type SearchFormField, type SearchFormRef, type SearchFormSlotScope, searchFormProps, searchFormEmits } from \"./search-form\";\nimport { SEARCH_FORM_FIELD_DEFAULT_ATTRIBUTES } from \"./constants\";\nimport { SearchField } from \"@yujinjin/cms-components-modules/search-field\";\n\ndefineOptions({\n    name: \"SearchForm\"\n});\n\ndefineSlots<{\n    [key: string]: (props: SearchFormSlotScope) => any;\n}>();\n\nconst props = defineProps(searchFormProps);\n\n// fieldsChange: 当前表单字段变化事件; search: 搜索操作; change: 表单字段值变化事件;\n// collapseStatusChange: 折叠状态变化事件\nconst emits = defineEmits(searchFormEmits);\n\n// search 表单字段列表\nconst formFields: Ref<SearchFormField[]> = ref([]);\n\n// 扩展按钮列表\nconst extendButtons = ref<SearchFormButton[]>([]);\n\n// 展开状态\nconst collapseStatus: Ref<boolean> = ref(true);\n\n// 按钮容器ref\nconst buttonBoxRef: Ref<HTMLDivElement | null> = ref(null);\n\n// 操作按钮长度\nconst buttonBoxWidth: Ref<number> = ref(0);\n\n// 生成表单字段列表\nconst generateFormFields = function () {\n    formFields.value = [];\n    if (!props.fields || props.fields.length === 0) {\n        return;\n    }\n    props.fields.forEach(field => {\n        if (!field.name) {\n            console.error(\"字段没有属性name值\", field);\n            return;\n        }\n        const newField = extend(true, { isShow: true, type: \"primary\", value: null }, field);\n        if (Object.prototype.hasOwnProperty.call(newField, \"defaultValue\")) {\n            newField.value = newField.defaultValue;\n        }\n        if (newField.type && SEARCH_FORM_FIELD_DEFAULT_ATTRIBUTES[newField.type]) {\n            if (!newField.props) {\n                newField.props = {};\n            }\n            if (newField.type === \"datePicker\") {\n                newField.props = Object.assign({}, SEARCH_FORM_FIELD_DEFAULT_ATTRIBUTES[newField.type][newField.props.type || \"date\"], newField.props);\n                if (newField.defaultValue && newField.props.valueFormat) {\n                    newField.value = dateFormat(newField.defaultValue, newField.props.valueFormat);\n                }\n            } else {\n                if (!newField.props.placeholder) {\n                    newField.props.placeholder = (SEARCH_FORM_FIELD_DEFAULT_ATTRIBUTES[newField.type].placeholder || \"\") + (newField.label || \"\");\n                }\n                newField.props = Object.assign({}, SEARCH_FORM_FIELD_DEFAULT_ATTRIBUTES[newField.type], newField.props);\n            }\n        }\n        formFields.value.push(newField);\n    });\n    emits(\"fieldsChange\", formFields.value);\n};\n\n// 生成扩展按钮列表\nconst generateExtendButtons = function () {\n    extendButtons.value = [];\n    if (!props.buttons || props.buttons.length === 0) {\n        return [];\n    }\n    props.buttons.forEach(button => {\n        button = Object.assign({ loading: false }, button);\n        if (button.icon && typeof button.icon === \"object\") {\n            button.icon = markRaw(button.icon);\n        }\n        extendButtons.value.push(button);\n    });\n};\n\n// 触发window resize 事件，通常是为了让datatable最大高度重新计算\nconst triggerResizeEvent = async function () {\n    // let resizeEvent = new Event('resize');\n    // resizeEvent.initEvent('resize', true, true)\n    await nextTick();\n    window.dispatchEvent(new Event(\"resize\"));\n};\n\nconst init = function () {\n    buttonBoxWidth.value = buttonBoxRef.value!.offsetWidth;\n};\n\n// 获取当前搜索表单的数据对象\nconst getSearchFormValue = function () {\n    const formValue = {};\n    formFields.value.forEach(field => {\n        setObjectProperty(formValue, field.name, field.value);\n    });\n    return formValue;\n};\n\n// 搜索操作\nconst searchHandle = function () {\n    emits(\"search\", getSearchFormValue());\n};\n\n// 重置操作\nconst resetHandle = function () {\n    props.fields.forEach((field, index) => {\n        if (Object.prototype.hasOwnProperty.call(field, \"defaultValue\")) {\n            formFields.value[index].value = formFields.value[index].props?.valueFormat ? dateFormat(field.defaultValue, formFields.value[index].props?.valueFormat) : field.defaultValue;\n        } else if (Object.prototype.hasOwnProperty.call(field, \"value\")) {\n            formFields.value[index].value = field.value;\n        } else {\n            formFields.value[index].value = null;\n        }\n    });\n    searchHandle();\n};\n\n// 查询表单数值变化\nconst changeHandle = function (field) {\n    emits(\"change\", field, formFields.value);\n};\n\n// 扩展按钮点击事件\nconst extendButtonClickHandle = async function (button) {\n    if (!button.click || button.loading) {\n        return;\n    }\n    button.loading = true;\n    try {\n        await button.click();\n    } catch (error) {\n        console.error(error);\n    }\n    button.loading = false;\n};\n\nwatch(\n    () => props.fields,\n    () => {\n        generateFormFields();\n    },\n    {\n        immediate: true,\n        deep: true\n    }\n);\n\nwatch(\n    () => props.buttons,\n    () => {\n        generateExtendButtons();\n    },\n    {\n        immediate: true,\n        deep: true\n    }\n);\n\nwatch(collapseStatus, () => {\n    emits(\"collapseStatusChange\", collapseStatus.value);\n    triggerResizeEvent();\n});\n\nonMounted(async () => {\n    await nextTick();\n    init();\n    triggerResizeEvent();\n});\n\ndefineExpose<SearchFormRef>({\n    // 修改当前form字段的属性\n    changeFormFields: function (callback: (formFields: SearchFormField[]) => void) {\n        if (callback && typeof callback === \"function\") {\n            callback(formFields.value);\n        } else {\n            console.error(\"callback 必须是一个函数\");\n        }\n    },\n    // 获取当前搜索表单的数据对象\n    getValue: getSearchFormValue\n});\n</script>\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2025-01-08 15:00:06\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-15 11:38:36\n * @项目的路径: \\CMS-components\\packages\\components\\dialog-form\\src\\dialog-form.ts\n * @描述: dialog-form组件属性、事件声明\n */\nimport { type PropType, type ExtractPublicPropTypes, type Component } from \"vue\";\nimport { type FormValidateCallback, type FormValidationResult, type ButtonProps, type DialogProps, type FormInstance } from \"element-plus\";\nimport { buildProps } from \"@yujinjin/cms-components-utils\";\nimport { type NotReadonly } from \"../../types\";\nimport { type InputFormProps, type InputFormField } from \"@yujinjin/cms-components-modules/input-form\";\n\n// 弹窗表单按钮\nexport type DialogFormButton = NotReadonly<Partial<ButtonProps>> & {\n    /** 当前按钮操作CODE */\n    handleCode?: string;\n\n    /** 按钮文案内容 */\n    contents?: string;\n\n    /** 自定义图标 */\n    customIcon?: string | Component;\n\n    /** 自定义插槽名称（如有值其他选项无效） */\n    slot?: string;\n\n    /** 按钮是否正在加载 */\n    // isLoading?: boolean;\n\n    /** 是否显示（如果不想销毁当前组件数据可以使用此属性） */\n    isShow?: boolean;\n\n    /** 按钮点击函数事件（注入：返回false或者异常不会自动关闭弹窗） */\n    click?: (inputFormValue: Record<string, any>, formRef: FormInstance | null, button: DialogFormButton) => Promise<void | boolean> | void | boolean;\n};\n\nexport type DialogFormButtonSlotScope = {\n    button: DialogFormButton;\n};\n\nexport const dialogFormProps = buildProps({\n    isShow: {\n        type: Boolean,\n        default: true\n    },\n    dialogProps: {\n        type: Object as PropType<Partial<NotReadonly<DialogProps>>>\n    },\n    buttons: {\n        type: Array as PropType<DialogFormButton[]>\n    },\n    inputFormProps: {\n        type: Object as PropType<InputFormProps>\n    }\n});\n\nexport type DialogFormProps = NotReadonly<ExtractPublicPropTypes<typeof dialogFormProps>>;\n\nexport const dialogFormEmits = {\n    // 表单数值的变化\n    fieldValueChange: (field: InputFormField, fieldValue: any, formFields: InputFormField[], inputValue: Record<string, any>) => true,\n\n    // 弹窗关闭事件\n    close: () => true\n};\n\nexport type DialogFormEmits = typeof dialogFormEmits;\n\n// 弹窗表单实例\nexport interface DialogFormRef {\n    /** 获取表单的value */\n    getInputValue: () => Record<string, any>;\n\n    /**\n     * 设置表单的属性值\n     * @param propertyName 属性名\n     * @param value 属性值\n     */\n    setInputPropertyValue: (propertyName: string, value: any) => void;\n\n    /** 修改当前form字段的属性 */\n    changeFormFields: (callback: (formFields: InputFormField[]) => void) => void;\n\n    /** 修改当前生成的button按钮值 */\n    changeButtons: (callback: (actionButtons: DialogFormButton[]) => void) => void;\n\n    /** 获取form Ref */\n    getFormRef: () => FormInstance;\n\n    /** 表单验证 */\n    validate: (callback?: FormValidateCallback) => FormValidationResult;\n}\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2025-01-08 15:00:10\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-21 17:16:43\n * @项目的路径: \\CMS-components\\packages\\components\\dialog-form\\src\\dialog-form.vue\n * @描述: 弹窗表单\n-->\n<template>\n    <el-dialog v-if=\"isShow\" v-model=\"dialogVisible\" v-bind=\"dialogInnerProps\" class=\"cms-common-dialog cms-form-dialog\" @closed=\"dialogClosed\">\n        <slot></slot>\n        <input-form v-bind=\"inputFormProps\" ref=\"inputFormRef\" @field-value-change=\"inputFormFieldValueChange\">\n            <template v-for=\"name in slots\" #[name]=\"scope\">\n                <slot :name=\"name\" v-bind=\"scope\"></slot>\n            </template>\n        </input-form>\n        <template v-if=\"actionButtons.length > 0\" #footer>\n            <div class=\"dialog-footer\">\n                <template v-for=\"(button, index) in actionButtons\" :key=\"(button.handleCode || '') + '_' + index\">\n                    <template v-if=\"button.isShow\">\n                        <slot v-if=\"button.slot\" :name=\"button.slot\" :button=\"button\"></slot>\n                        <el-button v-else :key=\"(button.handleCode || '') + '_' + index\" v-bind=\"button\" @click=\"clickHandle(button)\">\n                            <template v-if=\"button.customIcon\">\n                                <i v-if=\"typeof button.customIcon === 'string'\" :class=\"[button.customIcon]\"></i>\n                                <el-icon v-else><component :is=\"button.customIcon\" /></el-icon>\n                            </template>\n                            {{ button.contents }}\n                        </el-button>\n                    </template>\n                </template>\n            </div>\n        </template>\n    </el-dialog>\n</template>\n<script setup lang=\"ts\">\nimport { type Ref, ref, markRaw, watch, computed } from \"vue\";\nimport { type DialogProps, type FormValidateCallback, ElDialog, ElButton, ElIcon } from \"element-plus\";\nimport { type NotReadonly } from \"../../types\";\nimport { type DialogFormButton, type DialogFormRef, type DialogFormButtonSlotScope, dialogFormProps, dialogFormEmits } from \"./dialog-form\";\nimport { type InputFormRef, type InputFormField, type InputFormSlotScope, InputForm } from \"@yujinjin/cms-components-modules/input-form\";\n\ndefineOptions({\n    name: \"DialogForm\"\n});\n\ndefineSlots<{\n    default: () => any;\n    [key: string]: (props: DialogFormButtonSlotScope | InputFormSlotScope) => any;\n}>();\n\nconst props = defineProps(dialogFormProps);\n\nconst emits = defineEmits(dialogFormEmits);\n\n// 弹窗显示状态\nconst dialogVisible: Ref<boolean> = ref(false);\n\nconst inputFormRef = ref<InputFormRef>();\n\n// 弹窗内部属性\nconst dialogInnerProps: Ref<Partial<NotReadonly<DialogProps>>> = ref({});\n\n// 实际数据列中的操作按钮列表\n// handleCode: 用户操作CODE\n// text: 按钮操作文案\n// click: 按钮点击事件\nconst actionButtons = ref<DialogFormButton[]>([]);\n\nconst slots = computed<string[]>(() => {\n    return props.inputFormProps?.fields?.filter(field => !!field.slot).map(field => field.slot!) || [];\n});\n\n// 初始化操作按钮列表\nconst initActionButtons = function () {\n    if (!props.buttons || props.buttons.length === 0) {\n        return;\n    }\n    actionButtons.value = [];\n    props.buttons.forEach(button => {\n        button = Object.assign({ loading: false, isShow: true }, button);\n        if (button.customIcon && typeof button.customIcon === \"object\") {\n            button.customIcon = markRaw(button.customIcon);\n        }\n        if (button.icon && typeof button.icon === \"object\") {\n            button.icon = markRaw(button.icon);\n        }\n        actionButtons.value.push(button);\n    });\n};\n\n// 弹窗关闭\nconst dialogClosed = function () {\n    emits(\"close\");\n};\n\nconst inputFormFieldValueChange = function (field: InputFormField, fieldValue: any, formFields: InputFormField[], inputValue: Record<string, any>) {\n    emits(\"fieldValueChange\", field, fieldValue, formFields, inputValue);\n};\n\n// 按钮点击操作\nconst clickHandle = async function (button) {\n    if (button.loading) {\n        return;\n    }\n    button.loading = true;\n    let canClose = true;\n    try {\n        if (button.click) {\n            canClose = await button.click(inputFormRef.value!.getInputValue(), inputFormRef.value!.getFormRef(), button);\n        }\n    } catch (error) {\n        canClose = false;\n        console.error(error);\n    }\n    button.loading = false;\n    if (canClose !== false) {\n        dialogVisible.value = false;\n    }\n};\n\nwatch(\n    () => props.isShow,\n    value => {\n        if (value) {\n            dialogVisible.value = true;\n            dialogInnerProps.value = Object.assign(\n                {\n                    closeOnClickModal: false,\n                    appendToBody: true,\n                    destroyOnClose: true,\n                    width: \"750px\",\n                    alignCenter: true\n                },\n                props.dialogProps\n            );\n        }\n    },\n    {\n        immediate: true\n    }\n);\n\nwatch(\n    () => props.buttons,\n    () => {\n        initActionButtons();\n    },\n    { deep: true, immediate: true }\n);\n\ndefineExpose<DialogFormRef>({\n    // 获取表单的value\n    getInputValue: function () {\n        return inputFormRef.value?.getInputValue() || {};\n    },\n\n    /**\n     * 设置表单的属性值\n     * @param propertyName 属性名\n     * @param value 属性值\n     */\n    setInputPropertyValue: function (propertyName: string, value: any) {\n        inputFormRef.value?.setInputPropertyValue(propertyName, value);\n    },\n\n    // 修改当前form字段的属性\n    changeFormFields: function (callback: (formFields: InputFormField[]) => void) {\n        inputFormRef.value?.changeFormFields(callback);\n    },\n    // 修改当前生成的button按钮值\n    changeButtons: function (callback: (actionButtons: DialogFormButton[]) => void) {\n        if (callback && typeof callback === \"function\") {\n            callback(actionButtons.value);\n        } else {\n            console.error(\"callback 必须是一个函数\");\n        }\n    },\n    // 获取form Ref\n    getFormRef: function () {\n        return inputFormRef.value!.getFormRef();\n    },\n    // 表单验证\n    validate(callback?: FormValidateCallback) {\n        return inputFormRef.value!.validate(callback);\n    }\n});\n</script>\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2025-01-09 11:58:30\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-02-11 10:26:46\n * @项目的路径: \\CMS-components\\packages\\components\\search-page\\src\\search-page.ts\n * @描述: search-page组件属性、事件声明\n */\nimport { type PropType, type ExtractPublicPropTypes } from \"vue\";\nimport { buildProps } from \"@yujinjin/cms-components-utils\";\nimport { type NotReadonly } from \"../../types\";\nimport { type SearchFormProps, type SearchFormField } from \"@yujinjin/cms-components-modules/search-form\";\nimport { type ActionBarProps, type ActionButton } from \"@yujinjin/cms-components-modules/action-bar\";\nimport { type DataTableProps } from \"@yujinjin/cms-components-modules/data-table\";\n\nexport const searchPageProps = buildProps({\n    // 初始化时正在加载\n    isLoadingForInit: {\n        type: Boolean,\n        default: false\n    },\n    searchFormProps: {\n        type: Object as PropType<SearchFormProps>\n    },\n    actionBarProps: {\n        type: Object as PropType<ActionBarProps>\n    },\n    dataTableProps: {\n        type: Object as PropType<DataTableProps>\n    }\n});\n\nexport type SearchPageProps = NotReadonly<ExtractPublicPropTypes<typeof searchPageProps>>;\n\nexport const searchPageEmits = {\n    // 搜索表单查询事件\n    searchValueChange: (field: SearchFormField, searchFormFields: SearchFormField[]) => true,\n\n    // 搜索表单的字段变化事件\n    searchFieldsChange: (searchFormFields: SearchFormField[]) => Array.isArray(searchFormFields),\n\n    // 数据表格的行选择事件\n    selectRowsChange: (selectedRows: Array<Record<string, any>>) => Array.isArray(selectedRows)\n};\n\nexport type SearchPageEmits = typeof searchPageEmits;\n\nexport interface SearchPageRef {\n    // 搜索查询函数\n    query: (isInit?: boolean) => Promise<any> | undefined;\n\n    // 获取当前搜索表单实时值\n    getSearchingValue: () => Record<string, any>;\n\n    // 获取当前已经搜索出来的结果值，与getSearchFormValue区别是当前已经用它查询出来结果的搜索表单值\n    getSearchedValue: () => Record<string, any>;\n\n    // 修改当前form字段的属性\n    changeFormFields: (callback: (formFields: SearchFormField[]) => void) => void;\n\n    // 修改当前生成的button按钮属性值\n    changeButtons: (callback: (actionButtons: ActionButton[]) => void) => void;\n\n    /**\n     * 更新数据列显示状态\n     * @param columnKeys 显示列key值数组（不传值表示都展示）\n     */\n    updateTableColumnsShowStatus: (columnKeys?: string[]) => void;\n}\n","<!--\n * @创建者: yujinjin9@126.com\n * @创建时间: 2025-01-09 11:58:34\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-21 17:34:55\n * @项目的路径: \\CMS-components\\packages\\components\\search-page\\src\\search-page.vue\n * @描述: search-page 搜索页面组件\n-->\n<template>\n    <div v-loading=\"isLoadingForInit\" class=\"cms-search-page\">\n        <search-form\n            v-if=\"searchFormProps\"\n            v-bind=\"searchFormProps\"\n            ref=\"searchFormRef\"\n            :is-search-loading=\"isSearchLoading\"\n            @search=\"searchHandle\"\n            @change=\"searchValueChangeHandle\"\n            @fields-change=\"searchFieldsChangeHandle\"\n        >\n            <template v-for=\"name in distributeSlots.searchForm\" #[name]=\"scope\">\n                <slot :name=\"name\" v-bind=\"scope\"></slot>\n            </template>\n        </search-form>\n        <action-bar v-if=\"actionBarProps\" v-bind=\"actionBarProps\" ref=\"actionBarRef\" :select-rows=\"selectRows\">\n            <template v-for=\"name in distributeSlots.actionBar\" #[name]=\"scope\">\n                <slot :name=\"name\" v-bind=\"scope\"></slot>\n            </template>\n            <template v-if=\"distributeSlots.actionBarDefault\" #default>\n                <slot :name=\"distributeSlots.actionBarDefault\"></slot>\n            </template>\n        </action-bar>\n        <data-table\n            v-if=\"dataTableProps\"\n            v-bind=\"dataTableProps\"\n            ref=\"dataTableRef\"\n            v-model:select-rows=\"selectRows\"\n            :filters=\"dataTableFilters\"\n            :auto-init-query=\"!isLoadingForInit\"\n            @search=\"isLoading => (isSearchLoading = isLoading)\"\n        >\n            <template v-for=\"name in distributeSlots.dataTable\" #[name]=\"scope\">\n                <slot :name=\"name\" v-bind=\"scope\"></slot>\n            </template>\n        </data-table>\n        <slot></slot>\n    </div>\n</template>\n<script setup lang=\"ts\">\nimport { type Ref, onMounted, ref, computed, watch, nextTick } from \"vue\";\nimport { extend } from \"@yujinjin/utils\";\nimport { type SearchPageRef, searchPageProps, searchPageEmits } from \"./search-page\";\nimport { type DataTableRef, DataTable } from \"@yujinjin/cms-components-modules/data-table\";\nimport { type SearchFormRef, type SearchFormSlotScope, type SearchFormField, SearchForm } from \"@yujinjin/cms-components-modules/search-form\";\nimport { type ActionBarRef, type ActionButtonSlotScope, type ActionButton, ActionBar } from \"@yujinjin/cms-components-modules/action-bar\";\n\ndefineOptions({\n    name: \"SearchPage\"\n});\n\nconst slots = defineSlots<\n    {\n        default(): any;\n        actionBar_default(): any;\n    } & Record<`searchForm_${string}`, (props: SearchFormSlotScope) => any> &\n        Record<`actionBar_${string}`, (props: ActionButtonSlotScope) => any> &\n        Record<`dataTable_${string}`, (props: any) => any>\n>();\n\nconst props = defineProps(searchPageProps);\n\nconst emits = defineEmits(searchPageEmits);\n\n// 当前数据表格的筛选参数值（searchFormValue和props.dataTableProps.filters的并集）\nconst dataTableFilters: Ref<Record<string, any>> = ref({});\n\n// 当前搜索条件的筛选参数值\nconst searchFormValue: Ref<Record<string, any>> = ref({});\n\n// datatable组件ref\nconst dataTableRef = ref<DataTableRef>();\n\n// searchForm组件ref\nconst searchFormRef = ref<SearchFormRef>();\n\n// actionBar组件Ref\nconst actionBarRef = ref<ActionBarRef>();\n\n// 当前搜索是否正在加载中\nconst isSearchLoading = ref(false);\n\n// 选择的数据列\nconst selectRows: Ref<Array<Record<string, any>>> = ref([]);\n\n// 把插槽分组放入对应的组件里。以searchForm_开头放入到searchForm组件，actionBar_开头放入到actionBar组件，dataTable_开头放入到dataTable组件\nconst distributeSlots = computed(() => {\n    const typeSlotList = {\n        searchForm: [] as string[],\n        actionBar: [] as string[],\n        dataTable: [] as string[],\n        actionBarDefault: \"\"\n    };\n    Object.keys(slots).forEach(key => {\n        if (key.startsWith(\"searchForm_\")) {\n            typeSlotList.searchForm.push(key);\n        } else if (key === \"actionBar_default\") {\n            typeSlotList.actionBarDefault = \"actionBar_default\";\n        } else if (key.startsWith(\"actionBar_\")) {\n            typeSlotList.actionBar.push(key);\n        } else if (key.startsWith(\"dataTable_\")) {\n            typeSlotList.dataTable.push(key);\n        }\n    });\n    return typeSlotList;\n});\n\n// 搜索表单的值变化事件\nconst searchValueChangeHandle = function (field: SearchFormField, formFields: SearchFormField[]) {\n    emits(\"searchValueChange\", field, formFields);\n};\n\n// 搜索表单的字段变化事件\nconst searchFieldsChangeHandle = function (formFields: SearchFormField[]) {\n    emits(\"searchFieldsChange\", formFields);\n};\n\n// 查询方法\nconst queryDataList = async function (isInit = true, formValue?: Record<string, any>) {\n    if (formValue) {\n        searchFormValue.value = formValue;\n    } else {\n        searchFormValue.value = searchFormRef.value?.getValue() || {};\n    }\n    if (props.dataTableProps?.filters) {\n        dataTableFilters.value = extend(true, {}, searchFormValue.value, props.dataTableProps.filters);\n    } else {\n        dataTableFilters.value = searchFormValue.value;\n    }\n    await nextTick();\n    return dataTableRef.value?.queryDataList(isInit);\n};\n\n// 搜索操作\nconst searchHandle = function (formValue: Record<string, any>) {\n    queryDataList(true, formValue);\n};\n\nwatch(\n    () => selectRows.value,\n    () => {\n        emits(\"selectRowsChange\", selectRows.value);\n    },\n    {\n        deep: true\n    }\n);\n\n// 只运行一次\nwatch(\n    () => props.isLoadingForInit,\n    async value => {\n        if (value) return;\n        queryDataList();\n    },\n    {\n        once: true\n    }\n);\n\nonMounted(() => {\n    if (searchFormRef.value) {\n        searchFormValue.value = searchFormRef.value.getValue();\n    }\n    if (props.dataTableProps?.filters) {\n        dataTableFilters.value = extend(true, {}, searchFormValue.value, props.dataTableProps.filters);\n    } else {\n        dataTableFilters.value = searchFormValue.value;\n    }\n    if (selectRows.value && selectRows.value.length > 0) {\n        emits(\"selectRowsChange\", selectRows.value);\n    }\n});\n\ndefineExpose<SearchPageRef>({\n    // 分页查询\n    query: queryDataList,\n\n    // 获取当前搜索表单实时值\n    getSearchingValue: function () {\n        if (searchFormRef.value) {\n            return extend(true, {}, props.dataTableProps && props.dataTableProps.filters, searchFormRef.value.getValue());\n        }\n        return extend(true, {}, props.dataTableProps && props.dataTableProps.filters);\n    },\n\n    // 获取当前已经搜索出来的结果值，与getSearchFormValue区别是当前已经用它查询出来结果的搜索表单值\n    getSearchedValue: function () {\n        return extend(true, {}, dataTableFilters.value);\n    },\n\n    // 修改当前form字段的属性\n    changeFormFields: function (callback: (formFields: SearchFormField[]) => void) {\n        searchFormRef.value?.changeFormFields(callback);\n    },\n\n    // 修改当前生成的button按钮值\n    changeButtons: function (callback: (actionButtons: ActionButton[]) => void) {\n        actionBarRef.value?.changeButtons(callback);\n    },\n\n    /**\n     * 更新数据列显示状态\n     * @param columnKeys 显示列key值数组（不传值表示都展示）\n     */\n    updateTableColumnsShowStatus(columnKeys?: string[]) {\n        dataTableRef.value?.updateTableColumnsShowStatus(columnKeys);\n    }\n});\n</script>\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-09-02 10:32:28\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2025-01-10 11:30:35\n * @项目的路径: \\CMS-components\\packages\\main\\components.ts\n * @描述: 组件列表\n */\nimport { type Component } from \"vue\";\nimport { SvgIcon } from \"@yujinjin/cms-components-modules/svg-icon\";\nimport { CheckSelect } from \"@yujinjin/cms-components-modules/check-select\";\nimport { ImgUpload } from \"@yujinjin/cms-components-modules/img-upload\";\nimport { WebEditor } from \"@yujinjin/cms-components-modules/web-editor\";\nimport { InputField } from \"@yujinjin/cms-components-modules/input-field\";\nimport { ActionBar } from \"@yujinjin/cms-components-modules/action-bar\";\nimport { SearchField } from \"@yujinjin/cms-components-modules/search-field\";\nimport { DataTable } from \"@yujinjin/cms-components-modules/data-table\";\nimport { InputForm } from \"@yujinjin/cms-components-modules/input-form\";\nimport { SearchForm } from \"@yujinjin/cms-components-modules/search-form\";\nimport { DialogForm } from \"@yujinjin/cms-components-modules/dialog-form\";\nimport { SearchPage } from \"@yujinjin/cms-components-modules/search-page\";\n\nexport default [SvgIcon, CheckSelect, ImgUpload, WebEditor, InputField, SearchField, ActionBar, DataTable, InputForm, SearchForm, DialogForm, SearchPage] as Component[];\n","export const version = \"0.0.2\";\n","import { type App } from \"vue\";\nimport components from \"./components\";\nimport { version } from \"./version\";\n\nconst INSTALLED_KEY = Symbol(\"CMS_INSTALLED_KEY\");\n\nexport interface InstallOptions {\n    size?: string;\n}\n\nconst install = function (app: App, options?: InstallOptions) {\n    if (app[INSTALLED_KEY]) return;\n\n    app[INSTALLED_KEY] = true;\n    if (options) {\n        // TODO: 设置全局属性\n    }\n    components.forEach(component => {\n        app.component(component.name!, component);\n    });\n};\n\nexport default {\n    install,\n    version\n};\n","/*\n * @创建者: yujinjin9@126.com\n * @创建时间: 2024-07-30 15:58:19\n * @最后修改作者: yujinjin9@126.com\n * @最后修改时间: 2024-10-25 17:07:58\n * @项目的路径: \\CMS-components\\packages\\main\\index.ts\n * @描述: 引入全局组件的入口\n */\nimport installer from \"./defaults\";\nexport * from \"@yujinjin/cms-components-modules/index\";\n\nexport default installer;\n\nexport const install = installer.install;\n\nexport const version = installer.version;\n\nexport { default as quill } from \"quill\";\n\nexport { default as cropperjs } from \"cropperjs\";\n"],"names":["buildProps","props","isString","value","svgIconProps","checkSelectProps","checkSelectEmits","__props","emits","__emit","modelValue","_useModel","checkSelectRef","ref","selectDataList","computed","item","selectProps","isShowCheckAll","isShow","checkAllStatus","status","_a","checkAllChangeHandle","nextTick","values","findIndex","checkChangeHandle","isCheck","class2type","toString","hasOwn","type","obj","isFunction","isWindow","isPlainObject","key","isArray","extend","args","src","copyIsArray","copy","name","options","clone","target","i","deep","length","dateFormat","date","format","dateConfig","match","numberFormat","digit","debounce","callback","wait","timeout","setObjectProperty","object","path","keyArray","getValue","targetObject","value2","targetValue","rootName","rootValue","getObjectProperty","defaultValue","ownKeys","e","r","t","o","_objectSpread2","_defineProperty","_toPrimitive","_toPropertyKey","_typeof","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_createClass","protoProps","staticProps","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","iter","minLen","n","len","arr2","IS_BROWSER","WINDOW","IS_TOUCH_DEVICE","HAS_POINTER_EVENT","NAMESPACE","ACTION_ALL","ACTION_CROP","ACTION_MOVE","ACTION_ZOOM","ACTION_EAST","ACTION_WEST","ACTION_SOUTH","ACTION_NORTH","ACTION_NORTH_EAST","ACTION_NORTH_WEST","ACTION_SOUTH_EAST","ACTION_SOUTH_WEST","CLASS_CROP","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_WHEEL","EVENT_ZOOM","MIME_TYPE_JPEG","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","DEFAULTS","TEMPLATE","isNaN","isNumber","isPositiveNumber","isUndefined","isObject","hasOwnProperty","_constructor","prototype","error","slice","toArray","forEach","data","assign","_len","_key","arg","REGEXP_DECIMALS","normalizeDecimalNumber","times","REGEXP_SUFFIX","setStyle","element","styles","style","property","hasClass","addClass","elem","className","removeClass","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","getData","setData","removeData","REGEXP_SPACES","onceSupported","supported","once","listener","removeListener","handler","event","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","getOffset","box","location","REGEXP_ORIGINS","isCrossOriginURL","url","parts","addTimestamp","timestamp","getTransforms","_ref","rotate","scaleX","scaleY","translateX","translateY","transform","getMaxZoomRatio","pointers","pointers2","maxRatio","pointer","pointerId","pointer2","x1","y1","x2","y2","z1","z2","ratio","getPointer","_ref2","endOnly","pageX","pageY","end","getPointersCenter","count","_ref3","startX","startY","getAdjustedSizes","_ref4","aspectRatio","height","width","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","arc","sinArc","cosArc","newWidth","newHeight","getSourceCanvas","image","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","imageNaturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","naturalWidth","naturalHeight","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","canvas","context","maxSizes","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","params","param","fromCharCode","getStringFromCharCode","dataView","start","str","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","arrayBuffer","uint8","arrayBufferToDataURL","mimeType","chunks","chunkSize","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","offset","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","render","container","cropper","containerData","imageData","viewMode","rotated","canvasWidth","canvasHeight","canvasData","sizeLimited","positionLimited","cropBoxData","cropped","minCanvasWidth","minCanvasHeight","_getAdjustedSizes","newCanvasLeft","newCanvasTop","changed","transformed","_getRotatedSizes","autoCropArea","limited","minCropBoxWidth","minCropBoxHeight","maxCropBoxWidth","maxCropBoxHeight","preview","crossOrigin","alt","previews","el","img","cropBoxWidth","cropBoxHeight","left","top","originalWidth","originalHeight","events","handlers","ratioX","ratioY","_this","delta","buttons","button","action","touch","change","right","bottom","minLeft","minTop","renderable","range","check","side","p","methods","hasSameSize","offsetX","offsetY","_this$canvasData","x","y","_originalEvent","pivot","center","_scaleX","_scaleY","rounded","widthChanged","heightChanged","source","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","sourceWidth","sourceHeight","srcX","srcY","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","scale","mode","dragBox","face","croppable","movable","AnotherCropper","Cropper","tagName","xhr","_parseOrientation","crossOriginUrl","_this2","isIOSWebKit","done","sizingImage","body","template","cropBox","parentNode","imgUploadProps","uploadInnerProps","fileList","isShowCropperDialog","updloadRef","cropperImgRef","previewImgRef","cropperImg","cropperInstance","newModelValue","directionCropper","generateFileList","showCroppDialogHandle","startCroppHandle","raw","imgFileReader","closeCroppDialog","imageUploadApi","file","findFile","fileListChange","resetCropper","rotateCropper","changeDirectionCropper","saveCropper","blob","ElMessage","defaultUploadProps","files","ElMessageBox","genFileId","uploadFile","uploadFiles","watch","_b","freeGlobal","freeSelf","root","Symbol","objectProto","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","identity","asyncTag","funcTag","genTag","proxyTag","coreJsData","maskSrcKey","uid","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","getNative","WeakMap","objectCreate","baseCreate","proto","apply","thisArg","copyArray","array","index","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","lastCalled","stamp","remaining","constant","defineProperty","baseSetToString","string","setToString","arrayEach","iteratee","MAX_SAFE_INTEGER","reIsUint","isIndex","baseAssignValue","eq","other","assignValue","objValue","copyObject","customizer","isNew","newValue","nativeMax","overRest","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","nativeKeys","baseKeys","keys","nativeKeysIn","baseKeysIn","isProto","keysIn","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","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","getPrototype","objectCtorString","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","getTag$1","initCloneArray","Uint8Array","cloneArrayBuffer","cloneDataView","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","attributeBit","node","_node","ParchmentError","message","_Registry","bubble","scroll","input","match2","blotClass","blot","query","scope","definitions","definition","isBlot","isAttr","Registry","prefix","ClassAttributor","ClassAttributor$1","camelize","rest","part","StyleAttributor","StyleAttributor$1","AttributorStore","domNode","attribute","attributes","classes","attr","AttributorStore$1","_ShadowBlot","rawValue","parent","def","_context","replacement","_force","_mutations","wrapper","ShadowBlot","_LeafBlot","_domNode","_inclusive","LeafBlot","LeafBlot$1","LinkedList","nodes","next","cur","refNode","curNode","ret","inclusive","startNode","curIndex","curLength","memo","makeAttachedBlot","found","child","_ParentBlot","err","childLength","criteria","descendants","lengthLeft","childIndex","childBlot","refBlot","refDomNode","targetParent","position","force","after","split","mutations","addedNodes","removedNodes","mutation","a","b","ParentBlot","ParentBlot$1","obj1","obj2","prop","_InlineBlot","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","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","front","k1start","k1end","k2start","k2end","d","k1","k1_offset","k2_offset","diff_bisectSplit_","k2","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","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","charCode","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","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","newOp","lastOp","passed","failed","initialValue","thisIter","otherIter","firstOther","firstLeft","thisOp","otherOp","thisData","otherData","strings","prep","retDelta","diffResult","component","newline","line","inverted","baseIndex","baseOp","opData","baseOpData","transformedData","nextType","Break","escapeText","text","s","_Inline","self","selfIndex","otherIndex","__publicField","Text","Inline","NEWLINE_LENGTH","Block","blockDelta","lines","block","lineIndex","head","BlockEmbed","blocks","filter","leaf","bubbleFormats","_Cursor","selection","prevTextBlot","prevTextLength","nextTextBlot","nextText","textNode","mergedTextBlot","newTextNode","remapOffset","Cursor","has","Events","EE","fn","emitter","evt","clearEvent","EventEmitter","names","l","ee","a1","a2","a3","a4","a5","instances","levels","level","debug","method","namespace","ns","logger","newLevel","EVENTS","eventName","quill","Emitter","_len3","_key3","Range","Selection","native","triggeredByTyping","ignored","startOffset","endNode","endOffset","nativeRange","scrollLength","nextLine","rect","normalized","contains","positions","indexes","getPosition","leafOffset","lastRange","descendant","ASCII","Editor","normalizedDelta","normalizeDelta","deleteDelta","splitOpLines","isImplicitNewlinePrepended","isImplicitNewlineAppended","isInlineEmbed","prependedLength","addedLength","leaves","lineFormats","leafFormats","blots","combineFormats","lineOffset","lineLength","convertHTML","contents","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","getElementRect","paddingValueToInt","number","getScrollDistance","targetStart","targetEnd","scrollStart","scrollEnd","scrollPaddingStart","scrollPaddingEnd","scrollRectIntoView","targetRect","_c","_d","_e","document","current","isDocumentBody","bounding","scrollDistanceX","scrollDistanceY","scrollLeft","scrollTop","scrolledLeft","scrolledTop","MAX_REGISTER_ITERATIONS","CORE_FORMATS","createRegistryWithFormats","sourceRegistry","coreBlot","iterations","globalRegistry","Parchment.Registry","Parchment.ParentBlot","_Quill","limit","overwrite","expandConfig","html","scrollBlotName","Parchment.ScrollBlot","modify","overload","modifier","enabled","Parchment.Scope","bounds","containerBounds","delete1","applied","delete2","Parchment","Quill","resolveSelector","selector","expandModuleConfig","config","expanded","omitUndefinedValuesFromOptions","containerOrSelector","theme","quillModuleDefaults","quillDefaults","themeModuleDefaults","themeDefaults","userModuleOptions","modules","modulesWithDefaults","moduleClass","shift","lengthOrSource","pos","Container","isLine","isUpdatable","Scroll","first","last","renderBlocks","shouldInsertNewlineChar","insertInlineContents","newlineCharLength","lineEndIndex","refBlotOffset","renderBlock","blockEmbed","getLines","blotIndex","blotLength","currentBlockDelta","insert","splitted","blotName","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","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","pastedDelta","applyFormat","newDelta","endText","isBetweenInlineElements","preNodes","isPre","childrenDelta","reducedDelta","language","composed","list","checkedAttr","nextSibling","replacer","collapse","replaced","History","transformRange","dest","inverseDelta","changeDelta","undoDelta","undoRange","transformStack","stackItem","getLastChangeIndex","remoteDelta","oldItem","endsWithNewlineChange","deleteLength","changeIndex","Uploader","uploads","promises","resolve","reader","images","update","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","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","overflowY","Tooltip","boundsContainer","reference","rootBounds","verticalShift","ALIGNS","COLORS","FONTS","HEADERS","SIZES","BaseTheme","picker","selects","fillSelect","fileInput","BaseTooltip","extractVideoUrl","TOOLBAR_CONFIG","BubbleTooltip","lastLine","indexBounds","arrow","BubbleTheme","toolbar","SnowTooltip","link","LinkBlot","SnowTheme","_range","tooltip","Indent","List","InlineCode","webEditorProps","webEditorEmits","webEditorRef","inputFileRef","elForm","inject","formContextKey","elFormItem","formItemContextKey","isBrowser","quillInstance","textChangeHandle","imgFileChangeHandle","initQuill","onMounted","inputFieldProps","inputFieldEmits","useAttrs","allProps","getElComponentName","changeValue","actionBarProps","actionButtons","initActionButtons","markRaw","clickHandle","__expose","searchFieldProps","searchFieldEmits","dataTableProps","dataTableEmits","dateText","numberText","previewImgList","initialIndex","enumText","findItem","dateItem","showStatusButtons","hideStatusButtons","dropdownCommandHandle","tableProps","dataList","columnList","isLoadingForSearch","paginationData","dataTablePanelRef","paginationRef","selectionChangeHandle","selectRows","initPaginationData","total","currentPage","initTableMaxHeight","initTableProps","initColumns","columnItem","newColumnItem","cellValue","queryDataList","isInit","parameters","queryResult","getCellValue","pageSizeChangeHandle","pageSize","currentPageChangeHandle","resizeHandle","onUnmounted","columnKeys","inputFormProps","inputFormEmits","field","fieldValue","formFields","inputFormValue","INPUT_FORM_FIELD_DEFAULT_ATTRIBUTES","time","formProps","inputFormRef","initInputFormValue","generateFormFields","newField","setFieldValue","propertyName","findField","searchFormProps","searchFormEmits","searchFormValue","formField","SEARCH_FORM_FIELD_DEFAULT_ATTRIBUTES","extendButtons","collapseStatus","buttonBoxRef","buttonBoxWidth","generateExtendButtons","triggerResizeEvent","init","getSearchFormValue","formValue","searchHandle","resetHandle","changeHandle","extendButtonClickHandle","dialogFormProps","dialogFormEmits","inputValue","dialogVisible","dialogInnerProps","slots","dialogClosed","inputFormFieldValueChange","canClose","searchPageProps","searchPageEmits","searchFormFields","selectedRows","_useSlots","dataTableFilters","dataTableRef","searchFormRef","actionBarRef","isSearchLoading","distributeSlots","typeSlotList","searchValueChangeHandle","searchFieldsChangeHandle","components","SvgIcon","CheckSelect","ImgUpload","WebEditor","InputField","SearchField","ActionBar","DataTable","InputForm","SearchForm","DialogForm","SearchPage","version","INSTALLED_KEY","install","app","installer"],"mappings":"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","x_google_ignoreList":[4,5,6,7,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,212,213,214,215,216,217,218,219,220,221]}