@mnykj/wangeditoroptimize-basic-modules 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/locale/index.ts","../src/locale/en.ts","../src/locale/zh-CN.ts","../src/modules/paragraph/render-elem.tsx","../src/modules/paragraph/elem-to-html.ts","../../../node_modules/core-js/internals/global.js","../../../node_modules/core-js/internals/engine-v8-version.js","../../../node_modules/core-js/internals/fails.js","../../../node_modules/core-js/internals/descriptors.js","../../../node_modules/core-js/internals/function-call.js","../../../node_modules/core-js/internals/object-property-is-enumerable.js","../../../node_modules/core-js/internals/create-property-descriptor.js","../../../node_modules/core-js/internals/function-uncurry-this.js","../../../node_modules/core-js/internals/classof-raw.js","../../../node_modules/core-js/internals/indexed-object.js","../../../node_modules/core-js/internals/require-object-coercible.js","../../../node_modules/core-js/internals/to-indexed-object.js","../../../node_modules/core-js/internals/is-callable.js","../../../node_modules/core-js/internals/is-object.js","../../../node_modules/core-js/internals/get-built-in.js","../../../node_modules/core-js/internals/object-is-prototype-of.js","../../../node_modules/core-js/internals/engine-user-agent.js","../../../node_modules/core-js/internals/native-symbol.js","../../../node_modules/core-js/internals/use-symbol-as-uid.js","../../../node_modules/core-js/internals/is-symbol.js","../../../node_modules/core-js/internals/try-to-string.js","../../../node_modules/core-js/internals/a-callable.js","../../../node_modules/core-js/internals/get-method.js","../../../node_modules/core-js/internals/ordinary-to-primitive.js","../../../node_modules/core-js/internals/set-global.js","../../../node_modules/core-js/internals/shared-store.js","../../../node_modules/core-js/internals/shared.js","../../../node_modules/core-js/internals/to-object.js","../../../node_modules/core-js/internals/has-own-property.js","../../../node_modules/core-js/internals/uid.js","../../../node_modules/core-js/internals/well-known-symbol.js","../../../node_modules/core-js/internals/to-primitive.js","../../../node_modules/core-js/internals/to-property-key.js","../../../node_modules/core-js/internals/document-create-element.js","../../../node_modules/core-js/internals/ie8-dom-define.js","../../../node_modules/core-js/internals/object-get-own-property-descriptor.js","../../../node_modules/core-js/internals/an-object.js","../../../node_modules/core-js/internals/object-define-property.js","../../../node_modules/core-js/internals/create-non-enumerable-property.js","../../../node_modules/core-js/internals/inspect-source.js","../../../node_modules/core-js/internals/internal-state.js","../../../node_modules/core-js/internals/native-weak-map.js","../../../node_modules/core-js/internals/shared-key.js","../../../node_modules/core-js/internals/hidden-keys.js","../../../node_modules/core-js/internals/function-name.js","../../../node_modules/core-js/internals/redefine.js","../../../node_modules/core-js/internals/to-integer-or-infinity.js","../../../node_modules/core-js/internals/to-absolute-index.js","../../../node_modules/core-js/internals/to-length.js","../../../node_modules/core-js/internals/length-of-array-like.js","../../../node_modules/core-js/internals/array-includes.js","../../../node_modules/core-js/internals/object-keys-internal.js","../../../node_modules/core-js/internals/enum-bug-keys.js","../../../node_modules/core-js/internals/object-get-own-property-names.js","../../../node_modules/core-js/internals/object-get-own-property-symbols.js","../../../node_modules/core-js/internals/own-keys.js","../../../node_modules/core-js/internals/copy-constructor-properties.js","../../../node_modules/core-js/internals/is-forced.js","../../../node_modules/core-js/internals/export.js","../../../node_modules/core-js/internals/function-bind-context.js","../../../node_modules/core-js/internals/is-array.js","../../../node_modules/core-js/internals/to-string-tag-support.js","../../../node_modules/core-js/internals/classof.js","../../../node_modules/core-js/internals/is-constructor.js","../../../node_modules/core-js/internals/array-species-constructor.js","../../../node_modules/core-js/internals/array-species-create.js","../../../node_modules/core-js/internals/array-iteration.js","../../../node_modules/core-js/internals/array-method-has-species-support.js","../../../node_modules/core-js/modules/es.array.filter.js","../../../node_modules/core-js/internals/object-to-string.js","../../../node_modules/core-js/modules/es.object.to-string.js","../../../node_modules/core-js/internals/to-string.js","../../../node_modules/core-js/internals/object-create.js","../../../node_modules/core-js/internals/regexp-flags.js","../../../node_modules/core-js/internals/regexp-sticky-helpers.js","../../../node_modules/core-js/internals/object-keys.js","../../../node_modules/core-js/internals/object-define-properties.js","../../../node_modules/core-js/internals/html.js","../../../node_modules/core-js/internals/regexp-exec.js","../../../node_modules/core-js/internals/regexp-unsupported-dot-all.js","../../../node_modules/core-js/internals/regexp-unsupported-ncg.js","../../../node_modules/core-js/modules/es.regexp.exec.js","../../../node_modules/core-js/internals/function-apply.js","../../../node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","../../../node_modules/core-js/internals/string-multibyte.js","../../../node_modules/core-js/internals/advance-string-index.js","../../../node_modules/core-js/internals/get-substitution.js","../../../node_modules/core-js/internals/regexp-exec-abstract.js","../../../node_modules/core-js/modules/es.string.replace.js","../../../node_modules/core-js/internals/add-to-unscopables.js","../../../node_modules/core-js/modules/es.array.find.js","../../../node_modules/core-js/internals/is-regexp.js","../../../node_modules/core-js/internals/a-constructor.js","../../../node_modules/core-js/internals/species-constructor.js","../../../node_modules/core-js/internals/create-property.js","../../../node_modules/core-js/internals/array-slice-simple.js","../../../node_modules/core-js/modules/es.string.split.js","../../../node_modules/core-js/internals/whitespaces.js","../../../node_modules/core-js/internals/string-trim-forced.js","../../../node_modules/core-js/internals/string-trim.js","../../../node_modules/core-js/modules/es.string.trim.js","../src/utils/dom.ts","../../../node_modules/core-js/modules/es.global-this.js","../src/modules/paragraph/parse-elem-html.ts","../src/modules/paragraph/plugin.ts","../src/modules/paragraph/index.ts","../../../node_modules/core-js/internals/create-html.js","../../../node_modules/core-js/internals/string-html-forced.js","../src/modules/text-style/style-to-html.ts","../src/modules/text-style/parse-style-html.ts","../../../node_modules/core-js/modules/es.string.bold.js","../../../node_modules/core-js/modules/es.string.italics.js","../../../node_modules/core-js/modules/es.string.sub.js","../../../node_modules/core-js/modules/es.string.sup.js","../../../node_modules/core-js/internals/dom-iterables.js","../../../node_modules/core-js/internals/dom-token-list-prototype.js","../../../node_modules/core-js/internals/array-method-is-strict.js","../../../node_modules/core-js/internals/array-for-each.js","../../../node_modules/core-js/modules/web.dom-collections.for-each.js","../../../node_modules/core-js/modules/es.object.keys.js","../src/modules/text-style/helper.ts","../src/modules/text-style/menu/BaseMenu.ts","../src/constants/icon-svg.ts","../src/modules/text-style/menu/BoldMenu.ts","../src/modules/text-style/menu/CodeMenu.ts","../src/modules/text-style/menu/ItalicMenu.ts","../src/modules/text-style/menu/ThroughMenu.ts","../src/modules/text-style/menu/UnderlineMenu.ts","../src/modules/text-style/menu/SubMenu.ts","../src/modules/text-style/menu/SupMenu.ts","../src/modules/text-style/menu/ClearStyleMenu.ts","../src/modules/text-style/index.ts","../src/modules/text-style/render-style.tsx","../src/modules/text-style/menu/index.ts","../src/modules/header/render-elem.tsx","../../../node_modules/core-js/modules/es.regexp.to-string.js","../../../node_modules/core-js/internals/not-a-regexp.js","../../../node_modules/core-js/modules/es.string.starts-with.js","../../../node_modules/core-js/internals/correct-is-regexp-logic.js","../src/modules/header/helper.ts","../src/modules/header/menu/HeaderSelectMenu.ts","../src/modules/header/menu/HeaderButtonMenuBase.ts","../src/modules/header/menu/Header1ButtonMenu.ts","../src/modules/header/menu/Header2ButtonMenu.ts","../src/modules/header/menu/Header3ButtonMenu.ts","../src/modules/header/menu/Header4ButtonMenu.ts","../src/modules/header/menu/Header5ButtonMenu.ts","../src/modules/header/menu/index.ts","../src/modules/header/elem-to-html.ts","../src/modules/header/parse-elem-html.ts","../src/modules/header/index.ts","../src/modules/header/plugin.ts","../../../node_modules/core-js/internals/object-assign.js","../src/utils/vdom.ts","../../../node_modules/core-js/modules/es.object.assign.js","../src/modules/color/pre-parse-html.ts","../src/modules/color/menu/BaseMenu.ts","../src/modules/color/menu/ColorMenu.ts","../src/modules/color/menu/BgColorMenu.ts","../src/modules/color/menu/config.ts","../src/modules/color/menu/index.ts","../src/modules/color/index.ts","../src/modules/color/render-style.tsx","../src/modules/color/style-to-html.ts","../src/modules/color/parse-style-html.ts","../../../node_modules/is-url/index.js","../../../node_modules/core-js/modules/es.array.includes.js","../src/utils/util.ts","../src/modules/link/helper.ts","../src/modules/link/render-elem.tsx","../src/modules/link/elem-to-html.ts","../src/modules/link/parse-elem-html.ts","../src/modules/link/menu/InsertLink.ts","../src/modules/link/menu/EditLink.ts","../src/modules/link/menu/UnLink.ts","../src/modules/link/menu/ViewLink.ts","../../../node_modules/core-js/internals/array-slice.js","../../../node_modules/core-js/modules/es.array.slice.js","../../../node_modules/core-js/modules/es.string.anchor.js","../src/modules/link/menu/link-form-state.ts","../src/modules/link/menu/LinkFormMenu.ts","../src/modules/link/menu/ViewLinkOpenMenu.ts","../src/modules/link/menu/index.ts","../src/modules/link/menu/config.ts","../src/modules/link/index.ts","../src/modules/link/plugin.ts","../../../node_modules/core-js/internals/this-number-value.js","../../../node_modules/core-js/internals/string-repeat.js","../../../node_modules/core-js/modules/es.number.to-fixed.js","../src/modules/image/render-elem.tsx","../src/modules/image/elem-to-html.ts","../src/modules/image/parse-elem-html.ts","../src/modules/image/helper.ts","../src/modules/image/menu/InsertImage.ts","../src/modules/image/menu/DeleteImage.ts","../src/modules/image/menu/EditImage.ts","../src/modules/image/menu/ViewImageLink.ts","../src/modules/image/menu/WidthBase.ts","../src/modules/image/menu/Width30.ts","../src/modules/image/menu/Width50.ts","../src/modules/image/menu/Width75.ts","../src/modules/image/menu/Width100.ts","../src/modules/image/menu/index.ts","../src/modules/image/menu/config.ts","../src/modules/image/index.ts","../src/modules/image/plugin.ts","../src/modules/todo/render-elem.tsx","../src/modules/todo/menu/Todo.ts","../src/modules/todo/pre-parse-html.ts","../src/modules/todo/index.ts","../src/modules/todo/elem-to-html.ts","../src/modules/todo/parse-elem-html.ts","../src/modules/todo/menu/index.ts","../src/modules/todo/plugin.ts","../../../node_modules/core-js/modules/es.array.join.js","../src/utils/block-toolbar.ts","../src/modules/blockquote/toolbar-icons.ts","../src/modules/blockquote/render-elem.tsx","../src/modules/blockquote/elem-to-html.ts","../src/modules/blockquote/parse-elem-html.ts","../../../node_modules/core-js-pure/internals/engine-v8-version.js","../src/modules/blockquote/menu/BlockquoteMenu.ts","../../../node_modules/core-js-pure/internals/global.js","../../../node_modules/core-js-pure/internals/function-apply.js","../../../node_modules/core-js-pure/internals/function-uncurry-this.js","../../../node_modules/core-js-pure/internals/is-callable.js","../../../node_modules/core-js-pure/internals/fails.js","../../../node_modules/core-js-pure/internals/descriptors.js","../../../node_modules/core-js-pure/internals/function-call.js","../../../node_modules/core-js-pure/internals/object-property-is-enumerable.js","../../../node_modules/core-js-pure/internals/create-property-descriptor.js","../../../node_modules/core-js-pure/internals/classof-raw.js","../../../node_modules/core-js-pure/internals/indexed-object.js","../../../node_modules/core-js-pure/internals/require-object-coercible.js","../../../node_modules/core-js-pure/internals/to-indexed-object.js","../../../node_modules/core-js-pure/internals/is-object.js","../../../node_modules/core-js-pure/internals/path.js","../../../node_modules/core-js-pure/internals/get-built-in.js","../../../node_modules/core-js-pure/internals/object-is-prototype-of.js","../../../node_modules/core-js-pure/internals/engine-user-agent.js","../../../node_modules/core-js-pure/internals/native-symbol.js","../../../node_modules/core-js-pure/internals/use-symbol-as-uid.js","../../../node_modules/core-js-pure/internals/is-symbol.js","../../../node_modules/core-js-pure/internals/try-to-string.js","../../../node_modules/core-js-pure/internals/a-callable.js","../../../node_modules/core-js-pure/internals/ordinary-to-primitive.js","../../../node_modules/core-js-pure/internals/set-global.js","../../../node_modules/core-js-pure/internals/shared-store.js","../../../node_modules/core-js-pure/internals/shared.js","../../../node_modules/core-js-pure/internals/to-object.js","../../../node_modules/core-js-pure/internals/has-own-property.js","../../../node_modules/core-js-pure/internals/uid.js","../../../node_modules/core-js-pure/internals/well-known-symbol.js","../../../node_modules/core-js-pure/internals/to-primitive.js","../../../node_modules/core-js-pure/internals/get-method.js","../../../node_modules/core-js-pure/internals/to-property-key.js","../../../node_modules/core-js-pure/internals/document-create-element.js","../../../node_modules/core-js-pure/internals/ie8-dom-define.js","../../../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","../../../node_modules/core-js-pure/internals/is-forced.js","../../../node_modules/core-js-pure/internals/function-bind-context.js","../../../node_modules/core-js-pure/internals/an-object.js","../../../node_modules/core-js-pure/internals/object-define-property.js","../../../node_modules/core-js-pure/internals/create-non-enumerable-property.js","../../../node_modules/core-js-pure/internals/export.js","../../../node_modules/core-js-pure/internals/is-array.js","../../../node_modules/core-js-pure/internals/to-integer-or-infinity.js","../../../node_modules/core-js-pure/internals/to-length.js","../../../node_modules/core-js-pure/internals/length-of-array-like.js","../../../node_modules/core-js-pure/internals/create-property.js","../../../node_modules/core-js-pure/internals/to-string-tag-support.js","../../../node_modules/core-js-pure/internals/classof.js","../../../node_modules/core-js-pure/internals/inspect-source.js","../../../node_modules/core-js-pure/internals/is-constructor.js","../../../node_modules/core-js-pure/internals/array-species-constructor.js","../../../node_modules/core-js-pure/internals/array-species-create.js","../../../node_modules/core-js-pure/internals/array-method-has-species-support.js","../../../node_modules/core-js-pure/modules/es.array.concat.js","../../../node_modules/core-js-pure/internals/to-string.js","../../../node_modules/core-js-pure/internals/object-create.js","../../../node_modules/core-js-pure/internals/to-absolute-index.js","../../../node_modules/core-js-pure/internals/array-includes.js","../../../node_modules/core-js-pure/internals/hidden-keys.js","../../../node_modules/core-js-pure/internals/object-keys-internal.js","../../../node_modules/core-js-pure/internals/enum-bug-keys.js","../../../node_modules/core-js-pure/internals/object-keys.js","../../../node_modules/core-js-pure/internals/object-define-properties.js","../../../node_modules/core-js-pure/internals/html.js","../../../node_modules/core-js-pure/internals/shared-key.js","../../../node_modules/core-js-pure/internals/internal-state.js","../../../node_modules/core-js-pure/internals/object-get-own-property-names.js","../../../node_modules/core-js-pure/internals/array-slice-simple.js","../../../node_modules/core-js-pure/internals/object-get-own-property-names-external.js","../../../node_modules/core-js-pure/internals/object-get-own-property-symbols.js","../../../node_modules/core-js-pure/internals/array-slice.js","../../../node_modules/core-js-pure/internals/redefine.js","../../../node_modules/core-js-pure/internals/well-known-symbol-wrapped.js","../../../node_modules/core-js-pure/internals/define-well-known-symbol.js","../../../node_modules/core-js-pure/internals/object-to-string.js","../../../node_modules/core-js-pure/internals/set-to-string-tag.js","../../../node_modules/core-js-pure/internals/native-weak-map.js","../../../node_modules/core-js-pure/internals/array-iteration.js","../../../node_modules/core-js-pure/modules/es.symbol.js","../../../node_modules/core-js-pure/modules/es.symbol.async-iterator.js","../../../node_modules/core-js-pure/modules/es.symbol.has-instance.js","../../../node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js","../../../node_modules/core-js-pure/modules/es.symbol.iterator.js","../../../node_modules/core-js-pure/modules/es.symbol.match.js","../../../node_modules/core-js-pure/modules/es.symbol.match-all.js","../../../node_modules/core-js-pure/modules/es.symbol.replace.js","../../../node_modules/core-js-pure/modules/es.symbol.search.js","../../../node_modules/core-js-pure/modules/es.symbol.species.js","../../../node_modules/core-js-pure/modules/es.symbol.split.js","../../../node_modules/core-js-pure/modules/es.symbol.to-primitive.js","../../../node_modules/core-js-pure/modules/es.symbol.to-string-tag.js","../../../node_modules/core-js-pure/modules/es.symbol.unscopables.js","../../../node_modules/core-js-pure/modules/es.json.to-string-tag.js","../../../node_modules/core-js-pure/es/symbol/index.js","../../../node_modules/core-js-pure/internals/iterators-core.js","../../../node_modules/core-js-pure/internals/iterators.js","../../../node_modules/core-js-pure/internals/function-name.js","../../../node_modules/core-js-pure/internals/correct-prototype-getter.js","../../../node_modules/core-js-pure/internals/object-get-prototype-of.js","../../../node_modules/core-js-pure/internals/create-iterator-constructor.js","../../../node_modules/core-js-pure/internals/a-possible-prototype.js","../../../node_modules/core-js-pure/internals/object-set-prototype-of.js","../../../node_modules/core-js-pure/internals/define-iterator.js","../../../node_modules/core-js-pure/modules/es.array.iterator.js","../../../node_modules/core-js-pure/internals/dom-iterables.js","../../../node_modules/core-js-pure/modules/web.dom-collections.iterator.js","../../../node_modules/core-js-pure/stable/symbol/index.js","../../../node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js","../../../node_modules/core-js-pure/modules/esnext.symbol.dispose.js","../../../node_modules/core-js-pure/modules/esnext.symbol.matcher.js","../../../node_modules/core-js-pure/modules/esnext.symbol.metadata.js","../../../node_modules/core-js-pure/modules/esnext.symbol.observable.js","../../../node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js","../../../node_modules/core-js-pure/modules/esnext.symbol.replace-all.js","../../../node_modules/core-js-pure/features/symbol/index.js","../../../node_modules/core-js-pure/internals/string-multibyte.js","../../../node_modules/core-js-pure/modules/es.string.iterator.js","../../../node_modules/core-js-pure/es/symbol/iterator.js","../../../node_modules/core-js/internals/iterators-core.js","../../../node_modules/@babel/runtime-corejs3/helpers/typeof.js","../../../node_modules/core-js/internals/iterators.js","../../../node_modules/core-js/internals/correct-prototype-getter.js","../../../node_modules/core-js/internals/object-get-prototype-of.js","../../../node_modules/core-js/internals/set-to-string-tag.js","../../../node_modules/core-js/internals/create-iterator-constructor.js","../../../node_modules/core-js/internals/a-possible-prototype.js","../../../node_modules/core-js/internals/object-set-prototype-of.js","../../../node_modules/core-js/internals/define-iterator.js","../../../node_modules/core-js/modules/es.array.iterator.js","../../../node_modules/core-js/internals/object-get-own-property-names-external.js","../../../node_modules/core-js/internals/array-buffer-non-extensible.js","../../../node_modules/core-js/internals/object-is-extensible.js","../../../node_modules/core-js/internals/freezing.js","../../../node_modules/core-js/internals/internal-metadata.js","../../../node_modules/core-js/internals/is-array-iterator-method.js","../../../node_modules/core-js/internals/get-iterator-method.js","../../../node_modules/core-js/internals/get-iterator.js","../../../node_modules/core-js/internals/iterator-close.js","../../../node_modules/core-js/internals/iterate.js","../../../node_modules/core-js/internals/an-instance.js","../../../node_modules/core-js/internals/check-correctness-of-iteration.js","../../../node_modules/core-js/internals/redefine-all.js","../../../node_modules/core-js/internals/set-species.js","../../../node_modules/core-js/internals/collection-strong.js","../../../node_modules/core-js/internals/collection.js","../../../node_modules/core-js/internals/inherit-if-required.js","../../../node_modules/core-js/modules/es.set.js","../../../node_modules/core-js/modules/es.string.iterator.js","../../../node_modules/core-js/modules/web.dom-collections.iterator.js","../../../node_modules/core-js/modules/es.array.map.js","../../../node_modules/core-js/modules/es.string.includes.js","../../../node_modules/core-js/internals/array-sort.js","../../../node_modules/core-js/internals/engine-ff-version.js","../../../node_modules/core-js/internals/engine-is-ie-or-edge.js","../../../node_modules/core-js/internals/engine-webkit-version.js","../../../node_modules/core-js/modules/es.array.sort.js","../src/modules/blockquote/merge.ts","../src/modules/blockquote/menu/BlockquoteMergedMenu.ts","../src/modules/blockquote/index.ts","../src/modules/blockquote/menu/index.ts","../src/modules/blockquote/plugin.ts","../src/modules/emotion/menu/EmotionMenu.ts","../src/modules/emotion/menu/index.ts","../src/modules/emotion/index.ts","../src/modules/emotion/menu/config.ts","../src/modules/font-size-family/pre-parse-html.ts","../../../node_modules/core-js/modules/es.function.name.js","../src/modules/font-size-family/menu/BaseMenu.ts","../src/modules/font-size-family/menu/FontSizeMenu.ts","../src/modules/font-size-family/menu/FontFamilyMenu.ts","../src/modules/font-size-family/menu/index.ts","../src/modules/font-size-family/index.ts","../src/modules/font-size-family/render-style.tsx","../src/modules/font-size-family/style-to-html.ts","../src/modules/font-size-family/parse-style-html.ts","../src/modules/font-size-family/menu/config.ts","../src/modules/indent/pre-parse-html.ts","../src/modules/indent/menu/BaseMenu.ts","../src/modules/indent/menu/DecreaseIndentMenu.ts","../src/modules/indent/menu/IncreaseIndentMenu.ts","../src/modules/indent/index.ts","../src/modules/indent/render-style.tsx","../src/modules/indent/style-to-html.ts","../src/modules/indent/parse-style-html.ts","../src/modules/indent/menu/index.ts","../src/modules/justify/menu/BaseMenu.ts","../src/modules/justify/menu/JustifyLeftMenu.ts","../src/modules/justify/menu/JustifyRightMenu.ts","../src/modules/justify/menu/JustifyCenterMenu.ts","../src/modules/justify/menu/JustifyJustifyMenu.ts","../src/modules/justify/index.ts","../src/modules/justify/render-style.tsx","../src/modules/justify/style-to-html.ts","../src/modules/justify/parse-style-html.ts","../src/modules/justify/menu/index.ts","../src/modules/line-height/menu/LineHeightMenu.ts","../src/modules/line-height/index.ts","../src/modules/line-height/render-style.tsx","../src/modules/line-height/style-to-html.ts","../src/modules/line-height/parse-style-html.ts","../src/modules/line-height/menu/index.ts","../src/modules/line-height/menu/config.ts","../src/modules/undo-redo/menu/RedoMenu.ts","../src/modules/undo-redo/menu/UndoMenu.ts","../src/modules/undo-redo/index.ts","../src/modules/undo-redo/menu/index.ts","../src/modules/divider/render-elem.tsx","../src/modules/divider/elem-to-html.ts","../src/modules/divider/parse-elem-html.ts","../src/modules/divider/menu/InsertDividerMenu.ts","../src/modules/divider/menu/RemoveDividerMenu.ts","../src/modules/divider/index.ts","../src/modules/divider/menu/index.ts","../src/modules/divider/plugin.ts","../src/modules/code-block/code-block-ops.ts","../src/modules/code-block/menu/CodeBlockMenu.ts","../src/modules/code-block/menu/index.ts","../../../node_modules/core-js/modules/es.string.match.js","../src/modules/code-block/pre-toolbar.ts","../src/modules/code-block/render-elem.tsx","../src/modules/code-block/elem-to-html.ts","../src/modules/code-block/index.ts","../src/modules/code-block/plugin.ts","../src/modules/code-block/pre-parse-html.ts","../src/modules/code-block/parse-elem-html.ts","../src/modules/full-screen/menu/FullScreen.ts","../src/modules/full-screen/index.ts","../src/modules/full-screen/menu/index.ts","../src/modules/common/menu/EnterMenu.ts","../src/modules/common/index.ts","../src/modules/common/menu/index.ts","../../../node_modules/core-js/internals/object-to-array.js","../../../node_modules/core-js/modules/es.object.entries.js","../src/modules/format-painter/state.ts","../src/modules/format-painter/menu/FormatPainterMenu.ts","../src/modules/format-painter/index.ts","../src/index.ts","../src/modules/format-painter/menu/index.ts","../src/modules/format-painter/plugin.ts"],"sourcesContent":["/**\r\n * @description i18n entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { i18nAddResources } from '@mnykj/wangeditoroptimize-core'\r\nimport enResources from './en'\r\nimport zhResources from './zh-CN'\r\n\r\ni18nAddResources('en', enResources)\r\ni18nAddResources('zh-CN', zhResources)\r\n","/**\r\n * @description i18n en\r\n * @author wangfupeng\r\n */\r\n\r\nexport default {\r\n // 通用的词\r\n common: {\r\n ok: 'OK',\r\n delete: 'Delete',\r\n enter: 'Enter',\r\n },\r\n\r\n blockQuote: {\r\n title: 'Quote',\r\n },\r\n codeBlock: {\r\n title: 'Code block',\r\n },\r\n color: {\r\n color: 'Font color',\r\n bgColor: 'Back color',\r\n default: 'Default color',\r\n clear: 'Clear back color',\r\n },\r\n divider: {\r\n title: 'Divider',\r\n },\r\n emotion: {\r\n title: 'Emotion',\r\n },\r\n fontSize: {\r\n title: 'Font size',\r\n default: 'Default',\r\n },\r\n fontFamily: {\r\n title: 'Font family',\r\n default: 'Default',\r\n },\r\n fullScreen: {\r\n title: 'Full screen',\r\n },\r\n header: {\r\n title: 'Header',\r\n text: 'Text',\r\n },\r\n image: {\r\n netImage: 'Net image',\r\n delete: 'Delete image',\r\n edit: 'Edit image',\r\n viewLink: 'View link',\r\n src: 'Image src',\r\n desc: 'Description',\r\n link: 'Image link',\r\n },\r\n indent: {\r\n decrease: 'Decrease',\r\n increase: 'Increase',\r\n },\r\n justify: {\r\n left: 'Left',\r\n right: 'Right',\r\n center: 'Center',\r\n justify: 'Justify',\r\n },\r\n lineHeight: {\r\n title: 'Line height',\r\n default: 'Default',\r\n },\r\n link: {\r\n insert: 'Insert link',\r\n text: 'Link text',\r\n url: 'Link source',\r\n unLink: 'Unlink',\r\n edit: 'Edit link',\r\n view: 'View link',\r\n },\r\n textStyle: {\r\n bold: 'Bold',\r\n clear: 'Clear styles',\r\n code: 'Inline code',\r\n italic: 'Italic',\r\n sub: 'Sub',\r\n sup: 'Sup',\r\n through: 'Through',\r\n underline: 'Underline',\r\n },\r\n undo: {\r\n undo: 'undo',\r\n redo: 'Redo',\r\n },\r\n todo: {\r\n todo: 'Todo',\r\n },\r\n}\r\n","/**\r\n * @description i18n zh-CN\r\n * @author wangfupeng\r\n */\r\n\r\nexport default {\r\n // 通用的词\r\n common: {\r\n ok: '确定',\r\n delete: '删除',\r\n enter: '回车',\r\n },\r\n\r\n blockQuote: {\r\n title: '引用',\r\n },\r\n codeBlock: {\r\n title: '代码块',\r\n },\r\n color: {\r\n color: '文字颜色',\r\n bgColor: '背景色',\r\n default: '默认颜色',\r\n clear: '清除背景色',\r\n },\r\n divider: {\r\n title: '分割线',\r\n },\r\n emotion: {\r\n title: '表情',\r\n },\r\n fontSize: {\r\n title: '字号',\r\n default: '默认字号',\r\n },\r\n fontFamily: {\r\n title: '字体',\r\n default: '默认字体',\r\n },\r\n fullScreen: {\r\n title: '全屏',\r\n },\r\n header: {\r\n title: '标题',\r\n text: '正文',\r\n },\r\n image: {\r\n netImage: '网络图片',\r\n delete: '删除图片',\r\n edit: '编辑图片',\r\n viewLink: '查看链接',\r\n src: '图片地址',\r\n desc: '图片描述',\r\n link: '图片链接',\r\n },\r\n indent: {\r\n decrease: '减少缩进',\r\n increase: '增加缩进',\r\n },\r\n justify: {\r\n left: '左对齐',\r\n right: '右对齐',\r\n center: '居中对齐',\r\n justify: '两端对齐',\r\n },\r\n lineHeight: {\r\n title: '行高',\r\n default: '默认行高',\r\n },\r\n link: {\r\n insert: '插入链接',\r\n text: '链接文本',\r\n url: '链接地址',\r\n unLink: '取消链接',\r\n edit: '修改链接',\r\n view: '查看链接',\r\n },\r\n textStyle: {\r\n bold: '粗体',\r\n clear: '清除格式',\r\n code: '行内代码',\r\n italic: '斜体',\r\n sub: '下标',\r\n sup: '上标',\r\n through: '删除线',\r\n underline: '下划线',\r\n },\r\n undo: {\r\n undo: '撤销',\r\n redo: '重做',\r\n },\r\n todo: {\r\n todo: '待办',\r\n },\r\n}\r\n","/**\r\n * @description render paragraph elem\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\n/**\r\n * render paragraph elem\r\n * @param elemNode slate elem\r\n * @param children children\r\n * @param editor editor\r\n * @returns vnode\r\n */\r\nfunction renderParagraph(\r\n elemNode: SlateElement,\r\n children: VNode[] | null,\r\n editor: IDomEditor\r\n): VNode {\r\n const vnode = <p>{children}</p>\r\n return vnode\r\n}\r\n\r\nexport const renderParagraphConf = {\r\n type: 'paragraph',\r\n renderElem: renderParagraph,\r\n}\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\n\r\nfunction pToHtml(elem: Element, childrenHtml: string): string {\r\n if (childrenHtml === '') {\r\n return '<p><br></p>'\r\n }\r\n return `<p>${childrenHtml}</p>`\r\n}\r\n\r\nexport const pToHtmlConf = {\r\n type: 'paragraph',\r\n elemToHtml: pToHtml,\r\n}\r\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n return fn && callBind(call, fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.19.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function (argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n // we can't check .prototype since constructors produced by .bind haven't it\n } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nvar UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\n// UC Browser bug\n// https://github.com/zloirock/core-js/issues/1008\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\n return !$RegExp('a', 'y').sticky;\n});\n\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n\nmodule.exports = {\n BROKEN_CARET: BROKEN_CARET,\n MISSED_STICKY: MISSED_STICKY,\n UNSUPPORTED_Y: UNSUPPORTED_Y\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n call(nativeReplace, match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?<a>b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$<a>c') !== 'bc';\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","var FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var uncurriedNativeMethod = uncurryThis(nativeMethod);\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n }\n return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n }\n return { done: false };\n });\n\n redefine(String.prototype, KEY, methods[0]);\n redefine(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar TypeError = global.TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n push(results, result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n var replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar arraySlice = require('../internals/array-slice-simple');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = toString(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return call(nativeSplit, string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = call(regexpExec, separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n push(output, stringSlice(string, lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !exec(separatorCopy, '')) push(output, '');\n } else push(output, stringSlice(string, lastLastIndex));\n return output.length > lim ? arraySlice(output, 0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);\n return splitter\n ? call(splitter, separator, O, limit)\n : call(internalSplit, toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n push(A, stringSlice(S, p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n push(A, z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n push(A, stringSlice(S, p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","/**\r\n * @description DOM 操作\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, {\r\n css,\r\n append,\r\n prepend,\r\n addClass,\r\n removeClass,\r\n hasClass,\r\n on,\r\n off,\r\n focus,\r\n attr,\r\n hide,\r\n show,\r\n parents,\r\n dataset,\r\n val,\r\n text,\r\n removeAttr,\r\n children,\r\n html,\r\n remove,\r\n find,\r\n width,\r\n height,\r\n Dom7Array,\r\n filter,\r\n empty,\r\n} from 'dom7'\r\nexport { Dom7Array } from 'dom7'\r\n\r\nif (css) $.fn.css = css\r\nif (append) $.fn.append = append\r\nif (prepend) $.fn.prepend = prepend\r\nif (addClass) $.fn.addClass = addClass\r\nif (removeClass) $.fn.removeClass = removeClass\r\nif (hasClass) $.fn.hasClass = hasClass\r\nif (on) $.fn.on = on\r\nif (off) $.fn.off = off\r\nif (focus) $.fn.focus = focus\r\nif (attr) $.fn.attr = attr\r\nif (removeAttr) $.fn.removeAttr = removeAttr\r\nif (hide) $.fn.hide = hide\r\nif (show) $.fn.show = show\r\nif (parents) $.fn.parents = parents\r\nif (dataset) $.fn.dataset = dataset\r\nif (val) $.fn.val = val\r\nif (text) $.fn.text = text\r\nif (html) $.fn.html = html\r\nif (children) $.fn.children = children\r\nif (remove) $.fn.remove = remove\r\nif (find) $.fn.find = find\r\nif (width) $.fn.width = width\r\nif (height) $.fn.height = height\r\nif (filter) $.fn.filter = filter\r\nif (empty) $.fn.empty = empty\r\n\r\nexport default $\r\n\r\n/**\r\n * 判断 str 是不是纯字符串,而不是 html tag\r\n * @param str str\r\n */\r\nexport function isPlainText(str: string) {\r\n const $container = $(`<div>${str}</div>`)\r\n\r\n // 获取 children length (过滤 `<br>`)\r\n const childrenLength = $container.children().filter((child: DOMElement) => {\r\n if (child.tagName === 'BR') return false\r\n return true\r\n }).length\r\n\r\n return childrenLength === 0\r\n}\r\n\r\n/**\r\n * 获取 outerHTML\r\n * @param $elem dom7 elem\r\n */\r\nexport function getOuterHTML($elem: Dom7Array) {\r\n if ($elem.length === 0) return ''\r\n return $elem[0].outerHTML\r\n}\r\n\r\n/**\r\n * 获取 tagName lower-case\r\n * @param $elem $elem\r\n */\r\nexport function getTagName($elem: Dom7Array): string {\r\n if ($elem.length) return $elem[0].tagName.toLowerCase()\r\n return ''\r\n}\r\n\r\n/**\r\n * 获取 $elem 某一个 style 值\r\n * @param $elem $elem\r\n * @param styleKey style key\r\n */\r\nexport function getStyleValue($elem: Dom7Array, styleKey: string): string {\r\n let res = ''\r\n\r\n const styleStr = $elem.attr('style') || '' // 如 'line-height: 2.5; color: red;'\r\n const styleArr = styleStr.split(';') // 如 ['line-height: 2.5', ' color: red', '']\r\n const length = styleArr.length\r\n for (let i = 0; i < length; i++) {\r\n const styleItemStr = styleArr[i] // 如 'line-height: 2.5'\r\n if (styleItemStr) {\r\n const arr = styleItemStr.split(':') // ['line-height', ' 2.5']\r\n if (arr[0].trim() === styleKey) {\r\n res = arr[1].trim()\r\n }\r\n }\r\n }\r\n\r\n return res\r\n}\r\n\r\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\r\n// weird things for Slate's types with the same name as globals. (2019/11/27)\r\n// https://github.com/microsoft/TypeScript/issues/35002\r\nimport DOMNode = globalThis.Node\r\nimport DOMComment = globalThis.Comment\r\nimport DOMElement = globalThis.Element\r\nimport DOMText = globalThis.Text\r\nimport DOMRange = globalThis.Range\r\nimport DOMSelection = globalThis.Selection\r\nimport DOMStaticRange = globalThis.StaticRange\r\nexport { DOMNode, DOMComment, DOMElement, DOMText, DOMRange, DOMSelection, DOMStaticRange }\r\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\n\n// `globalThis` object\n// https://tc39.es/ecma262/#sec-globalthis\n$({ global: true }, {\n globalThis: global\n});\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { ParagraphElement } from './custom-types'\r\nimport $, { DOMElement } from '../../utils/dom'\r\n\r\nfunction parseParagraphHtml(\r\n elem: DOMElement,\r\n children: Descendant[],\r\n editor: IDomEditor\r\n): ParagraphElement {\r\n const $elem = $(elem)\r\n\r\n children = children.filter(child => {\r\n if (Text.isText(child)) return true\r\n if (editor.isInline(child)) return true\r\n return false\r\n })\r\n\r\n // 无 children ,则用纯文本\r\n if (children.length === 0) {\r\n children = [{ text: $elem.text().replace(/\\s+/gm, ' ') }]\r\n }\r\n\r\n return {\r\n type: 'paragraph',\r\n // @ts-ignore\r\n children,\r\n }\r\n}\r\n\r\nexport const parseParagraphHtmlConf = {\r\n selector: 'p:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parseParagraphHtml,\r\n}\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport {\r\n Editor,\r\n Element as SlateElement,\r\n Transforms,\r\n Node as SlateNode,\r\n Text as SlateText,\r\n} from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction deleteHandler(newEditor: IDomEditor): boolean {\r\n const [nodeEntry] = Editor.nodes(newEditor, {\r\n match: n => newEditor.children[0] === n, // editor 第一个节点\r\n mode: 'highest', // 最高层级\r\n })\r\n if (nodeEntry == null) return false\r\n\r\n const n = nodeEntry[0]\r\n if (!SlateElement.isElement(n)) return false\r\n if (n.type === 'paragraph') return false // 命中了 paragraph ,则不再继续判断\r\n if (SlateNode.string(n) !== '') return false // 未删除全部内容,则不再继续判断\r\n\r\n const { children = [] } = n\r\n if (!SlateText.isText(children[0])) return false // n.children 不是 text (如 table),则不再继续判断\r\n\r\n // 至此,就命中了一个(非 paragraph)+(children 都是 text)+(内容为空)的顶级 node ,如 header blockQuote 等\r\n // 然后,将其却换为 paragraph\r\n Transforms.setNodes(newEditor, {\r\n type: 'paragraph',\r\n })\r\n return true\r\n}\r\n\r\nfunction withParagraph<T extends IDomEditor>(editor: T): T {\r\n const { deleteBackward, deleteForward, insertText, insertBreak } = editor\r\n const newEditor = editor\r\n\r\n // 删除非 p 的文本 elem(如 header blockQuote 等),删除没有内容时,切换为 p\r\n newEditor.deleteBackward = unit => {\r\n const res = deleteHandler(newEditor)\r\n if (res) return // 命中结果,则 return\r\n\r\n // 执行默认的删除\r\n deleteBackward(unit)\r\n }\r\n newEditor.deleteForward = unit => {\r\n const res = deleteHandler(newEditor)\r\n if (res) return // 命中结果,则 return\r\n\r\n // 执行默认的删除\r\n deleteForward(unit)\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withParagraph\r\n","/**\r\n * @description paragraph entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderParagraphConf } from './render-elem'\r\nimport { pToHtmlConf } from './elem-to-html'\r\nimport { parseParagraphHtmlConf } from './parse-elem-html'\r\nimport withParagraph from './plugin'\r\n\r\nconst p: Partial<IModuleConf> = {\r\n renderElems: [renderParagraphConf],\r\n elemsToHtml: [pToHtmlConf],\r\n parseElemsHtml: [parseParagraphHtmlConf],\r\n editorPlugin: withParagraph,\r\n}\r\n\r\nexport default p\r\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\n\nvar quot = /\"/g;\nvar replace = uncurryThis(''.replace);\n\n// `CreateHTML` abstract operation\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n var S = toString(requireObjectCoercible(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + replace(toString(value), quot, '&quot;') + '\"';\n return p1 + '>' + S + '</' + tag + '>';\n};\n","var fails = require('../internals/fails');\n\n// check the existence of a method, lowercase\n// of a tag and escaping quotes in arguments\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n var test = ''[METHOD_NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n });\n};\n","/**\r\n * @description text to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Text, Descendant } from 'slate'\r\nimport { StyledText } from './custom-types'\r\nimport $, { getOuterHTML, getTagName, isPlainText } from '../../utils/dom'\r\n\r\n//【注意】color bgColor fontSize fontFamily 在另外的菜单\r\n\r\n/**\r\n * 生成加了样式的 text html\r\n * @param textNode textNode\r\n * @param html text html\r\n */\r\nfunction genStyledHtml(textNode: Descendant, html: string): string {\r\n let styledHtml = html\r\n const { bold, italic, underline, code, through, sub, sup } = textNode as StyledText\r\n if (bold) styledHtml = `<strong>${styledHtml}</strong>`\r\n if (code) styledHtml = `<code>${styledHtml}</code>`\r\n if (italic) styledHtml = `<em>${styledHtml}</em>`\r\n if (underline) styledHtml = `<u>${styledHtml}</u>`\r\n if (through) styledHtml = `<s>${styledHtml}</s>`\r\n if (sub) styledHtml = `<sub>${styledHtml}</sub>`\r\n if (sup) styledHtml = `<sup>${styledHtml}</sup>`\r\n return styledHtml\r\n}\r\n\r\n/**\r\n * style to html\r\n * @param textNode slate text node\r\n * @param textHtml text html\r\n * @returns styled html\r\n */\r\nexport function styleToHtml(textNode: Descendant, textHtml: string): string {\r\n if (!Text.isText(textNode)) return textHtml\r\n\r\n if (isPlainText(textHtml)) {\r\n // textHtml 是纯文本,而不是 html tag\r\n return genStyledHtml(textNode, textHtml)\r\n }\r\n\r\n // textHtml 是 html tag\r\n const $text = $(textHtml)\r\n const tagName = getTagName($text)\r\n\r\n if (tagName === 'br') {\r\n return genStyledHtml(textNode, '<br>')\r\n }\r\n\r\n let innerHtml = $text.html()\r\n innerHtml = genStyledHtml(textNode, innerHtml)\r\n $text.html(innerHtml)\r\n return getOuterHTML($text)\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { StyledText } from './custom-types'\r\nimport $, { Dom7Array, DOMElement } from '../../utils/dom'\r\n\r\n/**\r\n * $text 是否匹配 tags\r\n * @param $text $text\r\n * @param selector selector 如 'b,strong' 或 'sub'\r\n */\r\nfunction isMatch($text: Dom7Array, selector: string): boolean {\r\n if ($text.length === 0) return false\r\n\r\n if ($text[0].matches(selector)) return true\r\n\r\n if ($text.find(selector).length > 0) return true\r\n\r\n return false\r\n}\r\n\r\nexport function parseStyleHtml(\r\n textElem: DOMElement,\r\n node: Descendant,\r\n editor: IDomEditor\r\n): Descendant {\r\n const $text = $(textElem)\r\n\r\n if (!Text.isText(node)) return node\r\n\r\n const textNode = node as StyledText\r\n\r\n // bold\r\n if (isMatch($text, 'b,strong')) {\r\n textNode.bold = true\r\n }\r\n\r\n // italic\r\n if (isMatch($text, 'i,em')) {\r\n textNode.italic = true\r\n }\r\n\r\n // underline\r\n if (isMatch($text, 'u')) {\r\n textNode.underline = true\r\n }\r\n\r\n // through\r\n if (isMatch($text, 's,strike')) {\r\n textNode.through = true\r\n }\r\n\r\n // sub\r\n if (isMatch($text, 'sub')) {\r\n textNode.sub = true\r\n }\r\n\r\n // sup\r\n if (isMatch($text, 'sup')) {\r\n textNode.sup = true\r\n }\r\n\r\n // code\r\n if (isMatch($text, 'code')) {\r\n textNode.code = true\r\n }\r\n\r\n return textNode\r\n}\r\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.bold` method\n// https://tc39.es/ecma262/#sec-string.prototype.bold\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('bold') }, {\n bold: function bold() {\n return createHTML(this, 'b', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.italics` method\n// https://tc39.es/ecma262/#sec-string.prototype.italics\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('italics') }, {\n italics: function italics() {\n return createHTML(this, 'i', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.sub` method\n// https://tc39.es/ecma262/#sec-string.prototype.sub\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('sub') }, {\n sub: function sub() {\n return createHTML(this, 'sub', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.sup` method\n// https://tc39.es/ecma262/#sec-string.prototype.sup\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('sup') }, {\n sup: function sup() {\n return createHTML(this, 'sup', '', '');\n }\n});\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar handlePrototype = function (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n if (DOMIterables[COLLECTION_NAME]) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","/**\r\n * @description helper\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Node } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nexport function isMenuDisabled(editor: IDomEditor, mark?: string): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n if (type === 'pre') return true // 代码块\r\n if (Editor.isVoid(editor, n)) return true // void node\r\n\r\n return false\r\n },\r\n universal: true,\r\n })\r\n\r\n // 命中,则禁用\r\n if (match) return true\r\n return false\r\n}\r\n\r\nexport function removeMarks(editor: IDomEditor, textNode: Node) {\r\n // 遍历 text node 属性,清除样式\r\n const keys = Object.keys(textNode as object)\r\n keys.forEach(key => {\r\n if (key === 'text') {\r\n // 保留 text 属性,text node 必须的\r\n return\r\n }\r\n // 其他属性,全部清除\r\n Editor.removeMark(editor, key)\r\n })\r\n}\r\n","/**\r\n * @description simply style base menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor } from 'slate'\r\nimport { IButtonMenu, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { isMenuDisabled } from '../helper'\r\n\r\nabstract class BaseMenu implements IButtonMenu {\r\n abstract readonly mark: string\r\n protected readonly marksNeedToRemove: string[] = [] // 增加 mark 的同时,需要移除哪些 mark (互斥,不能共存的)\r\n abstract readonly title: string\r\n abstract readonly iconSvg: string\r\n abstract readonly hotkey: string\r\n readonly tag = 'button'\r\n\r\n /**\r\n * 获取:是否有 mark\r\n * @param editor editor\r\n */\r\n getValue(editor: IDomEditor): string | boolean {\r\n const mark = this.mark\r\n const curMarks = Editor.marks(editor)\r\n\r\n // 当 curMarks 存在时,说明用户手动设置,以 curMarks 为准\r\n if (curMarks) {\r\n return curMarks[mark]\r\n } else {\r\n const [match] = Editor.nodes(editor, {\r\n // @ts-ignore\r\n match: n => n[mark] === true,\r\n })\r\n return !!match\r\n }\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n const isMark = this.getValue(editor)\r\n return !!isMark\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return isMenuDisabled(editor, this.mark)\r\n }\r\n\r\n /**\r\n * 执行命令\r\n * @param editor editor\r\n * @param value 是否有 mark\r\n */\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n const { mark, marksNeedToRemove } = this\r\n if (value) {\r\n // 已,则取消\r\n editor.removeMark(mark)\r\n } else {\r\n // 没有,则执行\r\n editor.addMark(mark, true)\r\n\r\n // 移除互斥、不能共存的 marks\r\n if (marksNeedToRemove) {\r\n marksNeedToRemove.forEach(m => editor.removeMark(m))\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default BaseMenu\r\n","/**\r\n * @description icon svg\r\n * @author wangfupeng\r\n */\r\n\r\n/**\r\n * 【注意】svg 字符串的长度 ,否则会导致代码体积过大\r\n * 尽量选择 https://www.iconfont.cn/collections/detail?spm=a313x.7781069.0.da5a778a4&cid=20293\r\n * 找不到再从 iconfont.com 搜索\r\n */\r\n\r\n// 加粗\r\nexport const BOLD_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M707.872 484.64A254.88 254.88 0 0 0 768 320c0-141.152-114.848-256-256-256H192v896h384c141.152 0 256-114.848 256-256a256.096 256.096 0 0 0-124.128-219.36zM384 192h101.504c55.968 0 101.504 57.408 101.504 128s-45.536 128-101.504 128H384V192z m159.008 640H384v-256h159.008c58.464 0 106.016 57.408 106.016 128s-47.552 128-106.016 128z\"></path></svg>'\r\n\r\n// 下划线\r\nexport const UNDER_LINE_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M704 64l128 0 0 416c0 159.072-143.264 288-320 288s-320-128.928-320-288l0-416 128 0 0 416c0 40.16 18.24 78.688 51.36 108.512 36.896 33.216 86.848 51.488 140.64 51.488s103.744-18.304 140.64-51.488c33.12-29.792 51.36-68.352 51.36-108.512l0-416zM192 832l640 0 0 128-640 0z\"></path></svg>'\r\n\r\n// 斜体\r\nexport const ITALIC_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M896 64v64h-128L448 896h128v64H128v-64h128L576 128h-128V64z\"></path></svg>'\r\n\r\n// 删除线\r\nexport const THROUGH_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M1024 512v64h-234.496c27.52 38.496 42.496 82.688 42.496 128 0 70.88-36.672 139.04-100.576 186.976C672.064 935.488 594.144 960 512 960s-160.064-24.512-219.424-69.024C228.64 843.04 192 774.88 192 704h128c0 69.376 87.936 128 192 128s192-58.624 192-128-87.936-128-192-128H0v-64h299.52a385.984 385.984 0 0 1-6.944-5.024C228.64 459.04 192 390.88 192 320s36.672-139.04 100.576-186.976C351.936 88.512 429.856 64 512 64s160.064 24.512 219.424 69.024C795.328 180.96 832 249.12 832 320h-128c0-69.376-87.936-128-192-128s-192 58.624-192 128 87.936 128 192 128c78.976 0 154.048 22.688 212.48 64H1024z\"></path></svg>'\r\n\r\n// 代码\r\nexport const CODE_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M576 736l96 96 320-320L672 192l-96 96 224 224zM448 288l-96-96L32 512l320 320 96-96-224-224z\"></path></svg>'\r\n\r\n// 清除格式\r\nexport const ERASER_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M969.382408 288.738615l-319.401123-270.852152a67.074236 67.074236 0 0 0-96.459139 5.74922l-505.931379 574.922021a68.35184 68.35184 0 0 0-17.886463 47.910169 74.101061 74.101061 0 0 0 24.274486 47.910168l156.50655 132.232065h373.060512L975.131628 383.281347a67.074236 67.074236 0 0 0-5.74922-96.459139z m-440.134747 433.746725H264.144729l-90.071117-78.572676c-5.74922-5.74922-12.137243-12.137243-12.137243-17.886463a36.411728 36.411728 0 0 1 5.749221-24.274485l210.804741-240.828447 265.102932 228.691204z m-439.495945 180.781036h843.218964a60.047411 60.047411 0 1 1 0 120.733624H89.751716a60.047411 60.047411 0 1 1 0-120.733624z m0 0\"></path></svg>'\r\n\r\n// 链接\r\nexport const LINK_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M440.224 635.776a51.84 51.84 0 0 1-36.768-15.232c-95.136-95.136-95.136-249.92 0-345.056l192-192C641.536 37.408 702.816 12.032 768 12.032s126.432 25.376 172.544 71.456c95.136 95.136 95.136 249.92 0 345.056l-87.776 87.776a51.968 51.968 0 1 1-73.536-73.536l87.776-87.776a140.16 140.16 0 0 0 0-197.984c-26.432-26.432-61.6-40.992-99.008-40.992s-72.544 14.56-99.008 40.992l-192 192a140.16 140.16 0 0 0 0 197.984 51.968 51.968 0 0 1-36.768 88.768z\"></path><path d=\"M256 1012a242.4 242.4 0 0 1-172.544-71.456c-95.136-95.136-95.136-249.92 0-345.056l87.776-87.776a51.968 51.968 0 1 1 73.536 73.536l-87.776 87.776a140.16 140.16 0 0 0 0 197.984c26.432 26.432 61.6 40.992 99.008 40.992s72.544-14.56 99.008-40.992l192-192a140.16 140.16 0 0 0 0-197.984 51.968 51.968 0 1 1 73.536-73.536c95.136 95.136 95.136 249.92 0 345.056l-192 192A242.4 242.4 0 0 1 256 1012z\"></path></svg>'\r\n\r\n// 取消链接\r\nexport const UN_LINK_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M608.16328 811.815036c9.371954 9.371954 9.371954 24.56788 0 33.941834l-89.347563 89.347564c-118.525421 118.523421-311.38448 118.531421-429.919901 0-118.527421-118.529421-118.527421-311.39048 0-429.917901l89.349564-89.349563c9.371954-9.371954 24.56788-9.371954 33.941834 0l79.195613 79.195613c9.371954 9.371954 9.371954 24.56788 0 33.941834l-89.349563 89.347564c-56.143726 56.145726-56.143726 147.49928 0 203.645005 56.143726 56.143726 147.49928 56.145726 203.647005 0l89.347564-89.347563c9.371954-9.371954 24.56788-9.371954 33.941834 0l79.193613 79.195613z m-113.135447-520.429459c9.371954 9.371954 24.56788 9.371954 33.941834 0l89.347564-89.347564c56.143726-56.149726 147.49928-56.145726 203.647006 0 56.143726 56.145726 56.143726 147.49928 0 203.645006l-89.349564 89.347564c-9.371954 9.371954-9.371954 24.56788 0 33.941834l79.195613 79.195613c9.371954 9.371954 24.56788 9.371954 33.941834 0l89.349564-89.349563c118.529421-118.529421 118.529421-311.38848 0-429.917901-118.531421-118.527421-311.38848-118.527421-429.919901 0l-89.347563 89.347564c-9.371954 9.371954-9.371954 24.56788 0 33.941834l79.193613 79.195613z m469.653707 718.556492l45.253779-45.253779c18.745908-18.745908 18.745908-49.13776 0-67.881669L127.195629 14.062931c-18.745908-18.745908-49.13776-18.745908-67.881669 0L14.058181 59.31871c-18.745908 18.745908-18.745908 49.13776 0 67.881669l882.74169 882.74169c18.745908 18.743908 49.13776 18.743908 67.881669 0z\"></path></svg>'\r\n\r\n// 编辑\r\nexport const PENCIL_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M864 0a160 160 0 0 1 128 256l-64 64-224-224 64-64c26.752-20.096 59.968-32 96-32zM64 736l-64 288 288-64 592-592-224-224L64 736z m651.584-372.416l-448 448-55.168-55.168 448-448 55.168 55.168z\"></path></svg>'\r\n\r\n// 外部(链接)\r\nexport const EXTERNAL_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M924.402464 1023.068211H0.679665V99.345412h461.861399v98.909208H99.596867v725.896389h725.896389V561.206811h98.909208z\" p-id=\"10909\"></path><path d=\"M930.805104 22.977336l69.965436 69.965436-453.492405 453.492404-69.965435-69.901489z\" p-id=\"10910\"></path><path d=\"M1022.464381 304.030081h-98.917201V99.345412H709.230573V0.428211h313.233808z\"></path></svg>'\r\n\r\n// 标题\r\nexport const HEADER_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M960 960c-51.2 0-102.4-3.2-153.6-3.2-51.2 0-99.2 3.2-150.4 3.2-19.2 0-28.8-22.4-28.8-38.4 0-51.2 57.6-28.8 86.4-48 19.2-12.8 19.2-60.8 19.2-80v-224-19.2c-9.6-3.2-19.2-3.2-28.8-3.2H320c-9.6 0-19.2 0-28.8 3.2V780.8c0 22.4 0 80 22.4 92.8 28.8 19.2 96-6.4 96 44.8 0 16-9.6 41.6-28.8 41.6-54.4 0-105.6-3.2-160-3.2-48 0-96 3.2-147.2 3.2-19.2 0-28.8-22.4-28.8-38.4 0-51.2 51.2-28.8 80-48 19.2-12.8 19.2-60.8 19.2-83.2V294.4c0-28.8 3.2-115.2-22.4-131.2-25.6-16-86.4 9.6-86.4-41.6 0-16 6.4-41.6 28.8-41.6 51.2 0 105.6 3.2 156.8 3.2 48 0 96-3.2 144-3.2 19.2 0 28.8 22.4 28.8 41.6 0 48-57.6 25.6-83.2 41.6-19.2 12.8-19.2 73.6-19.2 92.8v201.6c6.4 3.2 16 3.2 22.4 3.2h400c6.4 0 12.8 0 22.4-3.2V256c0-22.4 0-80-19.2-92.8-28.8-16-86.4 6.4-86.4-41.6 0-16 9.6-41.6 28.8-41.6 51.2 0 99.2 3.2 150.4 3.2 48 0 99.2-3.2 147.2-3.2 19.2 0 28.8 22.4 28.8 41.6 0 51.2-57.6 25.6-86.4 41.6-19.2 12.8-19.2 70.4-19.2 92.8v537.6c0 19.2 0 67.2 19.2 80 28.8 19.2 89.6-6.4 89.6 44.8 0 19.2-6.4 41.6-28.8 41.6z\"></path></svg>'\r\n\r\n// 字体颜色\r\nexport const FONT_COLOR_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M64 864h896v96H64zM360.58 576h302.85l81.53 224h102.16L579.24 64H444.77L176.89 800h102.16l81.53-224zM512 159.96L628.49 480H395.52L512 159.96z\"></path></svg>'\r\n\r\n// 背景颜色\r\nexport const BG_COLOR_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M510.030769 315.076923l84.676923 196.923077h-177.230769l76.8-196.923077h15.753846zM945.230769 157.538462v708.923076c0 43.323077-35.446154 78.769231-78.769231 78.769231H157.538462c-43.323077 0-78.769231-35.446154-78.769231-78.769231V157.538462c0-43.323077 35.446154-78.769231 78.769231-78.769231h708.923076c43.323077 0 78.769231 35.446154 78.769231 78.769231z m-108.307692 643.938461L600.615385 216.615385c-5.907692-11.815385-15.753846-19.692308-29.538462-19.692308h-139.815385c-11.815385 0-23.630769 7.876923-27.56923 19.692308l-216.615385 584.861538c-3.938462 11.815385 3.938462 25.6 17.723077 25.6h80.738462c11.815385 0 23.630769-9.846154 27.56923-21.661538l63.015385-175.261539h263.876923l68.923077 175.261539c3.938462 11.815385 15.753846 21.661538 27.569231 21.661538h80.738461c13.784615 0 23.630769-13.784615 19.692308-25.6z\"></path></svg>'\r\n\r\n// 清空(颜色)\r\nexport const CLEAN_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M236.8 128L896 787.2V128H236.8z m614.4 704L192 172.8V832h659.2zM192 64h704c38.4 0 64 25.6 64 64v704c0 38.4-25.6 64-64 64H192c-38.4 0-64-25.6-64-64V128c0-38.4 25.6-64 64-64z\"></path></svg>'\r\n\r\n// 图片\r\nexport const IMAGE_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M959.877 128l0.123 0.123v767.775l-0.123 0.122H64.102l-0.122-0.122V128.123l0.122-0.123h895.775zM960 64H64C28.795 64 0 92.795 0 128v768c0 35.205 28.795 64 64 64h896c35.205 0 64-28.795 64-64V128c0-35.205-28.795-64-64-64zM832 288.01c0 53.023-42.988 96.01-96.01 96.01s-96.01-42.987-96.01-96.01S682.967 192 735.99 192 832 234.988 832 288.01zM896 832H128V704l224.01-384 256 320h64l224.01-192z\"></path></svg>'\r\n\r\n// 垃圾桶(删除)\r\nexport const TRASH_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M826.8032 356.5312c-19.328 0-36.3776 15.6928-36.3776 35.0464v524.2624c0 19.328-16 34.56-35.328 34.56H264.9344c-19.328 0-35.5072-15.3088-35.5072-34.56V390.0416c0-19.328-14.1568-35.0464-33.5104-35.0464s-33.5104 15.6928-33.5104 35.0464V915.712c0 57.9328 44.6208 108.288 102.528 108.288H755.2c57.9328 0 108.0832-50.4576 108.0832-108.288V391.4752c-0.1024-19.2512-17.1264-34.944-36.48-34.944z\" p-id=\"9577\"></path><path d=\"M437.1712 775.7568V390.6048c0-19.328-14.1568-35.0464-33.5104-35.0464s-33.5104 15.616-33.5104 35.0464v385.152c0 19.328 14.1568 35.0464 33.5104 35.0464s33.5104-15.7184 33.5104-35.0464zM649.7024 775.7568V390.6048c0-19.328-17.0496-35.0464-36.3776-35.0464s-36.3776 15.616-36.3776 35.0464v385.152c0 19.328 17.0496 35.0464 36.3776 35.0464s36.3776-15.7184 36.3776-35.0464zM965.0432 217.0368h-174.6176V145.5104c0-57.9328-47.2064-101.76-104.6528-101.76h-350.976c-57.8304 0-105.3952 43.8528-105.3952 101.76v71.5264H54.784c-19.4304 0-35.0464 14.1568-35.0464 33.5104 0 19.328 15.616 33.5104 35.0464 33.5104h910.3616c19.328 0 35.0464-14.1568 35.0464-33.5104 0-19.3536-15.6928-33.5104-35.1488-33.5104z m-247.3728 0H297.3952V145.5104c0-19.328 18.2016-34.7648 37.4272-34.7648h350.976c19.1488 0 31.872 15.1296 31.872 34.7648v71.5264z\"></path></svg>'\r\n\r\n// 引用\r\nexport const QUOTE_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M894.6 907.1H605.4c-32.6 0-59-26.4-59-59V608.2l-4-14.9c0-315.9 125.5-485.1 376.5-507.5v59.8C752.7 180.4 711.3 315.8 711.3 442.4v41.2l31.5 12.3h151.8c32.6 0 59 26.4 59 59v293.2c0 32.5-26.4 59-59 59z m-472 0H133.4c-32.6 0-59-26.4-59-59V608.2l-4-14.9c0-315.9 125.5-485.1 376.5-507.5v59.8C280.7 180.4 239.3 315.8 239.3 442.4v41.2l31.5 12.3h151.8c32.6 0 59 26.4 59 59v293.2c0 32.5-26.4 59-59 59z\"></path></svg>'\r\n\r\n// 表情\r\nexport const EMOTION_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M512 1024C230.4 1024 0 793.6 0 512S230.4 0 512 0s512 230.4 512 512-230.4 512-512 512z m0-102.4c226.742857 0 409.6-182.857143 409.6-409.6S738.742857 102.4 512 102.4 102.4 285.257143 102.4 512s182.857143 409.6 409.6 409.6z m-204.8-358.4h409.6c0 113.371429-91.428571 204.8-204.8 204.8s-204.8-91.428571-204.8-204.8z m0-102.4c-43.885714 0-76.8-32.914286-76.8-76.8s32.914286-76.8 76.8-76.8 76.8 32.914286 76.8 76.8-32.914286 76.8-76.8 76.8z m409.6 0c-43.885714 0-76.8-32.914286-76.8-76.8s32.914286-76.8 76.8-76.8c43.885714 0 76.8 32.914286 76.8 76.8s-32.914286 76.8-76.8 76.8z\"></path></svg>'\r\n\r\n// fontSize\r\nexport const FONT_SIZE_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M64 512h384v128h-128V1024h-128V640h-128z m896-256H708.2496v768h-136.4992V256H320V128h640z\"></path></svg>'\r\n\r\n// 字体\r\nexport const FONT_FAMILY_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M956.788364 152.110545h-24.110546l23.924364 9.029819 0.186182 121.018181h-65.070546l-86.574545-130.048H566.551273v650.14691l130.048 64.977454v65.163636h-390.050909v-65.163636l129.954909-64.977454V152.110545H198.283636L111.429818 282.065455H46.545455V69.259636C46.545455 33.792 82.664727 22.062545 98.955636 22.062545h812.683637c23.738182 0 45.056 15.173818 45.056 41.053091V169.425455v-17.221819z\"></path></svg>'\r\n\r\n// 缩进 left\r\nexport const INDENT_LEFT_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M0 64h1024v128H0z m384 192h640v128H384z m0 192h640v128H384z m0 192h640v128H384zM0 832h1024v128H0z m256-512v384l-256-192z\"></path></svg>'\r\n\r\n// 缩进 right\r\nexport const INDENT_RIGHT_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M0 64h1024v128H0z m384 192h640v128H384z m0 192h640v128H384z m0 192h640v128H384zM0 832h1024v128H0z m0-128V320l256 192z\"></path></svg>'\r\n\r\n// 左对齐\r\nexport const JUSTIFY_LEFT_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M768 793.6v102.4H51.2v-102.4h716.8z m204.8-230.4v102.4H51.2v-102.4h921.6z m-204.8-230.4v102.4H51.2v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z\"></path></svg>'\r\n\r\n// 右对齐\r\nexport const JUSTIFY_RIGHT_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M972.8 793.6v102.4H256v-102.4h716.8z m0-230.4v102.4H51.2v-102.4h921.6z m0-230.4v102.4H256v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z\"></path></svg>'\r\n\r\n// 居中对齐\r\nexport const JUSTIFY_CENTER_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M870.4 793.6v102.4H153.6v-102.4h716.8z m102.4-230.4v102.4H51.2v-102.4h921.6z m-102.4-230.4v102.4H153.6v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z\"></path></svg>'\r\n\r\n// 两端对齐\r\nexport const JUSTIFY_JUSTIFY_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M0 64h1024v128H0z m0 192h1024v128H0z m0 192h1024v128H0z m0 192h1024v128H0z m0 192h1024v128H0z\"></path></svg>'\r\n\r\n// 行高\r\nexport const LINE_HEIGHT_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M964 788a8 8 0 0 1 8 8v98a8 8 0 0 1-8 8H438a8 8 0 0 1-8-8v-98a8 8 0 0 1 8-8h526zM198.93 144.306c6.668-5.798 16.774-5.094 22.573 1.574l122.26 140.582a16 16 0 0 1 3.927 10.5c0 8.836-7.164 16-16 16h-61.8a8 8 0 0 0-8 8v390.077h69.819a16 16 0 0 1 10.502 3.928c6.666 5.8 7.37 15.906 1.57 22.573L221.476 878.123a16 16 0 0 1-1.57 1.57c-6.668 5.8-16.774 5.097-22.574-1.57L75.051 737.538a16 16 0 0 1-3.928-10.5c0-8.837 7.163-16 16-16h69.822V312.96H87.127a16 16 0 0 1-10.502-3.928c-6.666-5.8-7.37-15.906-1.57-22.573l122.303-140.582a16 16 0 0 1 1.572-1.572zM964 465a8 8 0 0 1 8 8v98a8 8 0 0 1-8 8H438a8 8 0 0 1-8-8v-98a8 8 0 0 1 8-8h526z m0-323a8 8 0 0 1 8 8v98a8 8 0 0 1-8 8H438a8 8 0 0 1-8-8v-98a8 8 0 0 1 8-8h526z\"></path></svg>'\r\n\r\n// 撤销\r\nexport const UNDO_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M512 64A510.272 510.272 0 0 0 149.984 213.984L0.032 64v384h384L240.512 304.48A382.784 382.784 0 0 1 512.032 192c212.064 0 384 171.936 384 384 0 114.688-50.304 217.632-130.016 288l84.672 96a510.72 510.72 0 0 0 173.344-384c0-282.784-229.216-512-512-512z\"></path></svg>'\r\n\r\n// 重做\r\nexport const REDO_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M0.00032 576a510.72 510.72 0 0 0 173.344 384l84.672-96A383.136 383.136 0 0 1 128.00032 576C128.00032 363.936 299.93632 192 512.00032 192c106.048 0 202.048 42.976 271.52 112.48L640.00032 448h384V64l-149.984 149.984A510.272 510.272 0 0 0 512.00032 64C229.21632 64 0.00032 293.216 0.00032 576z\"></path></svg>'\r\n\r\n// 分割线\r\nexport const DIVIDER_SVG =\r\n '<svg viewBox=\"0 0 1092 1024\"><path d=\"M0 51.2m51.2 0l989.866667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-989.866667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z\"></path><path d=\"M0 460.8m51.2 0l170.666667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-170.666667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z\"></path><path d=\"M819.2 460.8m51.2 0l170.666667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-170.666667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z\"></path><path d=\"M409.6 460.8m51.2 0l170.666667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-170.666667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z\"></path><path d=\"M0 870.4m51.2 0l989.866667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-989.866667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z\"></path></svg>'\r\n\r\n// 代码块\r\nexport const CODE_BLOCK_SVG =\r\n '<svg viewBox=\"0 0 1280 1024\"><path d=\"M832 736l96 96 320-320L928 192l-96 96 224 224zM448 288l-96-96L32 512l320 320 96-96-224-224zM701.312 150.528l69.472 18.944-192 704.032-69.472-18.944 192-704.032z\"></path></svg>'\r\n\r\n// 全屏\r\nexport const FULL_SCREEN_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M133.705143 335.433143V133.851429h201.581714a29.622857 29.622857 0 0 0 29.622857-29.549715V68.754286a29.622857 29.622857 0 0 0-29.622857-29.622857H61.732571A22.893714 22.893714 0 0 0 38.765714 62.025143V335.725714c0 16.310857 13.238857 29.622857 29.622857 29.622857h35.547429a29.842286 29.842286 0 0 0 29.696-29.842285zM690.980571 133.851429h201.581715v201.654857c0 16.310857 13.238857 29.549714 29.622857 29.549714h35.547428a29.622857 29.622857 0 0 0 29.549715-29.549714V61.952a22.893714 22.893714 0 0 0-22.820572-22.893714h-273.554285a29.622857 29.622857 0 0 0-29.549715 29.622857v35.547428c0 16.310857 13.238857 29.696 29.622857 29.696zM335.286857 892.781714H133.705143V691.2a29.622857 29.622857 0 0 0-29.622857-29.622857H68.534857a29.622857 29.622857 0 0 0-29.549714 29.622857v273.554286c0 12.653714 10.24 22.893714 22.820571 22.893714h273.554286a29.622857 29.622857 0 0 0 29.696-29.622857v-35.547429a29.769143 29.769143 0 0 0-29.769143-29.696z m557.348572-201.581714v201.581714H690.907429a29.622857 29.622857 0 0 0-29.622858 29.622857v35.547429c0 16.310857 13.238857 29.622857 29.622858 29.622857h273.554285c12.580571 0 22.893714-10.313143 22.893715-22.893714V691.2a29.622857 29.622857 0 0 0-29.622858-29.622857h-35.547428a29.622857 29.622857 0 0 0-29.696 29.622857z\"></path></svg>'\r\n\r\n// 上标\r\nexport const SUP_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M768 206.016v50.016h128v64h-192V174.016l128-60V64h-128V0h192v146.016zM676 256h-136L352 444 164 256H28l256 256-256 256h136L352 580 540 768h136l-256-256z\"></path></svg>'\r\n\r\n// 下标\r\nexport const SUB_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M768 910.016v50.016h128v64h-192v-146.016l128-60V768h-128v-64h192v146.016zM676 256h-136L352 444 164 256H28l256 256-256 256h136L352 580 540 768h136l-256-256z\"></path></svg>'\r\n\r\n// checkbox\r\nexport const CHECK_BOX_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M278.755556 403.911111l-79.644445 79.644445L455.111111 739.555556l568.888889-568.888889-79.644444-79.644445L455.111111 580.266667l-176.355555-176.355556zM910.222222 910.222222H113.777778V113.777778h568.888889V0H113.777778C51.2 0 0 51.2 0 113.777778v796.444444c0 62.577778 51.2 113.777778 113.777778 113.777778h796.444444c62.577778 0 113.777778-51.2 113.777778-113.777778V455.111111h-113.777778v455.111111z\"></path></svg>'\r\n\r\n// 回车\r\nexport const ENTER_SVG =\r\n '<svg viewBox=\"0 0 1255 1024\"><path d=\"M1095.111111 731.477333h-625.777778V1024L0 658.318222 469.333333 292.408889v292.636444h625.777778V0h156.444445v731.477333z\"></path></svg>'\r\n","/**\r\n * @description bold menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { BOLD_SVG } from '../../../constants/icon-svg'\r\n\r\nclass BoldMenu extends BaseMenu {\r\n readonly mark = 'bold'\r\n readonly title = t('textStyle.bold')\r\n readonly iconSvg = BOLD_SVG\r\n readonly hotkey = 'mod+b'\r\n}\r\n\r\nexport default BoldMenu\r\n","/**\r\n * @description code menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { CODE_SVG } from '../../../constants/icon-svg'\r\n\r\nclass CodeMenu extends BaseMenu {\r\n readonly mark = 'code'\r\n readonly title = t('textStyle.code')\r\n readonly iconSvg = CODE_SVG\r\n readonly hotkey = 'mod+e'\r\n}\r\n\r\nexport default CodeMenu\r\n","/**\r\n * @description italic menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { ITALIC_SVG } from '../../../constants/icon-svg'\r\n\r\nclass ItalicMenu extends BaseMenu {\r\n readonly mark = 'italic'\r\n readonly title = t('textStyle.italic')\r\n readonly iconSvg = ITALIC_SVG\r\n readonly hotkey = 'mod+i'\r\n}\r\n\r\nexport default ItalicMenu\r\n","/**\r\n * @description through menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { THROUGH_SVG } from '../../../constants/icon-svg'\r\n\r\nclass ThroughMenu extends BaseMenu {\r\n readonly mark = 'through'\r\n readonly title = t('textStyle.through')\r\n readonly iconSvg = THROUGH_SVG\r\n readonly hotkey = 'mod+shift+x'\r\n}\r\n\r\nexport default ThroughMenu\r\n","/**\r\n * @description underline menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { UNDER_LINE_SVG } from '../../../constants/icon-svg'\r\n\r\nclass UnderlineMenu extends BaseMenu {\r\n readonly mark = 'underline'\r\n readonly title = t('textStyle.underline')\r\n readonly iconSvg = UNDER_LINE_SVG\r\n readonly hotkey = 'mod+u'\r\n}\r\n\r\nexport default UnderlineMenu\r\n","/**\r\n * @description sub menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { SUB_SVG } from '../../../constants/icon-svg'\r\n\r\nclass SubMenu extends BaseMenu {\r\n readonly mark = 'sub'\r\n readonly marksNeedToRemove = ['sup'] // sub 和 sup 不能共存\r\n readonly title = t('textStyle.sub')\r\n readonly iconSvg = SUB_SVG\r\n readonly hotkey = ''\r\n}\r\n\r\nexport default SubMenu\r\n","/**\r\n * @description sup menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { SUP_SVG } from '../../../constants/icon-svg'\r\n\r\nclass SupMenu extends BaseMenu {\r\n readonly mark = 'sup'\r\n readonly marksNeedToRemove = ['sub'] // sup 和 sub 不能共存\r\n readonly title = t('textStyle.sup')\r\n readonly iconSvg = SUP_SVG\r\n readonly hotkey = ''\r\n}\r\n\r\nexport default SupMenu\r\n","/**\r\n * @description clear style menu — 清 mark,并把标题降为正文\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Text, Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { ERASER_SVG } from '../../../constants/icon-svg'\r\nimport { isMenuDisabled, removeMarks } from '../helper'\r\n\r\nfunction isHeaderBlockType(type: string): boolean {\r\n return (\r\n type === 'header1' ||\r\n type === 'header2' ||\r\n type === 'header3' ||\r\n type === 'header4' ||\r\n type === 'header5' ||\r\n type === 'header6'\r\n )\r\n}\r\n\r\nclass ClearStyleMenu implements IButtonMenu {\r\n readonly title = t('textStyle.clear')\r\n readonly iconSvg = ERASER_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return isMenuDisabled(editor)\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 1) 清行内 mark\r\n const nodeEntries = Editor.nodes(editor, {\r\n match: n => Text.isText(n),\r\n universal: true,\r\n })\r\n for (const nodeEntry of nodeEntries) {\r\n removeMarks(editor, nodeEntry[0])\r\n }\r\n\r\n // 2) 标题 → 正文(yunkee clearAllFormat 行为)\r\n try {\r\n Transforms.setNodes(\r\n editor,\r\n { type: 'paragraph' } as any,\r\n {\r\n match: n => isHeaderBlockType(DomEditor.getNodeType(n)),\r\n mode: 'highest',\r\n }\r\n )\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n}\r\n\r\nexport default ClearStyleMenu\r\n","/**\r\n * @description text style entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { parseStyleHtml } from './parse-style-html'\r\nimport {\r\n boldMenuConf,\r\n underlineMenuConf,\r\n italicMenuConf,\r\n throughMenuConf,\r\n codeMenuConf,\r\n subMenuConf,\r\n supMenuConf,\r\n clearStyleMenuConf,\r\n clearAllFormatMenuConf,\r\n} from './menu/index'\r\n\r\nconst textStyle: Partial<IModuleConf> = {\r\n renderStyle,\r\n menus: [\r\n boldMenuConf,\r\n underlineMenuConf,\r\n italicMenuConf,\r\n throughMenuConf,\r\n codeMenuConf,\r\n subMenuConf,\r\n supMenuConf,\r\n clearStyleMenuConf,\r\n clearAllFormatMenuConf,\r\n ],\r\n styleToHtml,\r\n parseStyleHtml,\r\n}\r\n\r\nexport default textStyle\r\n","/**\r\n * @description render text style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { StyledText } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node slate text\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n const { bold, italic, underline, code, through, sub, sup } = node as StyledText\r\n let styleVnode: VNode = vnode\r\n\r\n // color bgColor 在另外的菜单\r\n\r\n if (bold) {\r\n styleVnode = <strong>{styleVnode}</strong>\r\n }\r\n if (code) {\r\n styleVnode = <code>{styleVnode}</code>\r\n }\r\n if (italic) {\r\n styleVnode = <em>{styleVnode}</em>\r\n }\r\n if (underline) {\r\n styleVnode = <u>{styleVnode}</u>\r\n }\r\n if (through) {\r\n styleVnode = <s>{styleVnode}</s>\r\n }\r\n if (sub) {\r\n styleVnode = <sub>{styleVnode}</sub>\r\n }\r\n if (sup) {\r\n styleVnode = <sup>{styleVnode}</sup>\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport BoldMenu from './BoldMenu'\r\nimport CodeMenu from './CodeMenu'\r\nimport ItalicMenu from './ItalicMenu'\r\nimport ThroughMenu from './ThroughMenu'\r\nimport UnderlineMenu from './UnderlineMenu'\r\nimport SubMenu from './SubMenu'\r\nimport SupMenu from './SupMenu'\r\nimport ClearStyleMenu from './ClearStyleMenu'\r\n\r\nexport const boldMenuConf = {\r\n key: 'bold',\r\n factory() {\r\n return new BoldMenu()\r\n },\r\n}\r\n\r\nexport const codeMenuConf = {\r\n key: 'code',\r\n factory() {\r\n return new CodeMenu()\r\n },\r\n}\r\n\r\nexport const italicMenuConf = {\r\n key: 'italic',\r\n factory() {\r\n return new ItalicMenu()\r\n },\r\n}\r\n\r\nexport const throughMenuConf = {\r\n key: 'through',\r\n factory() {\r\n return new ThroughMenu()\r\n },\r\n}\r\n\r\nexport const underlineMenuConf = {\r\n key: 'underline',\r\n factory() {\r\n return new UnderlineMenu()\r\n },\r\n}\r\n\r\nexport const supMenuConf = {\r\n key: 'sup',\r\n factory() {\r\n return new SupMenu()\r\n },\r\n}\r\n\r\nexport const subMenuConf = {\r\n key: 'sub',\r\n factory() {\r\n return new SubMenu()\r\n },\r\n}\r\n\r\nexport const clearStyleMenuConf = {\r\n key: 'clearStyle',\r\n factory() {\r\n return new ClearStyleMenu()\r\n },\r\n}\r\n\r\n/** yunkee 工具栏 / 悬浮栏使用的 key,与 clearStyle 同一实现 */\r\nexport const clearAllFormatMenuConf = {\r\n key: 'clearAllFormat',\r\n factory() {\r\n return new ClearStyleMenu()\r\n },\r\n}\r\n","/**\r\n * @description render header\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction genRenderElem(level: number) {\r\n /**\r\n * render header elem\r\n * @param elemNode slate elem\r\n * @param children children\r\n * @param editor editor\r\n * @returns vnode\r\n */\r\n function renderHeader(\r\n elemNode: SlateElement,\r\n children: VNode[] | null,\r\n editor: IDomEditor\r\n ): VNode {\r\n const Tag = `h${level}`\r\n const vnode = <Tag>{children}</Tag>\r\n return vnode\r\n }\r\n\r\n return renderHeader\r\n}\r\n\r\nconst renderHeader1Conf = {\r\n type: 'header1', // 和 elemNode.type 一致\r\n renderElem: genRenderElem(1),\r\n}\r\nconst renderHeader2Conf = {\r\n type: 'header2',\r\n renderElem: genRenderElem(2),\r\n}\r\nconst renderHeader3Conf = {\r\n type: 'header3',\r\n renderElem: genRenderElem(3),\r\n}\r\nconst renderHeader4Conf = {\r\n type: 'header4',\r\n renderElem: genRenderElem(4),\r\n}\r\nconst renderHeader5Conf = {\r\n type: 'header5',\r\n renderElem: genRenderElem(5),\r\n}\r\n\r\nexport {\r\n renderHeader1Conf,\r\n renderHeader2Conf,\r\n renderHeader3Conf,\r\n renderHeader4Conf,\r\n renderHeader5Conf,\r\n}\r\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar $toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar n$ToString = RegExpPrototype[TO_STRING];\nvar getFlags = uncurryThis(regExpFlags);\n\nvar NOT_GENERIC = fails(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && n$ToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = $toString(R.source);\n var rf = R.flags;\n var f = $toString(rf === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype) ? getFlags(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","var global = require('../internals/global');\nvar isRegExp = require('../internals/is-regexp');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\n// eslint-disable-next-line es/no-string-prototype-startswith -- safe\nvar un$StartsWith = uncurryThis(''.startsWith);\nvar stringSlice = uncurryThis(''.slice);\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = toString(requireObjectCoercible(this));\n notARegExp(searchString);\n var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = toString(searchString);\n return un$StartsWith\n ? un$StartsWith(that, search, index)\n : stringSlice(that, index, index + search.length) === search;\n }\n});\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","/**\r\n * @description header helper\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Transforms } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\n/**\r\n * 获取 node type('header1' 'header2' 等),未匹配则返回 'paragraph'\r\n */\r\nexport function getHeaderType(editor: IDomEditor): string {\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n return type.startsWith('header') // 匹配 node.type 是 header 开头的 node\r\n },\r\n universal: true,\r\n })\r\n\r\n // 未匹配到 header\r\n if (match == null) return 'paragraph'\r\n\r\n // 匹配到 header\r\n const [n] = match\r\n\r\n return DomEditor.getNodeType(n)\r\n}\r\n\r\nexport function isMenuDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n // 只可用于 p 和 header\r\n if (type === 'paragraph') return true\r\n if (type.startsWith('header')) return true\r\n\r\n return false\r\n },\r\n universal: true,\r\n mode: 'highest', // 匹配最高层级\r\n })\r\n\r\n // 匹配到 p header ,不禁用\r\n if (nodeEntry) {\r\n return false\r\n }\r\n // 未匹配到 p header ,则禁用\r\n return true\r\n}\r\n\r\n/**\r\n * 设置 node type ('header1' 'header2' 'paragraph' 等)\r\n */\r\nexport function setHeaderType(editor: IDomEditor, type: string) {\r\n if (!type) return\r\n\r\n // 执行命令\r\n Transforms.setNodes(editor, {\r\n type: type,\r\n })\r\n}\r\n","/**\r\n * @description header menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { ISelectMenu, IDomEditor, IOption, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { HEADER_SVG } from '../../../constants/icon-svg'\r\nimport { getHeaderType, isMenuDisabled, setHeaderType } from '../helper'\r\n\r\nclass HeaderSelectMenu implements ISelectMenu {\r\n readonly title = t('header.title')\r\n readonly iconSvg = HEADER_SVG\r\n readonly tag = 'select'\r\n readonly width = 60\r\n\r\n getOptions(editor: IDomEditor): IOption[] {\r\n // 基本的 options 列表\r\n const options = [\r\n // value 和 elemNode.type 对应\r\n {\r\n value: 'header1',\r\n text: 'H1',\r\n styleForRenderMenuList: { 'font-size': '32px', 'font-weight': 'bold' },\r\n },\r\n {\r\n value: 'header2',\r\n text: 'H2',\r\n styleForRenderMenuList: { 'font-size': '24px', 'font-weight': 'bold' },\r\n },\r\n {\r\n value: 'header3',\r\n text: 'H3',\r\n styleForRenderMenuList: { 'font-size': '18px', 'font-weight': 'bold' },\r\n },\r\n {\r\n value: 'header4',\r\n text: 'H4',\r\n styleForRenderMenuList: { 'font-size': '16px', 'font-weight': 'bold' },\r\n },\r\n {\r\n value: 'header5',\r\n text: 'H5',\r\n styleForRenderMenuList: { 'font-size': '13px', 'font-weight': 'bold' },\r\n },\r\n { value: 'paragraph', text: t('header.text') },\r\n ]\r\n\r\n // 获取 value ,设置 selected\r\n const curValue = this.getValue(editor).toString()\r\n options.forEach((opt: IOption) => {\r\n if (opt.value === curValue) {\r\n opt.selected = true\r\n } else {\r\n delete opt.selected\r\n }\r\n })\r\n\r\n return options\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // select menu 会显示 selected value ,用不到 active\r\n return false\r\n }\r\n\r\n /**\r\n * 获取选中节点的 node.type\r\n * @param editor editor\r\n */\r\n getValue(editor: IDomEditor): string | boolean {\r\n return getHeaderType(editor)\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return isMenuDisabled(editor)\r\n }\r\n\r\n /**\r\n * 执行命令\r\n * @param editor editor\r\n * @param value node.type\r\n */\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n //【注意】value 是 select change 时获取的,并不是 this.getValue 的值\r\n setHeaderType(editor, value.toString())\r\n }\r\n}\r\n\r\nexport default HeaderSelectMenu\r\n","/**\r\n * @description button menu base\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { getHeaderType, isMenuDisabled, setHeaderType } from '../helper'\r\n\r\nabstract class HeaderButtonMenuBase implements IButtonMenu {\r\n abstract readonly title: string\r\n abstract readonly type: string // 'header1' 'header2' 等\r\n readonly tag = 'button'\r\n\r\n /**\r\n * 获取选中节点的 node.type\r\n * @param editor editor\r\n */\r\n getValue(editor: IDomEditor): string | boolean {\r\n return getHeaderType(editor)\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return this.getValue(editor) === this.type\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return isMenuDisabled(editor)\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n const { type } = this\r\n let newType\r\n if (value === type) {\r\n // 选中的 node.type 和当前 type 一样,则取消\r\n newType = 'paragraph'\r\n } else {\r\n // 否则,则设置\r\n newType = type\r\n }\r\n\r\n setHeaderType(editor, newType)\r\n }\r\n}\r\n\r\nexport default HeaderButtonMenuBase\r\n","/**\r\n * @description header1 button menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderButtonMenuBase from './HeaderButtonMenuBase'\r\n\r\nclass Header1ButtonMenu extends HeaderButtonMenuBase {\r\n title = 'H1'\r\n type = 'header1'\r\n}\r\n\r\nexport default Header1ButtonMenu\r\n","/**\r\n * @description header2 button menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderButtonMenuBase from './HeaderButtonMenuBase'\r\n\r\nclass Header2ButtonMenu extends HeaderButtonMenuBase {\r\n title = 'H2'\r\n type = 'header2'\r\n}\r\n\r\nexport default Header2ButtonMenu\r\n","/**\r\n * @description header3 button menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderButtonMenuBase from './HeaderButtonMenuBase'\r\n\r\nclass Header3ButtonMenu extends HeaderButtonMenuBase {\r\n title = 'H3'\r\n type = 'header3'\r\n}\r\n\r\nexport default Header3ButtonMenu\r\n","/**\r\n * @description header4 button menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderButtonMenuBase from './HeaderButtonMenuBase'\r\n\r\nclass Header4ButtonMenu extends HeaderButtonMenuBase {\r\n title = 'H4'\r\n type = 'header4'\r\n}\r\n\r\nexport default Header4ButtonMenu\r\n","/**\r\n * @description header5 button menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderButtonMenuBase from './HeaderButtonMenuBase'\r\n\r\nclass Header5ButtonMenu extends HeaderButtonMenuBase {\r\n title = 'H5'\r\n type = 'header5'\r\n}\r\n\r\nexport default Header5ButtonMenu\r\n","/**\r\n * @description menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderSelectMenu from './HeaderSelectMenu'\r\nimport Header1ButtonMenu from './Header1ButtonMenu'\r\nimport Header2ButtonMenu from './Header2ButtonMenu'\r\nimport Header3ButtonMenu from './Header3ButtonMenu'\r\nimport Header4ButtonMenu from './Header4ButtonMenu'\r\nimport Header5ButtonMenu from './Header5ButtonMenu'\r\n\r\nexport const HeaderSelectMenuConf = {\r\n key: 'headerSelect',\r\n factory() {\r\n return new HeaderSelectMenu()\r\n },\r\n}\r\n\r\nexport const Header1ButtonMenuConf = {\r\n key: 'header1',\r\n factory() {\r\n return new Header1ButtonMenu()\r\n },\r\n}\r\n\r\nexport const Header2ButtonMenuConf = {\r\n key: 'header2',\r\n factory() {\r\n return new Header2ButtonMenu()\r\n },\r\n}\r\n\r\nexport const Header3ButtonMenuConf = {\r\n key: 'header3',\r\n factory() {\r\n return new Header3ButtonMenu()\r\n },\r\n}\r\n\r\nexport const Header4ButtonMenuConf = {\r\n key: 'header4',\r\n factory() {\r\n return new Header4ButtonMenu()\r\n },\r\n}\r\n\r\nexport const Header5ButtonMenuConf = {\r\n key: 'header5',\r\n factory() {\r\n return new Header5ButtonMenu()\r\n },\r\n}\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\n\r\nfunction genToHtmlFn(level: number) {\r\n function headerToHtml(elem: Element, childrenHtml: string): string {\r\n return `<h${level}>${childrenHtml}</h${level}>`\r\n }\r\n return headerToHtml\r\n}\r\n\r\nexport const header1ToHtmlConf = {\r\n type: 'header1',\r\n elemToHtml: genToHtmlFn(1),\r\n}\r\n\r\nexport const header2ToHtmlConf = {\r\n type: 'header2',\r\n elemToHtml: genToHtmlFn(2),\r\n}\r\n\r\nexport const header3ToHtmlConf = {\r\n type: 'header3',\r\n elemToHtml: genToHtmlFn(3),\r\n}\r\n\r\nexport const header4ToHtmlConf = {\r\n type: 'header4',\r\n elemToHtml: genToHtmlFn(4),\r\n}\r\n\r\nexport const header5ToHtmlConf = {\r\n type: 'header5',\r\n elemToHtml: genToHtmlFn(5),\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport $, { DOMElement } from '../../utils/dom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport {\r\n Header1Element,\r\n Header2Element,\r\n Header3Element,\r\n Header4Element,\r\n Header5Element,\r\n} from './custom-types'\r\n\r\nfunction genParser<T>(level: number) {\r\n function parseHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): T {\r\n const $elem = $(elem)\r\n children = children.filter(child => {\r\n if (Text.isText(child)) return true\r\n if (editor.isInline(child)) return true\r\n return false\r\n })\r\n\r\n // 无 children ,则用纯文本\r\n if (children.length === 0) {\r\n children = [{ text: $elem.text().replace(/\\s+/gm, ' ') }]\r\n }\r\n\r\n const headerNode = {\r\n type: `header${level}`,\r\n children,\r\n } as unknown as T\r\n\r\n return headerNode\r\n }\r\n return parseHtml\r\n}\r\n\r\nexport const parseHeader1HtmlConf = {\r\n selector: 'h1:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: genParser<Header1Element>(1),\r\n}\r\n\r\nexport const parseHeader2HtmlConf = {\r\n selector: 'h2:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: genParser<Header2Element>(2),\r\n}\r\n\r\nexport const parseHeader3HtmlConf = {\r\n selector: 'h3:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: genParser<Header3Element>(3),\r\n}\r\n\r\nexport const parseHeader4HtmlConf = {\r\n selector: 'h4:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: genParser<Header4Element>(4),\r\n}\r\n\r\nexport const parseHeader5HtmlConf = {\r\n selector: 'h5:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: genParser<Header5Element>(5),\r\n}\r\n","/**\r\n * @description header entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport {\r\n renderHeader1Conf,\r\n renderHeader2Conf,\r\n renderHeader3Conf,\r\n renderHeader4Conf,\r\n renderHeader5Conf,\r\n} from './render-elem'\r\nimport {\r\n HeaderSelectMenuConf,\r\n Header1ButtonMenuConf,\r\n Header2ButtonMenuConf,\r\n Header3ButtonMenuConf,\r\n Header4ButtonMenuConf,\r\n Header5ButtonMenuConf,\r\n} from './menu/index'\r\nimport {\r\n header1ToHtmlConf,\r\n header2ToHtmlConf,\r\n header3ToHtmlConf,\r\n header4ToHtmlConf,\r\n header5ToHtmlConf,\r\n} from './elem-to-html'\r\nimport {\r\n parseHeader1HtmlConf,\r\n parseHeader2HtmlConf,\r\n parseHeader3HtmlConf,\r\n parseHeader4HtmlConf,\r\n parseHeader5HtmlConf,\r\n} from './parse-elem-html'\r\nimport withHeader from './plugin'\r\n\r\nconst header: Partial<IModuleConf> = {\r\n renderElems: [\r\n renderHeader1Conf,\r\n renderHeader2Conf,\r\n renderHeader3Conf,\r\n renderHeader4Conf,\r\n renderHeader5Conf,\r\n ],\r\n elemsToHtml: [\r\n header1ToHtmlConf,\r\n header2ToHtmlConf,\r\n header3ToHtmlConf,\r\n header4ToHtmlConf,\r\n header5ToHtmlConf,\r\n ],\r\n parseElemsHtml: [\r\n parseHeader1HtmlConf,\r\n parseHeader2HtmlConf,\r\n parseHeader3HtmlConf,\r\n parseHeader4HtmlConf,\r\n parseHeader5HtmlConf,\r\n ],\r\n menus: [\r\n HeaderSelectMenuConf,\r\n Header1ButtonMenuConf,\r\n Header2ButtonMenuConf,\r\n Header3ButtonMenuConf,\r\n Header4ButtonMenuConf,\r\n Header5ButtonMenuConf,\r\n ],\r\n editorPlugin: withHeader,\r\n}\r\n\r\nexport default header\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Transforms } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction withHeader<T extends IDomEditor>(editor: T): T {\r\n const { insertBreak, insertNode } = editor\r\n const newEditor = editor\r\n\r\n // 重写 insertBreak - header 末尾回车时要插入 paragraph\r\n newEditor.insertBreak = () => {\r\n const [match] = Editor.nodes(newEditor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n return type.startsWith('header') // 匹配 node.type 是 header 开头的 node\r\n },\r\n universal: true,\r\n })\r\n\r\n if (!match) {\r\n // 未匹配到\r\n insertBreak()\r\n return\r\n }\r\n\r\n const isAtLineEnd = DomEditor.isSelectionAtLineEnd(editor, match[1])\r\n\r\n // 如果在行末插入一个空 p,否则正常换行\r\n if (isAtLineEnd) {\r\n const p = { type: 'paragraph', children: [{ text: '' }] }\r\n Transforms.insertNodes(newEditor, p, { mode: 'highest' })\r\n } else {\r\n insertBreak()\r\n }\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withHeader\r\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","/**\r\n * @description vdom utils fn\r\n * @author wangfupeng\r\n */\r\n\r\nimport { VNode, VNodeStyle, Dataset } from 'snabbdom'\r\n\r\n// /**\r\n// * 给 vnode 添加 dataset\r\n// * @param vnode vnode\r\n// * @param newDataset { key: val }\r\n// */\r\n// export function addVnodeDataset(vnode: VNode, newDataset: Dataset) {\r\n// if (vnode.data == null) vnode.data = {}\r\n// const data = vnode.data\r\n// if (data.dataset == null) data.dataset = {}\r\n\r\n// Object.assign(data.dataset, newDataset)\r\n// }\r\n\r\n/**\r\n * 给 vnode 添加样式\r\n * @param vnode vnode\r\n * @param newStyle { key: val }\r\n */\r\nexport function addVnodeStyle(vnode: VNode, newStyle: VNodeStyle) {\r\n if (vnode.data == null) vnode.data = {}\r\n const data = vnode.data\r\n if (data.style == null) data.style = {}\r\n\r\n Object.assign(data.style, newStyle)\r\n}\r\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","/**\r\n * @description pre-parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, { DOMElement, getTagName } from '../../utils/dom'\r\n\r\n/**\r\n * pre-prase font ,兼容 V4\r\n * @param fontElem fontElem\r\n */\r\nfunction preParse(fontElem: DOMElement): DOMElement {\r\n const $font = $(fontElem)\r\n const tagName = getTagName($font)\r\n if (tagName !== 'font') return fontElem\r\n\r\n // 处理 color (V4 使用 <font color=\"#ccc\">xx</font> 格式)\r\n const color = $font.attr('color') || ''\r\n if (color) {\r\n $font.removeAttr('color')\r\n $font.css('color', color)\r\n }\r\n\r\n return $font[0]\r\n}\r\n\r\nexport const preParseHtmlConf = {\r\n selector: 'font',\r\n preParseHtml: preParse,\r\n}\r\n","/**\r\n * @description color base menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Range } from 'slate'\r\nimport { IDropPanelMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array, DOMElement } from '../../../utils/dom'\r\nimport { CLEAN_SVG } from '../../../constants/icon-svg'\r\n\r\nabstract class BaseMenu implements IDropPanelMenu {\r\n abstract readonly title: string\r\n abstract readonly iconSvg: string\r\n readonly tag = 'button'\r\n readonly showDropPanel = true // 点击 button 时显示 dropPanel\r\n protected abstract readonly mark: string\r\n private $content: Dom7Array | null = null\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 点击菜单时,弹出 droPanel 之前,不需要执行其他代码\r\n // 此处空着即可\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const mark = this.mark\r\n const curMarks = Editor.marks(editor)\r\n // @ts-ignore\r\n if (curMarks && curMarks[mark]) return curMarks[mark]\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n const color = this.getValue(editor)\r\n return !!color\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n if (type === 'pre') return true // 代码块\r\n if (Editor.isVoid(editor, n)) return true // void node\r\n\r\n return false\r\n },\r\n universal: true,\r\n })\r\n\r\n // 命中,则禁用\r\n if (match) return true\r\n return false\r\n }\r\n\r\n getPanelContentElem(editor: IDomEditor): DOMElement {\r\n const mark = this.mark\r\n\r\n if (this.$content == null) {\r\n // 第一次渲染\r\n const $content = $('<ul class=\"w-e-panel-content-color\"></ul>')\r\n\r\n // 绑定事件(只在第一次绑定,不要重复绑定)\r\n $content.on('click', 'li', (e: Event) => {\r\n const { target } = e\r\n if (target == null) return\r\n e.preventDefault()\r\n\r\n const { selection } = editor\r\n if (selection == null) return\r\n\r\n const $li = $(target)\r\n const val = $li.attr('data-value')\r\n\r\n // 修改文本样式\r\n if (val === '0') {\r\n Editor.removeMark(editor, mark)\r\n } else {\r\n Editor.addMark(editor, mark, val)\r\n }\r\n })\r\n\r\n this.$content = $content\r\n }\r\n const $content = this.$content\r\n if ($content == null) return document.createElement('ul')\r\n $content.empty() // 清空之后再重置内容\r\n\r\n // 当前选中文本的颜色之\r\n const selectedColor = this.getValue(editor)\r\n\r\n // 获取菜单配置\r\n const colorConf = editor.getMenuConfig(mark)\r\n const { colors = [] } = colorConf\r\n // 根据菜单配置生成 panel content\r\n colors.forEach((color: string) => {\r\n const $block = $(`<div class=\"color-block\" data-value=\"${color}\"></div>`)\r\n $block.css('background-color', color)\r\n\r\n const $li = $(`<li data-value=\"${color}\"></li>`)\r\n if (selectedColor === color) {\r\n $li.addClass('active')\r\n }\r\n $li.append($block)\r\n\r\n $content.append($li)\r\n })\r\n\r\n // 清除颜色\r\n let clearText = ''\r\n if (mark === 'color') clearText = t('color.default')\r\n if (mark === 'bgColor') clearText = t('color.clear')\r\n const $clearLi = $(`\r\n <li data-value=\"0\" class=\"clear\">\r\n ${CLEAN_SVG}\r\n ${clearText}\r\n </li>\r\n `)\r\n $content.prepend($clearLi)\r\n\r\n return $content[0]\r\n }\r\n}\r\n\r\nexport default BaseMenu\r\n","/**\r\n * @description color menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { FONT_COLOR_SVG } from '../../../constants/icon-svg'\r\n\r\nclass ColorMenu extends BaseMenu {\r\n readonly title = t('color.color')\r\n readonly iconSvg = FONT_COLOR_SVG\r\n readonly mark = 'color'\r\n}\r\n\r\nexport default ColorMenu\r\n","/**\r\n * @description bg color menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { BG_COLOR_SVG } from '../../../constants/icon-svg'\r\n\r\nclass BgColorMenu extends BaseMenu {\r\n readonly title = t('color.bgColor')\r\n readonly iconSvg = BG_COLOR_SVG\r\n readonly mark = 'bgColor'\r\n}\r\n\r\nexport default BgColorMenu\r\n","/**\r\n * @description menu config\r\n * @author wangfupeng\r\n */\r\n\r\nconst COLORS = [\r\n 'rgb(0, 0, 0)',\r\n 'rgb(38, 38, 38)',\r\n 'rgb(89, 89, 89)',\r\n 'rgb(140, 140, 140)',\r\n 'rgb(191, 191, 191)',\r\n 'rgb(217, 217, 217)',\r\n 'rgb(233, 233, 233)',\r\n 'rgb(245, 245, 245)',\r\n 'rgb(250, 250, 250)',\r\n 'rgb(255, 255, 255)', // 10\r\n 'rgb(225, 60, 57)',\r\n 'rgb(231, 95, 51)',\r\n 'rgb(235, 144, 58)',\r\n 'rgb(245, 219, 77)',\r\n 'rgb(114, 192, 64)',\r\n 'rgb(89, 191, 192)',\r\n 'rgb(66, 144, 247)',\r\n 'rgb(54, 88, 226)',\r\n 'rgb(106, 57, 201)',\r\n 'rgb(216, 68, 147)', // 10\r\n 'rgb(251, 233, 230)',\r\n 'rgb(252, 237, 225)',\r\n 'rgb(252, 239, 212)',\r\n 'rgb(252, 251, 207)',\r\n 'rgb(231, 246, 213)',\r\n 'rgb(218, 244, 240)',\r\n 'rgb(217, 237, 250)',\r\n 'rgb(224, 232, 250)',\r\n 'rgb(237, 225, 248)',\r\n 'rgb(246, 226, 234)', // 10\r\n 'rgb(255, 163, 158)',\r\n 'rgb(255, 187, 150)',\r\n 'rgb(255, 213, 145)',\r\n 'rgb(255, 251, 143)',\r\n 'rgb(183, 235, 143)',\r\n 'rgb(135, 232, 222)',\r\n 'rgb(145, 213, 255)',\r\n 'rgb(173, 198, 255)',\r\n 'rgb(211, 173, 247)',\r\n 'rgb(255, 173, 210)', // 10\r\n 'rgb(255, 77, 79)',\r\n 'rgb(255, 122, 69)',\r\n 'rgb(255, 169, 64)',\r\n 'rgb(255, 236, 61)',\r\n 'rgb(115, 209, 61)',\r\n 'rgb(54, 207, 201)',\r\n 'rgb(64, 169, 255)',\r\n 'rgb(89, 126, 247)',\r\n 'rgb(146, 84, 222)',\r\n 'rgb(247, 89, 171)', // 10\r\n 'rgb(207, 19, 34)',\r\n 'rgb(212, 56, 13)',\r\n 'rgb(212, 107, 8)',\r\n 'rgb(212, 177, 6)',\r\n 'rgb(56, 158, 13)',\r\n 'rgb(8, 151, 156)',\r\n 'rgb(9, 109, 217)',\r\n 'rgb(29, 57, 196)',\r\n 'rgb(83, 29, 171)',\r\n 'rgb(196, 29, 127)', // 10\r\n 'rgb(130, 0, 20)',\r\n 'rgb(135, 20, 0)',\r\n 'rgb(135, 56, 0)',\r\n 'rgb(97, 71, 0)',\r\n 'rgb(19, 82, 0)',\r\n 'rgb(0, 71, 79)',\r\n 'rgb(0, 58, 140)',\r\n 'rgb(6, 17, 120)',\r\n 'rgb(34, 7, 94)',\r\n 'rgb(120, 6, 80)', // 10\r\n]\r\n\r\nexport function genColors() {\r\n return COLORS\r\n}\r\n\r\nexport function genBgColors() {\r\n return COLORS\r\n}\r\n","/**\r\n * @description menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport ColorMenu from './ColorMenu'\r\nimport BgColorMenu from './BgColorMenu'\r\nimport { genColors, genBgColors } from './config'\r\n\r\nexport const colorMenuConf = {\r\n key: 'color',\r\n factory() {\r\n return new ColorMenu()\r\n },\r\n\r\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\r\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\r\n config: {\r\n colors: genColors(),\r\n },\r\n}\r\n\r\nexport const bgColorMenuConf = {\r\n key: 'bgColor',\r\n factory() {\r\n return new BgColorMenu()\r\n },\r\n config: {\r\n colors: genBgColors(),\r\n },\r\n}\r\n","/**\r\n * @description color bgColor\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { preParseHtmlConf } from './pre-parse-html'\r\nimport { parseStyleHtml } from './parse-style-html'\r\nimport { colorMenuConf, bgColorMenuConf } from './menu/index'\r\n\r\nconst color: Partial<IModuleConf> = {\r\n renderStyle,\r\n styleToHtml,\r\n preParseHtml: [preParseHtmlConf],\r\n parseStyleHtml,\r\n menus: [colorMenuConf, bgColorMenuConf],\r\n}\r\n\r\nexport default color\r\n","/**\r\n * @description render color style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { addVnodeStyle } from '../../utils/vdom'\r\nimport { ColorText } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node text node\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n const { color, bgColor } = node as ColorText\r\n let styleVnode: VNode = vnode\r\n\r\n if (color) {\r\n addVnodeStyle(styleVnode, { color })\r\n }\r\n if (bgColor) {\r\n addVnodeStyle(styleVnode, { backgroundColor: bgColor })\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description textStyle to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Text, Descendant } from 'slate'\r\nimport $, { getOuterHTML, getTagName, isPlainText } from '../../utils/dom'\r\nimport { ColorText } from './custom-types'\r\n\r\n/**\r\n * style to html\r\n * @param textNode slate text node\r\n * @param textHtml text html\r\n * @returns styled html\r\n */\r\nexport function styleToHtml(textNode: Descendant, textHtml: string): string {\r\n if (!Text.isText(textNode)) return textHtml\r\n\r\n const { color, bgColor } = textNode as ColorText\r\n if (!color && !bgColor) return textHtml\r\n\r\n let $text\r\n\r\n if (isPlainText(textHtml)) {\r\n // textHtml 是纯文本,不是 html tag\r\n $text = $(`<span>${textHtml}</span>`)\r\n } else {\r\n // textHtml 是 html tag\r\n $text = $(textHtml)\r\n const tagName = getTagName($text)\r\n if (tagName !== 'span') {\r\n // 如果不是 span ,则包裹一层,接下来要设置 css\r\n $text = $(`<span>${textHtml}</span>`)\r\n }\r\n }\r\n\r\n // 设置样式\r\n if (color) $text.css('color', color)\r\n if (bgColor) $text.css('background-color', bgColor)\r\n\r\n // 输出 html\r\n return getOuterHTML($text)\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { ColorText } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nexport function parseStyleHtml(text: DOMElement, node: Descendant, editor: IDomEditor): Descendant {\r\n const $text = $(text)\r\n if (!Text.isText(node)) return node\r\n\r\n const textNode = node as ColorText\r\n\r\n const color = getStyleValue($text, 'color')\r\n if (color) {\r\n textNode.color = color\r\n }\r\n\r\n let bgColor = getStyleValue($text, 'background-color')\r\n if (!bgColor) bgColor = getStyleValue($text, 'background') // word 背景色\r\n if (bgColor) {\r\n textNode.bgColor = bgColor\r\n }\r\n\r\n return textNode\r\n}\r\n","\n/**\n * Expose `isUrl`.\n */\n\nmodule.exports = isUrl;\n\n/**\n * RegExps.\n * A URL must match #1 and then at least one of #2/#3.\n * Use two levels of REs to avoid REDOS.\n */\n\nvar protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n\nvar localhostDomainRE = /^localhost[\\:?\\d]*(?:[^\\:?\\d]\\S*)?$/\nvar nonLocalhostDomainRE = /^[^\\s\\.]+\\.\\S{2,}$/;\n\n/**\n * Loosely validate a URL `string`.\n *\n * @param {String} string\n * @return {Boolean}\n */\n\nfunction isUrl(string){\n if (typeof string !== 'string') {\n return false;\n }\n\n var match = string.match(protocolAndDomainRE);\n if (!match) {\n return false;\n }\n\n var everythingAfterProtocol = match[1];\n if (!everythingAfterProtocol) {\n return false;\n }\n\n if (localhostDomainRE.test(everythingAfterProtocol) ||\n nonLocalhostDomainRE.test(everythingAfterProtocol)) {\n return true;\n }\n\n return false;\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","/**\r\n * @description 工具函数\r\n * @author wangfupeng\r\n */\r\n\r\nimport { nanoid } from 'nanoid'\r\n\r\n/**\r\n * 获取随机数字符串\r\n * @param prefix 前缀\r\n * @returns 随机数字符串\r\n */\r\nexport function genRandomStr(prefix: string = 'r'): string {\r\n return `${prefix}-${nanoid()}`\r\n}\r\n\r\nexport function replaceSymbols(str: string) {\r\n return str.replace(/</g, '&lt;').replace(/>/g, '&gt;')\r\n}\r\n","/**\r\n * @description link helper\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Range, Transforms } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { LinkElement } from './custom-types'\r\nimport { replaceSymbols } from '../../utils/util'\r\n\r\n/**\r\n * 校验 link\r\n * @param menuKey menu key\r\n * @param editor editor\r\n * @param text menu text\r\n * @param url menu url\r\n */\r\nasync function check(\r\n menuKey: string,\r\n editor: IDomEditor,\r\n text: string,\r\n url: string\r\n): Promise<boolean> {\r\n const { checkLink } = editor.getMenuConfig(menuKey)\r\n if (checkLink) {\r\n const res = await checkLink(text, url)\r\n if (typeof res === 'string') {\r\n // 检验未通过,提示信息\r\n editor.alert(res, 'error')\r\n return false\r\n }\r\n if (res == null) {\r\n // 检验未通过,不提示信息\r\n return false\r\n }\r\n }\r\n\r\n return true // 校验通过\r\n}\r\n\r\n/**\r\n * 转换链接 url\r\n * @param menuKey menu key\r\n * @param editor editor\r\n * @param url url\r\n * @returns parsedUrl\r\n */\r\nasync function parse(menuKey: string, editor: IDomEditor, url: string): Promise<string> {\r\n const { parseLinkUrl } = editor.getMenuConfig(menuKey)\r\n if (parseLinkUrl) {\r\n const newUrl = await parseLinkUrl(url)\r\n return newUrl\r\n }\r\n return url\r\n}\r\n\r\nexport function isMenuDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const selectedElems = DomEditor.getSelectedElems(editor)\r\n const notMatch = selectedElems.some(elem => {\r\n const { type } = elem\r\n if (editor.isVoid(elem)) return true\r\n if (['pre', 'code', 'link'].includes(type)) return true\r\n })\r\n if (notMatch) return true // disabled\r\n return false // enable\r\n}\r\n\r\n/**\r\n * 生成 link node\r\n * @param url url\r\n * @param text text\r\n */\r\nfunction genLinkNode(url: string, text?: string): LinkElement {\r\n const linkNode: LinkElement = {\r\n type: 'link',\r\n url: replaceSymbols(url),\r\n children: text ? [{ text }] : [],\r\n }\r\n return linkNode\r\n}\r\n\r\n/**\r\n * 插入 link\r\n * @param editor editor\r\n * @param text text\r\n * @param url url\r\n */\r\nexport async function insertLink(editor: IDomEditor, text: string, url: string) {\r\n if (!url) return\r\n if (!text) text = url // 无 text 则用 url 代替\r\n\r\n // 还原选区\r\n editor.restoreSelection()\r\n\r\n if (isMenuDisabled(editor)) return\r\n\r\n // 校验\r\n const checkRes = await check('insertLink', editor, text, url)\r\n if (!checkRes) return // 校验未通过\r\n\r\n // 转换 url\r\n const parsedUrl = await parse('insertLink', editor, url)\r\n\r\n // 判断选区是否折叠\r\n const { selection } = editor\r\n if (selection == null) return\r\n const isCollapsed = Range.isCollapsed(selection)\r\n\r\n // 执行:插入链接\r\n if (isCollapsed) {\r\n // 链接前后插入空格,方便操作\r\n editor.insertText(' ')\r\n\r\n const linkNode = genLinkNode(parsedUrl, text)\r\n Transforms.insertNodes(editor, linkNode)\r\n\r\n // https://github.com/wangeditor-team/wangEditor/issues/332\r\n // 不能直接使用 insertText, 会造成添加的空格被添加到链接文本中,参考上面 issue,替换为 insertFragment 方式添加空格\r\n editor.insertFragment([{ text: ' ' }])\r\n } else {\r\n const selectedText = Editor.string(editor, selection) // 选中的文字\r\n if (selectedText !== text) {\r\n // 选中的文字和输入的文字不一样,则删掉文字,插入链接\r\n editor.deleteFragment()\r\n const linkNode = genLinkNode(parsedUrl, text)\r\n Transforms.insertNodes(editor, linkNode)\r\n } else {\r\n // 选中的文字和输入的文字一样,则只包裹链接即可\r\n const linkNode = genLinkNode(parsedUrl)\r\n Transforms.wrapNodes(editor, linkNode, { split: true })\r\n Transforms.collapse(editor, { edge: 'end' })\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 修改 link url\r\n * @param editor editor\r\n * @param text text\r\n * @param url link url\r\n */\r\nexport async function updateLink(editor: IDomEditor, text: string, url: string) {\r\n if (!url) return\r\n\r\n // 校验\r\n const checkRes = await check('editLink', editor, text, url)\r\n if (!checkRes) return // 校验未通过\r\n\r\n // 转换 url\r\n const parsedUrl = await parse('editLink', editor, url)\r\n\r\n // 修改链接\r\n const props: Partial<LinkElement> = { url: replaceSymbols(parsedUrl) }\r\n Transforms.setNodes(editor, props, {\r\n match: n => DomEditor.checkNodeType(n, 'link'),\r\n })\r\n}\r\n","/**\r\n * @description render link elem\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { LinkElement } from './custom-types'\r\n\r\n/**\r\n * render link elem\r\n * @param elemNode slate elem\r\n * @param children children\r\n * @param editor editor\r\n * @returns vnode\r\n */\r\nfunction renderLink(elemNode: SlateElement, children: VNode[] | null, editor: IDomEditor): VNode {\r\n const { url, target = '_blank' } = elemNode as LinkElement\r\n const vnode = (\r\n <a href={url} target={target}>\r\n {children}\r\n </a>\r\n )\r\n\r\n return vnode\r\n}\r\n\r\nconst renderLinkConf = {\r\n type: 'link', // 和 elemNode.type 一致\r\n renderElem: renderLink,\r\n}\r\n\r\nexport { renderLinkConf }\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\nimport { LinkElement } from './custom-types'\r\n\r\nfunction linkToHtml(elem: Element, childrenHtml: string): string {\r\n const { url, target = '_blank' } = elem as LinkElement\r\n\r\n return `<a href=\"${url}\" target=\"${target}\">${childrenHtml}</a>`\r\n}\r\n\r\nexport const linkToHtmlConf = {\r\n type: 'link',\r\n elemToHtml: linkToHtml,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { LinkElement } from './custom-types'\r\nimport $, { DOMElement } from '../../utils/dom'\r\n\r\nfunction parseHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): LinkElement {\r\n const $elem = $(elem)\r\n children = children.filter(child => {\r\n if (Text.isText(child)) return true\r\n if (editor.isInline(child)) return true\r\n return false\r\n })\r\n\r\n // 无 children ,则用纯文本\r\n if (children.length === 0) {\r\n children = [{ text: $elem.text().replace(/\\s+/gm, ' ') }]\r\n }\r\n\r\n return {\r\n type: 'link',\r\n url: $elem.attr('href') || '',\r\n target: $elem.attr('target') || '',\r\n // @ts-ignore\r\n children,\r\n }\r\n}\r\n\r\nexport const parseHtmlConf = {\r\n selector: 'a:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parseHtml,\r\n}\r\n","/**\r\n * @description insert link menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Range, Node } from 'slate'\r\nimport {\r\n IModalMenu,\r\n IDomEditor,\r\n genModalInputElems,\r\n genModalButtonElems,\r\n t,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array, DOMElement } from '../../../utils/dom'\r\nimport { genRandomStr } from '../../../utils/util'\r\nimport { LINK_SVG } from '../../../constants/icon-svg'\r\nimport { isMenuDisabled, insertLink } from '../helper'\r\n\r\n/**\r\n * 生成唯一的 DOM ID\r\n */\r\nfunction genDomID(): string {\r\n return genRandomStr('w-e-insert-link')\r\n}\r\n\r\nclass InsertLinkMenu implements IModalMenu {\r\n readonly title = t('link.insert')\r\n readonly iconSvg = LINK_SVG\r\n readonly tag = 'button'\r\n readonly showModal = true // 点击 button 时显示 modal\r\n readonly modalWidth = 300\r\n private $content: Dom7Array | null = null\r\n private readonly textInputId = genDomID()\r\n private readonly urlInputId = genDomID()\r\n private readonly buttonId = genDomID()\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 插入菜单,不需要 value\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 任何时候,都不用激活 menu\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 点击菜单时,弹出 modal 之前,不需要执行其他代码\r\n // 此处空着即可\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return isMenuDisabled(editor)\r\n }\r\n\r\n getModalPositionNode(editor: IDomEditor): Node | null {\r\n return null // modal 依据选区定位\r\n }\r\n\r\n getModalContentElem(editor: IDomEditor): DOMElement {\r\n const { selection } = editor\r\n const { textInputId, urlInputId, buttonId } = this\r\n\r\n // 获取 input button elem\r\n const [textContainerElem, inputTextElem] = genModalInputElems(t('link.text'), textInputId)\r\n const $inputText = $(inputTextElem)\r\n const [urlContainerElem, inputUrlElem] = genModalInputElems(t('link.url'), urlInputId)\r\n const $inputUrl = $(inputUrlElem)\r\n const [buttonContainerElem] = genModalButtonElems(buttonId, t('common.ok'))\r\n\r\n if (this.$content == null) {\r\n // 第一次渲染\r\n const $content = $('<div></div>')\r\n\r\n // 绑定事件(第一次渲染时绑定,不要重复绑定)\r\n $content.on('click', `#${buttonId}`, e => {\r\n e.preventDefault()\r\n const text = $content.find(`#${textInputId}`).val()\r\n const url = $content.find(`#${urlInputId}`).val()\r\n insertLink(editor, text, url) // 插入链接\r\n editor.hidePanelOrModal() // 隐藏 modal\r\n })\r\n\r\n // 记录属性,重要\r\n this.$content = $content\r\n }\r\n\r\n const $content = this.$content\r\n $content.empty() // 先清空内容\r\n\r\n // append inputs and button\r\n $content.append(textContainerElem)\r\n $content.append(urlContainerElem)\r\n $content.append(buttonContainerElem)\r\n\r\n // 设置 input val\r\n if (selection == null || Range.isCollapsed(selection)) {\r\n // 选区无内容\r\n $inputText.val('')\r\n } else {\r\n // 选区有内容\r\n const selectionText = Editor.string(editor, selection)\r\n $inputText.val(selectionText)\r\n }\r\n $inputUrl.val('')\r\n\r\n // focus 一个 input(异步,此时 DOM 尚未渲染)\r\n setTimeout(() => {\r\n $inputText.focus()\r\n })\r\n\r\n return $content[0]\r\n }\r\n}\r\n\r\nexport default InsertLinkMenu\r\n","/**\r\n * @description update link menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Node } from 'slate'\r\nimport {\r\n IModalMenu,\r\n IDomEditor,\r\n DomEditor,\r\n genModalInputElems,\r\n genModalButtonElems,\r\n t,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array, DOMElement } from '../../../utils/dom'\r\nimport { genRandomStr } from '../../../utils/util'\r\nimport { PENCIL_SVG } from '../../../constants/icon-svg'\r\nimport { updateLink } from '../helper'\r\nimport { LinkElement } from '../custom-types'\r\n\r\n/**\r\n * 生成唯一的 DOM ID\r\n */\r\nfunction genDomID(): string {\r\n return genRandomStr('w-e-update-link')\r\n}\r\n\r\nclass EditLinkMenu implements IModalMenu {\r\n readonly title = t('link.edit')\r\n readonly iconSvg = PENCIL_SVG\r\n readonly tag = 'button'\r\n readonly showModal = true // 点击 button 时显示 modal\r\n readonly modalWidth = 300\r\n\r\n private $content: Dom7Array | null = null\r\n private urlInputId = genDomID()\r\n private buttonId = genDomID()\r\n\r\n private getSelectedLinkElem(editor: IDomEditor): LinkElement | null {\r\n const node = DomEditor.getSelectedNodeByType(editor, 'link')\r\n if (node == null) return null\r\n return node as LinkElement\r\n }\r\n\r\n /**\r\n * 获取 node.url\r\n * @param editor editor\r\n */\r\n getValue(editor: IDomEditor): string | boolean {\r\n const linkElem = this.getSelectedLinkElem(editor)\r\n if (linkElem) {\r\n return linkElem.url || ''\r\n }\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 点击菜单时,弹出 modal 之前,不需要执行其他代码\r\n // 此处空着即可\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const linkElem = this.getSelectedLinkElem(editor)\r\n\r\n // 未匹配到 link node 则禁用\r\n if (linkElem == null) return true\r\n return false\r\n }\r\n\r\n // modal 定位\r\n getModalPositionNode(editor: IDomEditor): Node | null {\r\n return DomEditor.getSelectedNodeByType(editor, 'link')\r\n }\r\n\r\n getModalContentElem(editor: IDomEditor): DOMElement {\r\n const { urlInputId, buttonId } = this\r\n\r\n // 获取 input button elem\r\n const [urlContainerElem, inputUrlElem] = genModalInputElems(t('link.url'), urlInputId)\r\n const $inputUrl = $(inputUrlElem)\r\n const [buttonContainerElem] = genModalButtonElems(buttonId, t('common.ok'))\r\n\r\n if (this.$content == null) {\r\n // 第一次渲染\r\n const $content = $('<div></div>')\r\n\r\n // 绑定事件(第一次渲染时绑定,不要重复绑定)\r\n $content.on('click', 'button', e => {\r\n e.preventDefault()\r\n editor.restoreSelection() // 还原选区\r\n\r\n const n = DomEditor.getSelectedNodeByType(editor, 'link')\r\n const text = n ? Node.string(n) : ''\r\n const url = $content.find(`#${urlInputId}`).val()\r\n updateLink(editor, text, url) // 修改链接\r\n\r\n editor.hidePanelOrModal() // 隐藏 modal\r\n })\r\n\r\n // 记录属性,重要\r\n this.$content = $content\r\n }\r\n\r\n const $content = this.$content\r\n $content.empty() // 先清空内容\r\n\r\n // append input and button\r\n $content.append(urlContainerElem)\r\n $content.append(buttonContainerElem)\r\n\r\n // 设置 input val\r\n const url = this.getValue(editor)\r\n $inputUrl.val(url)\r\n\r\n // focus 一个 input(异步,此时 DOM 尚未渲染)\r\n setTimeout(() => {\r\n $inputUrl.focus()\r\n })\r\n\r\n return $content[0]\r\n }\r\n}\r\n\r\nexport default EditLinkMenu\r\n","/**\r\n * @description unlink menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { UN_LINK_SVG } from '../../../constants/icon-svg'\r\n\r\nclass UnLink implements IButtonMenu {\r\n readonly title = t('link.unLink')\r\n readonly iconSvg = UN_LINK_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 无需获取 val\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const linkNode = DomEditor.getSelectedNodeByType(editor, 'link')\r\n if (linkNode == null) {\r\n // 选区未处于 link node ,则禁用\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n // 取消链接\r\n Transforms.unwrapNodes(editor, {\r\n match: n => DomEditor.checkNodeType(n, 'link'),\r\n })\r\n }\r\n}\r\n\r\nexport default UnLink\r\n","/**\r\n * @description view link menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { EXTERNAL_SVG } from '../../../constants/icon-svg'\r\nimport { LinkElement } from '../custom-types'\r\n\r\nclass ViewLink implements IButtonMenu {\r\n readonly title = t('link.view')\r\n readonly iconSvg = EXTERNAL_SVG\r\n readonly tag = 'button'\r\n\r\n private getSelectedLinkElem(editor: IDomEditor): LinkElement | null {\r\n const node = DomEditor.getSelectedNodeByType(editor, 'link')\r\n if (node == null) return null\r\n return node as LinkElement\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const linkElem = this.getSelectedLinkElem(editor)\r\n if (linkElem) {\r\n return linkElem.url || ''\r\n }\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const linkElem = this.getSelectedLinkElem(editor)\r\n if (linkElem == null) {\r\n // 选区未处于 link node ,则禁用\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n if (!value || typeof value !== 'string') {\r\n throw new Error(`View link failed, link url is '${value}'`)\r\n }\r\n\r\n // 查看链接\r\n window.open(value, '_blank')\r\n }\r\n}\r\n\r\nexport default ViewLink\r\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar un$Slice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (isConstructor(Constructor) && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return un$Slice(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.anchor` method\n// https://tc39.es/ecma262/#sec-string.prototype.anchor\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('anchor') }, {\n anchor: function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n }\n});\n","/**\r\n * @description 链接表单共享状态(与 yunkee 悬停栏协作)\r\n */\r\n\r\nimport { DomEditor, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\n/** 写入中:忽略因 change 触发的 deselect */\r\nexport let linkFormApplying = false\r\n\r\nfunction syncApplyingFlag() {\r\n try {\r\n if (typeof window !== 'undefined') {\r\n ;(window as any).__wELinkFormApplying = linkFormApplying\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n}\r\n\r\nexport function setLinkFormApplying(v: boolean) {\r\n linkFormApplying = !!v\r\n syncApplyingFlag()\r\n}\r\n\r\n/** 可选:yunkee 注入「当前悬停链接 href」 */\r\nlet hoverHrefGetter: (() => string) | null = null\r\n\r\nexport function setLinkHoverHrefGetter(fn: (() => string) | null) {\r\n hoverHrefGetter = fn\r\n}\r\n\r\nexport function getLinkHoverHref(): string {\r\n try {\r\n if (hoverHrefGetter) return hoverHrefGetter() || ''\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n try {\r\n if (typeof window !== 'undefined') {\r\n return String((window as any).__wELinkHoverHref || '')\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return ''\r\n}\r\n\r\nexport function setLinkFormModalOpen(open: boolean, editor?: IDomEditor | null) {\r\n const container =\r\n (typeof document !== 'undefined' &&\r\n (document.querySelector('.editor-content .w-e-text-container') ||\r\n document.querySelector('.w-e-text-container'))) ||\r\n null\r\n if (!container) return\r\n const wasOpen = container.classList.contains('mdg-link-modal-open')\r\n if (open) {\r\n container.classList.add('mdg-link-modal-open')\r\n container.classList.add('w-e-link-modal-open')\r\n return\r\n }\r\n container.classList.remove('mdg-link-modal-open')\r\n container.classList.remove('w-e-link-modal-open')\r\n if (!wasOpen) return\r\n if (linkFormApplying) return\r\n dismissLinkFocusAfterEdit(editor)\r\n}\r\n\r\nexport function dismissLinkFocusAfterEdit(editor?: IDomEditor | null) {\r\n const ed = editor\r\n const hideBar = () => {\r\n try {\r\n DomEditor.getHoverbar?.(ed as any)?.hideAndClean?.()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n try {\r\n if (ed && !ed.isDestroyed && typeof ed.deselect === 'function') {\r\n ed.deselect()\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n hideBar()\r\n if (typeof requestAnimationFrame === 'function') requestAnimationFrame(hideBar)\r\n}\r\n\r\nexport function normalizeLinkUrl(url: string): string {\r\n let s = String(url || '').trim()\r\n if (!s || s === '#' || /^javascript:/i.test(s)) return ''\r\n s = s.replace(/</g, '&lt;').replace(/>/g, '&gt;')\r\n if (/^[a-z][a-z0-9+.-]*:/i.test(s)) return s\r\n return `http://${s}`\r\n}\r\n","/**\r\n * @description 插入/修改链接共用弹层(文本 + URL + 访问)\r\n */\r\n\r\nimport { Editor, Node, Range, Transforms } from 'slate'\r\nimport {\r\n IModalMenu,\r\n IDomEditor,\r\n DomEditor,\r\n t,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { DOMElement } from '../../../utils/dom'\r\nimport { LINK_SVG, PENCIL_SVG } from '../../../constants/icon-svg'\r\nimport { LinkElement } from '../custom-types'\r\nimport {\r\n dismissLinkFocusAfterEdit,\r\n setLinkFormApplying,\r\n normalizeLinkUrl,\r\n setLinkFormModalOpen,\r\n} from './link-form-state'\r\n\r\ntype Mode = 'insert' | 'edit'\r\n\r\nclass LinkFormMenu implements IModalMenu {\r\n readonly title: string\r\n readonly iconSvg: string\r\n readonly tag = 'button'\r\n readonly showModal = true\r\n readonly modalWidth = 440\r\n readonly mode: Mode\r\n\r\n private _root: HTMLElement | null = null\r\n private _editor: IDomEditor | null = null\r\n private _editLinkPath: number[] | null = null\r\n private _savedSelection: any = null\r\n private readonly _textInputId: string\r\n private readonly _urlInputId: string\r\n\r\n constructor(mode: Mode = 'edit') {\r\n this.mode = mode === 'insert' ? 'insert' : 'edit'\r\n this.title = this.mode === 'insert' ? t('link.insert') : t('link.edit')\r\n this.iconSvg = this.mode === 'insert' ? LINK_SVG : PENCIL_SVG\r\n const rand = Math.random().toString(36).slice(2, 9)\r\n this._textInputId = `w-e-link-form-text-${rand}`\r\n this._urlInputId = `w-e-link-form-url-${rand}`\r\n }\r\n\r\n getSelectedLinkElem(editor: IDomEditor): LinkElement | null {\r\n const node = DomEditor.getSelectedNodeByType(editor, 'link')\r\n return (node as LinkElement) || null\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const linkElem = this.getSelectedLinkElem(editor)\r\n return linkElem?.url || ''\r\n }\r\n\r\n isActive(): boolean {\r\n return false\r\n }\r\n\r\n exec() {\r\n /* modal 由 showModal 打开 */\r\n }\r\n\r\n private _isInsertDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n try {\r\n const elems = DomEditor.getSelectedElems(editor) || []\r\n return elems.some(el => {\r\n if (editor.isVoid?.(el)) return true\r\n const t = DomEditor.getNodeType(el)\r\n return t === 'pre' || t === 'code' || t === 'link'\r\n })\r\n } catch (_) {\r\n return true\r\n }\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (this.mode === 'insert') return this._isInsertDisabled(editor)\r\n if (editor.selection == null) return true\r\n return this.getSelectedLinkElem(editor) == null\r\n }\r\n\r\n getModalPositionNode(editor: IDomEditor): Node | null {\r\n if (this.mode === 'insert') return null\r\n return DomEditor.getSelectedNodeByType(editor, 'link')\r\n }\r\n\r\n private _isCollapsedSelection(sel: any): boolean {\r\n if (!sel?.anchor || !sel?.focus) return true\r\n const a = sel.anchor\r\n const f = sel.focus\r\n if (a.offset !== f.offset) return false\r\n if (!Array.isArray(a.path) || !Array.isArray(f.path) || a.path.length !== f.path.length) {\r\n return false\r\n }\r\n return a.path.every((p: number, i: number) => p === f.path[i])\r\n }\r\n\r\n private _readFormAndValidate(): { text: string; url: string } | null {\r\n if (!this._root) return null\r\n const textInput = this._root.querySelector(`#${this._textInputId}`) as HTMLInputElement | null\r\n const urlInput = this._root.querySelector(`#${this._urlInputId}`) as HTMLInputElement | null\r\n let text = String(textInput?.value || '').trim()\r\n let url = String(urlInput?.value || '').trim()\r\n if (!url) return null\r\n url = normalizeLinkUrl(url)\r\n if (!url) return null\r\n if (!text) text = url\r\n return { text, url }\r\n }\r\n\r\n private _restoreEditorSelection(editor: IDomEditor): boolean {\r\n try {\r\n editor.focus?.()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n if (this._savedSelection) {\r\n try {\r\n if (typeof editor.select === 'function') editor.select(this._savedSelection)\r\n else Transforms.select(editor, this._savedSelection)\r\n if (editor.selection) return true\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n try {\r\n if (typeof editor.restoreSelection === 'function') editor.restoreSelection()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return !!editor.selection\r\n }\r\n\r\n private async _applyInsert(editor: IDomEditor) {\r\n setLinkFormApplying(true)\r\n try {\r\n if (!this._restoreEditorSelection(editor)) return\r\n if (this._isInsertDisabled(editor)) return\r\n const form = this._readFormAndValidate()\r\n if (!form) return\r\n if (!this._restoreEditorSelection(editor)) return\r\n const { text, url } = form\r\n const sel = editor.selection\r\n if (!sel) return\r\n\r\n if (this._isCollapsedSelection(sel)) {\r\n if (typeof editor.insertText === 'function') editor.insertText(' ')\r\n else Transforms.insertText(editor, ' ')\r\n Transforms.insertNodes(editor, {\r\n type: 'link',\r\n url,\r\n children: [{ text }],\r\n } as LinkElement)\r\n if (typeof editor.insertFragment === 'function') {\r\n editor.insertFragment([{ text: ' ' }])\r\n } else {\r\n Transforms.insertNodes(editor, { text: ' ' })\r\n }\r\n } else {\r\n let selectedText = ''\r\n try {\r\n selectedText = String(Editor.string(editor, sel) || '')\r\n } catch (_) {\r\n selectedText = ''\r\n }\r\n if (selectedText !== text) {\r\n if (typeof editor.deleteFragment === 'function') editor.deleteFragment()\r\n else Transforms.delete(editor)\r\n Transforms.insertNodes(editor, {\r\n type: 'link',\r\n url,\r\n children: [{ text }],\r\n } as LinkElement)\r\n } else {\r\n Transforms.wrapNodes(editor, { type: 'link', url, children: [] } as LinkElement, {\r\n split: true,\r\n })\r\n Transforms.collapse(editor, { edge: 'end' })\r\n }\r\n }\r\n } catch (e) {\r\n console.warn('[wangeditor] insertLinkForm apply', e)\r\n } finally {\r\n setLinkFormApplying(false)\r\n try {\r\n editor.hidePanelOrModal()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n setLinkFormModalOpen(false, editor)\r\n dismissLinkFocusAfterEdit(editor)\r\n }\r\n }\r\n\r\n private _resolveEditLinkPath(editor: IDomEditor) {\r\n let linkElem = this.getSelectedLinkElem(editor)\r\n let path: number[] | null = null\r\n if (linkElem) {\r\n try {\r\n path = DomEditor.findPath(editor, linkElem) as number[]\r\n } catch (_) {\r\n path = null\r\n }\r\n }\r\n if ((!path || !path.length) && Array.isArray(this._editLinkPath) && this._editLinkPath.length) {\r\n path = [...this._editLinkPath]\r\n try {\r\n const entry = Editor.node(editor, path)\r\n const node = entry?.[0]\r\n if (node && DomEditor.checkNodeType(node, 'link')) {\r\n linkElem = node as LinkElement\r\n }\r\n } catch (_) {\r\n /* path 可能失效 */\r\n }\r\n }\r\n return { linkElem, path }\r\n }\r\n\r\n private async _applyEdit(editor: IDomEditor) {\r\n setLinkFormApplying(true)\r\n try {\r\n this._restoreEditorSelection(editor)\r\n const form = this._readFormAndValidate()\r\n if (!form) return\r\n const { text, url } = form\r\n\r\n this._restoreEditorSelection(editor)\r\n let { linkElem, path } = this._resolveEditLinkPath(editor)\r\n if ((!path || !path.length) && linkElem) {\r\n try {\r\n path = DomEditor.findPath(editor, linkElem) as number[]\r\n } catch (_) {\r\n path = null\r\n }\r\n }\r\n if (!path?.length) return\r\n\r\n const oldText = linkElem ? String(Node.string(linkElem) || '') : ''\r\n Transforms.setNodes(editor, { url } as any, { at: path })\r\n if (text !== oldText) {\r\n const start = Editor.start(editor, path)\r\n const end = Editor.end(editor, path)\r\n if (start && end) {\r\n Transforms.select(editor, { anchor: start, focus: end })\r\n Transforms.insertText(editor, text)\r\n }\r\n }\r\n } catch (e) {\r\n console.warn('[wangeditor] editLinkForm apply', e)\r\n } finally {\r\n setLinkFormApplying(false)\r\n try {\r\n editor.hidePanelOrModal()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n setLinkFormModalOpen(false, editor)\r\n dismissLinkFocusAfterEdit(editor)\r\n }\r\n }\r\n\r\n private async _apply(editor: IDomEditor | null) {\r\n if (!editor || editor.isDestroyed || !this._root) return\r\n if (this.mode === 'insert') {\r\n await this._applyInsert(editor)\r\n return\r\n }\r\n await this._applyEdit(editor)\r\n }\r\n\r\n private _onRootClick(e: Event) {\r\n const editor = this._editor\r\n if (!editor || editor.isDestroyed) return\r\n const el = e.target\r\n if (!(el instanceof Element)) return\r\n const action = el.closest?.('[data-w-e-link-action]')?.getAttribute('data-w-e-link-action')\r\n if (!action) return\r\n e.preventDefault()\r\n if (action === 'cancel') {\r\n editor.hidePanelOrModal()\r\n setLinkFormModalOpen(false, editor)\r\n return\r\n }\r\n if (action === 'visit') {\r\n const urlInput = this._root?.querySelector(`#${this._urlInputId}`) as HTMLInputElement | null\r\n const href = normalizeLinkUrl(String(urlInput?.value || '').trim())\r\n if (!href) return\r\n window.open(href, '_blank', 'noopener,noreferrer')\r\n return\r\n }\r\n if (action === 'ok') {\r\n void this._apply(editor)\r\n }\r\n }\r\n\r\n private _onRootKeydown(e: KeyboardEvent) {\r\n if (e.key !== 'Enter') return\r\n const t = e.target\r\n if (!(t instanceof HTMLInputElement)) return\r\n e.preventDefault()\r\n void this._apply(this._editor)\r\n }\r\n\r\n getModalContentElem(editor: IDomEditor): DOMElement {\r\n this._editor = editor\r\n try {\r\n DomEditor.getHoverbar?.(editor)?.hideAndClean?.()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n setLinkFormModalOpen(true, editor)\r\n\r\n if (!this._root) {\r\n const root = document.createElement('div')\r\n root.className = 'mdgch-edit-link-form w-e-link-form'\r\n root.addEventListener('click', ev => this._onRootClick(ev))\r\n root.addEventListener('keydown', ev => this._onRootKeydown(ev))\r\n this._root = root\r\n }\r\n\r\n this._editLinkPath = null\r\n this._savedSelection = null\r\n try {\r\n if (editor.selection) {\r\n this._savedSelection = JSON.parse(JSON.stringify(editor.selection))\r\n }\r\n } catch (_) {\r\n this._savedSelection = editor.selection || null\r\n }\r\n\r\n let url = ''\r\n let text = ''\r\n if (this.mode === 'edit') {\r\n const linkElem = this.getSelectedLinkElem(editor)\r\n url = linkElem?.url || ''\r\n text = linkElem ? String(Node.string(linkElem) || '') : ''\r\n if (linkElem) {\r\n try {\r\n const p = DomEditor.findPath(editor, linkElem)\r\n if (p?.length) this._editLinkPath = [...p]\r\n } catch (_) {\r\n this._editLinkPath = null\r\n }\r\n }\r\n } else {\r\n const sel = editor.selection\r\n if (sel && !this._isCollapsedSelection(sel)) {\r\n try {\r\n text = String(Editor.string(editor, sel) || '')\r\n } catch (_) {\r\n text = ''\r\n }\r\n }\r\n url = ''\r\n }\r\n\r\n this._root.innerHTML = `\r\n <div class=\"mdgch-edit-link-row\">\r\n <span class=\"mdgch-edit-link-label\">文本</span>\r\n <input type=\"text\" class=\"mdgch-edit-link-input\" id=\"${this._textInputId}\" autocomplete=\"off\" />\r\n <span class=\"mdgch-edit-link-visit-spacer\" aria-hidden=\"true\">访问</span>\r\n </div>\r\n <div class=\"mdgch-edit-link-row\">\r\n <span class=\"mdgch-edit-link-label\">链接</span>\r\n <input type=\"text\" class=\"mdgch-edit-link-input\" id=\"${this._urlInputId}\" autocomplete=\"off\" />\r\n <button type=\"button\" class=\"mdgch-edit-link-visit\" data-w-e-link-action=\"visit\">访问</button>\r\n </div>\r\n <div class=\"mdgch-edit-link-actions\">\r\n <button type=\"button\" class=\"mdgch-edit-link-btn mdgch-edit-link-btn-cancel\" data-w-e-link-action=\"cancel\">取消</button>\r\n <button type=\"button\" class=\"mdgch-edit-link-btn mdgch-edit-link-btn-ok\" data-w-e-link-action=\"ok\">确定</button>\r\n </div>\r\n `\r\n\r\n const textInput = this._root.querySelector(`#${this._textInputId}`) as HTMLInputElement | null\r\n const urlInput = this._root.querySelector(`#${this._urlInputId}`) as HTMLInputElement | null\r\n if (textInput) textInput.value = text\r\n if (urlInput) urlInput.value = url\r\n\r\n setTimeout(() => {\r\n textInput?.focus?.()\r\n }, 0)\r\n\r\n return this._root\r\n }\r\n}\r\n\r\nexport default LinkFormMenu\r\n","/**\r\n * @description 查看链接:alwaysEnable + 悬停 href 兜底\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { EXTERNAL_SVG } from '../../../constants/icon-svg'\r\nimport { getLinkHoverHref, normalizeLinkUrl } from './link-form-state'\r\n\r\nclass ViewLinkOpenMenu implements IButtonMenu {\r\n readonly title = t('link.view')\r\n readonly iconSvg = EXTERNAL_SVG\r\n readonly tag = 'button'\r\n readonly alwaysEnable = true\r\n\r\n private _hrefFromSelection(editor: IDomEditor): string {\r\n try {\r\n const node = DomEditor.getSelectedNodeByType(editor, 'link') as any\r\n const u = String(node?.url || '').trim()\r\n if (u && u !== '#' && !/^javascript:/i.test(u)) return u\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return ''\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return this._hrefFromSelection(editor) || getLinkHoverHref() || ''\r\n }\r\n\r\n isActive(): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return !this.getValue(editor)\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n let href = typeof value === 'string' ? value.trim() : ''\r\n if (!href || href === '#' || /^javascript:/i.test(href)) {\r\n href = String(this.getValue(editor) || '')\r\n }\r\n href = normalizeLinkUrl(href) || href\r\n if (!href) return\r\n window.open(href, '_blank', 'noopener,noreferrer')\r\n }\r\n}\r\n\r\nexport default ViewLinkOpenMenu\r\n","/**\r\n * @description link menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport InsertLink from './InsertLink'\r\nimport EditLink from './EditLink'\r\nimport UnLink from './UnLink'\r\nimport ViewLink from './ViewLink'\r\nimport LinkFormMenu from './LinkFormMenu'\r\nimport ViewLinkOpenMenu from './ViewLinkOpenMenu'\r\nimport { genLinkMenuConfig } from './config'\r\n\r\nconst config = genLinkMenuConfig()\r\n\r\nconst insertLinkMenuConf = {\r\n key: 'insertLink',\r\n factory() {\r\n return new InsertLink()\r\n },\r\n config,\r\n}\r\n\r\nconst editLinkMenuConf = {\r\n key: 'editLink',\r\n factory() {\r\n return new EditLink()\r\n },\r\n config,\r\n}\r\n\r\nconst unLinkMenuConf = {\r\n key: 'unLink',\r\n factory() {\r\n return new UnLink()\r\n },\r\n}\r\n\r\nconst viewLinkMenuConf = {\r\n key: 'viewLink',\r\n factory() {\r\n return new ViewLink()\r\n },\r\n}\r\n\r\nconst insertLinkFormMenuConf = {\r\n key: 'insertLinkForm',\r\n factory() {\r\n return new LinkFormMenu('insert')\r\n },\r\n config,\r\n}\r\n\r\nconst editLinkFormMenuConf = {\r\n key: 'editLinkForm',\r\n factory() {\r\n return new LinkFormMenu('edit')\r\n },\r\n config,\r\n}\r\n\r\nconst viewLinkOpenMenuConf = {\r\n key: 'viewLinkOpen',\r\n factory() {\r\n return new ViewLinkOpenMenu()\r\n },\r\n}\r\n\r\nexport {\r\n insertLinkMenuConf,\r\n editLinkMenuConf,\r\n unLinkMenuConf,\r\n viewLinkMenuConf,\r\n insertLinkFormMenuConf,\r\n editLinkFormMenuConf,\r\n viewLinkOpenMenuConf,\r\n}\r\n\r\nexport { setLinkHoverHrefGetter } from './link-form-state'\r\n","/**\r\n * @description link menu config\r\n * @author wangfupeng\r\n */\r\n\r\nexport function genLinkMenuConfig() {\r\n return {\r\n /**\r\n * 检查链接,支持 async fn\r\n * @param text link text\r\n * @param url link url\r\n */\r\n checkLink(text: string, url: string): boolean | string | undefined {\r\n // 1. 返回 true ,说明检查通过\r\n // 2. 返回一个字符串,说明检查未通过,编辑器会阻止插入。会 alert 出错误信息(即返回的字符串)\r\n // 3. 返回 undefined(即没有任何返回),说明检查未通过,编辑器会阻止插入\r\n return true\r\n },\r\n\r\n /**\r\n * parse link url\r\n * @param url url\r\n * @returns newUrl\r\n */\r\n parseLinkUrl(url: string): string {\r\n return url\r\n },\r\n }\r\n}\r\n","/**\r\n * @description link entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport withLink from './plugin'\r\nimport { renderLinkConf } from './render-elem'\r\nimport { linkToHtmlConf } from './elem-to-html'\r\nimport { parseHtmlConf } from './parse-elem-html'\r\nimport {\r\n insertLinkMenuConf,\r\n editLinkMenuConf,\r\n unLinkMenuConf,\r\n viewLinkMenuConf,\r\n insertLinkFormMenuConf,\r\n editLinkFormMenuConf,\r\n viewLinkOpenMenuConf,\r\n} from './menu/index'\r\n\r\nconst link: Partial<IModuleConf> = {\r\n renderElems: [renderLinkConf],\r\n elemsToHtml: [linkToHtmlConf],\r\n parseElemsHtml: [parseHtmlConf],\r\n menus: [\r\n insertLinkMenuConf,\r\n editLinkMenuConf,\r\n unLinkMenuConf,\r\n viewLinkMenuConf,\r\n insertLinkFormMenuConf,\r\n editLinkFormMenuConf,\r\n viewLinkOpenMenuConf,\r\n ],\r\n editorPlugin: withLink,\r\n}\r\n\r\nexport default link\r\n\r\n// 供 yunkee 注入悬停链接 href\r\nexport { setLinkHoverHrefGetter } from './menu/link-form-state'\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Node, Transforms } from 'slate'\r\nimport { DomEditor, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport isUrl from 'is-url'\r\nimport { isMenuDisabled, insertLink } from './helper'\r\n\r\nfunction withLink<T extends IDomEditor>(editor: T): T {\r\n const { isInline, insertData, normalizeNode, insertNode, insertText } = editor\r\n const newEditor = editor\r\n\r\n // 重写 isInline\r\n newEditor.isInline = elem => {\r\n const { type } = elem\r\n\r\n if (type === 'link') {\r\n return true\r\n }\r\n\r\n return isInline(elem)\r\n }\r\n\r\n // 重写 insertData ,粘贴插入链接\r\n newEditor.insertData = (data: DataTransfer) => {\r\n const text = data.getData('text/plain')\r\n if (!isUrl(text)) {\r\n // 非链接\r\n insertData(data)\r\n return\r\n }\r\n\r\n // 插入链接\r\n if (isMenuDisabled(newEditor)) return // disabled\r\n const { selection } = newEditor\r\n if (selection == null) return\r\n const selectedText = Editor.string(newEditor, selection) // 获取选中的文字\r\n insertLink(newEditor, selectedText, text)\r\n }\r\n\r\n newEditor.normalizeNode = ([node, path]) => {\r\n const type = DomEditor.getNodeType(node)\r\n if (type !== 'link') {\r\n // 未命中 link ,执行默认的 normalizeNode\r\n return normalizeNode([node, path])\r\n }\r\n\r\n // 如果链接内容为空,则删除\r\n const str = Node.string(node)\r\n if (str === '') {\r\n return Transforms.removeNodes(newEditor, { at: path })\r\n }\r\n\r\n return normalizeNode([node, path])\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withLink\r\n","var uncurryThis = require('../internals/function-uncurry-this');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n","'use strict';\nvar global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar RangeError = global.RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toIntegerOrInfinity(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar String = global.String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar un$ToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = fails(function () {\n return un$ToFixed(0.00008, 3) !== '0.000' ||\n un$ToFixed(0.9, 0) !== '1' ||\n un$ToFixed(1.255, 2) !== '1.25' ||\n un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n // V8 ~ Android 4.3-\n un$ToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toIntegerOrInfinity(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat('0', fractDigits - k) + result\n : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","/**\r\n * @description image render elem\r\n * @author wangfupeng\r\n */\r\n\r\nimport throttle from 'lodash.throttle'\r\nimport { Element as SlateElement, Transforms } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array } from '../../utils/dom'\r\nimport { ImageElement } from './custom-types'\r\n\r\ninterface IImageSize {\r\n width?: string\r\n height?: string\r\n}\r\n\r\nfunction genContainerId(editor: IDomEditor, elemNode: SlateElement) {\r\n const { id } = DomEditor.findKey(editor, elemNode) // node 唯一 id\r\n return `w-e-image-container-${id}`\r\n}\r\n\r\n/**\r\n * 未选中时,渲染 image container\r\n */\r\nfunction renderContainer(\r\n editor: IDomEditor,\r\n elemNode: SlateElement,\r\n imageVnode: VNode,\r\n imageInfo: IImageSize\r\n): VNode {\r\n const { width, height } = imageInfo\r\n\r\n const style: any = {}\r\n if (width) style.width = width\r\n if (height) style.height = height\r\n\r\n const containerId = genContainerId(editor, elemNode)\r\n\r\n return (\r\n <div id={containerId} style={style} className=\"w-e-image-container\">\r\n {imageVnode}\r\n </div>\r\n )\r\n}\r\n\r\n/**\r\n * 选中状态下,渲染 image container(渲染拖拽容器,修改图片尺寸)\r\n */\r\nfunction renderResizeContainer(\r\n editor: IDomEditor,\r\n elemNode: SlateElement,\r\n imageVnode: VNode,\r\n imageInfo: IImageSize\r\n) {\r\n const $body = $('body')\r\n const containerId = genContainerId(editor, elemNode)\r\n const { width, height } = imageInfo\r\n\r\n let originalX = 0\r\n let originalWith = 0\r\n let originalHeight = 0\r\n let revers = false // 是否反转。如向右拖拽 right-top 需增加宽度(非反转),但向右拖拽 left-top 则需要减少宽度(反转)\r\n let $container: Dom7Array | null = null\r\n\r\n function getContainerElem(): Dom7Array {\r\n const $container = $(`#${containerId}`)\r\n if ($container.length === 0) throw new Error('Cannot find image container elem')\r\n return $container\r\n }\r\n\r\n /**\r\n * 初始化。监听事件,记录原始数据\r\n */\r\n function init(clientX: number) {\r\n $container = getContainerElem()\r\n\r\n // 记录当前 x 坐标值\r\n originalX = clientX\r\n\r\n // 记录 img 原始宽高\r\n const $img = $container.find('img')\r\n if ($img.length === 0) throw new Error('Cannot find image elem')\r\n originalWith = $img.width()\r\n originalHeight = $img.height()\r\n\r\n // 监听 mousemove\r\n $body.on('mousemove', onMousemove)\r\n\r\n // 监听 mouseup\r\n $body.on('mouseup', onMouseup)\r\n\r\n // 隐藏 hoverbar\r\n const hoverbar = DomEditor.getHoverbar(editor)\r\n if (hoverbar) hoverbar.hideAndClean()\r\n }\r\n\r\n // mouseover callback (节流)\r\n const onMousemove = throttle((e: Event) => {\r\n e.preventDefault()\r\n\r\n const { clientX } = e as MouseEvent\r\n const gap = revers ? originalX - clientX : clientX - originalX // 考虑是否反转\r\n const newWidth = originalWith + gap\r\n const newHeight = originalHeight * (newWidth / originalWith) // 根据 width ,按比例计算 height\r\n\r\n // 实时修改 img 宽高 -【注意】这里只修改 DOM ,mouseup 时再统一不修改 node\r\n if ($container == null) return\r\n if (newWidth <= 15 || newHeight <= 15) return // 最小就是 15px\r\n\r\n $container.css('width', `${newWidth}px`)\r\n $container.css('height', `${newHeight}px`)\r\n }, 100)\r\n\r\n function onMouseup(e: Event) {\r\n // 取消监听 mousemove\r\n $body.off('mousemove', onMousemove)\r\n\r\n if ($container == null) return\r\n const newWidth = $container.width().toFixed(2)\r\n const newHeight = $container.height().toFixed(2)\r\n\r\n // 修改 node\r\n const props: Partial<ImageElement> = {\r\n style: {\r\n ...(elemNode as ImageElement).style,\r\n width: `${newWidth}px`,\r\n height: `${newHeight}px`,\r\n },\r\n }\r\n Transforms.setNodes(editor, props, { at: DomEditor.findPath(editor, elemNode) })\r\n\r\n // 取消监听 mouseup\r\n $body.off('mouseup', onMouseup)\r\n }\r\n\r\n const style: any = {}\r\n if (width) style.width = width\r\n if (height) style.height = height\r\n // style.boxShadow = '0 0 0 1px #B4D5FF' // 自定义 selected 样式,因为有拖拽触手\r\n\r\n return (\r\n <div\r\n id={containerId}\r\n style={style}\r\n className=\"w-e-image-container w-e-selected-image-container\"\r\n on={{\r\n // 统一绑定拖拽触手的 mousedown 事件\r\n mousedown: (e: MouseEvent) => {\r\n const $target = $(e.target as Element)\r\n if (!$target.hasClass('w-e-image-dragger')) {\r\n // target 不是 .w-e-image-dragger 拖拽触手,则忽略\r\n return\r\n }\r\n e.preventDefault()\r\n\r\n if ($target.hasClass('left-top') || $target.hasClass('left-bottom')) {\r\n revers = true // 反转。向右拖拽,减少宽度\r\n }\r\n init(e.clientX) // 初始化\r\n },\r\n }}\r\n >\r\n {imageVnode}\r\n\r\n {/* 拖拽的触手,会统一在上级 DOM 绑定拖拽事件 */}\r\n <div className=\"w-e-image-dragger left-top\"></div>\r\n <div className=\"w-e-image-dragger right-top\"></div>\r\n <div className=\"w-e-image-dragger left-bottom\"></div>\r\n <div className=\"w-e-image-dragger right-bottom\"></div>\r\n </div>\r\n )\r\n}\r\n\r\nfunction renderImage(elemNode: SlateElement, children: VNode[] | null, editor: IDomEditor): VNode {\r\n const { src, alt = '', href = '', style = {} } = elemNode as ImageElement\r\n const { width = '', height = '' } = style\r\n const selected = DomEditor.isNodeSelected(editor, elemNode) // 图片是否选中\r\n\r\n const imageStyle: any = {}\r\n if (width) imageStyle.width = '100%'\r\n if (height) imageStyle.height = '100%'\r\n\r\n // 【注意】void node 中,renderElem 不用处理 children 。core 会统一处理。\r\n const vnode = <img style={imageStyle} src={src} alt={alt} data-href={href} />\r\n\r\n const isDisabled = editor.isDisabled()\r\n\r\n if (selected && !isDisabled) {\r\n // 选中,未禁用 - 渲染 resize container\r\n return renderResizeContainer(editor, elemNode, vnode, { width, height })\r\n }\r\n\r\n // 其他,渲染普通 image container\r\n return renderContainer(editor, elemNode, vnode, { width, height })\r\n}\r\n\r\nconst renderImageConf = {\r\n type: 'image', // 和 elemNode.type 一致\r\n renderElem: renderImage,\r\n}\r\n\r\nexport { renderImageConf }\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\nimport { ImageElement } from './custom-types'\r\n\r\nfunction imageToHtml(elemNode: Element, childrenHtml: string): string {\r\n const { src, alt = '', href = '', style = {} } = elemNode as ImageElement\r\n const { width = '', height = '' } = style\r\n\r\n let styleStr = ''\r\n if (width) styleStr += `width: ${width};`\r\n if (height) styleStr += `height: ${height};`\r\n return `<img src=\"${src}\" alt=\"${alt}\" data-href=\"${href}\" style=\"${styleStr}\"/>`\r\n}\r\n\r\nexport const imageToHtmlConf = {\r\n type: 'image',\r\n elemToHtml: imageToHtml,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { ImageElement } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nfunction parseHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): ImageElement {\r\n const $elem = $(elem)\r\n let href = $elem.attr('data-href') || ''\r\n href = decodeURIComponent(href) // 兼容 V4\r\n\r\n return {\r\n type: 'image',\r\n src: $elem.attr('src') || '',\r\n alt: $elem.attr('alt') || '',\r\n href,\r\n style: {\r\n width: getStyleValue($elem, 'width'),\r\n height: getStyleValue($elem, 'height'),\r\n },\r\n children: [{ text: '' }], // void node 有一个空白 text\r\n }\r\n}\r\n\r\nexport const parseHtmlConf = {\r\n selector: 'img:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parseHtml,\r\n}\r\n","/**\r\n * @description image menu helper\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Range, Editor } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { ImageElement, ImageStyle } from './custom-types'\r\nimport { replaceSymbols } from '../../utils/util'\r\n\r\nasync function check(\r\n menuKey: string,\r\n editor: IDomEditor,\r\n src: string,\r\n alt: string = '',\r\n href: string = ''\r\n): Promise<boolean> {\r\n const { checkImage } = editor.getMenuConfig(menuKey)\r\n if (checkImage) {\r\n const res = await checkImage(src, alt, href)\r\n if (typeof res === 'string') {\r\n // 检验未通过,提示信息\r\n editor.alert(res, 'error')\r\n return false\r\n }\r\n if (res == null) {\r\n // 检验未通过,不提示信息\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n}\r\n\r\nasync function parseSrc(menuKey: string, editor: IDomEditor, src: string): Promise<string> {\r\n const { parseImageSrc } = editor.getMenuConfig(menuKey)\r\n if (parseImageSrc) {\r\n const newSrc = await parseImageSrc(src)\r\n return newSrc\r\n }\r\n return src\r\n}\r\n\r\nexport async function insertImageNode(\r\n editor: IDomEditor,\r\n src: string,\r\n alt: string = '',\r\n href: string = ''\r\n) {\r\n const res = await check('insertImage', editor, src, alt, href)\r\n if (!res) return // 检查失败,终止操作\r\n\r\n const parsedSrc = await parseSrc('insertImage', editor, src)\r\n\r\n // 新建一个 image node\r\n const image: ImageElement = {\r\n type: 'image',\r\n src: replaceSymbols(parsedSrc),\r\n href,\r\n alt,\r\n style: {},\r\n children: [{ text: '' }], // 【注意】void node 需要一个空 text 作为 children\r\n }\r\n\r\n // 如果 blur ,则恢复选区\r\n if (editor.selection === null) editor.restoreSelection()\r\n\r\n // 如果当前正好选中了图片,则 move 一下(如:连续上传多张图片时)\r\n if (DomEditor.getSelectedNodeByType(editor, 'image')) {\r\n editor.move(1)\r\n }\r\n\r\n if (isInsertImageMenuDisabled(editor)) return\r\n\r\n // 插入图片\r\n Transforms.insertNodes(editor, image)\r\n\r\n // 回调\r\n const { onInsertedImage } = editor.getMenuConfig('insertImage')\r\n if (onInsertedImage) onInsertedImage(image)\r\n}\r\n\r\nexport async function updateImageNode(\r\n editor: IDomEditor,\r\n src: string,\r\n alt: string = '',\r\n href: string = '',\r\n style: ImageStyle = {}\r\n) {\r\n const res = await check('editImage', editor, src, alt, href)\r\n if (!res) return // 检查失败,终止操作\r\n\r\n const parsedSrc = await parseSrc('editImage', editor, src)\r\n\r\n const selectedImageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n if (selectedImageNode == null) return\r\n const { style: curStyle = {} } = selectedImageNode as ImageElement\r\n\r\n // 修改图片\r\n const nodeProps: Partial<ImageElement> = {\r\n src: parsedSrc,\r\n alt,\r\n href,\r\n style: {\r\n ...curStyle,\r\n ...style,\r\n },\r\n }\r\n Transforms.setNodes(editor, nodeProps, {\r\n match: n => DomEditor.checkNodeType(n, 'image'),\r\n })\r\n\r\n // 回调\r\n const imageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n const { onUpdatedImage } = editor.getMenuConfig('editImage')\r\n if (onUpdatedImage) onUpdatedImage(imageNode)\r\n}\r\n\r\n/**\r\n * 判断菜单是否要 disabled\r\n * @param editor editor\r\n */\r\nexport function isInsertImageMenuDisabled(editor: IDomEditor): boolean {\r\n const { selection } = editor\r\n if (selection == null) return true\r\n if (!Range.isCollapsed(selection)) return true // 选区非折叠,禁用\r\n\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n if (type === 'code') return true // 代码块\r\n if (type === 'pre') return true // 代码块\r\n if (type === 'link') return true // 链接\r\n if (type === 'list-item') return true // list\r\n if (type.startsWith('header')) return true // 标题\r\n if (type === 'blockquote') return true // 引用\r\n if (Editor.isVoid(editor, n)) return true // void\r\n\r\n return false\r\n },\r\n universal: true,\r\n })\r\n\r\n if (match) return true\r\n return false\r\n}\r\n","/**\r\n * @description insert image menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Node } from 'slate'\r\nimport {\r\n IModalMenu,\r\n IDomEditor,\r\n genModalInputElems,\r\n genModalButtonElems,\r\n t,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array, DOMElement } from '../../../utils/dom'\r\nimport { genRandomStr } from '../../../utils/util'\r\nimport { IMAGE_SVG } from '../../../constants/icon-svg'\r\nimport { insertImageNode, isInsertImageMenuDisabled } from '../helper'\r\n\r\n/**\r\n * 生成唯一的 DOM ID\r\n */\r\nfunction genDomID(): string {\r\n return genRandomStr('w-e-insert-image')\r\n}\r\n\r\nclass InsertImage implements IModalMenu {\r\n readonly title = t('image.netImage')\r\n readonly iconSvg = IMAGE_SVG\r\n readonly tag = 'button'\r\n readonly showModal = true // 点击 button 时显示 modal\r\n readonly modalWidth = 300\r\n private $content: Dom7Array | null = null\r\n private readonly srcInputId = genDomID()\r\n private readonly altInputId = genDomID()\r\n private readonly hrefInputId = genDomID()\r\n private readonly buttonId = genDomID()\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 插入菜单,不需要 value\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 任何时候,都不用激活 menu\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 点击菜单时,弹出 modal 之前,不需要执行其他代码\r\n // 此处空着即可\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return isInsertImageMenuDisabled(editor)\r\n }\r\n\r\n getModalPositionNode(editor: IDomEditor): Node | null {\r\n return null // modal 依据选区定位\r\n }\r\n\r\n getModalContentElem(editor: IDomEditor): DOMElement {\r\n const { srcInputId, altInputId, hrefInputId, buttonId } = this\r\n\r\n // 获取 input button elem\r\n const [srcContainerElem, inputSrcElem] = genModalInputElems(t('image.src'), srcInputId)\r\n const $inputSrc = $(inputSrcElem)\r\n const [altContainerElem, inputAltElem] = genModalInputElems(t('image.desc'), altInputId)\r\n const $inputAlt = $(inputAltElem)\r\n const [hrefContainerElem, inputHrefElem] = genModalInputElems(t('image.link'), hrefInputId)\r\n const $inputHref = $(inputHrefElem)\r\n const [buttonContainerElem] = genModalButtonElems(buttonId, t('common.ok'))\r\n\r\n if (this.$content == null) {\r\n // 第一次渲染\r\n const $content = $('<div></div>')\r\n\r\n // 绑定事件(第一次渲染时绑定,不要重复绑定)\r\n $content.on('click', `#${buttonId}`, e => {\r\n e.preventDefault()\r\n const src = $content.find(`#${srcInputId}`).val().trim()\r\n const alt = $content.find(`#${altInputId}`).val().trim()\r\n const href = $content.find(`#${hrefInputId}`).val().trim()\r\n this.insertImage(editor, src, alt, href)\r\n editor.hidePanelOrModal() // 隐藏 modal\r\n })\r\n\r\n // 记录属性,重要\r\n this.$content = $content\r\n }\r\n\r\n const $content = this.$content\r\n $content.empty() // 先清空内容\r\n\r\n // append inputs and button\r\n $content.append(srcContainerElem)\r\n $content.append(altContainerElem)\r\n $content.append(hrefContainerElem)\r\n $content.append(buttonContainerElem)\r\n\r\n // 设置 input val\r\n $inputSrc.val('')\r\n $inputAlt.val('')\r\n $inputHref.val('')\r\n\r\n // focus 一个 input(异步,此时 DOM 尚未渲染)\r\n setTimeout(() => {\r\n $inputSrc.focus()\r\n })\r\n\r\n return $content[0]\r\n }\r\n\r\n private insertImage(editor: IDomEditor, src: string, alt: string = '', href: string = '') {\r\n if (!src) return\r\n\r\n // 还原选区\r\n editor.restoreSelection()\r\n\r\n if (this.isDisabled(editor)) return\r\n\r\n // 插入图片\r\n insertImageNode(editor, src, alt, href)\r\n }\r\n}\r\n\r\nexport default InsertImage\r\n","/**\r\n * @description delete image menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { TRASH_SVG } from '../../../constants/icon-svg'\r\n\r\nclass DeleteImage implements IButtonMenu {\r\n readonly title = t('image.delete')\r\n readonly iconSvg = TRASH_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 无需获取 val\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const imageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n if (imageNode == null) {\r\n // 选区未处于 image node ,则禁用\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n // 删除图片\r\n Transforms.removeNodes(editor, {\r\n match: n => DomEditor.checkNodeType(n, 'image'),\r\n })\r\n }\r\n}\r\n\r\nexport default DeleteImage\r\n","/**\r\n * @description editor image menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Node, Range } from 'slate'\r\nimport {\r\n IModalMenu,\r\n IDomEditor,\r\n DomEditor,\r\n genModalInputElems,\r\n genModalButtonElems,\r\n t,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array, DOMElement } from '../../../utils/dom'\r\nimport { genRandomStr } from '../../../utils/util'\r\nimport { PENCIL_SVG } from '../../../constants/icon-svg'\r\nimport { updateImageNode } from '../helper'\r\nimport { ImageElement, ImageStyle } from '../custom-types'\r\n\r\n/**\r\n * 生成唯一的 DOM ID\r\n */\r\nfunction genDomID(): string {\r\n return genRandomStr('w-e-edit-image')\r\n}\r\n\r\nclass EditImage implements IModalMenu {\r\n readonly title = t('image.edit')\r\n readonly iconSvg = PENCIL_SVG\r\n readonly tag = 'button'\r\n readonly showModal = true // 点击 button 时显示 modal\r\n readonly modalWidth = 300\r\n private $content: Dom7Array | null = null\r\n private readonly srcInputId = genDomID()\r\n private readonly altInputId = genDomID()\r\n private readonly hrefInputId = genDomID()\r\n private readonly buttonId = genDomID()\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 编辑图片,用不到 getValue\r\n return ''\r\n }\r\n\r\n private getImageNode(editor: IDomEditor): Node | null {\r\n return DomEditor.getSelectedNodeByType(editor, 'image')\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 点击菜单时,弹出 modal 之前,不需要执行其他代码\r\n // 此处空着即可\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n const { selection } = editor\r\n if (selection == null) return true\r\n if (!Range.isCollapsed(selection)) return true // 选区非折叠,禁用\r\n\r\n const imageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n\r\n // 未匹配到 image node 则禁用\r\n if (imageNode == null) return true\r\n return false\r\n }\r\n\r\n getModalPositionNode(editor: IDomEditor): Node | null {\r\n return this.getImageNode(editor)\r\n }\r\n\r\n getModalContentElem(editor: IDomEditor): DOMElement {\r\n const { srcInputId, altInputId, hrefInputId, buttonId } = this\r\n\r\n const selectedImageNode = this.getImageNode(editor)\r\n if (selectedImageNode == null) {\r\n throw new Error('Not found selected image node')\r\n }\r\n\r\n // 获取 input button elem\r\n const [srcContainerElem, inputSrcElem] = genModalInputElems(t('image.src'), srcInputId)\r\n const $inputSrc = $(inputSrcElem)\r\n const [altContainerElem, inputAltElem] = genModalInputElems(t('image.desc'), altInputId)\r\n const $inputAlt = $(inputAltElem)\r\n const [hrefContainerElem, inputHrefElem] = genModalInputElems(t('image.link'), hrefInputId)\r\n const $inputHref = $(inputHrefElem)\r\n const [buttonContainerElem] = genModalButtonElems(buttonId, t('common.ok'))\r\n\r\n if (this.$content == null) {\r\n // 第一次渲染\r\n const $content = $('<div></div>')\r\n\r\n // 绑定事件(第一次渲染时绑定,不要重复绑定)\r\n $content.on('click', `#${buttonId}`, e => {\r\n e.preventDefault()\r\n\r\n const src = $content.find(`#${srcInputId}`).val()\r\n const alt = $content.find(`#${altInputId}`).val()\r\n const href = $content.find(`#${hrefInputId}`).val()\r\n this.updateImage(editor, src, alt, href)\r\n editor.hidePanelOrModal() // 隐藏 modal\r\n })\r\n\r\n // 记录属性,重要\r\n this.$content = $content\r\n }\r\n\r\n const $content = this.$content\r\n $content.empty() // 先清空内容\r\n\r\n // append inputs and button\r\n $content.append(srcContainerElem)\r\n $content.append(altContainerElem)\r\n $content.append(hrefContainerElem)\r\n $content.append(buttonContainerElem)\r\n\r\n // 设置 input val\r\n const { src, alt = '', href = '' } = selectedImageNode as ImageElement\r\n $inputSrc.val(src)\r\n $inputAlt.val(alt)\r\n $inputHref.val(href)\r\n\r\n // focus 一个 input(异步,此时 DOM 尚未渲染)\r\n setTimeout(() => {\r\n $inputSrc.focus()\r\n })\r\n\r\n return $content[0]\r\n }\r\n\r\n private updateImage(\r\n editor: IDomEditor,\r\n src: string,\r\n alt: string = '',\r\n href: string = '',\r\n style: ImageStyle = {}\r\n ) {\r\n if (!src) return\r\n\r\n // 还原选区\r\n editor.restoreSelection()\r\n\r\n if (this.isDisabled(editor)) return\r\n\r\n // 修改图片信息\r\n updateImageNode(editor, src, alt, href, style)\r\n }\r\n}\r\n\r\nexport default EditImage\r\n","/**\r\n * @description view image link menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { EXTERNAL_SVG } from '../../../constants/icon-svg'\r\nimport { ImageElement } from '../custom-types'\r\n\r\nclass ViewImageLink implements IButtonMenu {\r\n readonly title = t('image.viewLink')\r\n readonly iconSvg = EXTERNAL_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const imageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n if (imageNode) {\r\n // 选区处于 image node\r\n return (imageNode as ImageElement).href || ''\r\n }\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const href = this.getValue(editor)\r\n if (href) {\r\n // 有 image href ,则不禁用\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n if (!value || typeof value !== 'string') {\r\n throw new Error(`View image link failed, image.href is '${value}'`)\r\n return\r\n }\r\n\r\n // 查看链接\r\n window.open(value, '_blank')\r\n }\r\n}\r\n\r\nexport default ViewImageLink\r\n","/**\r\n * @description image width base class\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Node } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { ImageElement } from '../custom-types'\r\n\r\nabstract class ImageWidthBaseClass implements IButtonMenu {\r\n abstract readonly title: string // 菜单标题\r\n readonly tag = 'button'\r\n abstract readonly value: string // css width 的值\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 无需获取 val\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n private getSelectedNode(editor: IDomEditor): Node | null {\r\n return DomEditor.getSelectedNodeByType(editor, 'image')\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const imageNode = this.getSelectedNode(editor)\r\n if (imageNode == null) {\r\n // 选区未处于 image node ,则禁用\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n const imageNode = this.getSelectedNode(editor)\r\n if (imageNode == null) return\r\n\r\n // 隐藏 hoverbar\r\n const hoverbar = DomEditor.getHoverbar(editor)\r\n if (hoverbar) hoverbar.hideAndClean()\r\n\r\n const { style = {} } = imageNode as ImageElement\r\n const props: Partial<ImageElement> = {\r\n style: {\r\n ...style,\r\n width: this.value, // 修改 width\r\n height: '', // 清空 height\r\n },\r\n }\r\n\r\n Transforms.setNodes(editor, props, {\r\n match: n => DomEditor.checkNodeType(n, 'image'),\r\n })\r\n }\r\n}\r\n\r\nexport default ImageWidthBaseClass\r\n","/**\r\n * @description image width 30%\r\n * @author wangfupeng\r\n */\r\n\r\nimport ImageWidthBaseClass from './WidthBase'\r\n\r\nclass ImageWidth30 extends ImageWidthBaseClass {\r\n readonly title = '30%' // 菜单标题\r\n readonly value = '30%' // css width 的值\r\n}\r\n\r\nexport default ImageWidth30\r\n","/**\r\n * @description image width 50%\r\n * @author wangfupeng\r\n */\r\n\r\nimport ImageWidthBaseClass from './WidthBase'\r\n\r\nclass ImageWidth50 extends ImageWidthBaseClass {\r\n readonly title = '50%' // 菜单标题\r\n readonly value = '50%' // css width 的值\r\n}\r\n\r\nexport default ImageWidth50\r\n","/**\r\n * @description image width 75%\r\n */\r\n\r\nimport ImageWidthBaseClass from './WidthBase'\r\n\r\nclass ImageWidth75 extends ImageWidthBaseClass {\r\n readonly title = '75%'\r\n readonly value = '75%'\r\n}\r\n\r\nexport default ImageWidth75\r\n","/**\r\n * @description image width 100%\r\n * @author wangfupeng\r\n */\r\n\r\nimport ImageWidthBaseClass from './WidthBase'\r\n\r\nclass ImageWidth100 extends ImageWidthBaseClass {\r\n readonly title = '100%' // 菜单标题\r\n readonly value = '100%' // css width 的值\r\n}\r\n\r\nexport default ImageWidth100\r\n","/**\r\n * @description image menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport InsertImage from './InsertImage'\r\nimport DeleteImage from './DeleteImage'\r\nimport EditImage from './EditImage'\r\nimport ViewImageLink from './ViewImageLink'\r\nimport ImageWidth30 from './Width30'\r\nimport ImageWidth50 from './Width50'\r\nimport ImageWidth75 from './Width75'\r\nimport ImageWidth100 from './Width100'\r\nimport { genImageMenuConfig } from './config'\r\n\r\nconst config = genImageMenuConfig() // menu config\r\n\r\nexport const insertImageMenuConf = {\r\n key: 'insertImage',\r\n factory() {\r\n return new InsertImage()\r\n },\r\n\r\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\r\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\r\n config,\r\n}\r\n\r\nexport const deleteImageMenuConf = {\r\n key: 'deleteImage',\r\n factory() {\r\n return new DeleteImage()\r\n },\r\n}\r\n\r\nexport const editImageMenuConf = {\r\n key: 'editImage',\r\n factory() {\r\n return new EditImage()\r\n },\r\n config,\r\n}\r\n\r\nexport const viewImageLinkMenuConf = {\r\n key: 'viewImageLink',\r\n factory() {\r\n return new ViewImageLink()\r\n },\r\n}\r\n\r\nexport const imageWidth30MenuConf = {\r\n key: 'imageWidth30',\r\n factory() {\r\n return new ImageWidth30()\r\n },\r\n}\r\n\r\nexport const imageWidth50MenuConf = {\r\n key: 'imageWidth50',\r\n factory() {\r\n return new ImageWidth50()\r\n },\r\n}\r\n\r\nexport const imageWidth75MenuConf = {\r\n key: 'imageWidth75',\r\n factory() {\r\n return new ImageWidth75()\r\n },\r\n}\r\n\r\nexport const imageWidth100MenuConf = {\r\n key: 'imageWidth100',\r\n factory() {\r\n return new ImageWidth100()\r\n },\r\n}\r\n","/**\r\n * @description 图片菜单配置\r\n * @author wangfupeng\r\n */\r\n\r\nimport { ImageElement } from '../custom-types'\r\n\r\nexport function genImageMenuConfig() {\r\n return {\r\n /**\r\n * 插入图片之后的回调\r\n * @param imageElem ImageElement\r\n */\r\n onInsertedImage(imageElem: ImageElement) {\r\n /*自定义*/\r\n },\r\n\r\n /**\r\n * 更新图片之后的回调\r\n * @param node image node\r\n */\r\n onUpdatedImage(node: ImageElement | null) {\r\n /*自定义*/\r\n },\r\n\r\n /**\r\n * 检查图片信息,支持 async fn\r\n * @param src image src\r\n * @param alt image alt\r\n * @param href image href\r\n */\r\n checkImage(src: string, alt: string, href: string): boolean | string | undefined {\r\n // 1. 返回 true ,说明检查通过\r\n // 2. 返回一个字符串,说明检查未通过,编辑器会阻止图片插入。会 alert 出错误信息(即返回的字符串)\r\n // 3. 返回 undefined(即没有任何返回),说明检查未通过,编辑器会阻止图片插入\r\n return true\r\n },\r\n\r\n /**\r\n * parse image src\r\n * @param src image src\r\n * @returns new src\r\n */\r\n parseImageSrc(src: string): string {\r\n return src\r\n },\r\n }\r\n}\r\n","/**\r\n * @description image module entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport withImage from './plugin'\r\nimport { renderImageConf } from './render-elem'\r\nimport { imageToHtmlConf } from './elem-to-html'\r\nimport { parseHtmlConf } from './parse-elem-html'\r\nimport {\r\n insertImageMenuConf,\r\n deleteImageMenuConf,\r\n editImageMenuConf,\r\n viewImageLinkMenuConf,\r\n imageWidth30MenuConf,\r\n imageWidth50MenuConf,\r\n imageWidth75MenuConf,\r\n imageWidth100MenuConf,\r\n} from './menu/index'\r\n\r\nconst image: Partial<IModuleConf> = {\r\n renderElems: [renderImageConf],\r\n elemsToHtml: [imageToHtmlConf],\r\n parseElemsHtml: [parseHtmlConf],\r\n menus: [\r\n insertImageMenuConf,\r\n deleteImageMenuConf,\r\n editImageMenuConf,\r\n viewImageLinkMenuConf,\r\n imageWidth30MenuConf,\r\n imageWidth50MenuConf,\r\n imageWidth75MenuConf,\r\n imageWidth100MenuConf,\r\n ],\r\n editorPlugin: withImage,\r\n}\r\n\r\nexport default image\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\n// import { Editor, Path, Operation } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction withImage<T extends IDomEditor>(editor: T): T {\r\n const { isInline, isVoid, insertNode } = editor\r\n const newEditor = editor\r\n\r\n // 重写 isInline\r\n newEditor.isInline = elem => {\r\n const { type } = elem\r\n\r\n if (type === 'image') {\r\n return true\r\n }\r\n\r\n return isInline(elem)\r\n }\r\n\r\n // 重写 isVoid\r\n newEditor.isVoid = elem => {\r\n const { type } = elem\r\n\r\n if (type === 'image') {\r\n return true\r\n }\r\n\r\n return isVoid(elem)\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withImage\r\n","/**\r\n * @description render todo\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement, Transforms } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { TodoElement } from './custom-types'\r\n\r\n/**\r\n * render todo elem\r\n * @param elemNode slate elem\r\n * @param children children\r\n * @param editor editor\r\n * @returns vnode\r\n */\r\nfunction renderTodo(elemNode: SlateElement, children: VNode[] | null, editor: IDomEditor): VNode {\r\n // 判断 disabled\r\n let disabled = false\r\n if (editor.isDisabled()) disabled = true\r\n\r\n const { checked } = elemNode as TodoElement\r\n const vnode = (\r\n <div style={{ margin: '5px 0' }}>\r\n <span contentEditable={false} style={{ marginRight: '0.5em' }}>\r\n <input\r\n type=\"checkbox\"\r\n checked={checked}\r\n disabled={disabled}\r\n on={{\r\n change: event => {\r\n const path = DomEditor.findPath(editor, elemNode)\r\n const newProps: Partial<TodoElement> = {\r\n // @ts-ignore\r\n checked: event.target.checked,\r\n }\r\n Transforms.setNodes(editor, newProps, { at: path })\r\n },\r\n }}\r\n />\r\n </span>\r\n <span>{children}</span>\r\n </div>\r\n )\r\n\r\n return vnode\r\n}\r\n\r\nconst renderTodoConf = {\r\n type: 'todo', // 和 elemNode.type 一致\r\n renderElem: renderTodo,\r\n}\r\n\r\nexport { renderTodoConf }\r\n","/**\r\n * @description Todo menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Element, Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { CHECK_BOX_SVG } from '../../../constants/icon-svg'\r\n\r\nclass TodoMenu implements IButtonMenu {\r\n readonly title = t('todo.todo')\r\n readonly iconSvg = CHECK_BOX_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 无需获取 val\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return !!DomEditor.getSelectedNodeByType(editor, 'todo')\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const selectedElems = DomEditor.getSelectedElems(editor)\r\n const notMatch = selectedElems.some((elem: Element) => {\r\n if (Editor.isVoid(editor, elem) && Editor.isBlock(editor, elem)) return true\r\n\r\n const { type } = elem as Element\r\n if (['pre', 'table', 'list-item'].includes(type)) return true\r\n })\r\n if (notMatch) return true\r\n\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n const active = this.isActive(editor)\r\n Transforms.setNodes(editor, { type: active ? 'paragraph' : 'todo' })\r\n }\r\n}\r\n\r\nexport default TodoMenu\r\n","/**\r\n * @description pre parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, { DOMElement } from '../../utils/dom'\r\n\r\n/**\r\n * pre-prase todo ,兼容 V4\r\n * @param elem elem\r\n */\r\nfunction preParse(elem: DOMElement): DOMElement {\r\n const $elem = $(elem)\r\n\r\n // $elem 格式如\r\n // <ul class=\"w-e-todo\"><li><span contenteditable=\"false\"><input type=\"checkbox\"/></span>hello <b>world</b></li></ul>\r\n const $li = $elem.find('li')\r\n\r\n const $container = $('<div data-w-e-type=\"todo\"></div>')\r\n\r\n // 1. 把 input 移动到 $container\r\n const $input = $li.find('input[type]')\r\n $container.append($input)\r\n\r\n // 2. 删除之前包裹 input 的 span\r\n const $spanForInput = $li.children()[0]\r\n $spanForInput.remove()\r\n\r\n // 3. 再把剩余的内容移动到 $container (有纯文本内容,不能用 children ,得用 innerHTML)\r\n $container[0].innerHTML = $container[0].innerHTML + $li[0].innerHTML\r\n\r\n return $container[0]\r\n}\r\n\r\nexport const preParseHtmlConf = {\r\n selector: 'ul.w-e-todo', // 匹配 v4 todo\r\n preParseHtml: preParse,\r\n}\r\n","/**\r\n * @description todo entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderTodoConf } from './render-elem'\r\nimport withTodo from './plugin'\r\nimport { todoMenuConf } from './menu/index'\r\nimport { todoToHtmlConf } from './elem-to-html'\r\nimport { parseHtmlConf } from './parse-elem-html'\r\nimport { preParseHtmlConf } from './pre-parse-html'\r\n\r\nconst todo: Partial<IModuleConf> = {\r\n renderElems: [renderTodoConf],\r\n elemsToHtml: [todoToHtmlConf],\r\n preParseHtml: [preParseHtmlConf],\r\n parseElemsHtml: [parseHtmlConf],\r\n menus: [todoMenuConf],\r\n editorPlugin: withTodo,\r\n}\r\n\r\nexport default todo\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\nimport { TodoElement } from './custom-types'\r\n\r\nfunction todoToHtml(elem: Element, childrenHtml: string): string {\r\n const { checked } = elem as TodoElement\r\n const checkedAttr = checked ? 'checked' : ''\r\n return `<div data-w-e-type=\"todo\"><input type=\"checkbox\" disabled ${checkedAttr}>${childrenHtml}</div>`\r\n}\r\n\r\nexport const todoToHtmlConf = {\r\n type: 'todo',\r\n elemToHtml: todoToHtml,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { TodoElement } from './custom-types'\r\nimport $, { DOMElement } from '../../utils/dom'\r\n\r\nfunction parseHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): TodoElement {\r\n const $elem = $(elem)\r\n\r\n children = children.filter(child => {\r\n if (Text.isText(child)) return true\r\n if (editor.isInline(child)) return true\r\n return false\r\n })\r\n\r\n // 无 children ,则用纯文本\r\n if (children.length === 0) {\r\n children = [{ text: $elem.text().replace(/\\s+/gm, ' ') }]\r\n }\r\n\r\n // 获取 checked\r\n let checked = false\r\n const $input = $elem.find('input[type=\"checkbox\"]')\r\n if ($input.attr('checked') != null) {\r\n checked = true\r\n }\r\n\r\n return {\r\n type: 'todo',\r\n checked,\r\n // @ts-ignore\r\n children,\r\n }\r\n}\r\n\r\nexport const parseHtmlConf = {\r\n selector: 'div[data-w-e-type=\"todo\"]',\r\n parseElemHtml: parseHtml,\r\n}\r\n","/**\r\n * @description todo menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport TodoMenu from './Todo'\r\n\r\nexport const todoMenuConf = {\r\n key: 'todo',\r\n factory() {\r\n return new TodoMenu()\r\n },\r\n}\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Node, Transforms, Range } from 'slate'\r\nimport { DomEditor, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction withTodo<T extends IDomEditor>(editor: T): T {\r\n const { deleteBackward } = editor\r\n const newEditor = editor\r\n\r\n /**\r\n * 删除 todo 无内容时,变为 paragraph\r\n */\r\n newEditor.deleteBackward = unit => {\r\n const { selection } = editor\r\n\r\n if (selection && Range.isCollapsed(selection)) {\r\n // 获取选中的 todo\r\n const selectedTodo = DomEditor.getSelectedNodeByType(editor, 'todo')\r\n if (selectedTodo) {\r\n if (Node.string(selectedTodo).length === 0) {\r\n // 当前 todo 已经没有文字,则转换为 paragraph\r\n Transforms.setNodes(editor, { type: 'paragraph' }, { mode: 'highest' })\r\n return\r\n }\r\n }\r\n }\r\n\r\n deleteBackward(unit)\r\n }\r\n\r\n return newEditor\r\n}\r\n\r\nexport default withTodo\r\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","/**\r\n * @description 块顶栏按钮 vnode 工厂(blockquote / pre / table / video 共用)\r\n */\r\n\r\nimport { h, VNode } from 'snabbdom'\r\n\r\nexport function makeBlockToolbarButton(opts: {\r\n action: string\r\n title: string\r\n iconSvg: string\r\n actionAttr: string // e.g. data-bq-action\r\n className: string\r\n disabled?: boolean\r\n active?: boolean\r\n}): VNode {\r\n const { action, title, iconSvg, actionAttr, className, disabled = false, active = false } = opts\r\n const cls = [className, disabled ? 'is-disabled' : '', active ? 'is-active' : '']\r\n .filter(Boolean)\r\n .join(' ')\r\n\r\n return h('button', {\r\n attrs: {\r\n type: 'button',\r\n class: cls,\r\n title,\r\n [actionAttr]: action,\r\n 'aria-label': title,\r\n ...(disabled ? { disabled: 'disabled' } : {}),\r\n },\r\n props: { contentEditable: false, disabled },\r\n hook: {\r\n insert(vnode) {\r\n const el = vnode.elm as HTMLElement | undefined\r\n if (el) el.innerHTML = iconSvg\r\n },\r\n postpatch(_o, vnode) {\r\n const el = vnode.elm as HTMLElement | undefined\r\n if (el && el.innerHTML !== iconSvg) el.innerHTML = iconSvg\r\n },\r\n },\r\n on: {\r\n mousedown: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n },\r\n },\r\n })\r\n}\r\n\r\nexport function makeBlockToolbarSpacer(className: string): VNode {\r\n return h('span', { attrs: { class: className } }, [])\r\n}\r\n","/**\r\n * @description blockquote 顶栏图标与动作\r\n */\r\n\r\nexport const BQ_TOOLBAR_ICON_ENTER =\r\n '<svg viewBox=\"0 0 1255 1024\"><path d=\"M1095.111111 731.477333h-625.777778V1024L0 658.318222 469.333333 292.408889v292.636444h625.777778V0h156.444445v731.477333z\"></path></svg>'\r\nexport const BQ_TOOLBAR_ICON_CANCEL_ENTER =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M436 680H124v-56h312l-124-124 42-42 220 220-220 220-42-42 124-124z\"></path><path d=\"M198 128l64-64 628 628-64 64z\"></path></svg>'\r\nexport const BQ_TOOLBAR_ICON_UNQUOTE =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M422.6 907.1H133.4c-32.6 0-59-26.4-59-59V608.2l-4-14.9c0-315.9 125.5-485.1 376.5-507.5v59.8C280.7 180.4 239.3 315.8 239.3 442.4v41.2l31.5 12.3h151.8c32.6 0 59 26.4 59 59v293.2c0 32.5-26.4 59-59 59z m472 0H605.4c-32.6 0-59-26.4-59-59V608.2l-4-14.9c0-315.9 125.5-485.1 376.5-507.5v59.8C752.7 180.4 711.3 315.8 711.3 442.4v41.2l31.5 12.3h151.8c32.6 0 59 26.4 59 59v293.2c0 32.5-26.4 59-59 59z\"></path><path d=\"M198 128l64-64 628 628-64 64z\"></path></svg>'\r\nexport const BQ_TOOLBAR_ICON_REMOVE =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M360 184h304v-40H360v40zM184 264h656v72H184V264zm72 120v456c0 22 18 40 40 40h432c22 0 40-18 40-40V384H256zm120 88h64v280h-64V472zm208 0h64v280h-64V472z\"></path></svg>'\r\n","/**\r\n * @description render blockquote with top toolbar\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement, Node } from 'slate'\r\nimport { h, VNode } from 'snabbdom'\r\nimport {\r\n IDomEditor,\r\n DomEditor,\r\n canRemoveEmptyLineAboveBlock,\r\n insertEmptyLineAboveAtPath,\r\n removeEmptyLineAboveTopLevelBlock,\r\n replaceBlockWithEmptyLine,\r\n resolveElemPath,\r\n setBlockToParagraph,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { makeBlockToolbarButton, makeBlockToolbarSpacer } from '../../utils/block-toolbar'\r\nimport {\r\n BQ_TOOLBAR_ICON_CANCEL_ENTER,\r\n BQ_TOOLBAR_ICON_ENTER,\r\n BQ_TOOLBAR_ICON_REMOVE,\r\n BQ_TOOLBAR_ICON_UNQUOTE,\r\n} from './toolbar-icons'\r\n\r\nfunction handleBlockquoteToolbarAction(\r\n editor: IDomEditor,\r\n elem: Node,\r\n action: string\r\n): void {\r\n if (!editor || editor.isDestroyed || editor.isDisabled()) return\r\n const path = resolveElemPath(editor, elem)\r\n if (!path?.length) return\r\n\r\n if (action === 'enter') {\r\n insertEmptyLineAboveAtPath(editor, path)\r\n return\r\n }\r\n if (action === 'cancel-enter') {\r\n removeEmptyLineAboveTopLevelBlock(editor, path)\r\n return\r\n }\r\n if (action === 'unquote') {\r\n setBlockToParagraph(editor, path)\r\n return\r\n }\r\n if (action === 'remove') {\r\n const node = DomEditor.getSelectedNodeByType(editor, 'blockquote') || elem\r\n try {\r\n const livePath = DomEditor.findPath(editor, node)\r\n replaceBlockWithEmptyLine(editor, livePath, node)\r\n } catch (_) {\r\n replaceBlockWithEmptyLine(editor, path, elem)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * render block quote elem\r\n */\r\nfunction renderBlockQuote(\r\n elemNode: SlateElement,\r\n children: VNode[] | null,\r\n editor: IDomEditor\r\n): VNode {\r\n const kids = children == null ? [] : Array.isArray(children) ? children : [children]\r\n\r\n if (editor.isDisabled()) {\r\n return h('blockquote', {}, kids)\r\n }\r\n\r\n let canCancelEnter = false\r\n try {\r\n const path = DomEditor.findPath(editor, elemNode)\r\n canCancelEnter = canRemoveEmptyLineAboveBlock(editor, path)\r\n } catch (_) {\r\n canCancelEnter = false\r\n }\r\n\r\n const toolbar = h(\r\n 'div',\r\n {\r\n attrs: {\r\n class: 'mdg-bq-toolbar',\r\n contenteditable: 'false',\r\n 'data-mdg-bq-toolbar': '1',\r\n },\r\n props: { contentEditable: false },\r\n on: {\r\n mousedown: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n },\r\n click: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n const t = e.target as Element | null\r\n const btn = t?.closest?.('button[data-bq-action]') as HTMLElement | null\r\n const action = btn?.getAttribute?.('data-bq-action')\r\n if (!action || btn?.classList?.contains('is-disabled')) return\r\n handleBlockquoteToolbarAction(editor, elemNode, action)\r\n },\r\n },\r\n },\r\n [\r\n makeBlockToolbarButton({\r\n action: 'enter',\r\n title: '回车(上方空行)',\r\n iconSvg: BQ_TOOLBAR_ICON_ENTER,\r\n actionAttr: 'data-bq-action',\r\n className: 'mdg-bq-btn',\r\n }),\r\n makeBlockToolbarButton({\r\n action: 'cancel-enter',\r\n title: '取消回车',\r\n iconSvg: BQ_TOOLBAR_ICON_CANCEL_ENTER,\r\n actionAttr: 'data-bq-action',\r\n className: 'mdg-bq-btn',\r\n disabled: !canCancelEnter,\r\n }),\r\n makeBlockToolbarSpacer('mdg-bq-toolbar-spacer'),\r\n makeBlockToolbarButton({\r\n action: 'unquote',\r\n title: '取消引用',\r\n iconSvg: BQ_TOOLBAR_ICON_UNQUOTE,\r\n actionAttr: 'data-bq-action',\r\n className: 'mdg-bq-btn',\r\n }),\r\n makeBlockToolbarButton({\r\n action: 'remove',\r\n title: '删除',\r\n iconSvg: BQ_TOOLBAR_ICON_REMOVE,\r\n actionAttr: 'data-bq-action',\r\n className: 'mdg-bq-btn',\r\n }),\r\n ]\r\n )\r\n\r\n return h('blockquote', { attrs: { class: 'mdg-bq-with-toolbar' } }, [toolbar, ...kids])\r\n}\r\n\r\nexport const renderBlockQuoteConf = {\r\n type: 'blockquote',\r\n renderElem: renderBlockQuote,\r\n}\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\n\r\nfunction quoteToHtml(elem: Element, childrenHtml: string): string {\r\n return `<blockquote>${childrenHtml}</blockquote>`\r\n}\r\n\r\nexport const quoteToHtmlConf = {\r\n type: 'blockquote',\r\n elemToHtml: quoteToHtml,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport $, { DOMElement } from '../../utils/dom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { BlockQuoteElement } from './custom-types'\r\n\r\nfunction parseHtml(\r\n elem: DOMElement,\r\n children: Descendant[],\r\n editor: IDomEditor\r\n): BlockQuoteElement {\r\n const $elem = $(elem)\r\n\r\n children = children.filter(child => {\r\n if (Text.isText(child)) return true\r\n if (editor.isInline(child)) return true\r\n return false\r\n })\r\n\r\n // 无 children ,则用纯文本\r\n if (children.length === 0) {\r\n children = [{ text: $elem.text().replace(/\\s+/gm, ' ') }]\r\n }\r\n\r\n return {\r\n type: 'blockquote',\r\n // @ts-ignore\r\n children,\r\n }\r\n}\r\n\r\nexport const parseHtmlConf = {\r\n selector: 'blockquote:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parseHtml,\r\n}\r\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","/**\r\n * @description blockquote menu class\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { QUOTE_SVG } from '../../../constants/icon-svg'\r\n\r\nclass BlockquoteMenu implements IButtonMenu {\r\n readonly title = t('blockQuote.title')\r\n readonly iconSvg = QUOTE_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 用不到 getValue\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n const node = DomEditor.getSelectedNodeByType(editor, 'blockquote')\r\n return !!node\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n // 只可用于 p 和 blockquote\r\n if (type === 'paragraph') return true\r\n if (type === 'blockquote') return true\r\n\r\n return false\r\n },\r\n universal: true,\r\n mode: 'highest', // 匹配最高层级\r\n })\r\n\r\n // 匹配到 p blockquote ,不禁用\r\n if (nodeEntry) {\r\n return false\r\n }\r\n // 未匹配到,则禁用\r\n return true\r\n }\r\n\r\n /**\r\n * 执行命令\r\n * @param editor editor\r\n * @param value node.type\r\n */\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n const active = this.isActive(editor)\r\n const newType = active ? 'paragraph' : 'blockquote'\r\n\r\n // 执行命令\r\n Transforms.setNodes(editor, { type: newType }, { mode: 'highest' })\r\n }\r\n}\r\n\r\nexport default BlockquoteMenu\r\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n return fn && callBind(call, fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = {};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (variable) {\n return isCallable(variable) ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.19.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar isForced = require('../internals/is-forced');\nvar path = require('../internals/path');\nvar bind = require('../internals/function-bind-context');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\n\nvar wrapConstructor = function (NativeConstructor) {\n var Wrapper = function (a, b, c) {\n if (this instanceof Wrapper) {\n switch (arguments.length) {\n case 0: return new NativeConstructor();\n case 1: return new NativeConstructor(a);\n case 2: return new NativeConstructor(a, b);\n } return new NativeConstructor(a, b, c);\n } return apply(NativeConstructor, this, arguments);\n };\n Wrapper.prototype = NativeConstructor.prototype;\n return Wrapper;\n};\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var PROTO = options.proto;\n\n var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;\n\n var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET];\n var targetPrototype = target.prototype;\n\n var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n for (key in source) {\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contains in native\n USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key);\n\n targetProperty = target[key];\n\n if (USE_NATIVE) if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(nativeSource, key);\n nativeProperty = descriptor && descriptor.value;\n } else nativeProperty = nativeSource[key];\n\n // export native or implementation\n sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n if (USE_NATIVE && typeof targetProperty == typeof sourceProperty) continue;\n\n // bind timers to global for call from export context\n if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);\n // wrap global constructors for prevent changs in this version\n else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n // make static versions for prototype methods\n else if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty);\n // default case\n else resultProperty = sourceProperty;\n\n // add a flag to not completely full polyfills\n if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(resultProperty, 'sham', true);\n }\n\n createNonEnumerableProperty(target, key, resultProperty);\n\n if (PROTO) {\n VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n if (!hasOwn(path, VIRTUAL_PROTOTYPE)) {\n createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n }\n // export virtual prototype methods\n createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty);\n // export real prototype methods\n if (options.real && targetPrototype && !targetPrototype[key]) {\n createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n }\n }\n }\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function (argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n // we can't check .prototype since constructors produced by .bind haven't it\n } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\nvar TypeError = global.TypeError;\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = lengthOfArrayLike(E);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","module.exports = {};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (target, key, value, options) {\n if (options && options.enumerable) target[key] = value;\n else createNonEnumerableProperty(target, key, value);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineProperty = require('../internals/object-define-property').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/object-to-string');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC, SET_METHOD) {\n if (it) {\n var target = STATIC ? it : it.prototype;\n if (!hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {\n createNonEnumerableProperty(target, 'toString', toString);\n }\n }\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar arraySlice = require('../internals/array-slice');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n redefine(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = $toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (isCallable($replacer)) value = call($replacer, this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return apply($stringify, null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n var valueOf = SymbolPrototype.valueOf;\n // eslint-disable-next-line no-unused-vars -- required for .length\n redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n // TODO: improve hint logic\n return call(valueOf, this);\n });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.match` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.matchAll` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.matchall\ndefineWellKnownSymbol('matchAll');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.search` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.species` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.split` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","require('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","require('../modules/es.array.iterator');\nvar DOMIterables = require('../internals/dom-iterables');\nvar global = require('../internals/global');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n Iterators[COLLECTION_NAME] = Iterators.Array;\n}\n","var parent = require('../../es/symbol');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncDispose` well-known symbol\n// https://github.com/tc39/proposal-using-statement\ndefineWellKnownSymbol('asyncDispose');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.dispose` well-known symbol\n// https://github.com/tc39/proposal-using-statement\ndefineWellKnownSymbol('dispose');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.matcher` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('matcher');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.metadata` well-known symbol\n// https://github.com/tc39/proposal-decorators\ndefineWellKnownSymbol('metadata');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.observable` well-known symbol\n// https://github.com/tc39/proposal-observable\ndefineWellKnownSymbol('observable');\n","// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('patternMatch');\n","// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\ndefineWellKnownSymbol('replaceAll');\n","var parent = require('../../stable/symbol');\nrequire('../../modules/esnext.symbol.async-dispose');\nrequire('../../modules/esnext.symbol.dispose');\nrequire('../../modules/esnext.symbol.matcher');\nrequire('../../modules/esnext.symbol.metadata');\nrequire('../../modules/esnext.symbol.observable');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.symbol.pattern-match');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.symbol.replace-all');\n\nmodule.exports = parent;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","require('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/es.symbol.iterator');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('iterator');\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var _Symbol = require(\"@babel/runtime-corejs3/core-js/symbol\");\n\nvar _Symbol$iterator = require(\"@babel/runtime-corejs3/core-js/symbol/iterator\");\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof _Symbol === \"function\" && typeof _Symbol$iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","module.exports = {};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\nvar fails = require('../internals/fails');\n\nmodule.exports = fails(function () {\n if (typeof ArrayBuffer == 'function') {\n var buffer = new ArrayBuffer(8);\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n }\n});\n","var fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n if (!isObject(it)) return false;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;\n return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar isExtensible = require('../internals/object-is-extensible');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw TypeError('Incorrect invocation');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n","var arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","/**\r\n * @description 多块合并为引用 / 拆回段落\r\n */\r\n\r\nimport { Editor, Element, Node, Path, Transforms } from 'slate'\r\nimport { DomEditor, IDomEditor, getEditorNodeAtPath, pinEditorScrollDuring } from '@mnykj/wangeditoroptimize-core'\r\n\r\nconst QUOTEABLE = new Set([\r\n 'paragraph',\r\n 'blockquote',\r\n 'header1',\r\n 'header2',\r\n 'header3',\r\n 'header4',\r\n 'header5',\r\n 'header6',\r\n])\r\n\r\nexport function isQuoteableBlockType(type: string): boolean {\r\n return QUOTEABLE.has(type)\r\n}\r\n\r\nfunction cloneInlineNode(node: any): any {\r\n if (node == null || typeof node !== 'object') return { text: '' }\r\n if (typeof node.text === 'string') {\r\n const leaf = { ...node }\r\n delete leaf.children\r\n return leaf\r\n }\r\n const cloned = { ...node }\r\n if (Array.isArray(node.children)) {\r\n cloned.children = node.children.map(cloneInlineNode)\r\n }\r\n return cloned\r\n}\r\n\r\nfunction getBlockInlineChildren(node: Node): any[] {\r\n const kids = Array.isArray((node as any)?.children) ? (node as any).children : []\r\n if (!kids.length) return [{ text: '' }]\r\n return kids.map(cloneInlineNode)\r\n}\r\n\r\nfunction mergeBlocksIntoBlockquoteChildren(blocks: Array<[Node, Path]>): any[] {\r\n const children: any[] = []\r\n for (let i = 0; i < blocks.length; i++) {\r\n if (i > 0) children.push({ text: '\\n' })\r\n children.push(...getBlockInlineChildren(blocks[i][0]))\r\n }\r\n return children.length ? children : [{ text: '' }]\r\n}\r\n\r\nfunction splitInlinesByNewline(inlines: any[]): any[][] {\r\n const parts: any[][] = [[]]\r\n for (const node of inlines) {\r\n if (typeof node.text === 'string' && !node.type && node.text.includes('\\n')) {\r\n const segs = node.text.split('\\n')\r\n segs.forEach((seg, i) => {\r\n if (i > 0) parts.push([])\r\n parts[parts.length - 1].push({ ...node, text: seg })\r\n })\r\n } else {\r\n parts[parts.length - 1].push(node)\r\n }\r\n }\r\n return parts.map(p => (p.length ? p : [{ text: '' }]))\r\n}\r\n\r\n/** 当前选区内可引用的顶层块 */\r\nexport function collectSelectedQuoteableTopBlocks(editor: IDomEditor): Array<[Node, Path]> {\r\n const sel = editor?.selection\r\n if (!sel) return []\r\n const out: Array<[Node, Path]> = []\r\n const seen = new Set<string>()\r\n try {\r\n for (const [node, path] of Editor.nodes(editor, {\r\n at: sel,\r\n match: n => {\r\n if (n == null || typeof n !== 'object') return false\r\n if (typeof editor.isVoid === 'function' && editor.isVoid(n as Element)) return false\r\n return isQuoteableBlockType(DomEditor.getNodeType(n))\r\n },\r\n mode: 'highest',\r\n })) {\r\n if (!Array.isArray(path) || path.length !== 1) continue\r\n const key = String(path[0])\r\n if (seen.has(key)) continue\r\n seen.add(key)\r\n out.push([node, [...path] as Path])\r\n }\r\n } catch (_) {\r\n return []\r\n }\r\n out.sort((a, b) => a[1][0] - b[1][0])\r\n return out\r\n}\r\n\r\nexport function resolveBlocksForMerge(editor: IDomEditor): Array<[Node, Path]> {\r\n const live = collectSelectedQuoteableTopBlocks(editor).filter(\r\n ([node]) => DomEditor.getNodeType(node) !== 'pre'\r\n )\r\n if (live.length > 0) return live\r\n\r\n const cached = (editor as any)?.__mdgchTrustedBlockPaths\r\n if (Array.isArray(cached) && cached.length) {\r\n const out: Array<[Node, Path]> = []\r\n for (const path of cached) {\r\n if (!Array.isArray(path) || !path.length) continue\r\n const node = getEditorNodeAtPath(editor, path)\r\n if (!node || (node as any).type === 'pre') continue\r\n if (!isQuoteableBlockType(DomEditor.getNodeType(node))) continue\r\n out.push([node, [...path] as Path])\r\n }\r\n if (out.length) return out\r\n }\r\n\r\n const sel = editor?.selection\r\n if (sel?.anchor?.path?.length) {\r\n const path: Path = [sel.anchor.path[0]]\r\n const node = getEditorNodeAtPath(editor, path)\r\n if (node && (node as any).type !== 'pre' && isQuoteableBlockType(DomEditor.getNodeType(node))) {\r\n return [[node, path]]\r\n }\r\n }\r\n return []\r\n}\r\n\r\nfunction splitBlockquoteToParagraphs(\r\n editor: IDomEditor,\r\n path: Path,\r\n node: Node,\r\n parts: any[][]\r\n): void {\r\n const idx = path[0]\r\n pinEditorScrollDuring(editor, () => {\r\n Editor.withoutNormalizing(editor, () => {\r\n Transforms.removeNodes(editor, { at: path })\r\n for (let i = 0; i < parts.length; i++) {\r\n Transforms.insertNodes(\r\n editor,\r\n { type: 'paragraph', children: parts[i] } as Element,\r\n { at: [idx + i] }\r\n )\r\n }\r\n try {\r\n editor.select(Editor.end(editor, [idx + parts.length - 1]))\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n })\r\n}\r\n\r\n/** 切换引用:多行合并为一个 blockquote;再点取消 */\r\nexport function toggleBlockquoteMerged(editor: IDomEditor): void {\r\n if (!editor || editor.isDestroyed) return\r\n\r\n const blocks = resolveBlocksForMerge(editor)\r\n if (!blocks.length) {\r\n try {\r\n const inBq = DomEditor.getSelectedNodeByType(editor, 'blockquote')\r\n Transforms.setNodes(\r\n editor,\r\n { type: inBq ? 'paragraph' : 'blockquote' } as any,\r\n { mode: 'highest' }\r\n )\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return\r\n }\r\n\r\n const allQuoted = blocks.every(([n]) => DomEditor.getNodeType(n) === 'blockquote')\r\n if (allQuoted) {\r\n try {\r\n if (blocks.length === 1) {\r\n const [node, path] = blocks[0]\r\n const inlines = getBlockInlineChildren(node)\r\n const parts = splitInlinesByNewline(inlines)\r\n if (parts.length > 1) {\r\n splitBlockquoteToParagraphs(editor, path, node, parts)\r\n return\r\n }\r\n }\r\n Transforms.setNodes(editor, { type: 'paragraph' } as any, { mode: 'highest' })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return\r\n }\r\n\r\n if (blocks.length === 1) {\r\n try {\r\n Transforms.setNodes(editor, { type: 'blockquote' } as any, { mode: 'highest' })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return\r\n }\r\n\r\n const firstIdx = blocks[0][1][0]\r\n const bqNode = {\r\n type: 'blockquote',\r\n children: mergeBlocksIntoBlockquoteChildren(blocks),\r\n }\r\n\r\n try {\r\n pinEditorScrollDuring(editor, () => {\r\n Editor.withoutNormalizing(editor, () => {\r\n for (let i = blocks.length - 1; i >= 0; i--) {\r\n const livePath: Path = [blocks[i][1][0]]\r\n const liveNode = getEditorNodeAtPath(editor, livePath)\r\n if (!liveNode) continue\r\n Transforms.removeNodes(editor, { at: livePath })\r\n }\r\n const insertAt: Path = [Math.min(firstIdx, editor.children.length)]\r\n Transforms.insertNodes(editor, bqNode as Element, { at: insertAt })\r\n try {\r\n editor.select(Editor.end(editor, insertAt))\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n ;(editor as any).__mdgchTrustedBlockPath = [...insertAt]\r\n })\r\n })\r\n } catch (e) {\r\n console.warn('[wangeditor] toggleBlockquoteMerged merge failed', e)\r\n }\r\n}\r\n","/**\r\n * @description 工具栏引用:多行合并为一个引用块\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { QUOTE_SVG } from '../../../constants/icon-svg'\r\nimport { isQuoteableBlockType, toggleBlockquoteMerged } from '../merge'\r\n\r\nclass BlockquoteMergedMenu implements IButtonMenu {\r\n readonly title = t('blockQuote.title')\r\n readonly iconSvg = QUOTE_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return DomEditor.getSelectedNodeByType(editor, 'blockquote') != null\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n try {\r\n const elems = DomEditor.getSelectedElems(editor)\r\n if (elems.some(el => editor.isVoid(el))) return true\r\n return !elems.some(el => isQuoteableBlockType(DomEditor.getNodeType(el)))\r\n } catch (_) {\r\n return true\r\n }\r\n }\r\n\r\n exec(editor: IDomEditor): void {\r\n if (this.isDisabled(editor)) return\r\n toggleBlockquoteMerged(editor)\r\n }\r\n}\r\n\r\nexport default BlockquoteMergedMenu\r\n","/**\r\n * @description blockquote entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderBlockQuoteConf } from './render-elem'\r\nimport { quoteToHtmlConf } from './elem-to-html'\r\nimport { parseHtmlConf } from './parse-elem-html'\r\nimport { blockquoteMenuConf, blockquoteMergedMenuConf } from './menu/index'\r\nimport withBlockquote from './plugin'\r\n\r\nconst blockquote: Partial<IModuleConf> = {\r\n renderElems: [renderBlockQuoteConf],\r\n elemsToHtml: [quoteToHtmlConf],\r\n parseElemsHtml: [parseHtmlConf],\r\n menus: [blockquoteMenuConf, blockquoteMergedMenuConf],\r\n editorPlugin: withBlockquote,\r\n}\r\n\r\nexport default blockquote\r\n","/**\r\n * @description block quote menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport BlockquoteMenu from './BlockquoteMenu'\r\nimport BlockquoteMergedMenu from './BlockquoteMergedMenu'\r\n\r\nexport const blockquoteMenuConf = {\r\n key: 'blockquote',\r\n factory() {\r\n return new BlockquoteMenu()\r\n },\r\n}\r\n\r\n/** yunkee 工具栏:多行合并引用 */\r\nexport const blockquoteMergedMenuConf = {\r\n key: 'blockquoteMerged',\r\n factory() {\r\n return new BlockquoteMergedMenu()\r\n },\r\n}\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Transforms, Node, Point } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction withBlockquote<T extends IDomEditor>(editor: T): T {\r\n const { insertBreak, insertText } = editor\r\n const newEditor = editor\r\n\r\n // 重写 insertBreak - 换行时插入 p\r\n newEditor.insertBreak = () => {\r\n const { selection } = newEditor\r\n if (selection == null) return insertBreak()\r\n\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => DomEditor.checkNodeType(n, 'blockquote'),\r\n universal: true,\r\n })\r\n if (!nodeEntry) return insertBreak()\r\n\r\n const quoteElem = nodeEntry[0]\r\n const quotePath = DomEditor.findPath(editor, quoteElem)\r\n const quoteEndLocation = Editor.end(editor, quotePath)\r\n\r\n if (Point.equals(quoteEndLocation, selection.focus)) {\r\n // 光标位于 blockquote 最后\r\n const str = Node.string(quoteElem)\r\n if (str && str.slice(-1) === '\\n') {\r\n // blockquote 文本最后一个是 \\n\r\n editor.deleteBackward('character') // 删除最后一个 \\n\r\n\r\n // 则插入一个 paragraph\r\n const p = { type: 'paragraph', children: [{ text: '' }] }\r\n Transforms.insertNodes(newEditor, p, { mode: 'highest' })\r\n return\r\n }\r\n }\r\n\r\n // 情况情况,插入换行符\r\n insertText('\\n')\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withBlockquote\r\n","/**\r\n * @description emotion menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor } from 'slate'\r\nimport { IDropPanelMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array, DOMElement } from '../../../utils/dom'\r\nimport { EMOTION_SVG } from '../../../constants/icon-svg'\r\n\r\nclass EmotionMenu implements IDropPanelMenu {\r\n readonly title = t('emotion.title')\r\n readonly iconSvg = EMOTION_SVG\r\n readonly tag = 'button'\r\n readonly showDropPanel = true // 点击 button 时显示 dropPanel\r\n private $content: Dom7Array | null = null\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 点击菜单时,弹出 droPanel 之前,不需要执行其他代码\r\n // 此处空着即可\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 不需要 getValue\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 不需要 active\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n if (type === 'pre') return true // 代码块\r\n if (Editor.isVoid(editor, n)) return true // void node\r\n\r\n return false\r\n },\r\n universal: true,\r\n })\r\n\r\n if (match) return true\r\n return false\r\n }\r\n\r\n getPanelContentElem(editor: IDomEditor): DOMElement {\r\n if (this.$content == null) {\r\n // 第一次渲染\r\n const $content = $('<ul class=\"w-e-panel-content-emotion\"></ul>')\r\n\r\n // 绑定事件(仅第一次绑定,不可重复绑定)\r\n $content.on('click', 'li', (e: Event) => {\r\n const { target } = e\r\n if (target == null) return\r\n e.preventDefault()\r\n\r\n const $li = $(target)\r\n const emotionStr = $li.text()\r\n editor.insertText(emotionStr)\r\n })\r\n\r\n this.$content = $content\r\n }\r\n\r\n const $content = this.$content\r\n if ($content == null) return document.createElement('ul')\r\n $content.empty() // 清空之后再重置内容\r\n\r\n // 获取菜单配置\r\n const colorConf = editor.getMenuConfig('emotion')\r\n const { emotions = [] } = colorConf\r\n // 根据菜单配置生成 panel content\r\n emotions.forEach((emotion: string) => {\r\n const $li = $(`<li>${emotion}</li>`)\r\n $content.append($li)\r\n })\r\n\r\n return $content[0]\r\n }\r\n}\r\n\r\nexport default EmotionMenu\r\n","/**\r\n * @description emotion menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport EmotionMenu from './EmotionMenu'\r\nimport { genConfig } from './config'\r\n\r\nexport const emotionMenuConf = {\r\n key: 'emotion',\r\n factory() {\r\n return new EmotionMenu()\r\n },\r\n\r\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\r\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\r\n config: {\r\n emotions: genConfig(),\r\n },\r\n}\r\n","/**\r\n * @description emotion entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { emotionMenuConf } from './menu/index'\r\n\r\nconst emotion: Partial<IModuleConf> = {\r\n menus: [emotionMenuConf],\r\n}\r\n\r\nexport default emotion\r\n","/**\r\n * @description menu config\r\n * @author wangfupeng\r\n */\r\n\r\nexport function genConfig() {\r\n const emotions =\r\n '😀 😃 😄 😁 😆 😅 😂 🤣 😊 😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 😛 😝 😜 🤓 😎 😏 😒 😞 😔 😟 😕 🙁 😣 😖 😫 😩 😢 😭 😤 😠 😡 😳 😱 😨 🤗 🤔 😶 😑 😬 🙄 😯 😴 😷 🤑 😈 🤡 💩 👻 💀 👀 👣 👐 🙌 👏 🤝 👍 👎 👊 ✊ 🤛 🤜 🤞 ✌️ 🤘 👌 👈 👉 👆 👇 ☝️ ✋ 🤚 🖐 🖖 👋 🤙 💪 🖕 ✍️ 🙏'\r\n return emotions.split(' ')\r\n}\r\n","/**\r\n * @description pre-parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, { DOMElement, getTagName } from '../../utils/dom'\r\n\r\n// V4 font-size 对应关系(V4 使用 <font size=\"1\">xxx</font> 格式)\r\nconst FONT_SIZE_MAP_FOR_V4 = {\r\n '1': '12px',\r\n '2': '14px',\r\n '3': '16px',\r\n '4': '19px',\r\n '5': '24px',\r\n '6': '32px',\r\n '7': '48px',\r\n}\r\n\r\n/**\r\n * pre-prase font ,兼容 V4\r\n * @param fontElem fontElem\r\n */\r\nfunction preParse(fontElem: DOMElement): DOMElement {\r\n const $font = $(fontElem)\r\n const tagName = getTagName($font)\r\n if (tagName !== 'font') return fontElem\r\n\r\n // 处理 size (V4 使用 <font size=\"1\">xxx</font> 格式)\r\n const size = $font.attr('size') || ''\r\n if (size) {\r\n $font.removeAttr('size')\r\n $font.css('font-size', FONT_SIZE_MAP_FOR_V4[size])\r\n }\r\n\r\n // 处理 face (V4 使用 <font face=\"黑体\">xx</font> 格式)\r\n const face = $font.attr('face') || ''\r\n if (face) {\r\n $font.removeAttr('face')\r\n $font.css('font-family', face)\r\n }\r\n\r\n return $font[0]\r\n}\r\n\r\nexport const preParseHtmlConf = {\r\n selector: 'font',\r\n preParseHtml: preParse,\r\n}\r\n","var DESCRIPTORS = require('../internals/descriptors');\nvar FUNCTION_NAME_EXISTS = require('../internals/function-name').EXISTS;\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /function\\b(?:\\s|\\/\\*[\\S\\s]*?\\*\\/|\\/\\/[^\\n\\r]*[\\n\\r]+)*([^\\s(/]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return regExpExec(nameRE, functionToString(this))[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","/**\r\n * @description header menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor } from 'slate'\r\nimport { ISelectMenu, IDomEditor, DomEditor, IOption } from '@mnykj/wangeditoroptimize-core'\r\n\r\nabstract class BaseMenu implements ISelectMenu {\r\n abstract readonly title: string\r\n abstract readonly iconSvg: string\r\n abstract readonly mark: string // 'fontSize'/'fontFamily'\r\n readonly tag = 'select'\r\n readonly width = 80\r\n\r\n abstract getOptions(editor: IDomEditor): IOption[]\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // select menu 会显示 selected value ,用不到 active\r\n return false\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const mark = this.mark\r\n const curMarks = Editor.marks(editor)\r\n // @ts-ignore\r\n if (curMarks && curMarks[mark]) return curMarks[mark]\r\n return ''\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const mark = this.mark\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n if (type === 'pre') return true // 代码块\r\n if (Editor.isVoid(editor, n)) return true // void node\r\n\r\n return false\r\n },\r\n universal: true,\r\n })\r\n\r\n // 匹配到,则禁用\r\n if (match) return true\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n const mark = this.mark\r\n if (value) {\r\n editor.addMark(mark, value)\r\n } else {\r\n editor.removeMark(mark)\r\n }\r\n }\r\n}\r\n\r\nexport default BaseMenu\r\n","/**\r\n * @description font-size menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IDomEditor, IOption, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { FONT_SIZE_SVG } from '../../../constants/icon-svg'\r\n\r\nclass FontSizeMenu extends BaseMenu {\r\n readonly title = t('fontSize.title')\r\n readonly iconSvg = FONT_SIZE_SVG\r\n readonly mark = 'fontSize'\r\n\r\n getOptions(editor: IDomEditor): IOption[] {\r\n const options: IOption[] = []\r\n\r\n // 获取配置,参考 './config.ts'\r\n const { fontSizeList = [] } = editor.getMenuConfig(this.mark)\r\n\r\n // 生成 options\r\n options.push({\r\n text: t('fontSize.default'),\r\n value: '', // this.getValue(editor) 未找到结果时,会返回 '' ,正好对应到这里\r\n })\r\n fontSizeList.forEach((size: string | { name: string; value: string }) => {\r\n if (typeof size === 'string') {\r\n options.push({\r\n text: size,\r\n value: size,\r\n })\r\n } else if (typeof size === 'object') {\r\n const { name, value } = size\r\n options.push({\r\n text: name,\r\n value: value,\r\n })\r\n }\r\n })\r\n\r\n // 设置 selected\r\n const curValue = this.getValue(editor)\r\n options.forEach(opt => {\r\n if (opt.value === curValue) {\r\n opt.selected = true\r\n } else {\r\n delete opt.selected\r\n }\r\n })\r\n\r\n return options\r\n }\r\n}\r\n\r\nexport default FontSizeMenu\r\n","/**\r\n * @description font-family menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IDomEditor, IOption, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { FONT_FAMILY_SVG } from '../../../constants/icon-svg'\r\n\r\nclass FontFamilyMenu extends BaseMenu {\r\n readonly title = t('fontFamily.title')\r\n readonly iconSvg = FONT_FAMILY_SVG\r\n readonly mark = 'fontFamily'\r\n readonly selectPanelWidth = 150\r\n\r\n getOptions(editor: IDomEditor): IOption[] {\r\n const options: IOption[] = []\r\n\r\n // 获取配置,参考 './config.ts'\r\n const { fontFamilyList = [] } = editor.getMenuConfig(this.mark)\r\n\r\n // 生成 options\r\n options.push({\r\n text: t('fontFamily.default'),\r\n value: '', // this.getValue(editor) 未找到结果时,会返回 '' ,正好对应到这里\r\n })\r\n fontFamilyList.forEach((family: string | { name: string; value: string }) => {\r\n if (typeof family === 'string') {\r\n options.push({\r\n text: family,\r\n value: family,\r\n styleForRenderMenuList: { 'font-family': family },\r\n })\r\n } else if (typeof family === 'object') {\r\n const { name, value } = family\r\n options.push({\r\n text: name,\r\n value,\r\n styleForRenderMenuList: { 'font-family': value },\r\n })\r\n }\r\n })\r\n\r\n // 设置 selected\r\n const curValue = this.getValue(editor)\r\n options.forEach(opt => {\r\n if (opt.value === curValue) {\r\n opt.selected = true\r\n } else {\r\n delete opt.selected\r\n }\r\n })\r\n\r\n return options\r\n }\r\n}\r\n\r\nexport default FontFamilyMenu\r\n","/**\r\n * @description font-size font-family menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport FontSizeMenu from './FontSizeMenu'\r\nimport FontFamilyMenu from './FontFamilyMenu'\r\nimport { genFontSizeConfig, getFontFamilyConfig } from './config'\r\n\r\nexport const fontSizeMenuConf = {\r\n key: 'fontSize',\r\n factory() {\r\n return new FontSizeMenu()\r\n },\r\n\r\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\r\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\r\n config: {\r\n fontSizeList: genFontSizeConfig(),\r\n },\r\n}\r\n\r\nexport const fontFamilyMenuConf = {\r\n key: 'fontFamily',\r\n factory() {\r\n return new FontFamilyMenu()\r\n },\r\n config: {\r\n fontFamilyList: getFontFamilyConfig(),\r\n },\r\n}\r\n","/**\r\n * @description font-size font-family\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { preParseHtmlConf } from './pre-parse-html'\r\nimport { parseStyleHtml } from './parse-style-html'\r\nimport { fontSizeMenuConf, fontFamilyMenuConf } from './menu/index'\r\n\r\nconst fontSizeAndFamily: Partial<IModuleConf> = {\r\n renderStyle,\r\n styleToHtml,\r\n preParseHtml: [preParseHtmlConf],\r\n parseStyleHtml,\r\n menus: [fontSizeMenuConf, fontFamilyMenuConf],\r\n}\r\n\r\nexport default fontSizeAndFamily\r\n","/**\r\n * @description render font-size font-family style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { addVnodeStyle } from '../../utils/vdom'\r\nimport { FontSizeAndFamilyText } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node slate elem\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n const { fontSize, fontFamily } = node as FontSizeAndFamilyText\r\n let styleVnode: VNode = vnode\r\n\r\n if (fontSize) {\r\n addVnodeStyle(styleVnode, { fontSize })\r\n }\r\n if (fontFamily) {\r\n addVnodeStyle(styleVnode, { fontFamily })\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description textStyle to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Text, Descendant } from 'slate'\r\nimport $, { getOuterHTML, getTagName, isPlainText } from '../../utils/dom'\r\nimport { FontSizeAndFamilyText } from './custom-types'\r\n\r\n/**\r\n * style to html\r\n * @param textNode slate text node\r\n * @param textHtml text html\r\n * @returns styled html\r\n */\r\nexport function styleToHtml(textNode: Descendant, textHtml: string): string {\r\n if (!Text.isText(textNode)) return textHtml\r\n\r\n const { fontSize, fontFamily } = textNode as FontSizeAndFamilyText\r\n if (!fontSize && !fontFamily) return textHtml\r\n\r\n let $text\r\n\r\n if (isPlainText(textHtml)) {\r\n // textHtml 是纯文本,不是 html tag\r\n $text = $(`<span>${textHtml}</span>`)\r\n } else {\r\n // textHtml 是 html tag\r\n $text = $(textHtml)\r\n const tagName = getTagName($text)\r\n if (tagName !== 'span') {\r\n // 如果不是 span ,则包裹一层,接下来要设置 css\r\n $text = $(`<span>${textHtml}</span>`)\r\n }\r\n }\r\n\r\n if (fontSize) $text.css('font-size', fontSize)\r\n if (fontFamily) $text.css('font-family', fontFamily)\r\n\r\n return getOuterHTML($text)\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { FontSizeAndFamilyText } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nexport function parseStyleHtml(text: DOMElement, node: Descendant, editor: IDomEditor): Descendant {\r\n const $text = $(text)\r\n if (!Text.isText(node)) return node\r\n\r\n const textNode = node as FontSizeAndFamilyText\r\n\r\n // -------- 处理 font-size --------\r\n const { fontSizeList = [] } = editor.getMenuConfig('fontSize')\r\n const fontSize = getStyleValue($text, 'font-size')\r\n\r\n const includesSize =\r\n fontSizeList.find(item => item.value && item.value === fontSize) ||\r\n fontSizeList.includes(fontSize)\r\n\r\n if (fontSize && includesSize) {\r\n textNode.fontSize = fontSize\r\n }\r\n\r\n // -------- 处理 font-family --------\r\n const { fontFamilyList = [] } = editor.getMenuConfig('fontFamily')\r\n // 这里需要替换掉 \", css 设置 font-family,会将有空格的字体使用 \" 包裹\r\n const fontFamily = getStyleValue($text, 'font-family').replace(/\"/g, '')\r\n\r\n // getFontFamilyConfig 配置支持对象形式\r\n const includesFamily =\r\n fontFamilyList.find(item => item.value && item.value === fontFamily) ||\r\n fontFamilyList.includes(fontFamily)\r\n\r\n if (fontFamily && includesFamily) {\r\n textNode.fontFamily = fontFamily\r\n }\r\n\r\n return textNode\r\n}\r\n","/**\r\n * @description font-size font-family config\r\n * @author wangfupeng\r\n */\r\n\r\nexport function genFontSizeConfig() {\r\n const fontSizeList: Array<string | { name: string; value: string }> = [\r\n // 元素支持两种形式:1. 字符串;2. { name: 'xxx', value: 'xxx' }\r\n '12px',\r\n { name: '13px', value: '13px' },\r\n '14px',\r\n '15px',\r\n '16px',\r\n '19px',\r\n { name: '22px', value: '22px' },\r\n '24px',\r\n '29px',\r\n '32px',\r\n '40px',\r\n '48px',\r\n ]\r\n\r\n return fontSizeList\r\n}\r\n\r\nexport function getFontFamilyConfig() {\r\n let fontFamilyList: Array<string | { name: string; value: string }> = [\r\n // 元素支持两种形式:1. 字符串;2. { name: 'xxx', value: 'xxx' }\r\n '黑体',\r\n { name: '仿宋', value: '仿宋' },\r\n '楷体',\r\n '标楷体',\r\n '华文仿宋',\r\n '华文楷体',\r\n { name: '宋体', value: '宋体' },\r\n '微软雅黑',\r\n 'Arial',\r\n 'Tahoma',\r\n 'Verdana',\r\n 'Times New Roman',\r\n 'Courier New',\r\n ]\r\n\r\n return fontFamilyList\r\n}\r\n","/**\r\n * @description pre-parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\n/**\r\n * pre-prase text-indent 兼容 V4 和 V5 早期格式(都使用 padding-left)\r\n * @param elem elem\r\n */\r\nfunction preParse(elem: DOMElement): DOMElement {\r\n const $elem = $(elem)\r\n const paddingLeft = getStyleValue($elem, 'padding-left')\r\n\r\n if (/\\dem/.test(paddingLeft)) {\r\n // 如 '2em' ,V4 格式\r\n $elem.css('text-indent', '2em')\r\n }\r\n\r\n if (/\\dpx/.test(paddingLeft)) {\r\n // px 单位\r\n const num = parseInt(paddingLeft, 10)\r\n if (num % 32 === 0) {\r\n // 如 32px 64px ,V5 早期格式\r\n $elem.css('text-indent', '2em')\r\n }\r\n }\r\n\r\n return $elem[0]\r\n}\r\n\r\nexport const preParseHtmlConf = {\r\n selector: 'p,h1,h2,h3,h4,h5',\r\n preParseHtml: preParse,\r\n}\r\n","/**\r\n * @description indent base menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Node } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nabstract class BaseMenu implements IButtonMenu {\r\n abstract readonly title: string\r\n abstract readonly iconSvg: string\r\n readonly tag = 'button'\r\n\r\n /**\r\n * 获取 node.indent 的值,如 `2em`\r\n * @param editor editor\r\n */\r\n getValue(editor: IDomEditor): string | boolean {\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n // @ts-ignore\r\n match: n => !!n.indent,\r\n universal: true,\r\n })\r\n\r\n if (nodeEntry == null) return ''\r\n const [n] = nodeEntry\r\n // @ts-ignore\r\n return n.indent || ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 不需要 active\r\n return false\r\n }\r\n\r\n /**\r\n * 获取 node 节点\r\n * @param editor editor\r\n */\r\n protected getMatchNode(editor: IDomEditor): Node | null {\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n // 只可用于 p 和 header\r\n if (type === 'paragraph') return true\r\n if (type.startsWith('header')) return true\r\n\r\n return false\r\n },\r\n universal: true,\r\n mode: 'highest', // 匹配最高层级\r\n })\r\n\r\n if (nodeEntry == null) return null\r\n return nodeEntry[0]\r\n }\r\n\r\n abstract isDisabled(editor: IDomEditor): boolean\r\n\r\n abstract exec(editor: IDomEditor, value: string | boolean): void\r\n}\r\n\r\nexport default BaseMenu\r\n","/**\r\n * @description 减少缩进\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { INDENT_LEFT_SVG } from '../../../constants/icon-svg'\r\nimport { IndentElement } from '../custom-types'\r\n\r\nclass DecreaseIndentMenu extends BaseMenu {\r\n readonly title = t('indent.decrease')\r\n readonly iconSvg = INDENT_LEFT_SVG\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n const matchNode = this.getMatchNode(editor)\r\n if (matchNode == null) return true // 未匹配 p header 等,则禁用\r\n\r\n const { indent } = matchNode as IndentElement\r\n if (!indent) {\r\n // 没有 indent ,则禁用\r\n return true\r\n }\r\n\r\n return false // 其他情况,不禁用\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n indent: null,\r\n },\r\n { match: n => Element.isElement(n) }\r\n )\r\n }\r\n}\r\n\r\nexport default DecreaseIndentMenu\r\n","/**\r\n * @description 增加缩进\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element, Editor, Text } from 'slate'\r\nimport { IDomEditor, t, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { INDENT_RIGHT_SVG } from '../../../constants/icon-svg'\r\nimport { IndentElement } from '../custom-types'\r\nimport type { FontSizeAndFamilyText } from '../../font-size-family/custom-types'\r\n\r\nclass IncreaseIndentMenu extends BaseMenu {\r\n readonly title = t('indent.increase')\r\n readonly iconSvg = INDENT_RIGHT_SVG\r\n private DEFAULT_INDENT_VALUE = '2em'\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n const matchNode = this.getMatchNode(editor)\r\n if (matchNode == null) return true // 未匹配 p header 等,则禁用\r\n\r\n const { indent } = matchNode as IndentElement\r\n if (indent) {\r\n // 有 indent ,则禁用\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n private getIndentValue(editor: IDomEditor) {\r\n const matchNode = this.getMatchNode(editor)\r\n\r\n if (!matchNode) return this.DEFAULT_INDENT_VALUE\r\n const textChildren = (matchNode as Element).children.filter(Text.isText)\r\n\r\n const lastTextNode = textChildren[0] as FontSizeAndFamilyText\r\n\r\n if (!lastTextNode || !lastTextNode.fontSize) return this.DEFAULT_INDENT_VALUE\r\n\r\n // 如果段落的第一个 Text 节点 设置了 fontSize 样式,indent 值需要根据 fontSize 进行计算\r\n const fontSize = lastTextNode.fontSize\r\n const value = parseInt(lastTextNode.fontSize)\r\n const unit = fontSize.replace(`${value}`, '')\r\n\r\n return `${value * 2}${unit}`\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n const indent = this.getIndentValue(editor)\r\n\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n indent,\r\n },\r\n {\r\n match: n => Element.isElement(n),\r\n mode: 'highest',\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport default IncreaseIndentMenu\r\n","/**\r\n * @description indent entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { preParseHtmlConf } from './pre-parse-html'\r\nimport { parseStyleHtml } from './parse-style-html'\r\nimport { indentMenuConf, delIndentMenuConf } from './menu/index'\r\n\r\nconst indent: Partial<IModuleConf> = {\r\n renderStyle,\r\n styleToHtml,\r\n preParseHtml: [preParseHtmlConf],\r\n parseStyleHtml,\r\n menus: [indentMenuConf, delIndentMenuConf],\r\n}\r\n\r\nexport default indent\r\n","/**\r\n * @description render indent style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element, Descendant } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { addVnodeStyle } from '../../utils/vdom'\r\nimport { IndentElement } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node slate elem\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n if (!Element.isElement(node)) return vnode\r\n\r\n const { indent } = node as IndentElement // 如 '2em'\r\n let styleVnode: VNode = vnode\r\n\r\n if (indent) {\r\n addVnodeStyle(styleVnode, { textIndent: indent })\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description textStyle to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element, Descendant } from 'slate'\r\nimport $, { getOuterHTML } from '../../utils/dom'\r\nimport { IndentElement } from './custom-types'\r\n\r\nexport function styleToHtml(node: Descendant, elemHtml: string): string {\r\n if (!Element.isElement(node)) return elemHtml\r\n\r\n const { indent } = node as IndentElement // 如 '2em'\r\n if (!indent) return elemHtml\r\n\r\n // 设置样式\r\n const $elem = $(elemHtml)\r\n $elem.css('text-indent', indent)\r\n\r\n // 输出 html\r\n return getOuterHTML($elem)\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Element } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { IndentElement } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nexport function parseStyleHtml(elem: DOMElement, node: Descendant, editor: IDomEditor): Descendant {\r\n const $elem = $(elem)\r\n if (!Element.isElement(node)) return node\r\n\r\n const elemNode = node as IndentElement\r\n\r\n const indent = getStyleValue($elem, 'text-indent')\r\n const indentNumber = parseInt(indent, 10)\r\n if (indent && indentNumber > 0) {\r\n elemNode.indent = indent\r\n }\r\n\r\n return elemNode\r\n}\r\n","/**\r\n * @description indent menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport DecreaseIndentMenu from './DecreaseIndentMenu'\r\nimport IncreaseIndentMenu from './IncreaseIndentMenu'\r\n\r\nexport const indentMenuConf = {\r\n key: 'indent',\r\n factory() {\r\n return new IncreaseIndentMenu()\r\n },\r\n}\r\n\r\nexport const delIndentMenuConf = {\r\n key: 'delIndent',\r\n factory() {\r\n return new DecreaseIndentMenu()\r\n },\r\n}\r\n","/**\r\n * @description justify base menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Node, Element } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nabstract class BaseMenu implements IButtonMenu {\r\n abstract readonly title: string\r\n abstract readonly iconSvg: string\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 不需要 value\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 不需要 active\r\n return false\r\n }\r\n\r\n /**\r\n * 获取 node 节点\r\n * @param editor editor\r\n */\r\n protected getMatchNode(editor: IDomEditor): Node | null {\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n // 只可用于 p blockquote header\r\n if (type === 'paragraph') return true\r\n if (type === 'blockquote') return true\r\n if (type.startsWith('header')) return true\r\n\r\n return false\r\n },\r\n universal: true,\r\n mode: 'highest', // 匹配最高层级\r\n })\r\n\r\n if (nodeEntry == null) return null\r\n return nodeEntry[0]\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const selectedElems = DomEditor.getSelectedElems(editor)\r\n const notMatch = selectedElems.some((elem: Node) => {\r\n if (Editor.isVoid(editor, elem) && Editor.isBlock(editor, elem)) return true\r\n\r\n const { type } = elem as unknown as Element\r\n if (['pre', 'code'].includes(type)) return true\r\n })\r\n if (notMatch) return true\r\n\r\n return false\r\n }\r\n\r\n abstract exec(editor: IDomEditor, value: string | boolean): void\r\n}\r\n\r\nexport default BaseMenu\r\n","/**\r\n * @description justify left menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { JUSTIFY_LEFT_SVG } from '../../../constants/icon-svg'\r\n\r\nclass JustifyLeftMenu extends BaseMenu {\r\n readonly title = t('justify.left')\r\n readonly iconSvg = JUSTIFY_LEFT_SVG\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n textAlign: 'left',\r\n },\r\n { match: n => Element.isElement(n) && !editor.isInline(n) }\r\n )\r\n }\r\n}\r\n\r\nexport default JustifyLeftMenu\r\n","/**\r\n * @description justify right menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { JUSTIFY_RIGHT_SVG } from '../../../constants/icon-svg'\r\n\r\nclass JustifyRightMenu extends BaseMenu {\r\n readonly title = t('justify.right')\r\n readonly iconSvg = JUSTIFY_RIGHT_SVG\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n textAlign: 'right',\r\n },\r\n { match: n => Element.isElement(n) && !editor.isInline(n) }\r\n )\r\n }\r\n}\r\n\r\nexport default JustifyRightMenu\r\n","/**\r\n * @description justify center menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { JUSTIFY_CENTER_SVG } from '../../../constants/icon-svg'\r\n\r\nclass JustifyCenterMenu extends BaseMenu {\r\n readonly title = t('justify.center')\r\n readonly iconSvg = JUSTIFY_CENTER_SVG\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n textAlign: 'center',\r\n },\r\n { match: n => Element.isElement(n) && !editor.isInline(n) } // inline 元素设置text-align 是没作用的\r\n )\r\n }\r\n}\r\n\r\nexport default JustifyCenterMenu\r\n","/**\r\n * @description 两端对齐\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { JUSTIFY_JUSTIFY_SVG } from '../../../constants/icon-svg'\r\n\r\nclass JustifyJustifyMenu extends BaseMenu {\r\n readonly title = t('justify.justify')\r\n readonly iconSvg = JUSTIFY_JUSTIFY_SVG\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n textAlign: 'justify',\r\n },\r\n { match: n => Element.isElement(n) && !editor.isInline(n) }\r\n )\r\n }\r\n}\r\n\r\nexport default JustifyJustifyMenu\r\n","/**\r\n * @description justify module entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { parseStyleHtml } from './parse-style-html'\r\nimport {\r\n justifyLeftMenuConf,\r\n justifyRightMenuConf,\r\n justifyCenterMenuConf,\r\n justifyJustifyMenuConf,\r\n} from './menu/index'\r\n\r\nconst justify: Partial<IModuleConf> = {\r\n renderStyle,\r\n styleToHtml,\r\n parseStyleHtml,\r\n menus: [justifyLeftMenuConf, justifyRightMenuConf, justifyCenterMenuConf, justifyJustifyMenuConf],\r\n}\r\n\r\nexport default justify\r\n","/**\r\n * @description render justify style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Element } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { addVnodeStyle } from '../../utils/vdom'\r\nimport { JustifyElement } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node slate elem\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n if (!Element.isElement(node)) return vnode\r\n\r\n const { textAlign } = node as JustifyElement // 如 'left'/'right'/'center' 等\r\n let styleVnode: VNode = vnode\r\n\r\n if (textAlign) {\r\n addVnodeStyle(styleVnode, { textAlign })\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description textStyle to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element, Descendant } from 'slate'\r\nimport $, { getOuterHTML } from '../../utils/dom'\r\nimport { JustifyElement } from './custom-types'\r\n\r\nexport function styleToHtml(node: Descendant, elemHtml: string): string {\r\n if (!Element.isElement(node)) return elemHtml\r\n\r\n const { textAlign } = node as JustifyElement // 如 'left'/'right'/'center' 等\r\n if (!textAlign) return elemHtml\r\n\r\n // 设置样式\r\n const $elem = $(elemHtml)\r\n $elem.css('text-align', textAlign)\r\n\r\n // 输出 html\r\n const outerHtml = getOuterHTML($elem)\r\n return outerHtml\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Element } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { JustifyElement } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nexport function parseStyleHtml(elem: DOMElement, node: Descendant, editor: IDomEditor): Descendant {\r\n const $elem = $(elem)\r\n if (!Element.isElement(node)) return node\r\n\r\n const elemNode = node as JustifyElement\r\n\r\n const textAlign = getStyleValue($elem, 'text-align')\r\n if (textAlign) {\r\n elemNode.textAlign = textAlign\r\n }\r\n\r\n return elemNode\r\n}\r\n","/**\r\n * @description justify menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport JustifyLeftMenu from './JustifyLeftMenu'\r\nimport JustifyRightMenu from './JustifyRightMenu'\r\nimport JustifyCenterMenu from './JustifyCenterMenu'\r\nimport JustifyJustifyMenu from './JustifyJustifyMenu'\r\n\r\nexport const justifyLeftMenuConf = {\r\n key: 'justifyLeft',\r\n factory() {\r\n return new JustifyLeftMenu()\r\n },\r\n}\r\n\r\nexport const justifyRightMenuConf = {\r\n key: 'justifyRight',\r\n factory() {\r\n return new JustifyRightMenu()\r\n },\r\n}\r\n\r\nexport const justifyCenterMenuConf = {\r\n key: 'justifyCenter',\r\n factory() {\r\n return new JustifyCenterMenu()\r\n },\r\n}\r\n\r\nexport const justifyJustifyMenuConf = {\r\n key: 'justifyJustify',\r\n factory() {\r\n return new JustifyJustifyMenu()\r\n },\r\n}\r\n","/**\r\n * @description header menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Node, Element, Transforms } from 'slate'\r\nimport { ISelectMenu, IDomEditor, DomEditor, IOption, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { LINE_HEIGHT_SVG } from '../../../constants/icon-svg'\r\nimport { LineHeightElement } from '../custom-types'\r\n\r\nclass LineHeightMenu implements ISelectMenu {\r\n readonly title = t('lineHeight.title')\r\n readonly iconSvg = LINE_HEIGHT_SVG\r\n readonly tag = 'select'\r\n readonly width = 80\r\n\r\n getOptions(editor: IDomEditor): IOption[] {\r\n const options: IOption[] = []\r\n\r\n // 获取配置,参考 './config.ts'\r\n const { lineHeightList = [] } = editor.getMenuConfig('lineHeight')\r\n\r\n // 生成 options\r\n options.push({\r\n text: t('lineHeight.default'),\r\n value: '', // this.getValue(editor) 未找到结果时,会返回 '' ,正好对应到这里\r\n })\r\n lineHeightList.forEach((height: string) => {\r\n options.push({\r\n text: height,\r\n value: height,\r\n })\r\n })\r\n\r\n // 设置 selected\r\n const curValue = this.getValue(editor)\r\n options.forEach(opt => {\r\n if (opt.value === curValue) {\r\n opt.selected = true\r\n } else {\r\n delete opt.selected\r\n }\r\n })\r\n\r\n return options\r\n }\r\n\r\n /**\r\n * 获取匹配的 node 节点\r\n * @param editor editor\r\n */\r\n private getMatchNode(editor: IDomEditor): Node | null {\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n // line-height 匹配如下类型的 node\r\n if (type.startsWith('header')) return true\r\n if (['paragraph', 'blockquote', 'list-item'].includes(type)) {\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n universal: true,\r\n mode: 'highest', // 匹配最高层级\r\n })\r\n\r\n if (nodeEntry == null) return null\r\n return nodeEntry[0]\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // select menu 会显示 selected value ,用不到 active\r\n return false\r\n }\r\n\r\n /**\r\n * 获取 node.lineHeight 的值(如 '1' '1.5'),没有则返回 ''\r\n * @param editor editor\r\n */\r\n getValue(editor: IDomEditor): string | boolean {\r\n const node = this.getMatchNode(editor)\r\n if (node == null) return ''\r\n if (!Element.isElement(node)) return ''\r\n\r\n return (node as LineHeightElement).lineHeight || ''\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true // 禁用\r\n\r\n const node = this.getMatchNode(editor)\r\n if (node == null) return true // 未匹配到指定 node ,禁用\r\n\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n lineHeight: value.toString(),\r\n },\r\n { mode: 'highest' }\r\n )\r\n }\r\n}\r\n\r\nexport default LineHeightMenu\r\n","/**\r\n * @description line-height module entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { lineHeightMenuConf } from './menu/index'\r\nimport { parseStyleHtml } from './parse-style-html'\r\n\r\nconst lineHeight: Partial<IModuleConf> = {\r\n renderStyle,\r\n styleToHtml,\r\n parseStyleHtml,\r\n menus: [lineHeightMenuConf],\r\n}\r\n\r\nexport default lineHeight\r\n","/**\r\n * @description render line-height style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element, Descendant } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { addVnodeStyle } from '../../utils/vdom'\r\nimport { LineHeightElement } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node slate elem\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n if (!Element.isElement(node)) return vnode\r\n\r\n const { lineHeight } = node as LineHeightElement // 如 '1' '1.5'\r\n let styleVnode: VNode = vnode\r\n\r\n if (lineHeight) {\r\n addVnodeStyle(styleVnode, { lineHeight })\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description textStyle to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element, Descendant } from 'slate'\r\nimport $, { getOuterHTML } from '../../utils/dom'\r\nimport { LineHeightElement } from './custom-types'\r\n\r\nexport function styleToHtml(node: Descendant, elemHtml: string): string {\r\n if (!Element.isElement(node)) return elemHtml\r\n\r\n const { lineHeight } = node as LineHeightElement // 如 '1' '1.5'\r\n if (!lineHeight) return elemHtml\r\n\r\n // 设置样式\r\n const $elem = $(elemHtml)\r\n $elem.css('line-height', lineHeight)\r\n\r\n // 输出 html\r\n return getOuterHTML($elem)\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Element } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { LineHeightElement } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nexport function parseStyleHtml(elem: DOMElement, node: Descendant, editor: IDomEditor): Descendant {\r\n const $elem = $(elem)\r\n if (!Element.isElement(node)) return node\r\n\r\n const elemNode = node as LineHeightElement\r\n\r\n const { lineHeightList = [] } = editor.getMenuConfig('lineHeight')\r\n const lineHeight = getStyleValue($elem, 'line-height')\r\n if (lineHeight && lineHeightList.includes(lineHeight)) {\r\n elemNode.lineHeight = lineHeight\r\n }\r\n\r\n return elemNode\r\n}\r\n","/**\r\n * @description line-height menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport LineHeightMenu from './LineHeightMenu'\r\nimport { genLineHeightConfig } from './config'\r\n\r\nexport const lineHeightMenuConf = {\r\n key: 'lineHeight',\r\n factory() {\r\n return new LineHeightMenu()\r\n },\r\n\r\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\r\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\r\n config: {\r\n lineHeightList: genLineHeightConfig(),\r\n },\r\n}\r\n","/**\r\n * @description line-height config\r\n * @author wangfupeng\r\n */\r\n\r\nexport function genLineHeightConfig() {\r\n return ['1', '1.15', '1.5', '2', '2.5', '3']\r\n}\r\n","/**\r\n * @description redo menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { REDO_SVG } from '../../../constants/icon-svg'\r\n\r\nclass RedoMenu implements IButtonMenu {\r\n title = t('undo.redo')\r\n iconSvg = REDO_SVG\r\n tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (typeof editor.redo === 'function') {\r\n editor.redo()\r\n }\r\n }\r\n}\r\n\r\nexport default RedoMenu\r\n","/**\r\n * @description undo menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { UNDO_SVG } from '../../../constants/icon-svg'\r\n\r\nclass UndoMenu implements IButtonMenu {\r\n title = t('undo.undo')\r\n iconSvg = UNDO_SVG\r\n tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (typeof editor.undo === 'function') {\r\n editor.undo()\r\n }\r\n }\r\n}\r\n\r\nexport default UndoMenu\r\n","/**\r\n * @description undo redo\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { redoMenuConf, undoMenuConf } from './menu/index'\r\n\r\nconst undoRedo: Partial<IModuleConf> = {\r\n menus: [redoMenuConf, undoMenuConf],\r\n}\r\n\r\nexport default undoRedo\r\n","/**\r\n * @description menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport RedoMenu from './RedoMenu'\r\nimport UndoMenu from './UndoMenu'\r\n\r\nexport const undoMenuConf = {\r\n key: 'undo',\r\n factory() {\r\n return new UndoMenu()\r\n },\r\n}\r\n\r\nexport const redoMenuConf = {\r\n key: 'redo',\r\n factory() {\r\n return new RedoMenu()\r\n },\r\n}\r\n","/**\r\n * @description render divider elem\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement } from 'slate'\r\nimport { h, VNode } from 'snabbdom'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction renderDivider(\r\n elemNode: SlateElement,\r\n children: VNode[] | null,\r\n editor: IDomEditor\r\n): VNode {\r\n const renderStyle: any = {}\r\n\r\n // 是否选中\r\n const selected = DomEditor.isNodeSelected(editor, elemNode)\r\n\r\n const vnode = h(\r\n 'div',\r\n {\r\n props: {\r\n contentEditable: false,\r\n className: 'w-e-textarea-divider',\r\n },\r\n dataset: {\r\n selected: selected ? 'true' : '',\r\n },\r\n style: renderStyle,\r\n on: {\r\n mousedown: event => event.preventDefault(),\r\n },\r\n },\r\n [h('hr')]\r\n )\r\n // 【注意】void node 中,renderElem 不用处理 children 。core 会统一处理。\r\n\r\n return vnode\r\n}\r\n\r\nconst renderDividerConf = {\r\n type: 'divider', // 和 elemNode.type 一致\r\n renderElem: renderDivider,\r\n}\r\n\r\nexport { renderDividerConf }\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\n\r\nfunction dividerToHtml(elem: Element, childrenHtml: string): string {\r\n return `<hr/>`\r\n}\r\n\r\nexport const dividerToHtmlConf = {\r\n type: 'divider',\r\n elemToHtml: dividerToHtml,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport $, { DOMElement } from '../../utils/dom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { DividerElement } from './custom-types'\r\n\r\nfunction parseHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): DividerElement {\r\n return {\r\n type: 'divider',\r\n children: [{ text: '' }], // void node 有一个空白 text\r\n }\r\n}\r\n\r\nexport const parseHtmlConf = {\r\n selector: 'hr:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parseHtml,\r\n}\r\n","/**\r\n * @description insert divider menu\r\n * @author wangfupeng\r\n *\r\n * 空白段原地替换为分割线(不留下方/上方空行);非空段走 highest 插入。\r\n */\r\n\r\nimport { Editor, Transforms } from 'slate'\r\nimport {\r\n IButtonMenu,\r\n IDomEditor,\r\n DomEditor,\r\n t,\r\n getEditorNodeAtPath,\r\n isBlankParagraphNode,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { DIVIDER_SVG } from '../../../constants/icon-svg'\r\nimport { DividerElement } from '../custom-types'\r\n\r\nfunction insertDividerSmart(editor: IDomEditor): void {\r\n const divider: DividerElement = {\r\n type: 'divider',\r\n children: [{ text: '' }],\r\n }\r\n\r\n const { selection } = editor\r\n const topPath =\r\n selection?.anchor?.path?.length != null ? ([selection.anchor.path[0]] as number[]) : null\r\n const topNode = topPath ? getEditorNodeAtPath(editor, topPath) : null\r\n\r\n if (topPath && isBlankParagraphNode(topNode)) {\r\n Editor.withoutNormalizing(editor, () => {\r\n Transforms.removeNodes(editor, { at: topPath })\r\n const insertAt = [Math.min(topPath[0], editor.children.length)] as number[]\r\n Transforms.insertNodes(editor, divider, { at: insertAt })\r\n const nextPath = [insertAt[0] + 1] as number[]\r\n try {\r\n if (getEditorNodeAtPath(editor, nextPath)) {\r\n editor.select(Editor.start(editor, nextPath))\r\n } else {\r\n // 末尾:normalize 会补空段\r\n ;(editor as any).__mdgchTrustedBlockPath = [...insertAt]\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n try {\r\n if (typeof (editor as any).normalize === 'function') (editor as any).normalize()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n try {\r\n const divIdx = (editor as any).__mdgchTrustedBlockPath?.[0]\r\n if (divIdx != null) {\r\n const after = getEditorNodeAtPath(editor, [divIdx + 1])\r\n const atDiv = getEditorNodeAtPath(editor, [divIdx]) as any\r\n if (atDiv?.type === 'divider' && after) {\r\n editor.select(Editor.start(editor, [divIdx + 1]))\r\n }\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return\r\n }\r\n\r\n Transforms.insertNodes(editor, divider, { mode: 'highest' })\r\n}\r\n\r\nclass InsertDividerMenu implements IButtonMenu {\r\n readonly title = t('divider.title')\r\n readonly iconSvg = DIVIDER_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n const { selection } = editor\r\n if (selection == null) return true\r\n\r\n const selectedElems = DomEditor.getSelectedElems(editor)\r\n const hasVoidOrTableOrPre = selectedElems.some(elem => {\r\n if (editor.isVoid(elem)) return true\r\n const type = DomEditor.getNodeType(elem)\r\n if (type === 'table') return true\r\n if (type === 'pre') return true\r\n return false\r\n })\r\n if (hasVoidOrTableOrPre) return true\r\n\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor): void {\r\n if (this.isDisabled(editor)) return\r\n insertDividerSmart(editor)\r\n }\r\n}\r\n\r\nexport default InsertDividerMenu\r\n","/**\r\n * @description 删除分割线(原位留空行)\r\n */\r\n\r\nimport { Node } from 'slate'\r\nimport {\r\n IButtonMenu,\r\n IDomEditor,\r\n DomEditor,\r\n getEditorNodeAtPath,\r\n replaceBlockWithEmptyLine,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { TRASH_SVG } from '../../../constants/icon-svg'\r\n\r\nfunction findSelectedDividerPath(editor: IDomEditor): number[] | null {\r\n try {\r\n const byType = DomEditor.getSelectedNodeByType(editor, 'divider')\r\n if (byType) {\r\n const path = DomEditor.findPath(editor, byType)\r\n if (path?.length) return path as number[]\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n const sel = editor?.selection\r\n if (!sel?.anchor?.path) return null\r\n const anchorPath = sel.anchor.path\r\n for (let len = anchorPath.length; len >= 1; len--) {\r\n const path = anchorPath.slice(0, len) as number[]\r\n const node = getEditorNodeAtPath(editor, path) as any\r\n if (node?.type === 'divider') return path\r\n }\r\n return null\r\n}\r\n\r\nclass RemoveDividerMenu implements IButtonMenu {\r\n readonly title = '删除'\r\n readonly iconSvg = TRASH_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n return findSelectedDividerPath(editor) == null\r\n }\r\n\r\n exec(editor: IDomEditor): void {\r\n if (this.isDisabled(editor)) return\r\n try {\r\n DomEditor.getHoverbar?.(editor as any)?.hideAndClean?.()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n const path = findSelectedDividerPath(editor)\r\n if (!path?.length) return\r\n const node = getEditorNodeAtPath(editor, path)\r\n if (!node || (node as any).type !== 'divider') return\r\n replaceBlockWithEmptyLine(editor, path, node as Node)\r\n }\r\n}\r\n\r\nexport default RemoveDividerMenu\r\n","/**\r\n * @description divider module\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport withDivider from './plugin'\r\nimport { renderDividerConf } from './render-elem'\r\nimport { dividerToHtmlConf } from './elem-to-html'\r\nimport { parseHtmlConf } from './parse-elem-html'\r\nimport { insertDividerMenuConf, dividerAtCursorMenuConf, removeDividerMenuConf } from './menu/index'\r\n\r\nconst image: Partial<IModuleConf> = {\r\n renderElems: [renderDividerConf],\r\n elemsToHtml: [dividerToHtmlConf],\r\n parseElemsHtml: [parseHtmlConf],\r\n menus: [insertDividerMenuConf, dividerAtCursorMenuConf, removeDividerMenuConf],\r\n editorPlugin: withDivider,\r\n}\r\n\r\nexport default image\r\n","/**\r\n * @description divider menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport InsertDividerMenu from './InsertDividerMenu'\r\nimport RemoveDividerMenu from './RemoveDividerMenu'\r\n\r\nexport const insertDividerMenuConf = {\r\n key: 'divider',\r\n factory() {\r\n return new InsertDividerMenu()\r\n },\r\n}\r\n\r\n/** yunkee 工具栏用的 key(与官方 divider 同一实现) */\r\nexport const dividerAtCursorMenuConf = {\r\n key: 'dividerAtCursor',\r\n factory() {\r\n return new InsertDividerMenu()\r\n },\r\n}\r\n\r\nexport const removeDividerMenuConf = {\r\n key: 'removeDivider',\r\n factory() {\r\n return new RemoveDividerMenu()\r\n },\r\n}\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction withDivider<T extends IDomEditor>(editor: T): T {\r\n const { isVoid, normalizeNode } = editor\r\n const newEditor = editor\r\n\r\n // 重写 isVoid\r\n newEditor.isVoid = elem => {\r\n const { type } = elem\r\n\r\n if (type === 'divider') {\r\n return true\r\n }\r\n\r\n return isVoid(elem)\r\n }\r\n\r\n // 重新 normalize\r\n newEditor.normalizeNode = ([node, path]) => {\r\n const type = DomEditor.getNodeType(node)\r\n if (type !== 'divider') {\r\n // 未命中 divider ,执行默认的 normalizeNode\r\n return normalizeNode([node, path])\r\n }\r\n\r\n // -------------- divider 是 editor 最后一个节点,需要后面插入 p --------------\r\n const isLast = DomEditor.isLastNode(newEditor, node)\r\n if (isLast) {\r\n Transforms.insertNodes(newEditor, DomEditor.genEmptyParagraph(), { at: [path[0] + 1] })\r\n }\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withDivider\r\n","/**\r\n * @description 选区块转为代码块 / 取消代码块\r\n */\r\n\r\nimport { Editor, Element, Node, Path, Transforms } from 'slate'\r\nimport {\r\n DomEditor,\r\n IDomEditor,\r\n getEditorNodeAtPath,\r\n pinEditorScrollDuring,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { resolveBlocksForMerge, isQuoteableBlockType } from '../blockquote/merge'\r\n\r\nconst CODEABLE = new Set([\r\n 'pre',\r\n 'paragraph',\r\n 'blockquote',\r\n 'header1',\r\n 'header2',\r\n 'header3',\r\n 'header4',\r\n 'header5',\r\n 'header6',\r\n])\r\n\r\nexport function findSelectedPrePath(editor: IDomEditor): Path | null {\r\n try {\r\n const code = DomEditor.getSelectedNodeByType(editor, 'code')\r\n if (code) {\r\n const parent = DomEditor.getParentNode(editor, code)\r\n if (parent && DomEditor.getNodeType(parent) === 'pre') {\r\n return DomEditor.findPath(editor, parent) as Path\r\n }\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n const sel = editor?.selection\r\n if (!sel?.anchor?.path?.length) return null\r\n const path: Path = [sel.anchor.path[0]]\r\n const node = getEditorNodeAtPath(editor, path)\r\n if (node && (node as any).type === 'pre') return path\r\n return null\r\n}\r\n\r\n/** 取消代码块:拆成段落 */\r\nexport function uncodePreInPlace(editor: IDomEditor, path?: Path | null): boolean {\r\n const prePath = path || findSelectedPrePath(editor)\r\n if (!prePath?.length) return false\r\n const preNode = getEditorNodeAtPath(editor, prePath)\r\n if (!preNode || (preNode as any).type !== 'pre') return false\r\n\r\n let text = ''\r\n try {\r\n text = Node.string(Node.get(editor, [...prePath, 0] as Path))\r\n } catch (_) {\r\n text = Node.string(preNode)\r\n }\r\n const paragraphs = String(text)\r\n .split('\\n')\r\n .map(line => ({ type: 'paragraph', children: [{ text: line }] }))\r\n if (!paragraphs.length) {\r\n paragraphs.push({ type: 'paragraph', children: [{ text: '' }] })\r\n }\r\n\r\n try {\r\n pinEditorScrollDuring(editor, () => {\r\n Transforms.removeNodes(editor, { at: prePath })\r\n let insertAt = Math.min(prePath[0], editor.children.length)\r\n for (const p of paragraphs) {\r\n Transforms.insertNodes(editor, p as Element, { at: [insertAt] })\r\n insertAt += 1\r\n }\r\n try {\r\n const firstPath: Path = [Math.min(prePath[0], editor.children.length - 1)]\r\n editor.select({\r\n anchor: { path: [...firstPath, 0], offset: 0 },\r\n focus: { path: [...firstPath, 0], offset: 0 },\r\n })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n return true\r\n } catch (_) {\r\n return false\r\n }\r\n}\r\n\r\n/** 选区多块合并为一个代码块 */\r\nexport function convertSelectionBlockToCodeBlock(\r\n editor: IDomEditor,\r\n language = ''\r\n): boolean {\r\n if (!editor || editor.isDestroyed) return false\r\n\r\n let blocks = resolveBlocksForMerge(editor)\r\n if (!blocks.length) {\r\n // 允许 header 等:resolveBlocksForMerge 已含 quoteable;再兜底当前顶层\r\n const sel = editor.selection\r\n if (sel?.anchor?.path?.length) {\r\n const path: Path = [sel.anchor.path[0]]\r\n const node = getEditorNodeAtPath(editor, path)\r\n if (node && isQuoteableBlockType(DomEditor.getNodeType(node))) {\r\n blocks = [[node, path]]\r\n }\r\n }\r\n }\r\n if (!blocks.length) return false\r\n\r\n const texts = blocks.map(([node, path]) => {\r\n try {\r\n return Node.string(Node.get(editor, path))\r\n } catch (_) {\r\n return Node.string(node)\r\n }\r\n })\r\n const text = texts.join('\\n')\r\n const firstIdx = blocks[0][1][0]\r\n const pre = {\r\n type: 'pre',\r\n children: [\r\n {\r\n type: 'code',\r\n language: language || '',\r\n children: [{ text }],\r\n },\r\n ],\r\n }\r\n\r\n try {\r\n pinEditorScrollDuring(editor, () => {\r\n Editor.withoutNormalizing(editor, () => {\r\n for (let i = blocks.length - 1; i >= 0; i--) {\r\n const livePath: Path = [blocks[i][1][0]]\r\n const liveNode = getEditorNodeAtPath(editor, livePath)\r\n if (!liveNode || (liveNode as any).type === 'pre') continue\r\n Transforms.removeNodes(editor, { at: livePath })\r\n }\r\n const insertAt: Path = [Math.min(firstIdx, editor.children.length)]\r\n Transforms.insertNodes(editor, pre as Element, { at: insertAt })\r\n try {\r\n editor.select(Editor.start(editor, [...insertAt, 0] as Path))\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n ;(editor as any).__mdgchTrustedBlockPath = [...insertAt]\r\n })\r\n })\r\n return true\r\n } catch (e) {\r\n console.warn('[wangeditor] convertSelectionBlockToCodeBlock failed', e)\r\n return false\r\n }\r\n}\r\n\r\nexport function canToggleCodeBlock(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return false\r\n try {\r\n const elems = DomEditor.getSelectedElems(editor)\r\n if (elems.some(el => editor.isVoid(el))) return false\r\n return elems.some(el => CODEABLE.has(DomEditor.getNodeType(el)))\r\n } catch (_) {\r\n return findSelectedPrePath(editor) != null\r\n }\r\n}\r\n","/**\r\n * @description insert code-block menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { CODE_BLOCK_SVG } from '../../../constants/icon-svg'\r\nimport { CodeElement } from '../custom-types'\r\nimport {\r\n canToggleCodeBlock,\r\n convertSelectionBlockToCodeBlock,\r\n findSelectedPrePath,\r\n uncodePreInPlace,\r\n} from '../code-block-ops'\r\n\r\nclass CodeBlockMenu implements IButtonMenu {\r\n readonly title = t('codeBlock.title')\r\n readonly iconSvg = CODE_BLOCK_SVG\r\n readonly tag = 'button'\r\n\r\n private getSelectCodeElem(editor: IDomEditor): CodeElement | null {\r\n const codeNode = DomEditor.getSelectedNodeByType(editor, 'code')\r\n if (codeNode == null) return null\r\n const preNode = DomEditor.getParentNode(editor, codeNode)\r\n if (preNode == null) return null\r\n if (DomEditor.getNodeType(preNode) !== 'pre') return null\r\n return codeNode as CodeElement\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const elem = this.getSelectCodeElem(editor)\r\n if (elem == null) return ''\r\n return elem.language || ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return !!this.getSelectCodeElem(editor)\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (this.isActive(editor)) return false\r\n return !canToggleCodeBlock(editor)\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isActive(editor)) {\r\n const path = findSelectedPrePath(editor)\r\n uncodePreInPlace(editor, path)\r\n return\r\n }\r\n if (this.isDisabled(editor)) return\r\n convertSelectionBlockToCodeBlock(editor, value != null ? String(value) : '')\r\n }\r\n}\r\n\r\nexport default CodeBlockMenu\r\n","/**\r\n * @description code-block menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport CodeBlockMenu from './CodeBlockMenu'\r\n\r\nexport const codeBlockMenuConf = {\r\n key: 'codeBlock',\r\n factory() {\r\n return new CodeBlockMenu()\r\n },\r\n}\r\n\r\n/** yunkee 工具栏 key */\r\nexport const codeBlockAtCursorMenuConf = {\r\n key: 'codeBlockAtCursor',\r\n factory() {\r\n return new CodeBlockMenu()\r\n },\r\n}\r\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","/**\r\n * @description 代码块 pre 顶栏:语言面板 / 动作\r\n */\r\n\r\nimport { Element, Node, Path, Transforms } from 'slate'\r\nimport {\r\n IDomEditor,\r\n DomEditor,\r\n pinEditorScrollDuring,\r\n insertEmptyLineAboveAtPath,\r\n removeEmptyLineAboveTopLevelBlock,\r\n replaceBlockWithEmptyLine,\r\n resolveElemPath,\r\n getEditorNodeAtPath,\r\n canRemoveEmptyLineAboveBlock,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { CodeElement, PreElement } from './custom-types'\r\n\r\nexport const CODE_BLOCK_LANG_OPTIONS = [\r\n { text: 'Plain Text', value: '' },\r\n { text: 'CSS', value: 'css' },\r\n { text: 'HTML', value: 'html' },\r\n { text: 'XML', value: 'xml' },\r\n { text: 'Javascript', value: 'javascript' },\r\n { text: 'Typescript', value: 'typescript' },\r\n { text: 'JSX', value: 'jsx' },\r\n { text: 'Go', value: 'go' },\r\n { text: 'PHP', value: 'php' },\r\n { text: 'C', value: 'c' },\r\n { text: 'Python', value: 'python' },\r\n { text: 'Java', value: 'java' },\r\n { text: 'C++', value: 'cpp' },\r\n { text: 'C#', value: 'csharp' },\r\n { text: 'Visual Basic', value: 'visual-basic' },\r\n { text: 'SQL', value: 'sql' },\r\n { text: 'Ruby', value: 'ruby' },\r\n { text: 'Swift', value: 'swift' },\r\n { text: 'Bash', value: 'bash' },\r\n { text: 'Lua', value: 'lua' },\r\n { text: 'Groovy', value: 'groovy' },\r\n { text: 'Markdown', value: 'markdown' },\r\n]\r\n\r\nexport const PRE_TOOLBAR_ICON_UNCODE =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M332.288 758.016l-151.552-151.552 151.552-151.552-60.416-60.416-212.992 211.968 212.992 211.968zM691.712 758.016l151.552-151.552-151.552-151.552 60.416-60.416 212.992 211.968-212.992 211.968zM586.752 264.192l-90.112 495.616h-69.632l90.112-495.616z\"></path><path d=\"M198 128l64-64 628 628-64 64z\"></path></svg>'\r\n\r\nexport function getCodeChildFromPre(preElem: Node): CodeElement | null {\r\n const kids = (preElem as PreElement)?.children\r\n if (!Array.isArray(kids) || !kids.length) return null\r\n return (kids.find(c => (c as CodeElement)?.type === 'code') as CodeElement) || null\r\n}\r\n\r\nexport function getCodeLangLabel(value: string): string {\r\n const v = value != null ? String(value) : ''\r\n const hit = CODE_BLOCK_LANG_OPTIONS.find(o => o.value === v)\r\n return hit?.text || v || 'Plain Text'\r\n}\r\n\r\ntype LangPanelState = {\r\n el: HTMLElement | null\r\n anchorEl: HTMLElement | null\r\n onDoc: ((e: MouseEvent) => void) | null\r\n onScroll: ((e: Event) => void) | null\r\n onKey: ((e: KeyboardEvent) => void) | null\r\n}\r\n\r\nlet preLangPanelState: LangPanelState = {\r\n el: null,\r\n anchorEl: null,\r\n onDoc: null,\r\n onScroll: null,\r\n onKey: null,\r\n}\r\n\r\nexport function closePreLangPanel(): void {\r\n const { el, onDoc, onScroll, onKey } = preLangPanelState\r\n if (onDoc) document.removeEventListener('mousedown', onDoc, true)\r\n if (onScroll) window.removeEventListener('scroll', onScroll, true)\r\n if (onKey) document.removeEventListener('keydown', onKey, true)\r\n if (el?.parentNode) el.parentNode.removeChild(el)\r\n preLangPanelState = { el: null, anchorEl: null, onDoc: null, onScroll: null, onKey: null }\r\n}\r\n\r\nexport function openPreLangPanel(\r\n anchorEl: HTMLElement,\r\n editor: IDomEditor,\r\n preElem: Node,\r\n currentLang: string\r\n): void {\r\n if (preLangPanelState.el && preLangPanelState.anchorEl === anchorEl) {\r\n closePreLangPanel()\r\n return\r\n }\r\n closePreLangPanel()\r\n if (!anchorEl || typeof document === 'undefined') return\r\n\r\n const lang = currentLang != null ? String(currentLang) : ''\r\n const panel = document.createElement('div')\r\n panel.className = 'mdg-pre-lang-panel'\r\n panel.setAttribute('contenteditable', 'false')\r\n panel.setAttribute('role', 'listbox')\r\n\r\n const opts = [...CODE_BLOCK_LANG_OPTIONS]\r\n if (lang && !opts.some(o => o.value === lang)) {\r\n opts.push({ text: lang, value: lang })\r\n }\r\n\r\n for (const opt of opts) {\r\n const item = document.createElement('button')\r\n item.type = 'button'\r\n item.className = 'mdg-pre-lang-option' + (opt.value === lang ? ' is-selected' : '')\r\n item.setAttribute('role', 'option')\r\n item.textContent = opt.text\r\n item.addEventListener('mousedown', e => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n })\r\n item.addEventListener('click', e => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n closePreLangPanel()\r\n handlePreToolbarAction(editor, preElem, 'lang', opt.value)\r\n })\r\n panel.appendChild(item)\r\n }\r\n\r\n document.body.appendChild(panel)\r\n\r\n const place = () => {\r\n if (!anchorEl.isConnected) {\r\n closePreLangPanel()\r\n return\r\n }\r\n const rect = anchorEl.getBoundingClientRect()\r\n if (\r\n rect.bottom < 0 ||\r\n rect.top > window.innerHeight ||\r\n rect.right < 0 ||\r\n rect.left > window.innerWidth\r\n ) {\r\n closePreLangPanel()\r\n return\r\n }\r\n const gap = 4\r\n const margin = 8\r\n const maxListH = 240\r\n const spaceBelow = window.innerHeight - rect.bottom - margin\r\n const spaceAbove = rect.top - margin\r\n const openAbove = spaceBelow < 140 && spaceAbove > spaceBelow\r\n const avail = Math.max(96, openAbove ? spaceAbove - gap : spaceBelow - gap)\r\n panel.style.maxHeight = `${Math.min(maxListH, Math.floor(avail))}px`\r\n panel.style.minWidth = `${Math.max(140, Math.round(rect.width))}px`\r\n\r\n const pw = panel.offsetWidth || Math.max(140, rect.width)\r\n const ph = panel.offsetHeight || Math.min(maxListH, avail)\r\n let top = openAbove ? Math.max(margin, rect.top - ph - gap) : rect.bottom + gap\r\n let left = rect.left\r\n if (left + pw > window.innerWidth - margin) {\r\n left = Math.max(margin, window.innerWidth - pw - margin)\r\n }\r\n if (left < margin) left = margin\r\n panel.style.top = `${Math.round(top)}px`\r\n panel.style.left = `${Math.round(left)}px`\r\n }\r\n place()\r\n requestAnimationFrame(place)\r\n\r\n const onDoc = (e: MouseEvent) => {\r\n const t = e.target\r\n if (t instanceof globalThis.Node && (panel.contains(t) || anchorEl.contains(t))) return\r\n closePreLangPanel()\r\n }\r\n const onScroll = (e: Event) => {\r\n const t = e?.target\r\n if (t instanceof globalThis.Node && (t === panel || panel.contains(t))) return\r\n place()\r\n }\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n e.preventDefault()\r\n closePreLangPanel()\r\n }\r\n }\r\n preLangPanelState = { el: panel, anchorEl, onDoc, onScroll, onKey }\r\n requestAnimationFrame(() => {\r\n document.addEventListener('mousedown', onDoc, true)\r\n window.addEventListener('scroll', onScroll, true)\r\n document.addEventListener('keydown', onKey, true)\r\n })\r\n}\r\n\r\n/** 取消代码块:拆成段落 */\r\nfunction uncodePreInPlace(editor: IDomEditor, path: Path, preNode: Node): boolean {\r\n let text = ''\r\n try {\r\n const codePath = [...path, 0] as Path\r\n text = Node.string(Node.get(editor, codePath))\r\n } catch (_) {\r\n text = Node.string(preNode)\r\n }\r\n const paragraphs = String(text)\r\n .split('\\n')\r\n .map(line => ({ type: 'paragraph', children: [{ text: line }] }))\r\n if (!paragraphs.length) {\r\n paragraphs.push({ type: 'paragraph', children: [{ text: '' }] })\r\n }\r\n\r\n try {\r\n pinEditorScrollDuring(editor, () => {\r\n Transforms.removeNodes(editor, { at: path })\r\n let insertAt = Math.min(path[0], editor.children.length)\r\n for (const p of paragraphs) {\r\n Transforms.insertNodes(editor, p as Element, { at: [insertAt] })\r\n insertAt += 1\r\n }\r\n try {\r\n const firstPath: Path = [Math.min(path[0], editor.children.length - 1)]\r\n editor.select({\r\n anchor: { path: [...firstPath, 0], offset: 0 },\r\n focus: { path: [...firstPath, 0], offset: 0 },\r\n })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n return true\r\n } catch (_) {\r\n return false\r\n }\r\n}\r\n\r\nexport function handlePreToolbarAction(\r\n editor: IDomEditor,\r\n elem: Node,\r\n action: string,\r\n value?: string\r\n): void {\r\n if (!editor || editor.isDestroyed || editor.isDisabled()) return\r\n const path = resolveElemPath(editor, elem)\r\n if (!path?.length) return\r\n\r\n if (action === 'enter') {\r\n insertEmptyLineAboveAtPath(editor, path)\r\n return\r\n }\r\n if (action === 'cancel-enter') {\r\n removeEmptyLineAboveTopLevelBlock(editor, path)\r\n return\r\n }\r\n if (action === 'lang') {\r\n const codePath = [...path, 0] as Path\r\n const code = getEditorNodeAtPath(editor, codePath)\r\n if (!code || !Element.isElement(code) || code.type !== 'code') return\r\n pinEditorScrollDuring(editor, () => {\r\n Transforms.setNodes(\r\n editor,\r\n { language: value != null ? String(value) : '' } as any,\r\n { at: codePath }\r\n )\r\n })\r\n return\r\n }\r\n if (action === 'word-wrap') {\r\n const codePath = [...path, 0] as Path\r\n const code = getEditorNodeAtPath(editor, codePath) as CodeElement | null\r\n if (!code || code.type !== 'code') return\r\n pinEditorScrollDuring(editor, () => {\r\n Transforms.setNodes(editor, { wordWrap: !code.wordWrap } as any, { at: codePath })\r\n })\r\n return\r\n }\r\n if (action === 'uncode') {\r\n const node = getEditorNodeAtPath(editor, path) || elem\r\n uncodePreInPlace(editor, path, node)\r\n return\r\n }\r\n if (action === 'remove') {\r\n const node = getEditorNodeAtPath(editor, path) || elem\r\n replaceBlockWithEmptyLine(editor, path, node)\r\n }\r\n}\r\n\r\nexport function getPreToolbarState(editor: IDomEditor, elem: Node) {\r\n let canCancelEnter = false\r\n let lang = ''\r\n let wordWrap = false\r\n try {\r\n const path = DomEditor.findPath(editor, elem)\r\n canCancelEnter = canRemoveEmptyLineAboveBlock(editor, path)\r\n const code = getCodeChildFromPre(elem)\r\n lang = code?.language != null ? String(code.language) : ''\r\n wordWrap = !!code?.wordWrap\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return { canCancelEnter, lang, wordWrap }\r\n}\r\n","/**\r\n * @description render code-block with pre top toolbar\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement, Node } from 'slate'\r\nimport { h, jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { CodeElement } from './custom-types'\r\nimport { makeBlockToolbarButton, makeBlockToolbarSpacer } from '../../utils/block-toolbar'\r\nimport {\r\n BQ_TOOLBAR_ICON_CANCEL_ENTER,\r\n BQ_TOOLBAR_ICON_ENTER,\r\n BQ_TOOLBAR_ICON_REMOVE,\r\n} from '../blockquote/toolbar-icons'\r\nimport {\r\n PRE_TOOLBAR_ICON_UNCODE,\r\n closePreLangPanel,\r\n getCodeLangLabel,\r\n getPreToolbarState,\r\n handlePreToolbarAction,\r\n openPreLangPanel,\r\n} from './pre-toolbar'\r\n\r\nfunction renderCode(elemNode: SlateElement, children: VNode[] | null, editor: IDomEditor): VNode {\r\n const { language = '', wordWrap } = elemNode as CodeElement\r\n const classNames: string[] = []\r\n if (language) classNames.push(`language-${language}`)\r\n if (wordWrap) classNames.push('w-e-code-word-wrap')\r\n const className = classNames.join(' ')\r\n\r\n if (wordWrap) {\r\n return (\r\n <code className={className} data-word-wrap=\"true\">\r\n {children}\r\n </code>\r\n )\r\n }\r\n if (className) {\r\n return <code className={className}>{children}</code>\r\n }\r\n return <code>{children}</code>\r\n}\r\n\r\nfunction makePreLangSelect(currentLang: string): VNode {\r\n const lang = currentLang != null ? String(currentLang) : ''\r\n const label = getCodeLangLabel(lang)\r\n return h(\r\n 'button',\r\n {\r\n attrs: {\r\n type: 'button',\r\n class: 'mdg-pre-lang-btn',\r\n title: '语言',\r\n 'data-pre-action': 'lang-open',\r\n 'data-pre-lang': lang,\r\n 'aria-label': '代码语言',\r\n 'aria-haspopup': 'listbox',\r\n },\r\n props: { contentEditable: false },\r\n on: {\r\n mousedown: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n },\r\n },\r\n },\r\n [\r\n h('span', { attrs: { class: 'mdg-pre-lang-text' } }, [label]),\r\n h('span', { attrs: { class: 'mdg-pre-lang-caret' } }, ['▾']),\r\n ]\r\n )\r\n}\r\n\r\nfunction makePreWordWrapToggle(active: boolean): VNode {\r\n return h(\r\n 'button',\r\n {\r\n attrs: {\r\n type: 'button',\r\n class: active ? 'mdg-pre-wrap-btn is-active' : 'mdg-pre-wrap-btn',\r\n title: '自动换行',\r\n 'data-pre-action': 'word-wrap',\r\n 'aria-label': '自动换行',\r\n 'aria-pressed': active ? 'true' : 'false',\r\n },\r\n props: { contentEditable: false },\r\n on: {\r\n mousedown: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n },\r\n },\r\n },\r\n [\r\n h('span', { attrs: { class: 'mdg-pre-wrap-label' } }, ['自动换行']),\r\n h('span', { attrs: { class: 'mdg-pre-wrap-switch' } }, []),\r\n ]\r\n )\r\n}\r\n\r\nfunction renderPre(elemNode: SlateElement, children: VNode[] | null, editor: IDomEditor): VNode {\r\n const kids = children == null ? [] : Array.isArray(children) ? children : [children]\r\n\r\n if (editor.isDisabled()) {\r\n return h('pre', {}, kids)\r\n }\r\n\r\n const { canCancelEnter, lang, wordWrap } = getPreToolbarState(editor, elemNode)\r\n\r\n const toolbar = h(\r\n 'div',\r\n {\r\n attrs: {\r\n class: 'mdg-pre-toolbar',\r\n contenteditable: 'false',\r\n 'data-mdg-pre-toolbar': '1',\r\n },\r\n props: { contentEditable: false },\r\n on: {\r\n mousedown: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n },\r\n click: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n const t = e.target as Element | null\r\n const btn = t?.closest?.('button[data-pre-action]') as HTMLElement | null\r\n const action = btn?.getAttribute?.('data-pre-action')\r\n if (!btn || !action || btn.classList.contains('is-disabled')) return\r\n if (action === 'lang-open') {\r\n const current = btn.getAttribute('data-pre-lang') || ''\r\n openPreLangPanel(btn, editor, elemNode, current)\r\n return\r\n }\r\n closePreLangPanel()\r\n handlePreToolbarAction(editor, elemNode, action)\r\n },\r\n },\r\n },\r\n [\r\n makeBlockToolbarButton({\r\n action: 'enter',\r\n title: '回车(上方空行)',\r\n iconSvg: BQ_TOOLBAR_ICON_ENTER,\r\n actionAttr: 'data-pre-action',\r\n className: 'mdg-pre-btn',\r\n }),\r\n makeBlockToolbarButton({\r\n action: 'cancel-enter',\r\n title: '取消回车',\r\n iconSvg: BQ_TOOLBAR_ICON_CANCEL_ENTER,\r\n actionAttr: 'data-pre-action',\r\n className: 'mdg-pre-btn',\r\n disabled: !canCancelEnter,\r\n }),\r\n makePreLangSelect(lang),\r\n makeBlockToolbarSpacer('mdg-pre-toolbar-spacer'),\r\n makePreWordWrapToggle(wordWrap),\r\n makeBlockToolbarButton({\r\n action: 'uncode',\r\n title: '取消代码块',\r\n iconSvg: PRE_TOOLBAR_ICON_UNCODE,\r\n actionAttr: 'data-pre-action',\r\n className: 'mdg-pre-btn',\r\n }),\r\n makeBlockToolbarButton({\r\n action: 'remove',\r\n title: '删除',\r\n iconSvg: BQ_TOOLBAR_ICON_REMOVE,\r\n actionAttr: 'data-pre-action',\r\n className: 'mdg-pre-btn',\r\n }),\r\n ]\r\n )\r\n\r\n return h('pre', { attrs: { class: 'mdg-pre-with-toolbar' } }, [toolbar, ...kids])\r\n}\r\n\r\nexport const renderPreConf = {\r\n type: 'pre',\r\n renderElem: renderPre,\r\n}\r\n\r\nexport const renderCodeConf = {\r\n type: 'code',\r\n renderElem: renderCode,\r\n}\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\n\r\nfunction codeToHtml(elem: Element, childrenHtml: string): string {\r\n // 代码高亮 `class=\"language-xxx\"` 在 code-highlight 中实现\r\n return `<code>${childrenHtml}</code>`\r\n}\r\n\r\nexport const codeToHtmlConf = {\r\n type: 'code',\r\n elemToHtml: codeToHtml,\r\n}\r\n\r\nfunction preToHtml(elem: Element, childrenHtml: string): string {\r\n return `<pre>${childrenHtml}</pre>`\r\n}\r\n\r\nexport const preToHtmlConf = {\r\n type: 'pre',\r\n elemToHtml: preToHtml,\r\n}\r\n","/**\r\n * @description code block module\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { codeBlockMenuConf, codeBlockAtCursorMenuConf } from './menu/index'\r\nimport withCodeBlock from './plugin'\r\nimport { renderPreConf, renderCodeConf } from './render-elem'\r\nimport { preParseHtmlConf } from './pre-parse-html'\r\nimport { parseCodeHtmlConf, parsePreHtmlConf } from './parse-elem-html'\r\nimport { codeToHtmlConf, preToHtmlConf } from './elem-to-html'\r\n\r\nconst codeBlockModule: Partial<IModuleConf> = {\r\n menus: [codeBlockMenuConf, codeBlockAtCursorMenuConf],\r\n editorPlugin: withCodeBlock,\r\n renderElems: [renderPreConf, renderCodeConf],\r\n elemsToHtml: [codeToHtmlConf, preToHtmlConf],\r\n preParseHtml: [preParseHtmlConf],\r\n parseElemsHtml: [parseCodeHtmlConf, parsePreHtmlConf],\r\n}\r\n\r\nexport default codeBlockModule\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Transforms, Node as SlateNode, Element as SlateElement } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction getLastTextLineBeforeSelection(codeNode: SlateNode, editor: IDomEditor): string {\r\n const selection = editor.selection\r\n if (selection == null) return ''\r\n\r\n const codeText = SlateNode.string(codeNode)\r\n const anchorOffset = selection.anchor.offset\r\n const textBeforeAnchor = codeText.slice(0, anchorOffset) // 选区前的 text\r\n const arr = textBeforeAnchor.split('\\n') // 选区前的 text ,按换行拆分\r\n const length = arr.length\r\n if (length === 0) return ''\r\n\r\n return arr[length - 1]\r\n}\r\n\r\nfunction withCodeBlock<T extends IDomEditor>(editor: T): T {\r\n const { insertBreak, normalizeNode, insertData, insertNode } = editor\r\n const newEditor = editor\r\n\r\n // 重写换行操作\r\n newEditor.insertBreak = () => {\r\n const codeNode = DomEditor.getSelectedNodeByType(newEditor, 'code')\r\n if (codeNode == null) {\r\n insertBreak() // 执行默认的换行\r\n return\r\n }\r\n\r\n // 回车时,根据当前行的空格,自动插入空格\r\n const lastLineBeforeSelection = getLastTextLineBeforeSelection(codeNode, newEditor)\r\n if (lastLineBeforeSelection) {\r\n const arr = lastLineBeforeSelection.match(/^\\s+/) // 行开始的空格\r\n if (arr != null && arr[0] != null) {\r\n const spaces = arr[0]\r\n newEditor.insertText(`\\n${spaces}`) // 换行后插入空格\r\n return\r\n }\r\n }\r\n\r\n // 普通换行\r\n newEditor.insertText('\\n')\r\n }\r\n\r\n // 重写 normalizeNode\r\n newEditor.normalizeNode = ([node, path]) => {\r\n const type = DomEditor.getNodeType(node)\r\n\r\n // -------------- code node 不能是顶层,否则替换为 p --------------\r\n if (type === 'code' && path.length <= 1) {\r\n Transforms.setNodes(newEditor, { type: 'paragraph' }, { at: path })\r\n }\r\n\r\n if (type === 'pre') {\r\n // -------------- pre 是 editor 最后一个节点,需要后面插入 p --------------\r\n const isLast = DomEditor.isLastNode(newEditor, node)\r\n if (isLast) {\r\n Transforms.insertNodes(newEditor, DomEditor.genEmptyParagraph(), { at: [path[0] + 1] })\r\n }\r\n\r\n // -------------- pre 下面必须是 code --------------\r\n if (DomEditor.getNodeType((node as SlateElement).children[0]) !== 'code') {\r\n Transforms.unwrapNodes(newEditor)\r\n Transforms.setNodes(newEditor, { type: 'paragraph' }, { mode: 'highest' })\r\n }\r\n }\r\n\r\n // 执行默认行为\r\n return normalizeNode([node, path])\r\n }\r\n\r\n // 重写 insertData - 粘贴文本\r\n newEditor.insertData = (data: DataTransfer) => {\r\n const codeNode = DomEditor.getSelectedNodeByType(newEditor, 'code')\r\n if (codeNode == null) {\r\n insertData(data) // 执行默认的 insertData\r\n return\r\n }\r\n\r\n // 获取文本,并插入到代码块\r\n const text = data.getData('text/plain')\r\n Editor.insertText(newEditor, text)\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withCodeBlock\r\n","/**\r\n * @description pre parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, { DOMElement } from '../../utils/dom'\r\nimport { getTagName } from '../../utils/dom'\r\n\r\n/**\r\n * pre-prase <code> ,去掉其中的 <xmp> (兼容 V4)\r\n * @param codeElem codeElem\r\n */\r\nfunction preParse(codeElem: DOMElement): DOMElement {\r\n const $code = $(codeElem)\r\n const tagName = getTagName($code)\r\n if (tagName !== 'code') return codeElem\r\n\r\n const $xmp = $code.find('xmp')\r\n if ($xmp.length === 0) return codeElem // 不是 V4 格式\r\n\r\n const codeText = $xmp.text()\r\n $xmp.remove()\r\n $code.text(codeText)\r\n\r\n return $code[0]\r\n}\r\n\r\nexport const preParseHtmlConf = {\r\n selector: 'pre>code', // 匹配 <pre> 下的 <code>\r\n preParseHtml: preParse,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport $, { DOMElement } from '../../utils/dom'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { PreElement, CodeElement } from './custom-types'\r\n\r\nfunction parseCodeHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): CodeElement {\r\n const $elem = $(elem)\r\n\r\n return {\r\n type: 'code',\r\n language: '', // language 在 code-highlight 中实现\r\n children: [{ text: $elem[0].textContent || '' }],\r\n }\r\n}\r\n\r\nexport const parseCodeHtmlConf = {\r\n selector: 'pre:not([data-w-e-type])>code', // 匹配 <pre> 下的 <code>\r\n parseElemHtml: parseCodeHtml,\r\n}\r\n\r\nfunction parsePreHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): PreElement {\r\n const $elem = $(elem)\r\n\r\n children = children.filter(child => DomEditor.getNodeType(child) === 'code')\r\n if (children.length === 0) {\r\n children = [{ type: 'code', language: '', children: [{ text: $elem[0].textContent || '' }] }]\r\n }\r\n\r\n return {\r\n type: 'pre',\r\n // @ts-ignore\r\n children: children.filter(child => DomEditor.getNodeType(child) === 'code'),\r\n }\r\n}\r\n\r\nexport const parsePreHtmlConf = {\r\n selector: 'pre:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parsePreHtml,\r\n}\r\n","/**\r\n * @description redo menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { FULL_SCREEN_SVG } from '../../../constants/icon-svg'\r\n\r\nclass FullScreen implements IButtonMenu {\r\n title = t('fullScreen.title')\r\n iconSvg = FULL_SCREEN_SVG\r\n tag = 'button'\r\n alwaysEnable = true\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return editor.isFullScreen\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (editor.isFullScreen) {\r\n editor.unFullScreen()\r\n } else {\r\n editor.fullScreen()\r\n }\r\n }\r\n}\r\n\r\nexport default FullScreen\r\n","/**\r\n * @description 全屏\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { fullScreenConf } from './menu/index'\r\n\r\nconst fullScreen: Partial<IModuleConf> = {\r\n menus: [fullScreenConf],\r\n}\r\n\r\nexport default fullScreen\r\n","/**\r\n * @description menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport FullScreen from './FullScreen'\r\n\r\nexport const fullScreenConf = {\r\n key: 'fullScreen',\r\n factory() {\r\n return new FullScreen()\r\n },\r\n}\r\n","/**\r\n * @description enter menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Range, Transforms, Editor } from 'slate'\r\nimport { IButtonMenu, IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { ENTER_SVG } from '../../../constants/icon-svg'\r\n\r\nclass EnterMenu implements IButtonMenu {\r\n title = t('common.enter')\r\n iconSvg = ENTER_SVG\r\n tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n const { selection } = editor\r\n if (selection == null) return true\r\n if (Range.isExpanded(selection)) return true\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n const { selection } = editor\r\n if (selection == null) return\r\n const { anchor } = selection\r\n const { path } = anchor\r\n\r\n // 在当前位置插入空行,当前元素下移\r\n const newElem = { type: 'paragraph', children: [{ text: '' }] }\r\n const newPath = [path[0]]\r\n Transforms.insertNodes(editor, newElem, { at: newPath })\r\n editor.select(Editor.start(editor, newPath))\r\n }\r\n}\r\n\r\nexport default EnterMenu\r\n","/**\r\n * @description common module\r\n * @author wangfupeng\r\n */\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { enterMenuConf } from './menu/index'\r\n\r\nconst commonModule: Partial<IModuleConf> = {\r\n menus: [enterMenuConf],\r\n}\r\n\r\nexport default commonModule\r\n","/**\r\n * @description common menu config\r\n * @author wangfupeng\r\n */\r\n\r\nimport EnterMenu from './EnterMenu'\r\n\r\nexport const enterMenuConf = {\r\n key: 'enter',\r\n factory() {\r\n return new EnterMenu()\r\n },\r\n}\r\n","var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","/**\r\n * @description 格式刷 UI / 共享状态\r\n */\r\n\r\nimport { DomEditor, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nexport const FORMAT_PAINTER_MARK_KEYS = [\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'through',\r\n 'code',\r\n 'sub',\r\n 'sup',\r\n 'color',\r\n 'bgColor',\r\n 'fontSize',\r\n 'fontFamily',\r\n]\r\n\r\nexport const FORMAT_PAINTER_SVG =\r\n '<svg viewBox=\"5.2 4.8 14.2 15.2\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15.1 5.75a.75.75 0 01.75.75v3.3a.75.75 0 01-.75.75H6.9a.75.75 0 01-.75-.75V6.5a.75.75 0 01.75-.75h8.2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"></path><path d=\"M15.326 8.15h3.141v5.636l-8.4 1.085V19\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"></path></svg>'\r\n\r\nexport type FormatPainterAttrs = {\r\n isSelect: boolean\r\n formatStyle: Record<string, any> | null\r\n formatBlockStyle: Record<string, any> | null\r\n sourceSelKey: string\r\n}\r\n\r\n/** 全局单例状态(菜单与 plugin 共用) */\r\nexport const formatPainterAttrs: FormatPainterAttrs = {\r\n isSelect: false,\r\n formatStyle: null,\r\n formatBlockStyle: null,\r\n sourceSelKey: '',\r\n}\r\n\r\nlet formatPainterCursorCss = ''\r\n\r\nfunction getFormatPainterCursorCss(): string {\r\n if (formatPainterCursorCss) return formatPainterCursorCss\r\n if (typeof document === 'undefined') return 'text'\r\n try {\r\n const canvas = document.createElement('canvas')\r\n const dpr = Math.min(2, window.devicePixelRatio || 1)\r\n const size = 22\r\n canvas.width = size * dpr\r\n canvas.height = size * dpr\r\n const ctx = canvas.getContext('2d')\r\n if (!ctx) return 'text'\r\n ctx.scale(dpr, dpr)\r\n ctx.clearRect(0, 0, size, size)\r\n ctx.fillStyle = '#111'\r\n ctx.strokeStyle = '#111'\r\n\r\n const ix = 16.2\r\n const iy0 = 3.6\r\n const iy1 = 18.4\r\n const iMid = (iy0 + iy1) / 2\r\n const brushH = 14\r\n const by0 = iMid - brushH / 2\r\n const bx = 2.2\r\n ctx.fillRect(bx + 3.1, by0, 2.4, 3.4)\r\n ctx.fillRect(bx, by0 + 3.4, 8.6, 3.1)\r\n ctx.lineCap = 'butt'\r\n ctx.lineWidth = 1.35\r\n const bristleTop = by0 + 6.5\r\n ;[\r\n [bx + 0.9, brushH - 0.8],\r\n [bx + 2.5, brushH],\r\n [bx + 4.1, brushH - 0.2],\r\n [bx + 5.7, brushH - 0.6],\r\n [bx + 7.3, brushH - 1.4],\r\n ].forEach(([x, end]) => {\r\n ctx.beginPath()\r\n ctx.moveTo(x, bristleTop)\r\n ctx.lineTo(x, by0 + end)\r\n ctx.stroke()\r\n })\r\n ctx.lineWidth = 1.15\r\n ctx.beginPath()\r\n ctx.moveTo(ix - 2.1, iy0)\r\n ctx.lineTo(ix + 2.1, iy0)\r\n ctx.moveTo(ix, iy0)\r\n ctx.lineTo(ix, iy1)\r\n ctx.moveTo(ix - 2.1, iy1)\r\n ctx.lineTo(ix + 2.1, iy1)\r\n ctx.stroke()\r\n\r\n const url = canvas.toDataURL('image/png')\r\n formatPainterCursorCss = `url(${url}) ${ix} ${iMid}, text`\r\n } catch (_) {\r\n formatPainterCursorCss = 'text'\r\n }\r\n return formatPainterCursorCss\r\n}\r\n\r\nexport function hideFormatPainterHoverbar(editor?: IDomEditor | null) {\r\n try {\r\n const hoverbar = editor ? DomEditor.getHoverbar(editor) : null\r\n if (hoverbar) hoverbar.hideAndClean()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n if (typeof document === 'undefined') return\r\n document.querySelectorAll('.w-e-hover-bar').forEach(el => {\r\n el.classList.remove('w-e-bar-show')\r\n el.classList.add('w-e-bar-hidden')\r\n })\r\n}\r\n\r\nexport function setFormatPainterUiActive(on: boolean, editor?: IDomEditor | null) {\r\n if (typeof document === 'undefined') return\r\n document.documentElement.classList.toggle('w-e-format-painter-on', !!on)\r\n document.documentElement.classList.toggle('mdg-format-painter-on', !!on)\r\n const el = document.querySelector('.editor-content') as HTMLElement | null\r\n if (el) {\r\n el.classList.toggle('w-e-format-painter-on', !!on)\r\n el.classList.toggle('mdg-format-painter-on', !!on)\r\n if (on) {\r\n formatPainterCursorCss = ''\r\n const css = getFormatPainterCursorCss()\r\n el.style.setProperty('--w-e-format-painter-cursor', css)\r\n el.style.setProperty('--mdg-format-painter-cursor', css)\r\n document.documentElement.style.setProperty('--w-e-format-painter-cursor', css)\r\n document.documentElement.style.setProperty('--mdg-format-painter-cursor', css)\r\n hideFormatPainterHoverbar(editor)\r\n ;[0, 50, 220, 400].forEach(ms => {\r\n setTimeout(() => {\r\n if (formatPainterAttrs.isSelect) hideFormatPainterHoverbar(editor)\r\n }, ms)\r\n })\r\n } else {\r\n el.style.removeProperty('--w-e-format-painter-cursor')\r\n el.style.removeProperty('--mdg-format-painter-cursor')\r\n document.documentElement.style.removeProperty('--w-e-format-painter-cursor')\r\n document.documentElement.style.removeProperty('--mdg-format-painter-cursor')\r\n }\r\n } else if (!on) {\r\n document.documentElement.style.removeProperty('--w-e-format-painter-cursor')\r\n document.documentElement.style.removeProperty('--mdg-format-painter-cursor')\r\n }\r\n}\r\n\r\nexport function clearFormatPainterState(editor?: IDomEditor | null) {\r\n formatPainterAttrs.isSelect = false\r\n formatPainterAttrs.formatStyle = null\r\n formatPainterAttrs.formatBlockStyle = null\r\n formatPainterAttrs.sourceSelKey = ''\r\n setFormatPainterUiActive(false, editor)\r\n}\r\n\r\n// 供 yunkee 业务页 Escape / 切文档时清理(editor 包未 re-export)\r\ntry {\r\n if (typeof window !== 'undefined') {\r\n ;(window as any).__wEClearFormatPainter = clearFormatPainterState\r\n }\r\n} catch (_) {\r\n /* ignore */\r\n}\r\n","/**\r\n * @description 格式刷菜单\r\n */\r\n\r\nimport { Editor, Element, Node, Path, Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport {\r\n clearFormatPainterState,\r\n FORMAT_PAINTER_MARK_KEYS,\r\n FORMAT_PAINTER_SVG,\r\n formatPainterAttrs,\r\n hideFormatPainterHoverbar,\r\n setFormatPainterUiActive,\r\n} from '../state'\r\n\r\nfunction selectionKey(sel: any): string {\r\n if (!sel?.anchor?.path || !sel?.focus?.path) return ''\r\n return [\r\n sel.anchor.path.join('.'),\r\n sel.anchor.offset,\r\n sel.focus.path.join('.'),\r\n sel.focus.offset,\r\n ].join('|')\r\n}\r\n\r\nfunction getEditorNodeAtPath(editor: IDomEditor, path: Path): Node | null {\r\n try {\r\n return Node.get(editor, path)\r\n } catch (_) {\r\n return null\r\n }\r\n}\r\n\r\nfunction clearAllTextMarks(editor: IDomEditor) {\r\n if (!editor || editor.isDestroyed || !editor.selection) return\r\n try {\r\n Transforms.unsetNodes(editor, FORMAT_PAINTER_MARK_KEYS as any, {\r\n at: editor.selection,\r\n match: (n: any) => typeof n?.text === 'string',\r\n split: true,\r\n })\r\n } catch (_) {\r\n for (const key of FORMAT_PAINTER_MARK_KEYS) {\r\n try {\r\n editor.removeMark(key)\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass FormatPainterMenu implements IButtonMenu {\r\n readonly title = '格式刷'\r\n readonly tag = 'button'\r\n readonly iconSvg = FORMAT_PAINTER_SVG\r\n\r\n getValue(): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(): boolean {\r\n return !!formatPainterAttrs.isSelect\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (formatPainterAttrs.isSelect) return false\r\n if (editor.selection == null) return true\r\n try {\r\n const text =\r\n typeof editor.getSelectionText === 'function' ? editor.getSelectionText() : ''\r\n return !String(text || '').length\r\n } catch (_) {\r\n return true\r\n }\r\n }\r\n\r\n isSourceBlockType(type: string): boolean {\r\n return (\r\n type === 'blockquote' ||\r\n type === 'header1' ||\r\n type === 'header2' ||\r\n type === 'header3' ||\r\n type === 'header4' ||\r\n type === 'header5' ||\r\n type === 'header6' ||\r\n type === 'list-item' ||\r\n type === 'todo'\r\n )\r\n }\r\n\r\n isTargetBlockType(type: string): boolean {\r\n return type === 'paragraph' || this.isSourceBlockType(type)\r\n }\r\n\r\n getTopLevelBlockPaths(editor: IDomEditor, checkType: (t: string) => boolean): Path[] {\r\n const paths: Path[] = []\r\n try {\r\n const gen = Editor.nodes(editor, {\r\n at: editor.selection || undefined,\r\n match: (n: any) => !!n && typeof n === 'object' && 'type' in n,\r\n })\r\n for (const [node, path] of gen) {\r\n if (path?.length === 1 && checkType((node as Element).type as string)) {\r\n paths.push(path)\r\n }\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return paths\r\n }\r\n\r\n getSelectedBlockStyle(editor: IDomEditor): Record<string, any> | null {\r\n const paths = this.getTopLevelBlockPaths(editor, t => this.isSourceBlockType(t))\r\n const firstPath = paths[0]\r\n if (!firstPath) return null\r\n const node = getEditorNodeAtPath(editor, firstPath) as any\r\n if (!node || !this.isSourceBlockType(node.type)) return null\r\n if (node.type === 'list-item') {\r\n return { type: 'list-item', ordered: !!node.ordered }\r\n }\r\n return { type: node.type }\r\n }\r\n\r\n pickMarks(editor: IDomEditor): Record<string, any> | null {\r\n let marks: any = null\r\n try {\r\n marks = Editor.marks(editor)\r\n } catch (_) {\r\n marks = null\r\n }\r\n if (!marks || typeof marks !== 'object') return null\r\n const out: Record<string, any> = {}\r\n for (const key of FORMAT_PAINTER_MARK_KEYS) {\r\n if (marks[key] != null && marks[key] !== false) out[key] = marks[key]\r\n }\r\n return Object.keys(out).length ? out : null\r\n }\r\n\r\n unsetListAttrs(editor: IDomEditor, path: Path) {\r\n try {\r\n Transforms.unsetNodes(editor, ['ordered', 'level', 'start'] as any, { at: path })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n\r\n applyBlockStyle(editor: IDomEditor, blockStyle: Record<string, any>) {\r\n const blockPaths = this.getTopLevelBlockPaths(editor, t => this.isTargetBlockType(t))\r\n if (!blockPaths.length) return\r\n if (blockStyle.type === 'list-item') {\r\n blockPaths.forEach(path => {\r\n try {\r\n Transforms.setNodes(\r\n editor,\r\n { type: 'list-item', ordered: !!blockStyle.ordered, level: 0 } as any,\r\n { at: path }\r\n )\r\n Transforms.unsetNodes(editor, 'checked' as any, { at: path })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n return\r\n }\r\n if (blockStyle.type === 'todo') {\r\n blockPaths.forEach(path => {\r\n try {\r\n Transforms.setNodes(editor, { type: 'todo', checked: false } as any, { at: path })\r\n this.unsetListAttrs(editor, path)\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n return\r\n }\r\n blockPaths.forEach(path => {\r\n try {\r\n Transforms.setNodes(editor, { type: blockStyle.type } as any, { at: path })\r\n this.unsetListAttrs(editor, path)\r\n Transforms.unsetNodes(editor, 'checked' as any, { at: path })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n }\r\n\r\n applyCopiedFormat(\r\n editor: IDomEditor,\r\n opts: { allowPending?: boolean } = {}\r\n ): 'applied' | 'cancel' | 'pending' {\r\n const { allowPending = false } = opts\r\n if (!formatPainterAttrs.isSelect || !editor || editor.isDestroyed) return 'cancel'\r\n\r\n let text = ''\r\n try {\r\n text = typeof editor.getSelectionText === 'function' ? editor.getSelectionText() : ''\r\n } catch (_) {\r\n text = ''\r\n }\r\n text = String(text || '')\r\n\r\n const sel = editor.selection\r\n const selKey = selectionKey(sel)\r\n const sameAsSource = !!selKey && selKey === formatPainterAttrs.sourceSelKey\r\n\r\n if (!text.length || !sel || sameAsSource) {\r\n if (allowPending) return 'pending'\r\n clearFormatPainterState(editor)\r\n return 'cancel'\r\n }\r\n\r\n try {\r\n if (formatPainterAttrs.formatStyle) {\r\n clearAllTextMarks(editor)\r\n try {\r\n Transforms.setNodes(editor, formatPainterAttrs.formatStyle as any, {\r\n at: editor.selection || sel,\r\n match: (n: any) => typeof n?.text === 'string',\r\n split: true,\r\n })\r\n } catch (_) {\r\n for (const [key, value] of Object.entries(formatPainterAttrs.formatStyle)) {\r\n try {\r\n editor.addMark(key, value)\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n }\r\n }\r\n if (formatPainterAttrs.formatBlockStyle) {\r\n this.applyBlockStyle(editor, formatPainterAttrs.formatBlockStyle)\r\n }\r\n } catch (e) {\r\n console.warn('[wangeditor] formatPainter apply', e)\r\n } finally {\r\n clearFormatPainterState(editor)\r\n }\r\n return 'applied'\r\n }\r\n\r\n exec(editor: IDomEditor) {\r\n if (this.isDisabled(editor)) return\r\n\r\n if (formatPainterAttrs.isSelect) {\r\n clearFormatPainterState(editor)\r\n return\r\n }\r\n\r\n const formatStyle = this.pickMarks(editor)\r\n const formatBlockStyle = this.getSelectedBlockStyle(editor)\r\n if (!formatStyle && !formatBlockStyle) return\r\n\r\n formatPainterAttrs.formatStyle = formatStyle\r\n formatPainterAttrs.formatBlockStyle = formatBlockStyle\r\n formatPainterAttrs.sourceSelKey = selectionKey(editor.selection)\r\n formatPainterAttrs.isSelect = true\r\n setFormatPainterUiActive(true, editor)\r\n hideFormatPainterHoverbar(editor)\r\n }\r\n}\r\n\r\nexport default FormatPainterMenu\r\n","/**\r\n * @description format painter module\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { formatPainterMenuConf } from './menu/index'\r\nimport withFormatPainter from './plugin'\r\n\r\nconst formatPainter: Partial<IModuleConf> = {\r\n menus: [formatPainterMenuConf],\r\n editorPlugin: withFormatPainter,\r\n}\r\n\r\nexport default formatPainter\r\n","/**\r\n * @description basic index\r\n * @author wangfupeng\r\n */\r\n\r\nimport './assets/index.less'\r\n\r\n// 配置多语言\r\nimport './locale/index'\r\n\r\nimport wangEditorParagraphModule from './modules/paragraph'\r\nimport wangEditorTextStyleModule from './modules/text-style'\r\nimport wangEditorHeaderModule from './modules/header'\r\nimport wangEditorColorModule from './modules/color'\r\nimport wangEditorLinkModule from './modules/link'\r\nimport wangEditorImageModule from './modules/image'\r\nimport wangEditorTodoModule from './modules/todo'\r\nimport wangEditorBlockQuoteModule from './modules/blockquote'\r\nimport wangEditorEmotionModule from './modules/emotion'\r\nimport wangEditorFontSizeAndFamilyModule from './modules/font-size-family'\r\nimport wangEditorIndentModule from './modules/indent'\r\nimport wangEditorJustifyModule from './modules/justify'\r\nimport wangEditorLineHeightModule from './modules/line-height'\r\nimport wangEditorUndoRedoModule from './modules/undo-redo'\r\nimport wangEditorDividerModule from './modules/divider'\r\nimport wangEditorCodeBlockModule from './modules/code-block'\r\nimport wangEditorFullScreenModule from './modules/full-screen'\r\nimport wangEditorCommonModule from './modules/common'\r\nimport wangEditorFormatPainterModule from './modules/format-painter'\r\n\r\nexport default [\r\n // text style\r\n wangEditorTextStyleModule,\r\n wangEditorColorModule,\r\n wangEditorFontSizeAndFamilyModule,\r\n wangEditorFormatPainterModule,\r\n\r\n // elem style\r\n wangEditorIndentModule,\r\n wangEditorJustifyModule,\r\n wangEditorLineHeightModule,\r\n\r\n // void node\r\n wangEditorImageModule,\r\n wangEditorDividerModule,\r\n\r\n // inline node\r\n wangEditorEmotionModule,\r\n wangEditorLinkModule,\r\n\r\n // block node —— 【注意】要放在 void-node 和 inline-node 后面!!!\r\n wangEditorCodeBlockModule,\r\n wangEditorBlockQuoteModule,\r\n wangEditorHeaderModule,\r\n wangEditorParagraphModule,\r\n wangEditorTodoModule,\r\n\r\n // command\r\n wangEditorUndoRedoModule,\r\n wangEditorFullScreenModule,\r\n wangEditorCommonModule,\r\n]\r\n\r\n// 输出 image 操作,供 updateImageModule 使用\r\nexport * from './modules/image/helper'\r\nexport { setLinkHoverHrefGetter } from './modules/link/menu/link-form-state'\r\n","/**\r\n * @description format painter menu entry\r\n */\r\n\r\nimport FormatPainterMenu from './FormatPainterMenu'\r\n\r\nexport const formatPainterMenuConf = {\r\n key: 'formatPainter',\r\n factory() {\r\n return new FormatPainterMenu()\r\n },\r\n}\r\n","/**\r\n * @description 格式刷:pointerup 时刷选区\r\n */\r\n\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport FormatPainterMenu from './menu/FormatPainterMenu'\r\nimport { clearFormatPainterState, formatPainterAttrs } from './state'\r\n\r\nfunction withFormatPainter<T extends IDomEditor>(editor: T): T {\r\n if ((editor as any).__wFormatPainterPatched) return editor\r\n ;(editor as any).__wFormatPainterPatched = true\r\n\r\n const painter = new FormatPainterMenu()\r\n let pointerUpBound = false\r\n let applyTimer = 0\r\n let applyScheduled = false\r\n\r\n const unbindPointerUp = () => {\r\n if (!pointerUpBound) return\r\n pointerUpBound = false\r\n document.removeEventListener('pointerup', handlePointerUp, false)\r\n document.removeEventListener('mouseup', handlePointerUp, false)\r\n }\r\n\r\n const scheduleApply = () => {\r\n if (applyScheduled) return\r\n applyScheduled = true\r\n if (applyTimer) {\r\n clearTimeout(applyTimer)\r\n applyTimer = 0\r\n }\r\n let attempt = 0\r\n const run = () => {\r\n applyTimer = 0\r\n if (!formatPainterAttrs.isSelect || editor.isDestroyed) {\r\n applyScheduled = false\r\n return\r\n }\r\n try {\r\n const result = painter.applyCopiedFormat(editor, { allowPending: attempt < 8 })\r\n if (result === 'pending') {\r\n attempt += 1\r\n applyTimer = window.setTimeout(run, attempt < 3 ? 16 : 32)\r\n return\r\n }\r\n } catch (_) {\r\n clearFormatPainterState(editor)\r\n }\r\n applyScheduled = false\r\n }\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(run)\r\n })\r\n }\r\n\r\n const handlePointerUp = (e: Event) => {\r\n unbindPointerUp()\r\n if (!formatPainterAttrs.isSelect || editor.isDestroyed) return\r\n const t = (e as any)?.target\r\n if (\r\n t instanceof Element &&\r\n t.closest?.('button[data-menu-key=\"formatPainter\"]')\r\n ) {\r\n return\r\n }\r\n scheduleApply()\r\n }\r\n\r\n const bindPointerUp = () => {\r\n if (!formatPainterAttrs.isSelect || editor.isDestroyed) return\r\n if (pointerUpBound) return\r\n pointerUpBound = true\r\n document.addEventListener('pointerup', handlePointerUp, false)\r\n document.addEventListener('mouseup', handlePointerUp, false)\r\n }\r\n\r\n const onPointerDown = (e: Event) => {\r\n if (!formatPainterAttrs.isSelect || editor.isDestroyed) return\r\n const t = (e as any)?.target\r\n if (\r\n t instanceof Element &&\r\n t.closest?.('button[data-menu-key=\"formatPainter\"]')\r\n ) {\r\n return\r\n }\r\n bindPointerUp()\r\n }\r\n\r\n const onKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && formatPainterAttrs.isSelect) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n clearFormatPainterState(editor)\r\n }\r\n }\r\n\r\n document.addEventListener('pointerdown', onPointerDown, true)\r\n document.addEventListener('keydown', onKeyDown, true)\r\n\r\n editor.on('destroyed', () => {\r\n if (applyTimer) clearTimeout(applyTimer)\r\n unbindPointerUp()\r\n document.removeEventListener('pointerdown', onPointerDown, true)\r\n document.removeEventListener('keydown', onKeyDown, true)\r\n clearFormatPainterState(editor)\r\n })\r\n\r\n return editor\r\n}\r\n\r\nexport default withFormatPainter\r\n"],"names":["common","ok","delete","enter","blockQuote","title","codeBlock","color","bgColor","default","clear","divider","emotion","fontSize","fontFamily","fullScreen","header","text","image","netImage","edit","viewLink","src","desc","link","indent","decrease","increase","justify","left","right","center","lineHeight","insert","url","unLink","view","textStyle","bold","code","italic","sub","sup","through","underline","undo","redo","todo","renderParagraphConf","type","renderElem","elemNode","children","editor","jsx","pToHtmlConf","elemToHtml","elem","childrenHtml","match","version","check","it","Math","globalThis","window","self","global","this","Function","exec","error","fails","Object","defineProperty","get","call","prototype","bind","apply","arguments","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","V","descriptor","enumerable","bitmap","value","configurable","writable","FunctionPrototype","callBind","fn","toString","uncurryThis","stringSlice","slice","split","classof","TypeError","undefined","IndexedObject","requireObjectCoercible","argument","isCallable","aFunction","namespace","method","length","isPrototypeOf","getBuiltIn","process","Deno","versions","v8","userAgent","getOwnPropertySymbols","symbol","Symbol","String","sham","V8_VERSION","NATIVE_SYMBOL","iterator","USE_SYMBOL_AS_UID","$Symbol","tryToString","P","func","aCallable","key","SHARED","setGlobal","module","store","push","mode","copyright","hasOwnProperty","hasOwn","toObject","id","postfix","random","WellKnownSymbolsStore","shared","symbolFor","createWellKnownSymbol","withoutSetter","uid","name","description","TO_PRIMITIVE","wellKnownSymbol","input","pref","isObject","isSymbol","result","exoticToPrim","getMethod","val","valueOf","ordinaryToPrimitive","toPrimitive","document","EXISTS","createElement","DESCRIPTORS","a","$getOwnPropertyDescriptor","O","toIndexedObject","toPropertyKey","IE8_DOM_DEFINE","createPropertyDescriptor","propertyIsEnumerableModule","f","$defineProperty","Attributes","anObject","object","definePropertyModule","functionToString","inspectSource","set","has","WeakMap","test","keys","OBJECT_ALREADY_INITIALIZED","NATIVE_WEAK_MAP","state","wmget","wmhas","wmset","metadata","facade","STATE","sharedKey","hiddenKeys","createNonEnumerableProperty","enforce","getterFor","TYPE","getDescriptor","PROPER","CONFIGURABLE","CONFIGURABLE_FUNCTION_NAME","require$$0","getInternalState","InternalStateModule","enforceInternalState","TEMPLATE","options","unsafe","simple","noTargetGet","replace","source","join","ceil","floor","number","max","min","index","integer","toIntegerOrInfinity","obj","toLength","createMethod","IS_INCLUDES","$this","el","fromIndex","lengthOfArrayLike","toAbsoluteIndex","includes","indexOf","names","i","enumBugKeys","concat","getOwnPropertyNames","internalObjectKeys","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","target","ownKeys","getOwnPropertyDescriptorModule","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","toLowerCase","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","forced","copyConstructorProperties","redefine","that","Array","isArray","TO_STRING_TAG","CORRECT_ARGUMENTS","classofRaw","TO_STRING_TAG_SUPPORT","tag","tryGet","callee","noop","empty","construct","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","called","SPECIES","originalArray","C","constructor","isConstructor","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","specificCreate","boundFunction","create","arraySpeciesCreate","forEach","map","filter","some","every","find","findIndex","filterReject","METHOD_NAME","array","foo","Boolean","$filter","HAS_SPECIES_SUPPORT","arrayMethodHasSpeciesSupport","proto","activeXDocument","ignoreCase","multiline","dotAll","unicode","sticky","$RegExp","RegExp","UNSUPPORTED_Y","re","lastIndex","MISSED_STICKY","BROKEN_CARET","defineProperties","Properties","props","objectKeys","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","domain","documentCreateElement","style","display","html","appendChild","contentWindow","open","F","re1","re2","flags","groups","nativeReplace","nativeExec","patchedExec","charAt","UPDATES_LAST_INDEX_WRONG","stickyHelpers","NPCG_INCLUDED","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","reCopy","group","str","raw","regexpFlags","charsAdded","strCopy","Reflect","RegExpPrototype","KEY","FORCED","SHAM","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","uncurriedNativeRegExpMethod","methods","nativeMethod","regexp","arg2","forceStringMethod","uncurriedNativeMethod","$exec","regexpExec","done","charCodeAt","CONVERT_TO_STRING","pos","first","second","S","position","size","codeAt","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","matched","captures","namedCaptures","tailPos","m","symbols","ch","capture","n","R","REPLACE","stringIndexOf","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","_","maybeCallNative","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","rx","res","functionalReplace","fullUnicode","results","regExpExec","advanceStringIndex","accumulatedResult","nextSourcePosition","j","replacerArgs","getSubstitution","UNSCOPABLES","ArrayPrototype","$find","FIND","SKIPS_HOLES","addToUnscopables","MATCH","isRegExp","defaultConstructor","aConstructor","propertyKey","start","end","k","fin","createProperty","MAX_UINT32","$push","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SPLIT","nativeSplit","internalSplit","separator","limit","lim","lastLength","output","lastLastIndex","separatorCopy","arraySlice","splitter","speciesConstructor","unicodeMatching","callRegExpExec","p","q","A","e","z","whitespace","whitespaces","ltrim","rtrim","trim","PROPER_FUNCTION_NAME","$trim","isPlainText","$","child","tagName","getOuterHTML","$elem","outerHTML","getTagName","getStyleValue","styleKey","styleArr","attr","styleItemStr","arr","css","append","prepend","addClass","removeClass","hasClass","on","off","focus","removeAttr","hide","show","parents","dataset","remove","width","height","deleteHandler","newEditor","_a","__read","Editor","nodes","nodeEntry","SlateElement","isElement","SlateNode","_b","SlateText","isText","Transforms","setNodes","renderElems","elemsToHtml","parseElemsHtml","selector","parseElemHtml","Text","isInline","editorPlugin","deleteBackward","deleteForward","unit","quot","attribute","p1","genStyledHtml","textNode","styledHtml","isMatch","$text","matches","forcedStringHTMLMethod","createHTML","italics","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","classList","DOMTokenListPrototype","$forEach","arrayMethodIsStrict","handlePrototype","CollectionPrototype","COLLECTION_NAME","DOMIterables","FAILS_ON_PRIMITIVES","nativeKeys","isMenuDisabled","mark","selection","DomEditor","getNodeType","isVoid","universal","removeMarks","removeMark","BaseMenu","curMarks","marks","getValue","marksNeedToRemove","addMark","BOLD_SVG","UNDER_LINE_SVG","ITALIC_SVG","THROUGH_SVG","CODE_SVG","LINK_SVG","PENCIL_SVG","EXTERNAL_SVG","FONT_COLOR_SVG","BG_COLOR_SVG","TRASH_SVG","QUOTE_SVG","FONT_SIZE_SVG","FONT_FAMILY_SVG","INDENT_LEFT_SVG","INDENT_RIGHT_SVG","JUSTIFY_LEFT_SVG","JUSTIFY_RIGHT_SVG","JUSTIFY_CENTER_SVG","JUSTIFY_JUSTIFY_SVG","SUP_SVG","SUB_SVG","_this","t","__extends","ClearStyleMenu","nodeEntries","nodeEntries_1","__values","renderStyle","node","vnode","styleVnode","menus","factory","BoldMenu","UnderlineMenu","ItalicMenu","ThroughMenu","CodeMenu","SubMenu","SupMenu","styleToHtml","textHtml","innerHtml","parseStyleHtml","textElem","genRenderElem","level","Tag","renderHeader1Conf","renderHeader2Conf","renderHeader3Conf","renderHeader4Conf","renderHeader5Conf","TO_STRING","n$ToString","getFlags","regExpFlags","NOT_GENERIC","INCORRECT_NAME","$toString","rf","error1","error2","un$StartsWith","startsWith","CORRECT_IS_REGEXP_LOGIC","correctIsRegExpLogic","MDN_POLYFILL_BUG","getHeaderType","setHeaderType","searchString","notARegExp","search","HeaderSelectMenu","styleForRenderMenuList","curValue","opt","selected","HeaderButtonMenuBase","HeaderSelectMenuConf","Header1ButtonMenuConf","Header1ButtonMenu","Header2ButtonMenuConf","Header2ButtonMenu","Header3ButtonMenuConf","Header3ButtonMenu","Header4ButtonMenuConf","Header4ButtonMenu","Header5ButtonMenuConf","Header5ButtonMenu","genToHtmlFn","genParser","insertBreak","isSelectionAtLineEnd","insertNodes","$assign","assign","b","B","alphabet","chr","T","argumentsLength","addVnodeStyle","newStyle","preParseHtmlConf","preParseHtml","fontElem","$font","$content","$content_1","preventDefault","selectedColor","getMenuConfig","$block","$li","clearText","$clearLi","COLORS","backgroundColor","ColorMenu","config","colors","BgColorMenu","protocolAndDomainRE","everythingAfterProtocol","localhostDomainRE","nonLocalhostDomainRE","$includes","genRandomStr","prefix","nanoid","replaceSymbols","menuKey","checkLink","alert","parse","parseLinkUrl","getSelectedElems","genLinkNode","insertLink","restoreSelection","parsedUrl","Range","isCollapsed","insertText","linkNode","insertFragment","deleteFragment","wrapNodes","collapse","edge","renderLinkConf","href","linkToHtmlConf","parseHtmlConf","genDomID","InsertLinkMenu","textInputId","urlInputId","buttonId","genModalInputElems","textContainerElem","inputTextElem","$inputText","_c","urlContainerElem","inputUrlElem","$inputUrl","buttonContainerElem","genModalButtonElems","hidePanelOrModal","selectionText","setTimeout","EditLinkMenu","getSelectedNodeByType","linkElem","getSelectedLinkElem","Node","checkNodeType","updateLink","UnLink","isDisabled","unwrapNodes","ViewLink","Error","Constructor","un$Slice","anchor","linkFormApplying","setLinkFormApplying","v","__wELinkFormApplying","syncApplyingFlag","hoverHrefGetter","setLinkFormModalOpen","container","querySelector","wasOpen","contains","add","dismissLinkFocusAfterEdit","ed","hideBar","getHoverbar","hideAndClean","isDestroyed","deselect","requestAnimationFrame","normalizeLinkUrl","s","iconSvg","rand","_textInputId","_urlInputId","LinkFormMenu","_isInsertDisabled","sel","offset","path","_root","textInput","urlInput","_savedSelection","select","_restoreEditorSelection","form","_readFormAndValidate","_isCollapsedSelection","selectedText","console","warn","findPath","_editLinkPath","entry","_resolveEditLinkPath","oldText","at","_applyInsert","_applyEdit","_editor","Element","action","closest","getAttribute","_apply","HTMLInputElement","root","className","addEventListener","ev","_onRootClick","_onRootKeydown","JSON","stringify","innerHTML","ViewLinkOpenMenu","u","_hrefFromSelection","__wELinkHoverHref","getLinkHoverHref","InsertLink","EditLink","insertData","normalizeNode","getData","isUrl","removeNodes","RangeError","repeat","count","Infinity","un$ToFixed","toFixed","pow","x","acc","multiply","c","c2","divide","dataToString","genContainerId","findKey","renderResizeContainer","imageVnode","imageInfo","$body","containerId","originalX","originalWith","originalHeight","revers","$container","init","clientX","getContainerElem","$img","onMousemove","onMouseup","hoverbar","throttle","newWidth","newHeight","mousedown","$target","fractionDigits","thisNumberValue","fractDigits","sign","x2","log","renderImageConf","alt","_d","_e","_f","isNodeSelected","imageStyle","renderContainer","imageToHtmlConf","styleStr","decodeURIComponent","checkImage","parseSrc","parseImageSrc","insertImageNode","parsedSrc","move","isInsertImageMenuDisabled","onInsertedImage","updateImageNode","selectedImageNode","nodeProps","imageNode","onUpdatedImage","InsertImage","srcInputId","altInputId","hrefInputId","srcContainerElem","inputSrcElem","$inputSrc","altContainerElem","inputAltElem","$inputAlt","hrefContainerElem","inputHrefElem","$inputHref","insertImage","DeleteImage","EditImage","getImageNode","updateImage","_g","_h","ViewImageLink","ImageWidthBaseClass","getSelectedNode","imageElem","ImageWidth30","ImageWidth50","ImageWidth75","ImageWidth100","renderTodoConf","disabled","checked","margin","contentEditable","marginRight","change","event","newProps","TodoMenu","isBlock","active","isActive","$input","selectedTodo","un$Join","ES3_STRINGS","STRICT_METHOD","makeBlockToolbarButton","opts","actionAttr","cls","h","attrs","class","hook","elm","postpatch","_o","stopPropagation","makeBlockToolbarSpacer","BQ_TOOLBAR_ICON_ENTER","BQ_TOOLBAR_ICON_CANCEL_ENTER","BQ_TOOLBAR_ICON_REMOVE","renderBlockQuoteConf","kids","canCancelEnter","canRemoveEmptyLineAboveBlock","toolbar","contenteditable","click","btn","resolveElemPath","livePath","replaceBlockWithEmptyLine","setBlockToParagraph","removeEmptyLineAboveTopLevelBlock","insertEmptyLineAboveAtPath","handleBlockquoteToolbarAction","quoteToHtmlConf","BlockquoteMenu","newType","variable","wrapConstructor","NativeConstructor","Wrapper","USE_NATIVE","VIRTUAL_PROTOTYPE","nativeProperty","resultProperty","PROTO","nativeSource","targetPrototype","wrap","real","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","arg","len","E","$getOwnPropertyNames","windowNames","getWindowNames","NAME","wrappedWellKnownSymbolModule","TAG","SET_METHOD","HIDDEN","setInternalState","ObjectPrototype","SymbolPrototype","QObject","$stringify","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","getOwnPropertyNamesExternal","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","USE_SETTER","findChild","setSymbolDescriptor","nativeObjectCreate","ObjectPrototypeDescriptor","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","setter","defineWellKnownSymbol","for","keyFor","sym","useSetter","useSimple","FORCED_JSON_STRINGIFY","space","args","$replacer","hint","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","getPrototypeOf","CORRECT_PROTOTYPE_GETTER","ITERATOR","BUGGY_SAFARI_ITERATORS","NEW_ITERATOR_PROTOTYPE","returnThis","setPrototypeOf","CORRECT_SETTER","FunctionName","IteratorsCore","KEYS","VALUES","ENTRIES","Iterable","IteratorConstructor","next","DEFAULT","IS_SET","ENUMERABLE_NEXT","setToStringTag","Iterators","createIteratorConstructor","CurrentIteratorPrototype","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","values","ARRAY_ITERATOR","iterated","kind","Arguments","Collection","parent","STRING_ITERATOR","point","WrappedWellKnownSymbolModule","_typeof","_Symbol","_Symbol$iterator","exports","aPossiblePrototype","__proto__","defineIterator","ArrayBuffer","buffer","isExtensible","$isExtensible","ARRAY_BUFFER_NON_EXTENSIBLE","preventExtensions","REQUIRED","METADATA","setMetadata","objectID","weakData","meta","enable","splice","getOwnPropertyNamesExternalModule","fastKey","getWeakData","onFreeze","FREEZING","innerResult","innerError","Result","stopped","ResultPrototype","iterable","unboundFunction","iterFn","step","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","stop","condition","iteratorClose","callFn","getIteratorMethod","usingIterator","iteratorMethod","getIterator","Prototype","SAFE_CLOSING","iteratorWithReturn","return","from","require$$1","internalStateGetterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","ADDER","anInstance","last","iterate","define","previous","getEntry","removed","redefineAll","prev","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","setSpecies","IS_WEAK","NativePrototype","exported","fixMethod","InternalMetadataModule","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","SKIP_CLOSING","ITERATION_SUPPORT","checkCorrectnessOfIteration","BUGGY_ZERO","$instance","dummy","NewTarget","NewTargetPrototype","inheritIfRequired","collection","collectionStrong","ArrayValues","ArrayIteratorMethods","$map","mergeSort","comparefn","middle","insertionSort","merge","element","llength","rlength","lindex","rindex","firefox","UA","webkit","un$Sort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","V8","FF","IE_OR_EDGE","WEBKIT","fromCharCode","itemsLength","items","arrayLength","internalSort","y","getSortCompare","QUOTEABLE","Set","isQuoteableBlockType","cloneInlineNode","leaf","cloned","getBlockInlineChildren","mergeBlocksIntoBlockquoteChildren","blocks","resolveBlocksForMerge","live","out","seen","__spreadArray","collectSelectedQuoteableTopBlocks","cached","__mdgchTrustedBlockPaths","cached_1","getEditorNodeAtPath","toggleBlockquoteMerged","allQuoted","parts","inlines","seg","inlines_1","splitInlinesByNewline","idx","pinEditorScrollDuring","withoutNormalizing","splitBlockquoteToParagraphs","firstIdx","bqNode","insertAt","__mdgchTrustedBlockPath","inBq","BlockquoteMergedMenu","elems","blockquote","quoteElem","quotePath","quoteEndLocation","Point","equals","EmotionMenu","emotionStr","emotions","FONT_SIZE_MAP_FOR_V4","face","FUNCTION_NAME_EXISTS","nameRE","FontSizeMenu","fontSizeList","name_1","FontFamilyMenu","fontFamilyList","family","fontSizeAndFamily","includesSize","item","includesFamily","paddingLeft","parseInt","DecreaseIndentMenu","matchNode","getMatchNode","IncreaseIndentMenu","DEFAULT_INDENT_VALUE","lastTextNode","getIndentValue","textIndent","elemHtml","indentNumber","JustifyLeftMenu","textAlign","JustifyRightMenu","JustifyCenterMenu","JustifyJustifyMenu","LineHeightMenu","lineHeightList","RedoMenu","UndoMenu","undoRedo","renderDividerConf","dividerToHtmlConf","InsertDividerMenu","topPath","topNode","isBlankParagraphNode","nextPath","divIdx","after","atDiv","insertDividerSmart","findSelectedDividerPath","byType","anchorPath","RemoveDividerMenu","isLastNode","genEmptyParagraph","CODEABLE","findSelectedPrePath","parent_1","getParentNode","CodeBlockMenu","codeNode","preNode","getSelectCodeElem","language","canToggleCodeBlock","prePath","paragraphs","line","paragraphs_1","firstPath","uncodePreInPlace","texts","pre","liveNode","convertSelectionBlockToCodeBlock","codeBlockMenuConf","codeBlockAtCursorMenuConf","nativeMatch","matcher","matchStr","CODE_BLOCK_LANG_OPTIONS","preLangPanelState","anchorEl","onDoc","onScroll","onKey","closePreLangPanel","removeEventListener","parentNode","removeChild","handlePreToolbarAction","codePath","codePath_2","code_1","wordWrap","codePath_1","getPreToolbarState","lang","makePreLangSelect","currentLang","hit","label","o","codeBlockModule","lastLineBeforeSelection","codeText","anchorOffset","getLastTextLineBeforeSelection","spaces","current","preElem","panel","setAttribute","textContent","opts_1","body","place","isConnected","rect","getBoundingClientRect","bottom","top","innerHeight","innerWidth","spaceBelow","spaceAbove","openAbove","avail","maxHeight","minWidth","round","pw","offsetWidth","ph","offsetHeight","openPreLangPanel","classNames","codeElem","$code","$xmp","FullScreen","isFullScreen","unFullScreen","EnterMenu","isExpanded","newPath","commonModule","TO_ENTRIES","$entries","FORMAT_PAINTER_MARK_KEYS","formatPainterAttrs","isSelect","formatStyle","formatBlockStyle","sourceSelKey","formatPainterCursorCss","hideFormatPainterHoverbar","querySelectorAll","setFormatPainterUiActive","documentElement","toggle","canvas","dpr","devicePixelRatio","ctx_1","getContext","scale","clearRect","fillStyle","strokeStyle","ix","iy0","iy1","brushH","by0_1","bx","fillRect","lineCap","lineWidth","bristleTop_1","beginPath","moveTo","lineTo","stroke","toDataURL","getFormatPainterCursorCss","setProperty","ms","removeProperty","clearFormatPainterState","__wEClearFormatPainter","selectionKey","FormatPainterMenu","getSelectionText","isSourceBlockType","checkType","paths","gen","gen_1","getTopLevelBlockPaths","ordered","FORMAT_PAINTER_MARK_KEYS_2","unsetNodes","blockStyle","blockPaths","isTargetBlockType","unsetListAttrs","allowPending","selKey","sameAsSource","FORMAT_PAINTER_MARK_KEYS_1","clearAllTextMarks","applyBlockStyle","pickMarks","getSelectedBlockStyle","wangEditorColorModule","wangEditorFontSizeAndFamilyModule","__wFormatPainterPatched","painter","pointerUpBound","applyTimer","applyScheduled","unbindPointerUp","handlePointerUp","clearTimeout","attempt","run","applyCopiedFormat","scheduleApply","onPointerDown","onKeyDown","wangEditorJustifyModule","wangEditorLineHeightModule","wangEditorDividerModule","wangEditorLinkModule","wangEditorBlockQuoteModule","wangEditorHeaderModule","wangEditorParagraphModule","wangEditorTodoModule","wangEditorFullScreenModule","wangEditorCommonModule"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/locale/index.ts","../src/locale/en.ts","../src/locale/zh-CN.ts","../src/modules/paragraph/render-elem.tsx","../src/modules/paragraph/elem-to-html.ts","../../../node_modules/core-js/internals/global.js","../../../node_modules/core-js/internals/engine-v8-version.js","../../../node_modules/core-js/internals/fails.js","../../../node_modules/core-js/internals/descriptors.js","../../../node_modules/core-js/internals/function-call.js","../../../node_modules/core-js/internals/object-property-is-enumerable.js","../../../node_modules/core-js/internals/create-property-descriptor.js","../../../node_modules/core-js/internals/function-uncurry-this.js","../../../node_modules/core-js/internals/classof-raw.js","../../../node_modules/core-js/internals/indexed-object.js","../../../node_modules/core-js/internals/require-object-coercible.js","../../../node_modules/core-js/internals/to-indexed-object.js","../../../node_modules/core-js/internals/is-callable.js","../../../node_modules/core-js/internals/is-object.js","../../../node_modules/core-js/internals/get-built-in.js","../../../node_modules/core-js/internals/object-is-prototype-of.js","../../../node_modules/core-js/internals/engine-user-agent.js","../../../node_modules/core-js/internals/native-symbol.js","../../../node_modules/core-js/internals/use-symbol-as-uid.js","../../../node_modules/core-js/internals/is-symbol.js","../../../node_modules/core-js/internals/try-to-string.js","../../../node_modules/core-js/internals/a-callable.js","../../../node_modules/core-js/internals/get-method.js","../../../node_modules/core-js/internals/ordinary-to-primitive.js","../../../node_modules/core-js/internals/set-global.js","../../../node_modules/core-js/internals/shared-store.js","../../../node_modules/core-js/internals/shared.js","../../../node_modules/core-js/internals/to-object.js","../../../node_modules/core-js/internals/has-own-property.js","../../../node_modules/core-js/internals/uid.js","../../../node_modules/core-js/internals/well-known-symbol.js","../../../node_modules/core-js/internals/to-primitive.js","../../../node_modules/core-js/internals/to-property-key.js","../../../node_modules/core-js/internals/document-create-element.js","../../../node_modules/core-js/internals/ie8-dom-define.js","../../../node_modules/core-js/internals/object-get-own-property-descriptor.js","../../../node_modules/core-js/internals/an-object.js","../../../node_modules/core-js/internals/object-define-property.js","../../../node_modules/core-js/internals/create-non-enumerable-property.js","../../../node_modules/core-js/internals/inspect-source.js","../../../node_modules/core-js/internals/internal-state.js","../../../node_modules/core-js/internals/native-weak-map.js","../../../node_modules/core-js/internals/shared-key.js","../../../node_modules/core-js/internals/hidden-keys.js","../../../node_modules/core-js/internals/function-name.js","../../../node_modules/core-js/internals/redefine.js","../../../node_modules/core-js/internals/to-integer-or-infinity.js","../../../node_modules/core-js/internals/to-absolute-index.js","../../../node_modules/core-js/internals/to-length.js","../../../node_modules/core-js/internals/length-of-array-like.js","../../../node_modules/core-js/internals/array-includes.js","../../../node_modules/core-js/internals/object-keys-internal.js","../../../node_modules/core-js/internals/enum-bug-keys.js","../../../node_modules/core-js/internals/object-get-own-property-names.js","../../../node_modules/core-js/internals/object-get-own-property-symbols.js","../../../node_modules/core-js/internals/own-keys.js","../../../node_modules/core-js/internals/copy-constructor-properties.js","../../../node_modules/core-js/internals/is-forced.js","../../../node_modules/core-js/internals/export.js","../../../node_modules/core-js/internals/function-bind-context.js","../../../node_modules/core-js/internals/is-array.js","../../../node_modules/core-js/internals/to-string-tag-support.js","../../../node_modules/core-js/internals/classof.js","../../../node_modules/core-js/internals/is-constructor.js","../../../node_modules/core-js/internals/array-species-constructor.js","../../../node_modules/core-js/internals/array-species-create.js","../../../node_modules/core-js/internals/array-iteration.js","../../../node_modules/core-js/internals/array-method-has-species-support.js","../../../node_modules/core-js/modules/es.array.filter.js","../../../node_modules/core-js/internals/object-to-string.js","../../../node_modules/core-js/modules/es.object.to-string.js","../../../node_modules/core-js/internals/to-string.js","../../../node_modules/core-js/internals/object-create.js","../../../node_modules/core-js/internals/regexp-flags.js","../../../node_modules/core-js/internals/regexp-sticky-helpers.js","../../../node_modules/core-js/internals/object-keys.js","../../../node_modules/core-js/internals/object-define-properties.js","../../../node_modules/core-js/internals/html.js","../../../node_modules/core-js/internals/regexp-exec.js","../../../node_modules/core-js/internals/regexp-unsupported-dot-all.js","../../../node_modules/core-js/internals/regexp-unsupported-ncg.js","../../../node_modules/core-js/modules/es.regexp.exec.js","../../../node_modules/core-js/internals/function-apply.js","../../../node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","../../../node_modules/core-js/internals/string-multibyte.js","../../../node_modules/core-js/internals/advance-string-index.js","../../../node_modules/core-js/internals/get-substitution.js","../../../node_modules/core-js/internals/regexp-exec-abstract.js","../../../node_modules/core-js/modules/es.string.replace.js","../../../node_modules/core-js/internals/add-to-unscopables.js","../../../node_modules/core-js/modules/es.array.find.js","../../../node_modules/core-js/internals/is-regexp.js","../../../node_modules/core-js/internals/a-constructor.js","../../../node_modules/core-js/internals/species-constructor.js","../../../node_modules/core-js/internals/create-property.js","../../../node_modules/core-js/internals/array-slice-simple.js","../../../node_modules/core-js/modules/es.string.split.js","../../../node_modules/core-js/internals/whitespaces.js","../../../node_modules/core-js/internals/string-trim-forced.js","../../../node_modules/core-js/internals/string-trim.js","../../../node_modules/core-js/modules/es.string.trim.js","../src/utils/dom.ts","../../../node_modules/core-js/modules/es.global-this.js","../src/modules/paragraph/parse-elem-html.ts","../src/modules/paragraph/plugin.ts","../src/modules/paragraph/index.ts","../../../node_modules/core-js/internals/create-html.js","../../../node_modules/core-js/internals/string-html-forced.js","../src/modules/text-style/style-to-html.ts","../src/modules/text-style/parse-style-html.ts","../../../node_modules/core-js/modules/es.string.bold.js","../../../node_modules/core-js/modules/es.string.italics.js","../../../node_modules/core-js/modules/es.string.sub.js","../../../node_modules/core-js/modules/es.string.sup.js","../../../node_modules/core-js/internals/dom-iterables.js","../../../node_modules/core-js/internals/dom-token-list-prototype.js","../../../node_modules/core-js/internals/array-method-is-strict.js","../../../node_modules/core-js/internals/array-for-each.js","../../../node_modules/core-js/modules/web.dom-collections.for-each.js","../../../node_modules/core-js/modules/es.object.keys.js","../src/modules/text-style/helper.ts","../src/modules/text-style/menu/BaseMenu.ts","../src/constants/icon-svg.ts","../src/modules/text-style/menu/BoldMenu.ts","../src/modules/text-style/menu/CodeMenu.ts","../src/modules/text-style/menu/ItalicMenu.ts","../src/modules/text-style/menu/ThroughMenu.ts","../src/modules/text-style/menu/UnderlineMenu.ts","../src/modules/text-style/menu/SubMenu.ts","../src/modules/text-style/menu/SupMenu.ts","../src/modules/text-style/menu/ClearStyleMenu.ts","../src/modules/text-style/index.ts","../src/modules/text-style/render-style.tsx","../src/modules/text-style/menu/index.ts","../src/modules/header/render-elem.tsx","../../../node_modules/core-js/modules/es.regexp.to-string.js","../../../node_modules/core-js/internals/not-a-regexp.js","../../../node_modules/core-js/modules/es.string.starts-with.js","../../../node_modules/core-js/internals/correct-is-regexp-logic.js","../src/modules/header/helper.ts","../src/modules/header/menu/HeaderSelectMenu.ts","../src/modules/header/menu/HeaderButtonMenuBase.ts","../src/modules/header/menu/Header1ButtonMenu.ts","../src/modules/header/menu/Header2ButtonMenu.ts","../src/modules/header/menu/Header3ButtonMenu.ts","../src/modules/header/menu/Header4ButtonMenu.ts","../src/modules/header/menu/Header5ButtonMenu.ts","../src/modules/header/menu/index.ts","../src/modules/header/elem-to-html.ts","../src/modules/header/parse-elem-html.ts","../src/modules/header/index.ts","../src/modules/header/plugin.ts","../../../node_modules/core-js/internals/object-assign.js","../src/utils/vdom.ts","../../../node_modules/core-js/modules/es.object.assign.js","../src/modules/color/pre-parse-html.ts","../src/modules/color/menu/BaseMenu.ts","../src/modules/color/menu/ColorMenu.ts","../src/modules/color/menu/BgColorMenu.ts","../src/modules/color/menu/config.ts","../src/modules/color/menu/index.ts","../src/modules/color/index.ts","../src/modules/color/render-style.tsx","../src/modules/color/style-to-html.ts","../src/modules/color/parse-style-html.ts","../../../node_modules/core-js/modules/es.string.anchor.js","../../../node_modules/is-url/index.js","../../../node_modules/core-js/modules/es.array.includes.js","../src/utils/util.ts","../src/modules/link/helper.ts","../src/modules/link/render-elem.tsx","../src/modules/link/elem-to-html.ts","../src/modules/link/parse-elem-html.ts","../src/modules/link/menu/UnLink.ts","../src/modules/link/menu/ViewLink.ts","../../../node_modules/core-js/internals/array-slice.js","../../../node_modules/core-js/modules/es.array.slice.js","../src/modules/link/menu/link-form-state.ts","../src/modules/link/menu/LinkFormMenu.ts","../src/modules/link/menu/ViewLinkOpenMenu.ts","../src/modules/link/menu/index.ts","../src/modules/link/menu/config.ts","../src/modules/link/index.ts","../src/modules/link/plugin.ts","../../../node_modules/core-js/internals/this-number-value.js","../../../node_modules/core-js/internals/string-repeat.js","../../../node_modules/core-js/modules/es.number.to-fixed.js","../src/modules/image/render-elem.tsx","../src/modules/image/elem-to-html.ts","../src/modules/image/parse-elem-html.ts","../src/modules/image/helper.ts","../src/modules/image/menu/InsertImage.ts","../src/modules/image/menu/DeleteImage.ts","../src/modules/image/menu/EditImage.ts","../src/modules/image/menu/ViewImageLink.ts","../src/modules/image/menu/WidthBase.ts","../src/modules/image/menu/Width30.ts","../src/modules/image/menu/Width50.ts","../src/modules/image/menu/Width75.ts","../src/modules/image/menu/Width100.ts","../src/modules/image/menu/EnterAbove.ts","../src/modules/image/menu/CancelEnter.ts","../src/modules/image/menu/index.ts","../src/modules/image/menu/config.ts","../src/modules/image/index.ts","../src/modules/image/plugin.ts","../src/modules/todo/render-elem.tsx","../src/modules/todo/menu/Todo.ts","../src/modules/todo/pre-parse-html.ts","../src/modules/todo/index.ts","../src/modules/todo/elem-to-html.ts","../src/modules/todo/parse-elem-html.ts","../src/modules/todo/menu/index.ts","../src/modules/todo/plugin.ts","../../../node_modules/core-js/modules/es.array.join.js","../src/utils/block-toolbar.ts","../src/modules/blockquote/toolbar-icons.ts","../src/modules/blockquote/render-elem.tsx","../src/modules/blockquote/elem-to-html.ts","../src/modules/blockquote/parse-elem-html.ts","../../../node_modules/core-js-pure/internals/engine-v8-version.js","../src/modules/blockquote/menu/BlockquoteMenu.ts","../../../node_modules/core-js-pure/internals/global.js","../../../node_modules/core-js-pure/internals/function-apply.js","../../../node_modules/core-js-pure/internals/function-uncurry-this.js","../../../node_modules/core-js-pure/internals/is-callable.js","../../../node_modules/core-js-pure/internals/fails.js","../../../node_modules/core-js-pure/internals/descriptors.js","../../../node_modules/core-js-pure/internals/function-call.js","../../../node_modules/core-js-pure/internals/object-property-is-enumerable.js","../../../node_modules/core-js-pure/internals/create-property-descriptor.js","../../../node_modules/core-js-pure/internals/classof-raw.js","../../../node_modules/core-js-pure/internals/indexed-object.js","../../../node_modules/core-js-pure/internals/require-object-coercible.js","../../../node_modules/core-js-pure/internals/to-indexed-object.js","../../../node_modules/core-js-pure/internals/is-object.js","../../../node_modules/core-js-pure/internals/path.js","../../../node_modules/core-js-pure/internals/get-built-in.js","../../../node_modules/core-js-pure/internals/object-is-prototype-of.js","../../../node_modules/core-js-pure/internals/engine-user-agent.js","../../../node_modules/core-js-pure/internals/native-symbol.js","../../../node_modules/core-js-pure/internals/use-symbol-as-uid.js","../../../node_modules/core-js-pure/internals/is-symbol.js","../../../node_modules/core-js-pure/internals/try-to-string.js","../../../node_modules/core-js-pure/internals/a-callable.js","../../../node_modules/core-js-pure/internals/ordinary-to-primitive.js","../../../node_modules/core-js-pure/internals/set-global.js","../../../node_modules/core-js-pure/internals/shared-store.js","../../../node_modules/core-js-pure/internals/shared.js","../../../node_modules/core-js-pure/internals/to-object.js","../../../node_modules/core-js-pure/internals/has-own-property.js","../../../node_modules/core-js-pure/internals/uid.js","../../../node_modules/core-js-pure/internals/well-known-symbol.js","../../../node_modules/core-js-pure/internals/to-primitive.js","../../../node_modules/core-js-pure/internals/get-method.js","../../../node_modules/core-js-pure/internals/to-property-key.js","../../../node_modules/core-js-pure/internals/document-create-element.js","../../../node_modules/core-js-pure/internals/ie8-dom-define.js","../../../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","../../../node_modules/core-js-pure/internals/is-forced.js","../../../node_modules/core-js-pure/internals/function-bind-context.js","../../../node_modules/core-js-pure/internals/an-object.js","../../../node_modules/core-js-pure/internals/object-define-property.js","../../../node_modules/core-js-pure/internals/create-non-enumerable-property.js","../../../node_modules/core-js-pure/internals/export.js","../../../node_modules/core-js-pure/internals/is-array.js","../../../node_modules/core-js-pure/internals/to-integer-or-infinity.js","../../../node_modules/core-js-pure/internals/to-length.js","../../../node_modules/core-js-pure/internals/length-of-array-like.js","../../../node_modules/core-js-pure/internals/create-property.js","../../../node_modules/core-js-pure/internals/to-string-tag-support.js","../../../node_modules/core-js-pure/internals/classof.js","../../../node_modules/core-js-pure/internals/inspect-source.js","../../../node_modules/core-js-pure/internals/is-constructor.js","../../../node_modules/core-js-pure/internals/array-species-constructor.js","../../../node_modules/core-js-pure/internals/array-species-create.js","../../../node_modules/core-js-pure/internals/array-method-has-species-support.js","../../../node_modules/core-js-pure/modules/es.array.concat.js","../../../node_modules/core-js-pure/internals/to-string.js","../../../node_modules/core-js-pure/internals/object-create.js","../../../node_modules/core-js-pure/internals/to-absolute-index.js","../../../node_modules/core-js-pure/internals/array-includes.js","../../../node_modules/core-js-pure/internals/hidden-keys.js","../../../node_modules/core-js-pure/internals/object-keys-internal.js","../../../node_modules/core-js-pure/internals/enum-bug-keys.js","../../../node_modules/core-js-pure/internals/object-keys.js","../../../node_modules/core-js-pure/internals/object-define-properties.js","../../../node_modules/core-js-pure/internals/html.js","../../../node_modules/core-js-pure/internals/shared-key.js","../../../node_modules/core-js-pure/internals/internal-state.js","../../../node_modules/core-js-pure/internals/object-get-own-property-names.js","../../../node_modules/core-js-pure/internals/array-slice-simple.js","../../../node_modules/core-js-pure/internals/object-get-own-property-names-external.js","../../../node_modules/core-js-pure/internals/object-get-own-property-symbols.js","../../../node_modules/core-js-pure/internals/array-slice.js","../../../node_modules/core-js-pure/internals/redefine.js","../../../node_modules/core-js-pure/internals/well-known-symbol-wrapped.js","../../../node_modules/core-js-pure/internals/define-well-known-symbol.js","../../../node_modules/core-js-pure/internals/object-to-string.js","../../../node_modules/core-js-pure/internals/set-to-string-tag.js","../../../node_modules/core-js-pure/internals/native-weak-map.js","../../../node_modules/core-js-pure/internals/array-iteration.js","../../../node_modules/core-js-pure/modules/es.symbol.js","../../../node_modules/core-js-pure/modules/es.symbol.async-iterator.js","../../../node_modules/core-js-pure/modules/es.symbol.has-instance.js","../../../node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js","../../../node_modules/core-js-pure/modules/es.symbol.iterator.js","../../../node_modules/core-js-pure/modules/es.symbol.match.js","../../../node_modules/core-js-pure/modules/es.symbol.match-all.js","../../../node_modules/core-js-pure/modules/es.symbol.replace.js","../../../node_modules/core-js-pure/modules/es.symbol.search.js","../../../node_modules/core-js-pure/modules/es.symbol.species.js","../../../node_modules/core-js-pure/modules/es.symbol.split.js","../../../node_modules/core-js-pure/modules/es.symbol.to-primitive.js","../../../node_modules/core-js-pure/modules/es.symbol.to-string-tag.js","../../../node_modules/core-js-pure/modules/es.symbol.unscopables.js","../../../node_modules/core-js-pure/modules/es.json.to-string-tag.js","../../../node_modules/core-js-pure/es/symbol/index.js","../../../node_modules/core-js-pure/internals/iterators-core.js","../../../node_modules/core-js-pure/internals/iterators.js","../../../node_modules/core-js-pure/internals/function-name.js","../../../node_modules/core-js-pure/internals/correct-prototype-getter.js","../../../node_modules/core-js-pure/internals/object-get-prototype-of.js","../../../node_modules/core-js-pure/internals/create-iterator-constructor.js","../../../node_modules/core-js-pure/internals/a-possible-prototype.js","../../../node_modules/core-js-pure/internals/object-set-prototype-of.js","../../../node_modules/core-js-pure/internals/define-iterator.js","../../../node_modules/core-js-pure/modules/es.array.iterator.js","../../../node_modules/core-js-pure/internals/dom-iterables.js","../../../node_modules/core-js-pure/modules/web.dom-collections.iterator.js","../../../node_modules/core-js-pure/stable/symbol/index.js","../../../node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js","../../../node_modules/core-js-pure/modules/esnext.symbol.dispose.js","../../../node_modules/core-js-pure/modules/esnext.symbol.matcher.js","../../../node_modules/core-js-pure/modules/esnext.symbol.metadata.js","../../../node_modules/core-js-pure/modules/esnext.symbol.observable.js","../../../node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js","../../../node_modules/core-js-pure/modules/esnext.symbol.replace-all.js","../../../node_modules/core-js-pure/features/symbol/index.js","../../../node_modules/core-js-pure/internals/string-multibyte.js","../../../node_modules/core-js-pure/modules/es.string.iterator.js","../../../node_modules/core-js-pure/es/symbol/iterator.js","../../../node_modules/core-js/internals/iterators-core.js","../../../node_modules/@babel/runtime-corejs3/helpers/typeof.js","../../../node_modules/core-js/internals/iterators.js","../../../node_modules/core-js/internals/correct-prototype-getter.js","../../../node_modules/core-js/internals/object-get-prototype-of.js","../../../node_modules/core-js/internals/set-to-string-tag.js","../../../node_modules/core-js/internals/create-iterator-constructor.js","../../../node_modules/core-js/internals/a-possible-prototype.js","../../../node_modules/core-js/internals/object-set-prototype-of.js","../../../node_modules/core-js/internals/define-iterator.js","../../../node_modules/core-js/modules/es.array.iterator.js","../../../node_modules/core-js/internals/object-get-own-property-names-external.js","../../../node_modules/core-js/internals/array-buffer-non-extensible.js","../../../node_modules/core-js/internals/object-is-extensible.js","../../../node_modules/core-js/internals/freezing.js","../../../node_modules/core-js/internals/internal-metadata.js","../../../node_modules/core-js/internals/is-array-iterator-method.js","../../../node_modules/core-js/internals/get-iterator-method.js","../../../node_modules/core-js/internals/get-iterator.js","../../../node_modules/core-js/internals/iterator-close.js","../../../node_modules/core-js/internals/iterate.js","../../../node_modules/core-js/internals/an-instance.js","../../../node_modules/core-js/internals/check-correctness-of-iteration.js","../../../node_modules/core-js/internals/redefine-all.js","../../../node_modules/core-js/internals/set-species.js","../../../node_modules/core-js/internals/collection-strong.js","../../../node_modules/core-js/internals/collection.js","../../../node_modules/core-js/internals/inherit-if-required.js","../../../node_modules/core-js/modules/es.set.js","../../../node_modules/core-js/modules/es.string.iterator.js","../../../node_modules/core-js/modules/web.dom-collections.iterator.js","../../../node_modules/core-js/modules/es.array.map.js","../../../node_modules/core-js/modules/es.string.includes.js","../../../node_modules/core-js/internals/array-sort.js","../../../node_modules/core-js/internals/engine-ff-version.js","../../../node_modules/core-js/internals/engine-is-ie-or-edge.js","../../../node_modules/core-js/internals/engine-webkit-version.js","../../../node_modules/core-js/modules/es.array.sort.js","../src/modules/blockquote/merge.ts","../src/modules/blockquote/menu/BlockquoteMergedMenu.ts","../src/modules/blockquote/index.ts","../src/modules/blockquote/menu/index.ts","../src/modules/blockquote/plugin.ts","../src/modules/emotion/menu/EmotionMenu.ts","../src/modules/emotion/menu/index.ts","../src/modules/emotion/index.ts","../src/modules/emotion/menu/config.ts","../src/modules/font-size-family/pre-parse-html.ts","../../../node_modules/core-js/modules/es.function.name.js","../src/modules/font-size-family/menu/BaseMenu.ts","../src/modules/font-size-family/menu/FontSizeMenu.ts","../src/modules/font-size-family/menu/FontFamilyMenu.ts","../src/modules/font-size-family/menu/index.ts","../src/modules/font-size-family/index.ts","../src/modules/font-size-family/render-style.tsx","../src/modules/font-size-family/style-to-html.ts","../src/modules/font-size-family/parse-style-html.ts","../src/modules/font-size-family/menu/config.ts","../src/modules/indent/pre-parse-html.ts","../src/modules/indent/menu/BaseMenu.ts","../src/modules/indent/menu/DecreaseIndentMenu.ts","../src/modules/indent/menu/IncreaseIndentMenu.ts","../src/modules/indent/index.ts","../src/modules/indent/render-style.tsx","../src/modules/indent/style-to-html.ts","../src/modules/indent/parse-style-html.ts","../src/modules/indent/menu/index.ts","../src/modules/justify/menu/BaseMenu.ts","../src/modules/justify/menu/JustifyLeftMenu.ts","../src/modules/justify/menu/JustifyRightMenu.ts","../src/modules/justify/menu/JustifyCenterMenu.ts","../src/modules/justify/menu/JustifyJustifyMenu.ts","../src/modules/justify/index.ts","../src/modules/justify/render-style.tsx","../src/modules/justify/style-to-html.ts","../src/modules/justify/parse-style-html.ts","../src/modules/justify/menu/index.ts","../src/modules/line-height/menu/LineHeightMenu.ts","../src/modules/line-height/index.ts","../src/modules/line-height/render-style.tsx","../src/modules/line-height/style-to-html.ts","../src/modules/line-height/parse-style-html.ts","../src/modules/line-height/menu/index.ts","../src/modules/line-height/menu/config.ts","../src/modules/undo-redo/menu/RedoMenu.ts","../src/modules/undo-redo/menu/UndoMenu.ts","../src/modules/undo-redo/index.ts","../src/modules/undo-redo/menu/index.ts","../src/modules/divider/render-elem.tsx","../src/modules/divider/elem-to-html.ts","../src/modules/divider/parse-elem-html.ts","../src/modules/divider/menu/InsertDividerMenu.ts","../src/modules/divider/menu/RemoveDividerMenu.ts","../src/modules/divider/index.ts","../src/modules/divider/menu/index.ts","../src/modules/divider/plugin.ts","../src/modules/code-block/code-block-ops.ts","../src/modules/code-block/menu/CodeBlockMenu.ts","../src/modules/code-block/menu/index.ts","../../../node_modules/core-js/modules/es.string.match.js","../src/modules/code-block/pre-toolbar.ts","../src/modules/code-block/render-elem.tsx","../src/modules/code-block/elem-to-html.ts","../src/modules/code-block/index.ts","../src/modules/code-block/plugin.ts","../src/modules/code-block/pre-parse-html.ts","../src/modules/code-block/parse-elem-html.ts","../src/modules/full-screen/menu/FullScreen.ts","../src/modules/full-screen/index.ts","../src/modules/full-screen/menu/index.ts","../src/modules/common/menu/EnterMenu.ts","../src/modules/common/index.ts","../src/modules/common/menu/index.ts","../../../node_modules/core-js/internals/object-to-array.js","../../../node_modules/core-js/modules/es.object.entries.js","../src/modules/format-painter/state.ts","../src/modules/format-painter/menu/FormatPainterMenu.ts","../src/modules/format-painter/index.ts","../src/index.ts","../src/modules/format-painter/menu/index.ts","../src/modules/format-painter/plugin.ts"],"sourcesContent":["/**\r\n * @description i18n entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { i18nAddResources } from '@mnykj/wangeditoroptimize-core'\r\nimport enResources from './en'\r\nimport zhResources from './zh-CN'\r\n\r\ni18nAddResources('en', enResources)\r\ni18nAddResources('zh-CN', zhResources)\r\n","/**\r\n * @description i18n en\r\n * @author wangfupeng\r\n */\r\n\r\nexport default {\r\n // 通用的词\r\n common: {\r\n ok: 'OK',\r\n delete: 'Delete',\r\n enter: 'Enter',\r\n enterAbove: 'Enter (blank line above)',\r\n cancelEnter: 'Cancel enter',\r\n },\r\n\r\n blockQuote: {\r\n title: 'Quote',\r\n },\r\n codeBlock: {\r\n title: 'Code block',\r\n },\r\n color: {\r\n color: 'Font color',\r\n bgColor: 'Back color',\r\n default: 'Default color',\r\n clear: 'Clear back color',\r\n },\r\n divider: {\r\n title: 'Divider',\r\n },\r\n emotion: {\r\n title: 'Emotion',\r\n },\r\n fontSize: {\r\n title: 'Font size',\r\n default: 'Default',\r\n },\r\n fontFamily: {\r\n title: 'Font family',\r\n default: 'Default',\r\n },\r\n fullScreen: {\r\n title: 'Full screen',\r\n },\r\n header: {\r\n title: 'Header',\r\n text: 'Text',\r\n },\r\n image: {\r\n netImage: 'Net image',\r\n delete: 'Delete image',\r\n edit: 'Edit image',\r\n viewLink: 'View link',\r\n src: 'Image src',\r\n desc: 'Description',\r\n link: 'Image link',\r\n },\r\n indent: {\r\n decrease: 'Decrease',\r\n increase: 'Increase',\r\n },\r\n justify: {\r\n left: 'Left',\r\n right: 'Right',\r\n center: 'Center',\r\n justify: 'Justify',\r\n },\r\n lineHeight: {\r\n title: 'Line height',\r\n default: 'Default',\r\n },\r\n link: {\r\n insert: 'Insert link',\r\n text: 'Link text',\r\n url: 'Link source',\r\n unLink: 'Unlink',\r\n edit: 'Edit link',\r\n view: 'View link',\r\n },\r\n textStyle: {\r\n bold: 'Bold',\r\n clear: 'Clear styles',\r\n code: 'Inline code',\r\n italic: 'Italic',\r\n sub: 'Sub',\r\n sup: 'Sup',\r\n through: 'Through',\r\n underline: 'Underline',\r\n },\r\n undo: {\r\n undo: 'undo',\r\n redo: 'Redo',\r\n },\r\n todo: {\r\n todo: 'Todo',\r\n },\r\n}\r\n","/**\r\n * @description i18n zh-CN\r\n * @author wangfupeng\r\n */\r\n\r\nexport default {\r\n // 通用的词\r\n common: {\r\n ok: '确定',\r\n delete: '删除',\r\n enter: '回车',\r\n enterAbove: '回车(上方空行)',\r\n cancelEnter: '取消回车',\r\n },\r\n\r\n blockQuote: {\r\n title: '引用',\r\n },\r\n codeBlock: {\r\n title: '代码块',\r\n },\r\n color: {\r\n color: '文字颜色',\r\n bgColor: '背景色',\r\n default: '默认颜色',\r\n clear: '清除背景色',\r\n },\r\n divider: {\r\n title: '分割线',\r\n },\r\n emotion: {\r\n title: '表情',\r\n },\r\n fontSize: {\r\n title: '字号',\r\n default: '默认字号',\r\n },\r\n fontFamily: {\r\n title: '字体',\r\n default: '默认字体',\r\n },\r\n fullScreen: {\r\n title: '全屏',\r\n },\r\n header: {\r\n title: '标题',\r\n text: '正文',\r\n },\r\n image: {\r\n netImage: '网络图片',\r\n delete: '删除图片',\r\n edit: '编辑图片',\r\n viewLink: '查看链接',\r\n src: '图片地址',\r\n desc: '图片描述',\r\n link: '图片链接',\r\n },\r\n indent: {\r\n decrease: '减少缩进',\r\n increase: '增加缩进',\r\n },\r\n justify: {\r\n left: '左对齐',\r\n right: '右对齐',\r\n center: '居中对齐',\r\n justify: '两端对齐',\r\n },\r\n lineHeight: {\r\n title: '行高',\r\n default: '默认行高',\r\n },\r\n link: {\r\n insert: '插入链接',\r\n text: '链接文本',\r\n url: '链接地址',\r\n unLink: '取消链接',\r\n edit: '修改链接',\r\n view: '查看链接',\r\n },\r\n textStyle: {\r\n bold: '粗体',\r\n clear: '清除格式',\r\n code: '行内代码',\r\n italic: '斜体',\r\n sub: '下标',\r\n sup: '上标',\r\n through: '删除线',\r\n underline: '下划线',\r\n },\r\n undo: {\r\n undo: '撤销',\r\n redo: '重做',\r\n },\r\n todo: {\r\n todo: '待办',\r\n },\r\n}\r\n","/**\r\n * @description render paragraph elem\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\n/**\r\n * render paragraph elem\r\n * @param elemNode slate elem\r\n * @param children children\r\n * @param editor editor\r\n * @returns vnode\r\n */\r\nfunction renderParagraph(\r\n elemNode: SlateElement,\r\n children: VNode[] | null,\r\n editor: IDomEditor\r\n): VNode {\r\n const vnode = <p>{children}</p>\r\n return vnode\r\n}\r\n\r\nexport const renderParagraphConf = {\r\n type: 'paragraph',\r\n renderElem: renderParagraph,\r\n}\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\n\r\nfunction pToHtml(elem: Element, childrenHtml: string): string {\r\n if (childrenHtml === '') {\r\n return '<p><br></p>'\r\n }\r\n return `<p>${childrenHtml}</p>`\r\n}\r\n\r\nexport const pToHtmlConf = {\r\n type: 'paragraph',\r\n elemToHtml: pToHtml,\r\n}\r\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n return fn && callBind(call, fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.19.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function (argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n // we can't check .prototype since constructors produced by .bind haven't it\n } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nvar UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\n// UC Browser bug\n// https://github.com/zloirock/core-js/issues/1008\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\n return !$RegExp('a', 'y').sticky;\n});\n\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n\nmodule.exports = {\n BROKEN_CARET: BROKEN_CARET,\n MISSED_STICKY: MISSED_STICKY,\n UNSUPPORTED_Y: UNSUPPORTED_Y\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n call(nativeReplace, match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?<a>b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$<a>c') !== 'bc';\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","var FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var uncurriedNativeMethod = uncurryThis(nativeMethod);\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n }\n return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n }\n return { done: false };\n });\n\n redefine(String.prototype, KEY, methods[0]);\n redefine(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar TypeError = global.TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n push(results, result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n var replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar arraySlice = require('../internals/array-slice-simple');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = toString(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return call(nativeSplit, string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = call(regexpExec, separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n push(output, stringSlice(string, lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !exec(separatorCopy, '')) push(output, '');\n } else push(output, stringSlice(string, lastLastIndex));\n return output.length > lim ? arraySlice(output, 0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);\n return splitter\n ? call(splitter, separator, O, limit)\n : call(internalSplit, toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n push(A, stringSlice(S, p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n push(A, z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n push(A, stringSlice(S, p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","/**\r\n * @description DOM 操作\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, {\r\n css,\r\n append,\r\n prepend,\r\n addClass,\r\n removeClass,\r\n hasClass,\r\n on,\r\n off,\r\n focus,\r\n attr,\r\n hide,\r\n show,\r\n parents,\r\n dataset,\r\n val,\r\n text,\r\n removeAttr,\r\n children,\r\n html,\r\n remove,\r\n find,\r\n width,\r\n height,\r\n Dom7Array,\r\n filter,\r\n empty,\r\n} from 'dom7'\r\nexport { Dom7Array } from 'dom7'\r\n\r\nif (css) $.fn.css = css\r\nif (append) $.fn.append = append\r\nif (prepend) $.fn.prepend = prepend\r\nif (addClass) $.fn.addClass = addClass\r\nif (removeClass) $.fn.removeClass = removeClass\r\nif (hasClass) $.fn.hasClass = hasClass\r\nif (on) $.fn.on = on\r\nif (off) $.fn.off = off\r\nif (focus) $.fn.focus = focus\r\nif (attr) $.fn.attr = attr\r\nif (removeAttr) $.fn.removeAttr = removeAttr\r\nif (hide) $.fn.hide = hide\r\nif (show) $.fn.show = show\r\nif (parents) $.fn.parents = parents\r\nif (dataset) $.fn.dataset = dataset\r\nif (val) $.fn.val = val\r\nif (text) $.fn.text = text\r\nif (html) $.fn.html = html\r\nif (children) $.fn.children = children\r\nif (remove) $.fn.remove = remove\r\nif (find) $.fn.find = find\r\nif (width) $.fn.width = width\r\nif (height) $.fn.height = height\r\nif (filter) $.fn.filter = filter\r\nif (empty) $.fn.empty = empty\r\n\r\nexport default $\r\n\r\n/**\r\n * 判断 str 是不是纯字符串,而不是 html tag\r\n * @param str str\r\n */\r\nexport function isPlainText(str: string) {\r\n const $container = $(`<div>${str}</div>`)\r\n\r\n // 获取 children length (过滤 `<br>`)\r\n const childrenLength = $container.children().filter((child: DOMElement) => {\r\n if (child.tagName === 'BR') return false\r\n return true\r\n }).length\r\n\r\n return childrenLength === 0\r\n}\r\n\r\n/**\r\n * 获取 outerHTML\r\n * @param $elem dom7 elem\r\n */\r\nexport function getOuterHTML($elem: Dom7Array) {\r\n if ($elem.length === 0) return ''\r\n return $elem[0].outerHTML\r\n}\r\n\r\n/**\r\n * 获取 tagName lower-case\r\n * @param $elem $elem\r\n */\r\nexport function getTagName($elem: Dom7Array): string {\r\n if ($elem.length) return $elem[0].tagName.toLowerCase()\r\n return ''\r\n}\r\n\r\n/**\r\n * 获取 $elem 某一个 style 值\r\n * @param $elem $elem\r\n * @param styleKey style key\r\n */\r\nexport function getStyleValue($elem: Dom7Array, styleKey: string): string {\r\n let res = ''\r\n\r\n const styleStr = $elem.attr('style') || '' // 如 'line-height: 2.5; color: red;'\r\n const styleArr = styleStr.split(';') // 如 ['line-height: 2.5', ' color: red', '']\r\n const length = styleArr.length\r\n for (let i = 0; i < length; i++) {\r\n const styleItemStr = styleArr[i] // 如 'line-height: 2.5'\r\n if (styleItemStr) {\r\n const arr = styleItemStr.split(':') // ['line-height', ' 2.5']\r\n if (arr[0].trim() === styleKey) {\r\n res = arr[1].trim()\r\n }\r\n }\r\n }\r\n\r\n return res\r\n}\r\n\r\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\r\n// weird things for Slate's types with the same name as globals. (2019/11/27)\r\n// https://github.com/microsoft/TypeScript/issues/35002\r\nimport DOMNode = globalThis.Node\r\nimport DOMComment = globalThis.Comment\r\nimport DOMElement = globalThis.Element\r\nimport DOMText = globalThis.Text\r\nimport DOMRange = globalThis.Range\r\nimport DOMSelection = globalThis.Selection\r\nimport DOMStaticRange = globalThis.StaticRange\r\nexport { DOMNode, DOMComment, DOMElement, DOMText, DOMRange, DOMSelection, DOMStaticRange }\r\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\n\n// `globalThis` object\n// https://tc39.es/ecma262/#sec-globalthis\n$({ global: true }, {\n globalThis: global\n});\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { ParagraphElement } from './custom-types'\r\nimport $, { DOMElement } from '../../utils/dom'\r\n\r\nfunction parseParagraphHtml(\r\n elem: DOMElement,\r\n children: Descendant[],\r\n editor: IDomEditor\r\n): ParagraphElement {\r\n const $elem = $(elem)\r\n\r\n children = children.filter(child => {\r\n if (Text.isText(child)) return true\r\n if (editor.isInline(child)) return true\r\n return false\r\n })\r\n\r\n // 无 children ,则用纯文本\r\n if (children.length === 0) {\r\n children = [{ text: $elem.text().replace(/\\s+/gm, ' ') }]\r\n }\r\n\r\n return {\r\n type: 'paragraph',\r\n // @ts-ignore\r\n children,\r\n }\r\n}\r\n\r\nexport const parseParagraphHtmlConf = {\r\n selector: 'p:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parseParagraphHtml,\r\n}\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport {\r\n Editor,\r\n Element as SlateElement,\r\n Transforms,\r\n Node as SlateNode,\r\n Text as SlateText,\r\n} from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction deleteHandler(newEditor: IDomEditor): boolean {\r\n const [nodeEntry] = Editor.nodes(newEditor, {\r\n match: n => newEditor.children[0] === n, // editor 第一个节点\r\n mode: 'highest', // 最高层级\r\n })\r\n if (nodeEntry == null) return false\r\n\r\n const n = nodeEntry[0]\r\n if (!SlateElement.isElement(n)) return false\r\n if (n.type === 'paragraph') return false // 命中了 paragraph ,则不再继续判断\r\n if (SlateNode.string(n) !== '') return false // 未删除全部内容,则不再继续判断\r\n\r\n const { children = [] } = n\r\n if (!SlateText.isText(children[0])) return false // n.children 不是 text (如 table),则不再继续判断\r\n\r\n // 至此,就命中了一个(非 paragraph)+(children 都是 text)+(内容为空)的顶级 node ,如 header blockQuote 等\r\n // 然后,将其却换为 paragraph\r\n Transforms.setNodes(newEditor, {\r\n type: 'paragraph',\r\n })\r\n return true\r\n}\r\n\r\nfunction withParagraph<T extends IDomEditor>(editor: T): T {\r\n const { deleteBackward, deleteForward, insertText, insertBreak } = editor\r\n const newEditor = editor\r\n\r\n // 删除非 p 的文本 elem(如 header blockQuote 等),删除没有内容时,切换为 p\r\n newEditor.deleteBackward = unit => {\r\n const res = deleteHandler(newEditor)\r\n if (res) return // 命中结果,则 return\r\n\r\n // 执行默认的删除\r\n deleteBackward(unit)\r\n }\r\n newEditor.deleteForward = unit => {\r\n const res = deleteHandler(newEditor)\r\n if (res) return // 命中结果,则 return\r\n\r\n // 执行默认的删除\r\n deleteForward(unit)\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withParagraph\r\n","/**\r\n * @description paragraph entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderParagraphConf } from './render-elem'\r\nimport { pToHtmlConf } from './elem-to-html'\r\nimport { parseParagraphHtmlConf } from './parse-elem-html'\r\nimport withParagraph from './plugin'\r\n\r\nconst p: Partial<IModuleConf> = {\r\n renderElems: [renderParagraphConf],\r\n elemsToHtml: [pToHtmlConf],\r\n parseElemsHtml: [parseParagraphHtmlConf],\r\n editorPlugin: withParagraph,\r\n}\r\n\r\nexport default p\r\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\n\nvar quot = /\"/g;\nvar replace = uncurryThis(''.replace);\n\n// `CreateHTML` abstract operation\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n var S = toString(requireObjectCoercible(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + replace(toString(value), quot, '&quot;') + '\"';\n return p1 + '>' + S + '</' + tag + '>';\n};\n","var fails = require('../internals/fails');\n\n// check the existence of a method, lowercase\n// of a tag and escaping quotes in arguments\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n var test = ''[METHOD_NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n });\n};\n","/**\r\n * @description text to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Text, Descendant } from 'slate'\r\nimport { StyledText } from './custom-types'\r\nimport $, { getOuterHTML, getTagName, isPlainText } from '../../utils/dom'\r\n\r\n//【注意】color bgColor fontSize fontFamily 在另外的菜单\r\n\r\n/**\r\n * 生成加了样式的 text html\r\n * @param textNode textNode\r\n * @param html text html\r\n */\r\nfunction genStyledHtml(textNode: Descendant, html: string): string {\r\n let styledHtml = html\r\n const { bold, italic, underline, code, through, sub, sup } = textNode as StyledText\r\n if (bold) styledHtml = `<strong>${styledHtml}</strong>`\r\n if (code) styledHtml = `<code>${styledHtml}</code>`\r\n if (italic) styledHtml = `<em>${styledHtml}</em>`\r\n if (underline) styledHtml = `<u>${styledHtml}</u>`\r\n if (through) styledHtml = `<s>${styledHtml}</s>`\r\n if (sub) styledHtml = `<sub>${styledHtml}</sub>`\r\n if (sup) styledHtml = `<sup>${styledHtml}</sup>`\r\n return styledHtml\r\n}\r\n\r\n/**\r\n * style to html\r\n * @param textNode slate text node\r\n * @param textHtml text html\r\n * @returns styled html\r\n */\r\nexport function styleToHtml(textNode: Descendant, textHtml: string): string {\r\n if (!Text.isText(textNode)) return textHtml\r\n\r\n if (isPlainText(textHtml)) {\r\n // textHtml 是纯文本,而不是 html tag\r\n return genStyledHtml(textNode, textHtml)\r\n }\r\n\r\n // textHtml 是 html tag\r\n const $text = $(textHtml)\r\n const tagName = getTagName($text)\r\n\r\n if (tagName === 'br') {\r\n return genStyledHtml(textNode, '<br>')\r\n }\r\n\r\n let innerHtml = $text.html()\r\n innerHtml = genStyledHtml(textNode, innerHtml)\r\n $text.html(innerHtml)\r\n return getOuterHTML($text)\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { StyledText } from './custom-types'\r\nimport $, { Dom7Array, DOMElement } from '../../utils/dom'\r\n\r\n/**\r\n * $text 是否匹配 tags\r\n * @param $text $text\r\n * @param selector selector 如 'b,strong' 或 'sub'\r\n */\r\nfunction isMatch($text: Dom7Array, selector: string): boolean {\r\n if ($text.length === 0) return false\r\n\r\n if ($text[0].matches(selector)) return true\r\n\r\n if ($text.find(selector).length > 0) return true\r\n\r\n return false\r\n}\r\n\r\nexport function parseStyleHtml(\r\n textElem: DOMElement,\r\n node: Descendant,\r\n editor: IDomEditor\r\n): Descendant {\r\n const $text = $(textElem)\r\n\r\n if (!Text.isText(node)) return node\r\n\r\n const textNode = node as StyledText\r\n\r\n // bold\r\n if (isMatch($text, 'b,strong')) {\r\n textNode.bold = true\r\n }\r\n\r\n // italic\r\n if (isMatch($text, 'i,em')) {\r\n textNode.italic = true\r\n }\r\n\r\n // underline\r\n if (isMatch($text, 'u')) {\r\n textNode.underline = true\r\n }\r\n\r\n // through\r\n if (isMatch($text, 's,strike')) {\r\n textNode.through = true\r\n }\r\n\r\n // sub\r\n if (isMatch($text, 'sub')) {\r\n textNode.sub = true\r\n }\r\n\r\n // sup\r\n if (isMatch($text, 'sup')) {\r\n textNode.sup = true\r\n }\r\n\r\n // code\r\n if (isMatch($text, 'code')) {\r\n textNode.code = true\r\n }\r\n\r\n return textNode\r\n}\r\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.bold` method\n// https://tc39.es/ecma262/#sec-string.prototype.bold\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('bold') }, {\n bold: function bold() {\n return createHTML(this, 'b', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.italics` method\n// https://tc39.es/ecma262/#sec-string.prototype.italics\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('italics') }, {\n italics: function italics() {\n return createHTML(this, 'i', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.sub` method\n// https://tc39.es/ecma262/#sec-string.prototype.sub\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('sub') }, {\n sub: function sub() {\n return createHTML(this, 'sub', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.sup` method\n// https://tc39.es/ecma262/#sec-string.prototype.sup\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('sup') }, {\n sup: function sup() {\n return createHTML(this, 'sup', '', '');\n }\n});\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar handlePrototype = function (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n if (DOMIterables[COLLECTION_NAME]) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","/**\r\n * @description helper\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Node } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nexport function isMenuDisabled(editor: IDomEditor, mark?: string): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n if (type === 'pre') return true // 代码块\r\n if (Editor.isVoid(editor, n)) return true // void node\r\n\r\n return false\r\n },\r\n universal: true,\r\n })\r\n\r\n // 命中,则禁用\r\n if (match) return true\r\n return false\r\n}\r\n\r\nexport function removeMarks(editor: IDomEditor, textNode: Node) {\r\n // 遍历 text node 属性,清除样式\r\n const keys = Object.keys(textNode as object)\r\n keys.forEach(key => {\r\n if (key === 'text') {\r\n // 保留 text 属性,text node 必须的\r\n return\r\n }\r\n // 其他属性,全部清除\r\n Editor.removeMark(editor, key)\r\n })\r\n}\r\n","/**\r\n * @description simply style base menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor } from 'slate'\r\nimport { IButtonMenu, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { isMenuDisabled } from '../helper'\r\n\r\nabstract class BaseMenu implements IButtonMenu {\r\n abstract readonly mark: string\r\n protected readonly marksNeedToRemove: string[] = [] // 增加 mark 的同时,需要移除哪些 mark (互斥,不能共存的)\r\n abstract readonly title: string\r\n abstract readonly iconSvg: string\r\n abstract readonly hotkey: string\r\n readonly tag = 'button'\r\n\r\n /**\r\n * 获取:是否有 mark\r\n * @param editor editor\r\n */\r\n getValue(editor: IDomEditor): string | boolean {\r\n const mark = this.mark\r\n const curMarks = Editor.marks(editor)\r\n\r\n // 当 curMarks 存在时,说明用户手动设置,以 curMarks 为准\r\n if (curMarks) {\r\n return curMarks[mark]\r\n } else {\r\n const [match] = Editor.nodes(editor, {\r\n // @ts-ignore\r\n match: n => n[mark] === true,\r\n })\r\n return !!match\r\n }\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n const isMark = this.getValue(editor)\r\n return !!isMark\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return isMenuDisabled(editor, this.mark)\r\n }\r\n\r\n /**\r\n * 执行命令\r\n * @param editor editor\r\n * @param value 是否有 mark\r\n */\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n const { mark, marksNeedToRemove } = this\r\n if (value) {\r\n // 已,则取消\r\n editor.removeMark(mark)\r\n } else {\r\n // 没有,则执行\r\n editor.addMark(mark, true)\r\n\r\n // 移除互斥、不能共存的 marks\r\n if (marksNeedToRemove) {\r\n marksNeedToRemove.forEach(m => editor.removeMark(m))\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default BaseMenu\r\n","/**\r\n * @description icon svg\r\n * @author wangfupeng\r\n */\r\n\r\n/**\r\n * 【注意】svg 字符串的长度 ,否则会导致代码体积过大\r\n * 尽量选择 https://www.iconfont.cn/collections/detail?spm=a313x.7781069.0.da5a778a4&cid=20293\r\n * 找不到再从 iconfont.com 搜索\r\n */\r\n\r\n// 加粗\r\nexport const BOLD_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M707.872 484.64A254.88 254.88 0 0 0 768 320c0-141.152-114.848-256-256-256H192v896h384c141.152 0 256-114.848 256-256a256.096 256.096 0 0 0-124.128-219.36zM384 192h101.504c55.968 0 101.504 57.408 101.504 128s-45.536 128-101.504 128H384V192z m159.008 640H384v-256h159.008c58.464 0 106.016 57.408 106.016 128s-47.552 128-106.016 128z\"></path></svg>'\r\n\r\n// 下划线\r\nexport const UNDER_LINE_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M704 64l128 0 0 416c0 159.072-143.264 288-320 288s-320-128.928-320-288l0-416 128 0 0 416c0 40.16 18.24 78.688 51.36 108.512 36.896 33.216 86.848 51.488 140.64 51.488s103.744-18.304 140.64-51.488c33.12-29.792 51.36-68.352 51.36-108.512l0-416zM192 832l640 0 0 128-640 0z\"></path></svg>'\r\n\r\n// 斜体\r\nexport const ITALIC_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M896 64v64h-128L448 896h128v64H128v-64h128L576 128h-128V64z\"></path></svg>'\r\n\r\n// 删除线\r\nexport const THROUGH_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M1024 512v64h-234.496c27.52 38.496 42.496 82.688 42.496 128 0 70.88-36.672 139.04-100.576 186.976C672.064 935.488 594.144 960 512 960s-160.064-24.512-219.424-69.024C228.64 843.04 192 774.88 192 704h128c0 69.376 87.936 128 192 128s192-58.624 192-128-87.936-128-192-128H0v-64h299.52a385.984 385.984 0 0 1-6.944-5.024C228.64 459.04 192 390.88 192 320s36.672-139.04 100.576-186.976C351.936 88.512 429.856 64 512 64s160.064 24.512 219.424 69.024C795.328 180.96 832 249.12 832 320h-128c0-69.376-87.936-128-192-128s-192 58.624-192 128 87.936 128 192 128c78.976 0 154.048 22.688 212.48 64H1024z\"></path></svg>'\r\n\r\n// 代码\r\nexport const CODE_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M576 736l96 96 320-320L672 192l-96 96 224 224zM448 288l-96-96L32 512l320 320 96-96-224-224z\"></path></svg>'\r\n\r\n// 清除格式\r\nexport const ERASER_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M969.382408 288.738615l-319.401123-270.852152a67.074236 67.074236 0 0 0-96.459139 5.74922l-505.931379 574.922021a68.35184 68.35184 0 0 0-17.886463 47.910169 74.101061 74.101061 0 0 0 24.274486 47.910168l156.50655 132.232065h373.060512L975.131628 383.281347a67.074236 67.074236 0 0 0-5.74922-96.459139z m-440.134747 433.746725H264.144729l-90.071117-78.572676c-5.74922-5.74922-12.137243-12.137243-12.137243-17.886463a36.411728 36.411728 0 0 1 5.749221-24.274485l210.804741-240.828447 265.102932 228.691204z m-439.495945 180.781036h843.218964a60.047411 60.047411 0 1 1 0 120.733624H89.751716a60.047411 60.047411 0 1 1 0-120.733624z m0 0\"></path></svg>'\r\n\r\n// 链接\r\nexport const LINK_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M440.224 635.776a51.84 51.84 0 0 1-36.768-15.232c-95.136-95.136-95.136-249.92 0-345.056l192-192C641.536 37.408 702.816 12.032 768 12.032s126.432 25.376 172.544 71.456c95.136 95.136 95.136 249.92 0 345.056l-87.776 87.776a51.968 51.968 0 1 1-73.536-73.536l87.776-87.776a140.16 140.16 0 0 0 0-197.984c-26.432-26.432-61.6-40.992-99.008-40.992s-72.544 14.56-99.008 40.992l-192 192a140.16 140.16 0 0 0 0 197.984 51.968 51.968 0 0 1-36.768 88.768z\"></path><path d=\"M256 1012a242.4 242.4 0 0 1-172.544-71.456c-95.136-95.136-95.136-249.92 0-345.056l87.776-87.776a51.968 51.968 0 1 1 73.536 73.536l-87.776 87.776a140.16 140.16 0 0 0 0 197.984c26.432 26.432 61.6 40.992 99.008 40.992s72.544-14.56 99.008-40.992l192-192a140.16 140.16 0 0 0 0-197.984 51.968 51.968 0 1 1 73.536-73.536c95.136 95.136 95.136 249.92 0 345.056l-192 192A242.4 242.4 0 0 1 256 1012z\"></path></svg>'\r\n\r\n// 取消链接\r\nexport const UN_LINK_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M608.16328 811.815036c9.371954 9.371954 9.371954 24.56788 0 33.941834l-89.347563 89.347564c-118.525421 118.523421-311.38448 118.531421-429.919901 0-118.527421-118.529421-118.527421-311.39048 0-429.917901l89.349564-89.349563c9.371954-9.371954 24.56788-9.371954 33.941834 0l79.195613 79.195613c9.371954 9.371954 9.371954 24.56788 0 33.941834l-89.349563 89.347564c-56.143726 56.145726-56.143726 147.49928 0 203.645005 56.143726 56.143726 147.49928 56.145726 203.647005 0l89.347564-89.347563c9.371954-9.371954 24.56788-9.371954 33.941834 0l79.193613 79.195613z m-113.135447-520.429459c9.371954 9.371954 24.56788 9.371954 33.941834 0l89.347564-89.347564c56.143726-56.149726 147.49928-56.145726 203.647006 0 56.143726 56.145726 56.143726 147.49928 0 203.645006l-89.349564 89.347564c-9.371954 9.371954-9.371954 24.56788 0 33.941834l79.195613 79.195613c9.371954 9.371954 24.56788 9.371954 33.941834 0l89.349564-89.349563c118.529421-118.529421 118.529421-311.38848 0-429.917901-118.531421-118.527421-311.38848-118.527421-429.919901 0l-89.347563 89.347564c-9.371954 9.371954-9.371954 24.56788 0 33.941834l79.193613 79.195613z m469.653707 718.556492l45.253779-45.253779c18.745908-18.745908 18.745908-49.13776 0-67.881669L127.195629 14.062931c-18.745908-18.745908-49.13776-18.745908-67.881669 0L14.058181 59.31871c-18.745908 18.745908-18.745908 49.13776 0 67.881669l882.74169 882.74169c18.745908 18.743908 49.13776 18.743908 67.881669 0z\"></path></svg>'\r\n\r\n// 编辑\r\nexport const PENCIL_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M864 0a160 160 0 0 1 128 256l-64 64-224-224 64-64c26.752-20.096 59.968-32 96-32zM64 736l-64 288 288-64 592-592-224-224L64 736z m651.584-372.416l-448 448-55.168-55.168 448-448 55.168 55.168z\"></path></svg>'\r\n\r\n// 外部(链接)\r\nexport const EXTERNAL_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M924.402464 1023.068211H0.679665V99.345412h461.861399v98.909208H99.596867v725.896389h725.896389V561.206811h98.909208z\" p-id=\"10909\"></path><path d=\"M930.805104 22.977336l69.965436 69.965436-453.492405 453.492404-69.965435-69.901489z\" p-id=\"10910\"></path><path d=\"M1022.464381 304.030081h-98.917201V99.345412H709.230573V0.428211h313.233808z\"></path></svg>'\r\n\r\n// 标题\r\nexport const HEADER_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M960 960c-51.2 0-102.4-3.2-153.6-3.2-51.2 0-99.2 3.2-150.4 3.2-19.2 0-28.8-22.4-28.8-38.4 0-51.2 57.6-28.8 86.4-48 19.2-12.8 19.2-60.8 19.2-80v-224-19.2c-9.6-3.2-19.2-3.2-28.8-3.2H320c-9.6 0-19.2 0-28.8 3.2V780.8c0 22.4 0 80 22.4 92.8 28.8 19.2 96-6.4 96 44.8 0 16-9.6 41.6-28.8 41.6-54.4 0-105.6-3.2-160-3.2-48 0-96 3.2-147.2 3.2-19.2 0-28.8-22.4-28.8-38.4 0-51.2 51.2-28.8 80-48 19.2-12.8 19.2-60.8 19.2-83.2V294.4c0-28.8 3.2-115.2-22.4-131.2-25.6-16-86.4 9.6-86.4-41.6 0-16 6.4-41.6 28.8-41.6 51.2 0 105.6 3.2 156.8 3.2 48 0 96-3.2 144-3.2 19.2 0 28.8 22.4 28.8 41.6 0 48-57.6 25.6-83.2 41.6-19.2 12.8-19.2 73.6-19.2 92.8v201.6c6.4 3.2 16 3.2 22.4 3.2h400c6.4 0 12.8 0 22.4-3.2V256c0-22.4 0-80-19.2-92.8-28.8-16-86.4 6.4-86.4-41.6 0-16 9.6-41.6 28.8-41.6 51.2 0 99.2 3.2 150.4 3.2 48 0 99.2-3.2 147.2-3.2 19.2 0 28.8 22.4 28.8 41.6 0 51.2-57.6 25.6-86.4 41.6-19.2 12.8-19.2 70.4-19.2 92.8v537.6c0 19.2 0 67.2 19.2 80 28.8 19.2 89.6-6.4 89.6 44.8 0 19.2-6.4 41.6-28.8 41.6z\"></path></svg>'\r\n\r\n// 字体颜色\r\nexport const FONT_COLOR_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M64 864h896v96H64zM360.58 576h302.85l81.53 224h102.16L579.24 64H444.77L176.89 800h102.16l81.53-224zM512 159.96L628.49 480H395.52L512 159.96z\"></path></svg>'\r\n\r\n// 背景颜色\r\nexport const BG_COLOR_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M510.030769 315.076923l84.676923 196.923077h-177.230769l76.8-196.923077h15.753846zM945.230769 157.538462v708.923076c0 43.323077-35.446154 78.769231-78.769231 78.769231H157.538462c-43.323077 0-78.769231-35.446154-78.769231-78.769231V157.538462c0-43.323077 35.446154-78.769231 78.769231-78.769231h708.923076c43.323077 0 78.769231 35.446154 78.769231 78.769231z m-108.307692 643.938461L600.615385 216.615385c-5.907692-11.815385-15.753846-19.692308-29.538462-19.692308h-139.815385c-11.815385 0-23.630769 7.876923-27.56923 19.692308l-216.615385 584.861538c-3.938462 11.815385 3.938462 25.6 17.723077 25.6h80.738462c11.815385 0 23.630769-9.846154 27.56923-21.661538l63.015385-175.261539h263.876923l68.923077 175.261539c3.938462 11.815385 15.753846 21.661538 27.569231 21.661538h80.738461c13.784615 0 23.630769-13.784615 19.692308-25.6z\"></path></svg>'\r\n\r\n// 清空(颜色)\r\nexport const CLEAN_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M236.8 128L896 787.2V128H236.8z m614.4 704L192 172.8V832h659.2zM192 64h704c38.4 0 64 25.6 64 64v704c0 38.4-25.6 64-64 64H192c-38.4 0-64-25.6-64-64V128c0-38.4 25.6-64 64-64z\"></path></svg>'\r\n\r\n// 图片\r\nexport const IMAGE_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M959.877 128l0.123 0.123v767.775l-0.123 0.122H64.102l-0.122-0.122V128.123l0.122-0.123h895.775zM960 64H64C28.795 64 0 92.795 0 128v768c0 35.205 28.795 64 64 64h896c35.205 0 64-28.795 64-64V128c0-35.205-28.795-64-64-64zM832 288.01c0 53.023-42.988 96.01-96.01 96.01s-96.01-42.987-96.01-96.01S682.967 192 735.99 192 832 234.988 832 288.01zM896 832H128V704l224.01-384 256 320h64l224.01-192z\"></path></svg>'\r\n\r\n// 垃圾桶(删除)\r\nexport const TRASH_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M826.8032 356.5312c-19.328 0-36.3776 15.6928-36.3776 35.0464v524.2624c0 19.328-16 34.56-35.328 34.56H264.9344c-19.328 0-35.5072-15.3088-35.5072-34.56V390.0416c0-19.328-14.1568-35.0464-33.5104-35.0464s-33.5104 15.6928-33.5104 35.0464V915.712c0 57.9328 44.6208 108.288 102.528 108.288H755.2c57.9328 0 108.0832-50.4576 108.0832-108.288V391.4752c-0.1024-19.2512-17.1264-34.944-36.48-34.944z\" p-id=\"9577\"></path><path d=\"M437.1712 775.7568V390.6048c0-19.328-14.1568-35.0464-33.5104-35.0464s-33.5104 15.616-33.5104 35.0464v385.152c0 19.328 14.1568 35.0464 33.5104 35.0464s33.5104-15.7184 33.5104-35.0464zM649.7024 775.7568V390.6048c0-19.328-17.0496-35.0464-36.3776-35.0464s-36.3776 15.616-36.3776 35.0464v385.152c0 19.328 17.0496 35.0464 36.3776 35.0464s36.3776-15.7184 36.3776-35.0464zM965.0432 217.0368h-174.6176V145.5104c0-57.9328-47.2064-101.76-104.6528-101.76h-350.976c-57.8304 0-105.3952 43.8528-105.3952 101.76v71.5264H54.784c-19.4304 0-35.0464 14.1568-35.0464 33.5104 0 19.328 15.616 33.5104 35.0464 33.5104h910.3616c19.328 0 35.0464-14.1568 35.0464-33.5104 0-19.3536-15.6928-33.5104-35.1488-33.5104z m-247.3728 0H297.3952V145.5104c0-19.328 18.2016-34.7648 37.4272-34.7648h350.976c19.1488 0 31.872 15.1296 31.872 34.7648v71.5264z\"></path></svg>'\r\n\r\n// 引用\r\nexport const QUOTE_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M894.6 907.1H605.4c-32.6 0-59-26.4-59-59V608.2l-4-14.9c0-315.9 125.5-485.1 376.5-507.5v59.8C752.7 180.4 711.3 315.8 711.3 442.4v41.2l31.5 12.3h151.8c32.6 0 59 26.4 59 59v293.2c0 32.5-26.4 59-59 59z m-472 0H133.4c-32.6 0-59-26.4-59-59V608.2l-4-14.9c0-315.9 125.5-485.1 376.5-507.5v59.8C280.7 180.4 239.3 315.8 239.3 442.4v41.2l31.5 12.3h151.8c32.6 0 59 26.4 59 59v293.2c0 32.5-26.4 59-59 59z\"></path></svg>'\r\n\r\n// 表情\r\nexport const EMOTION_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M512 1024C230.4 1024 0 793.6 0 512S230.4 0 512 0s512 230.4 512 512-230.4 512-512 512z m0-102.4c226.742857 0 409.6-182.857143 409.6-409.6S738.742857 102.4 512 102.4 102.4 285.257143 102.4 512s182.857143 409.6 409.6 409.6z m-204.8-358.4h409.6c0 113.371429-91.428571 204.8-204.8 204.8s-204.8-91.428571-204.8-204.8z m0-102.4c-43.885714 0-76.8-32.914286-76.8-76.8s32.914286-76.8 76.8-76.8 76.8 32.914286 76.8 76.8-32.914286 76.8-76.8 76.8z m409.6 0c-43.885714 0-76.8-32.914286-76.8-76.8s32.914286-76.8 76.8-76.8c43.885714 0 76.8 32.914286 76.8 76.8s-32.914286 76.8-76.8 76.8z\"></path></svg>'\r\n\r\n// fontSize\r\nexport const FONT_SIZE_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M64 512h384v128h-128V1024h-128V640h-128z m896-256H708.2496v768h-136.4992V256H320V128h640z\"></path></svg>'\r\n\r\n// 字体\r\nexport const FONT_FAMILY_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M956.788364 152.110545h-24.110546l23.924364 9.029819 0.186182 121.018181h-65.070546l-86.574545-130.048H566.551273v650.14691l130.048 64.977454v65.163636h-390.050909v-65.163636l129.954909-64.977454V152.110545H198.283636L111.429818 282.065455H46.545455V69.259636C46.545455 33.792 82.664727 22.062545 98.955636 22.062545h812.683637c23.738182 0 45.056 15.173818 45.056 41.053091V169.425455v-17.221819z\"></path></svg>'\r\n\r\n// 缩进 left\r\nexport const INDENT_LEFT_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M0 64h1024v128H0z m384 192h640v128H384z m0 192h640v128H384z m0 192h640v128H384zM0 832h1024v128H0z m256-512v384l-256-192z\"></path></svg>'\r\n\r\n// 缩进 right\r\nexport const INDENT_RIGHT_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M0 64h1024v128H0z m384 192h640v128H384z m0 192h640v128H384z m0 192h640v128H384zM0 832h1024v128H0z m0-128V320l256 192z\"></path></svg>'\r\n\r\n// 左对齐\r\nexport const JUSTIFY_LEFT_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M768 793.6v102.4H51.2v-102.4h716.8z m204.8-230.4v102.4H51.2v-102.4h921.6z m-204.8-230.4v102.4H51.2v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z\"></path></svg>'\r\n\r\n// 右对齐\r\nexport const JUSTIFY_RIGHT_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M972.8 793.6v102.4H256v-102.4h716.8z m0-230.4v102.4H51.2v-102.4h921.6z m0-230.4v102.4H256v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z\"></path></svg>'\r\n\r\n// 居中对齐\r\nexport const JUSTIFY_CENTER_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M870.4 793.6v102.4H153.6v-102.4h716.8z m102.4-230.4v102.4H51.2v-102.4h921.6z m-102.4-230.4v102.4H153.6v-102.4h716.8zM972.8 102.4v102.4H51.2V102.4h921.6z\"></path></svg>'\r\n\r\n// 两端对齐\r\nexport const JUSTIFY_JUSTIFY_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M0 64h1024v128H0z m0 192h1024v128H0z m0 192h1024v128H0z m0 192h1024v128H0z m0 192h1024v128H0z\"></path></svg>'\r\n\r\n// 行高\r\nexport const LINE_HEIGHT_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M964 788a8 8 0 0 1 8 8v98a8 8 0 0 1-8 8H438a8 8 0 0 1-8-8v-98a8 8 0 0 1 8-8h526zM198.93 144.306c6.668-5.798 16.774-5.094 22.573 1.574l122.26 140.582a16 16 0 0 1 3.927 10.5c0 8.836-7.164 16-16 16h-61.8a8 8 0 0 0-8 8v390.077h69.819a16 16 0 0 1 10.502 3.928c6.666 5.8 7.37 15.906 1.57 22.573L221.476 878.123a16 16 0 0 1-1.57 1.57c-6.668 5.8-16.774 5.097-22.574-1.57L75.051 737.538a16 16 0 0 1-3.928-10.5c0-8.837 7.163-16 16-16h69.822V312.96H87.127a16 16 0 0 1-10.502-3.928c-6.666-5.8-7.37-15.906-1.57-22.573l122.303-140.582a16 16 0 0 1 1.572-1.572zM964 465a8 8 0 0 1 8 8v98a8 8 0 0 1-8 8H438a8 8 0 0 1-8-8v-98a8 8 0 0 1 8-8h526z m0-323a8 8 0 0 1 8 8v98a8 8 0 0 1-8 8H438a8 8 0 0 1-8-8v-98a8 8 0 0 1 8-8h526z\"></path></svg>'\r\n\r\n// 撤销\r\nexport const UNDO_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M512 64A510.272 510.272 0 0 0 149.984 213.984L0.032 64v384h384L240.512 304.48A382.784 382.784 0 0 1 512.032 192c212.064 0 384 171.936 384 384 0 114.688-50.304 217.632-130.016 288l84.672 96a510.72 510.72 0 0 0 173.344-384c0-282.784-229.216-512-512-512z\"></path></svg>'\r\n\r\n// 重做\r\nexport const REDO_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M0.00032 576a510.72 510.72 0 0 0 173.344 384l84.672-96A383.136 383.136 0 0 1 128.00032 576C128.00032 363.936 299.93632 192 512.00032 192c106.048 0 202.048 42.976 271.52 112.48L640.00032 448h384V64l-149.984 149.984A510.272 510.272 0 0 0 512.00032 64C229.21632 64 0.00032 293.216 0.00032 576z\"></path></svg>'\r\n\r\n// 分割线\r\nexport const DIVIDER_SVG =\r\n '<svg viewBox=\"0 0 1092 1024\"><path d=\"M0 51.2m51.2 0l989.866667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-989.866667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z\"></path><path d=\"M0 460.8m51.2 0l170.666667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-170.666667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z\"></path><path d=\"M819.2 460.8m51.2 0l170.666667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-170.666667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z\"></path><path d=\"M409.6 460.8m51.2 0l170.666667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-170.666667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z\"></path><path d=\"M0 870.4m51.2 0l989.866667 0q51.2 0 51.2 51.2l0 0q0 51.2-51.2 51.2l-989.866667 0q-51.2 0-51.2-51.2l0 0q0-51.2 51.2-51.2Z\"></path></svg>'\r\n\r\n// 代码块\r\nexport const CODE_BLOCK_SVG =\r\n '<svg viewBox=\"0 0 1280 1024\"><path d=\"M832 736l96 96 320-320L928 192l-96 96 224 224zM448 288l-96-96L32 512l320 320 96-96-224-224zM701.312 150.528l69.472 18.944-192 704.032-69.472-18.944 192-704.032z\"></path></svg>'\r\n\r\n// 全屏\r\nexport const FULL_SCREEN_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M133.705143 335.433143V133.851429h201.581714a29.622857 29.622857 0 0 0 29.622857-29.549715V68.754286a29.622857 29.622857 0 0 0-29.622857-29.622857H61.732571A22.893714 22.893714 0 0 0 38.765714 62.025143V335.725714c0 16.310857 13.238857 29.622857 29.622857 29.622857h35.547429a29.842286 29.842286 0 0 0 29.696-29.842285zM690.980571 133.851429h201.581715v201.654857c0 16.310857 13.238857 29.549714 29.622857 29.549714h35.547428a29.622857 29.622857 0 0 0 29.549715-29.549714V61.952a22.893714 22.893714 0 0 0-22.820572-22.893714h-273.554285a29.622857 29.622857 0 0 0-29.549715 29.622857v35.547428c0 16.310857 13.238857 29.696 29.622857 29.696zM335.286857 892.781714H133.705143V691.2a29.622857 29.622857 0 0 0-29.622857-29.622857H68.534857a29.622857 29.622857 0 0 0-29.549714 29.622857v273.554286c0 12.653714 10.24 22.893714 22.820571 22.893714h273.554286a29.622857 29.622857 0 0 0 29.696-29.622857v-35.547429a29.769143 29.769143 0 0 0-29.769143-29.696z m557.348572-201.581714v201.581714H690.907429a29.622857 29.622857 0 0 0-29.622858 29.622857v35.547429c0 16.310857 13.238857 29.622857 29.622858 29.622857h273.554285c12.580571 0 22.893714-10.313143 22.893715-22.893714V691.2a29.622857 29.622857 0 0 0-29.622858-29.622857h-35.547428a29.622857 29.622857 0 0 0-29.696 29.622857z\"></path></svg>'\r\n\r\n// 上标\r\nexport const SUP_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M768 206.016v50.016h128v64h-192V174.016l128-60V64h-128V0h192v146.016zM676 256h-136L352 444 164 256H28l256 256-256 256h136L352 580 540 768h136l-256-256z\"></path></svg>'\r\n\r\n// 下标\r\nexport const SUB_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M768 910.016v50.016h128v64h-192v-146.016l128-60V768h-128v-64h192v146.016zM676 256h-136L352 444 164 256H28l256 256-256 256h136L352 580 540 768h136l-256-256z\"></path></svg>'\r\n\r\n// checkbox\r\nexport const CHECK_BOX_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M278.755556 403.911111l-79.644445 79.644445L455.111111 739.555556l568.888889-568.888889-79.644444-79.644445L455.111111 580.266667l-176.355555-176.355556zM910.222222 910.222222H113.777778V113.777778h568.888889V0H113.777778C51.2 0 0 51.2 0 113.777778v796.444444c0 62.577778 51.2 113.777778 113.777778 113.777778h796.444444c62.577778 0 113.777778-51.2 113.777778-113.777778V455.111111h-113.777778v455.111111z\"></path></svg>'\r\n\r\n// 回车\r\nexport const ENTER_SVG =\r\n '<svg viewBox=\"0 0 1255 1024\"><path d=\"M1095.111111 731.477333h-625.777778V1024L0 658.318222 469.333333 292.408889v292.636444h625.777778V0h156.444445v731.477333z\"></path></svg>'\r\n\r\n// 取消回车(与引用顶栏一致)\r\nexport const CANCEL_ENTER_SVG =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M436 680H124v-56h312l-124-124 42-42 220 220-220 220-42-42 124-124z\"></path><path d=\"M198 128l64-64 628 628-64 64z\"></path></svg>'\r\n","/**\r\n * @description bold menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { BOLD_SVG } from '../../../constants/icon-svg'\r\n\r\nclass BoldMenu extends BaseMenu {\r\n readonly mark = 'bold'\r\n readonly title = t('textStyle.bold')\r\n readonly iconSvg = BOLD_SVG\r\n readonly hotkey = 'mod+b'\r\n}\r\n\r\nexport default BoldMenu\r\n","/**\r\n * @description code menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { CODE_SVG } from '../../../constants/icon-svg'\r\n\r\nclass CodeMenu extends BaseMenu {\r\n readonly mark = 'code'\r\n readonly title = t('textStyle.code')\r\n readonly iconSvg = CODE_SVG\r\n readonly hotkey = 'mod+e'\r\n}\r\n\r\nexport default CodeMenu\r\n","/**\r\n * @description italic menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { ITALIC_SVG } from '../../../constants/icon-svg'\r\n\r\nclass ItalicMenu extends BaseMenu {\r\n readonly mark = 'italic'\r\n readonly title = t('textStyle.italic')\r\n readonly iconSvg = ITALIC_SVG\r\n readonly hotkey = 'mod+i'\r\n}\r\n\r\nexport default ItalicMenu\r\n","/**\r\n * @description through menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { THROUGH_SVG } from '../../../constants/icon-svg'\r\n\r\nclass ThroughMenu extends BaseMenu {\r\n readonly mark = 'through'\r\n readonly title = t('textStyle.through')\r\n readonly iconSvg = THROUGH_SVG\r\n readonly hotkey = 'mod+shift+x'\r\n}\r\n\r\nexport default ThroughMenu\r\n","/**\r\n * @description underline menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { UNDER_LINE_SVG } from '../../../constants/icon-svg'\r\n\r\nclass UnderlineMenu extends BaseMenu {\r\n readonly mark = 'underline'\r\n readonly title = t('textStyle.underline')\r\n readonly iconSvg = UNDER_LINE_SVG\r\n readonly hotkey = 'mod+u'\r\n}\r\n\r\nexport default UnderlineMenu\r\n","/**\r\n * @description sub menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { SUB_SVG } from '../../../constants/icon-svg'\r\n\r\nclass SubMenu extends BaseMenu {\r\n readonly mark = 'sub'\r\n readonly marksNeedToRemove = ['sup'] // sub 和 sup 不能共存\r\n readonly title = t('textStyle.sub')\r\n readonly iconSvg = SUB_SVG\r\n readonly hotkey = ''\r\n}\r\n\r\nexport default SubMenu\r\n","/**\r\n * @description sup menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { SUP_SVG } from '../../../constants/icon-svg'\r\n\r\nclass SupMenu extends BaseMenu {\r\n readonly mark = 'sup'\r\n readonly marksNeedToRemove = ['sub'] // sup 和 sub 不能共存\r\n readonly title = t('textStyle.sup')\r\n readonly iconSvg = SUP_SVG\r\n readonly hotkey = ''\r\n}\r\n\r\nexport default SupMenu\r\n","/**\r\n * @description clear style menu — 清 mark,并把标题降为正文\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Text, Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { ERASER_SVG } from '../../../constants/icon-svg'\r\nimport { isMenuDisabled, removeMarks } from '../helper'\r\n\r\nfunction isHeaderBlockType(type: string): boolean {\r\n return (\r\n type === 'header1' ||\r\n type === 'header2' ||\r\n type === 'header3' ||\r\n type === 'header4' ||\r\n type === 'header5' ||\r\n type === 'header6'\r\n )\r\n}\r\n\r\nclass ClearStyleMenu implements IButtonMenu {\r\n readonly title = t('textStyle.clear')\r\n readonly iconSvg = ERASER_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return isMenuDisabled(editor)\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 1) 清行内 mark\r\n const nodeEntries = Editor.nodes(editor, {\r\n match: n => Text.isText(n),\r\n universal: true,\r\n })\r\n for (const nodeEntry of nodeEntries) {\r\n removeMarks(editor, nodeEntry[0])\r\n }\r\n\r\n // 2) 标题 → 正文(yunkee clearAllFormat 行为)\r\n try {\r\n Transforms.setNodes(\r\n editor,\r\n { type: 'paragraph' } as any,\r\n {\r\n match: n => isHeaderBlockType(DomEditor.getNodeType(n)),\r\n mode: 'highest',\r\n }\r\n )\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n}\r\n\r\nexport default ClearStyleMenu\r\n","/**\r\n * @description text style entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { parseStyleHtml } from './parse-style-html'\r\nimport {\r\n boldMenuConf,\r\n underlineMenuConf,\r\n italicMenuConf,\r\n throughMenuConf,\r\n codeMenuConf,\r\n subMenuConf,\r\n supMenuConf,\r\n clearStyleMenuConf,\r\n clearAllFormatMenuConf,\r\n} from './menu/index'\r\n\r\nconst textStyle: Partial<IModuleConf> = {\r\n renderStyle,\r\n menus: [\r\n boldMenuConf,\r\n underlineMenuConf,\r\n italicMenuConf,\r\n throughMenuConf,\r\n codeMenuConf,\r\n subMenuConf,\r\n supMenuConf,\r\n clearStyleMenuConf,\r\n clearAllFormatMenuConf,\r\n ],\r\n styleToHtml,\r\n parseStyleHtml,\r\n}\r\n\r\nexport default textStyle\r\n","/**\r\n * @description render text style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { StyledText } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node slate text\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n const { bold, italic, underline, code, through, sub, sup } = node as StyledText\r\n let styleVnode: VNode = vnode\r\n\r\n // color bgColor 在另外的菜单\r\n\r\n if (bold) {\r\n styleVnode = <strong>{styleVnode}</strong>\r\n }\r\n if (code) {\r\n styleVnode = <code>{styleVnode}</code>\r\n }\r\n if (italic) {\r\n styleVnode = <em>{styleVnode}</em>\r\n }\r\n if (underline) {\r\n styleVnode = <u>{styleVnode}</u>\r\n }\r\n if (through) {\r\n styleVnode = <s>{styleVnode}</s>\r\n }\r\n if (sub) {\r\n styleVnode = <sub>{styleVnode}</sub>\r\n }\r\n if (sup) {\r\n styleVnode = <sup>{styleVnode}</sup>\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport BoldMenu from './BoldMenu'\r\nimport CodeMenu from './CodeMenu'\r\nimport ItalicMenu from './ItalicMenu'\r\nimport ThroughMenu from './ThroughMenu'\r\nimport UnderlineMenu from './UnderlineMenu'\r\nimport SubMenu from './SubMenu'\r\nimport SupMenu from './SupMenu'\r\nimport ClearStyleMenu from './ClearStyleMenu'\r\n\r\nexport const boldMenuConf = {\r\n key: 'bold',\r\n factory() {\r\n return new BoldMenu()\r\n },\r\n}\r\n\r\nexport const codeMenuConf = {\r\n key: 'code',\r\n factory() {\r\n return new CodeMenu()\r\n },\r\n}\r\n\r\nexport const italicMenuConf = {\r\n key: 'italic',\r\n factory() {\r\n return new ItalicMenu()\r\n },\r\n}\r\n\r\nexport const throughMenuConf = {\r\n key: 'through',\r\n factory() {\r\n return new ThroughMenu()\r\n },\r\n}\r\n\r\nexport const underlineMenuConf = {\r\n key: 'underline',\r\n factory() {\r\n return new UnderlineMenu()\r\n },\r\n}\r\n\r\nexport const supMenuConf = {\r\n key: 'sup',\r\n factory() {\r\n return new SupMenu()\r\n },\r\n}\r\n\r\nexport const subMenuConf = {\r\n key: 'sub',\r\n factory() {\r\n return new SubMenu()\r\n },\r\n}\r\n\r\nexport const clearStyleMenuConf = {\r\n key: 'clearStyle',\r\n factory() {\r\n return new ClearStyleMenu()\r\n },\r\n}\r\n\r\n/** yunkee 工具栏 / 悬浮栏使用的 key,与 clearStyle 同一实现 */\r\nexport const clearAllFormatMenuConf = {\r\n key: 'clearAllFormat',\r\n factory() {\r\n return new ClearStyleMenu()\r\n },\r\n}\r\n","/**\r\n * @description render header\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction genRenderElem(level: number) {\r\n /**\r\n * render header elem\r\n * @param elemNode slate elem\r\n * @param children children\r\n * @param editor editor\r\n * @returns vnode\r\n */\r\n function renderHeader(\r\n elemNode: SlateElement,\r\n children: VNode[] | null,\r\n editor: IDomEditor\r\n ): VNode {\r\n const Tag = `h${level}`\r\n const vnode = <Tag>{children}</Tag>\r\n return vnode\r\n }\r\n\r\n return renderHeader\r\n}\r\n\r\nconst renderHeader1Conf = {\r\n type: 'header1', // 和 elemNode.type 一致\r\n renderElem: genRenderElem(1),\r\n}\r\nconst renderHeader2Conf = {\r\n type: 'header2',\r\n renderElem: genRenderElem(2),\r\n}\r\nconst renderHeader3Conf = {\r\n type: 'header3',\r\n renderElem: genRenderElem(3),\r\n}\r\nconst renderHeader4Conf = {\r\n type: 'header4',\r\n renderElem: genRenderElem(4),\r\n}\r\nconst renderHeader5Conf = {\r\n type: 'header5',\r\n renderElem: genRenderElem(5),\r\n}\r\n\r\nexport {\r\n renderHeader1Conf,\r\n renderHeader2Conf,\r\n renderHeader3Conf,\r\n renderHeader4Conf,\r\n renderHeader5Conf,\r\n}\r\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar $toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar n$ToString = RegExpPrototype[TO_STRING];\nvar getFlags = uncurryThis(regExpFlags);\n\nvar NOT_GENERIC = fails(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && n$ToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = $toString(R.source);\n var rf = R.flags;\n var f = $toString(rf === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype) ? getFlags(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","var global = require('../internals/global');\nvar isRegExp = require('../internals/is-regexp');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\n// eslint-disable-next-line es/no-string-prototype-startswith -- safe\nvar un$StartsWith = uncurryThis(''.startsWith);\nvar stringSlice = uncurryThis(''.slice);\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = toString(requireObjectCoercible(this));\n notARegExp(searchString);\n var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = toString(searchString);\n return un$StartsWith\n ? un$StartsWith(that, search, index)\n : stringSlice(that, index, index + search.length) === search;\n }\n});\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","/**\r\n * @description header helper\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Transforms } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\n/**\r\n * 获取 node type('header1' 'header2' 等),未匹配则返回 'paragraph'\r\n */\r\nexport function getHeaderType(editor: IDomEditor): string {\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n return type.startsWith('header') // 匹配 node.type 是 header 开头的 node\r\n },\r\n universal: true,\r\n })\r\n\r\n // 未匹配到 header\r\n if (match == null) return 'paragraph'\r\n\r\n // 匹配到 header\r\n const [n] = match\r\n\r\n return DomEditor.getNodeType(n)\r\n}\r\n\r\nexport function isMenuDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n // 只可用于 p 和 header\r\n if (type === 'paragraph') return true\r\n if (type.startsWith('header')) return true\r\n\r\n return false\r\n },\r\n universal: true,\r\n mode: 'highest', // 匹配最高层级\r\n })\r\n\r\n // 匹配到 p header ,不禁用\r\n if (nodeEntry) {\r\n return false\r\n }\r\n // 未匹配到 p header ,则禁用\r\n return true\r\n}\r\n\r\n/**\r\n * 设置 node type ('header1' 'header2' 'paragraph' 等)\r\n */\r\nexport function setHeaderType(editor: IDomEditor, type: string) {\r\n if (!type) return\r\n\r\n // 执行命令\r\n Transforms.setNodes(editor, {\r\n type: type,\r\n })\r\n}\r\n","/**\r\n * @description header menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { ISelectMenu, IDomEditor, IOption, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { HEADER_SVG } from '../../../constants/icon-svg'\r\nimport { getHeaderType, isMenuDisabled, setHeaderType } from '../helper'\r\n\r\nclass HeaderSelectMenu implements ISelectMenu {\r\n readonly title = t('header.title')\r\n readonly iconSvg = HEADER_SVG\r\n readonly tag = 'select'\r\n readonly width = 60\r\n\r\n getOptions(editor: IDomEditor): IOption[] {\r\n // 基本的 options 列表(正文单独设字号/字重,避免悬浮栏继承正文区 line-height 后观感异常)\r\n const options: IOption[] = [\r\n // value 和 elemNode.type 对应\r\n {\r\n value: 'paragraph',\r\n text: t('header.text'),\r\n styleForRenderMenuList: {\r\n 'font-size': '14px',\r\n 'font-weight': 'normal',\r\n 'line-height': '1.25',\r\n },\r\n },\r\n {\r\n value: 'header1',\r\n text: 'H1',\r\n styleForRenderMenuList: { 'font-size': '32px', 'font-weight': 'bold', 'line-height': '1.25' },\r\n },\r\n {\r\n value: 'header2',\r\n text: 'H2',\r\n styleForRenderMenuList: { 'font-size': '24px', 'font-weight': 'bold', 'line-height': '1.25' },\r\n },\r\n {\r\n value: 'header3',\r\n text: 'H3',\r\n styleForRenderMenuList: { 'font-size': '18px', 'font-weight': 'bold', 'line-height': '1.25' },\r\n },\r\n {\r\n value: 'header4',\r\n text: 'H4',\r\n styleForRenderMenuList: { 'font-size': '16px', 'font-weight': 'bold', 'line-height': '1.25' },\r\n },\r\n {\r\n value: 'header5',\r\n text: 'H5',\r\n styleForRenderMenuList: { 'font-size': '13px', 'font-weight': 'bold', 'line-height': '1.25' },\r\n },\r\n ]\r\n\r\n // 获取 value ,设置 selected\r\n const curValue = this.getValue(editor).toString()\r\n options.forEach((opt: IOption) => {\r\n if (opt.value === curValue) {\r\n opt.selected = true\r\n } else {\r\n delete opt.selected\r\n }\r\n })\r\n\r\n return options\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // select menu 会显示 selected value ,用不到 active\r\n return false\r\n }\r\n\r\n /**\r\n * 获取选中节点的 node.type\r\n * @param editor editor\r\n */\r\n getValue(editor: IDomEditor): string | boolean {\r\n return getHeaderType(editor)\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return isMenuDisabled(editor)\r\n }\r\n\r\n /**\r\n * 执行命令\r\n * @param editor editor\r\n * @param value node.type\r\n */\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n //【注意】value 是 select change 时获取的,并不是 this.getValue 的值\r\n setHeaderType(editor, value.toString())\r\n }\r\n}\r\n\r\nexport default HeaderSelectMenu\r\n","/**\r\n * @description button menu base\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { getHeaderType, isMenuDisabled, setHeaderType } from '../helper'\r\n\r\nabstract class HeaderButtonMenuBase implements IButtonMenu {\r\n abstract readonly title: string\r\n abstract readonly type: string // 'header1' 'header2' 等\r\n readonly tag = 'button'\r\n\r\n /**\r\n * 获取选中节点的 node.type\r\n * @param editor editor\r\n */\r\n getValue(editor: IDomEditor): string | boolean {\r\n return getHeaderType(editor)\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return this.getValue(editor) === this.type\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return isMenuDisabled(editor)\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n const { type } = this\r\n let newType\r\n if (value === type) {\r\n // 选中的 node.type 和当前 type 一样,则取消\r\n newType = 'paragraph'\r\n } else {\r\n // 否则,则设置\r\n newType = type\r\n }\r\n\r\n setHeaderType(editor, newType)\r\n }\r\n}\r\n\r\nexport default HeaderButtonMenuBase\r\n","/**\r\n * @description header1 button menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderButtonMenuBase from './HeaderButtonMenuBase'\r\n\r\nclass Header1ButtonMenu extends HeaderButtonMenuBase {\r\n title = 'H1'\r\n type = 'header1'\r\n}\r\n\r\nexport default Header1ButtonMenu\r\n","/**\r\n * @description header2 button menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderButtonMenuBase from './HeaderButtonMenuBase'\r\n\r\nclass Header2ButtonMenu extends HeaderButtonMenuBase {\r\n title = 'H2'\r\n type = 'header2'\r\n}\r\n\r\nexport default Header2ButtonMenu\r\n","/**\r\n * @description header3 button menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderButtonMenuBase from './HeaderButtonMenuBase'\r\n\r\nclass Header3ButtonMenu extends HeaderButtonMenuBase {\r\n title = 'H3'\r\n type = 'header3'\r\n}\r\n\r\nexport default Header3ButtonMenu\r\n","/**\r\n * @description header4 button menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderButtonMenuBase from './HeaderButtonMenuBase'\r\n\r\nclass Header4ButtonMenu extends HeaderButtonMenuBase {\r\n title = 'H4'\r\n type = 'header4'\r\n}\r\n\r\nexport default Header4ButtonMenu\r\n","/**\r\n * @description header5 button menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderButtonMenuBase from './HeaderButtonMenuBase'\r\n\r\nclass Header5ButtonMenu extends HeaderButtonMenuBase {\r\n title = 'H5'\r\n type = 'header5'\r\n}\r\n\r\nexport default Header5ButtonMenu\r\n","/**\r\n * @description menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport HeaderSelectMenu from './HeaderSelectMenu'\r\nimport Header1ButtonMenu from './Header1ButtonMenu'\r\nimport Header2ButtonMenu from './Header2ButtonMenu'\r\nimport Header3ButtonMenu from './Header3ButtonMenu'\r\nimport Header4ButtonMenu from './Header4ButtonMenu'\r\nimport Header5ButtonMenu from './Header5ButtonMenu'\r\n\r\nexport const HeaderSelectMenuConf = {\r\n key: 'headerSelect',\r\n factory() {\r\n return new HeaderSelectMenu()\r\n },\r\n}\r\n\r\nexport const Header1ButtonMenuConf = {\r\n key: 'header1',\r\n factory() {\r\n return new Header1ButtonMenu()\r\n },\r\n}\r\n\r\nexport const Header2ButtonMenuConf = {\r\n key: 'header2',\r\n factory() {\r\n return new Header2ButtonMenu()\r\n },\r\n}\r\n\r\nexport const Header3ButtonMenuConf = {\r\n key: 'header3',\r\n factory() {\r\n return new Header3ButtonMenu()\r\n },\r\n}\r\n\r\nexport const Header4ButtonMenuConf = {\r\n key: 'header4',\r\n factory() {\r\n return new Header4ButtonMenu()\r\n },\r\n}\r\n\r\nexport const Header5ButtonMenuConf = {\r\n key: 'header5',\r\n factory() {\r\n return new Header5ButtonMenu()\r\n },\r\n}\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\n\r\nfunction genToHtmlFn(level: number) {\r\n function headerToHtml(elem: Element, childrenHtml: string): string {\r\n return `<h${level}>${childrenHtml}</h${level}>`\r\n }\r\n return headerToHtml\r\n}\r\n\r\nexport const header1ToHtmlConf = {\r\n type: 'header1',\r\n elemToHtml: genToHtmlFn(1),\r\n}\r\n\r\nexport const header2ToHtmlConf = {\r\n type: 'header2',\r\n elemToHtml: genToHtmlFn(2),\r\n}\r\n\r\nexport const header3ToHtmlConf = {\r\n type: 'header3',\r\n elemToHtml: genToHtmlFn(3),\r\n}\r\n\r\nexport const header4ToHtmlConf = {\r\n type: 'header4',\r\n elemToHtml: genToHtmlFn(4),\r\n}\r\n\r\nexport const header5ToHtmlConf = {\r\n type: 'header5',\r\n elemToHtml: genToHtmlFn(5),\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport $, { DOMElement } from '../../utils/dom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport {\r\n Header1Element,\r\n Header2Element,\r\n Header3Element,\r\n Header4Element,\r\n Header5Element,\r\n} from './custom-types'\r\n\r\nfunction genParser<T>(level: number) {\r\n function parseHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): T {\r\n const $elem = $(elem)\r\n children = children.filter(child => {\r\n if (Text.isText(child)) return true\r\n if (editor.isInline(child)) return true\r\n return false\r\n })\r\n\r\n // 无 children ,则用纯文本\r\n if (children.length === 0) {\r\n children = [{ text: $elem.text().replace(/\\s+/gm, ' ') }]\r\n }\r\n\r\n const headerNode = {\r\n type: `header${level}`,\r\n children,\r\n } as unknown as T\r\n\r\n return headerNode\r\n }\r\n return parseHtml\r\n}\r\n\r\nexport const parseHeader1HtmlConf = {\r\n selector: 'h1:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: genParser<Header1Element>(1),\r\n}\r\n\r\nexport const parseHeader2HtmlConf = {\r\n selector: 'h2:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: genParser<Header2Element>(2),\r\n}\r\n\r\nexport const parseHeader3HtmlConf = {\r\n selector: 'h3:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: genParser<Header3Element>(3),\r\n}\r\n\r\nexport const parseHeader4HtmlConf = {\r\n selector: 'h4:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: genParser<Header4Element>(4),\r\n}\r\n\r\nexport const parseHeader5HtmlConf = {\r\n selector: 'h5:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: genParser<Header5Element>(5),\r\n}\r\n","/**\r\n * @description header entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport {\r\n renderHeader1Conf,\r\n renderHeader2Conf,\r\n renderHeader3Conf,\r\n renderHeader4Conf,\r\n renderHeader5Conf,\r\n} from './render-elem'\r\nimport {\r\n HeaderSelectMenuConf,\r\n Header1ButtonMenuConf,\r\n Header2ButtonMenuConf,\r\n Header3ButtonMenuConf,\r\n Header4ButtonMenuConf,\r\n Header5ButtonMenuConf,\r\n} from './menu/index'\r\nimport {\r\n header1ToHtmlConf,\r\n header2ToHtmlConf,\r\n header3ToHtmlConf,\r\n header4ToHtmlConf,\r\n header5ToHtmlConf,\r\n} from './elem-to-html'\r\nimport {\r\n parseHeader1HtmlConf,\r\n parseHeader2HtmlConf,\r\n parseHeader3HtmlConf,\r\n parseHeader4HtmlConf,\r\n parseHeader5HtmlConf,\r\n} from './parse-elem-html'\r\nimport withHeader from './plugin'\r\n\r\nconst header: Partial<IModuleConf> = {\r\n renderElems: [\r\n renderHeader1Conf,\r\n renderHeader2Conf,\r\n renderHeader3Conf,\r\n renderHeader4Conf,\r\n renderHeader5Conf,\r\n ],\r\n elemsToHtml: [\r\n header1ToHtmlConf,\r\n header2ToHtmlConf,\r\n header3ToHtmlConf,\r\n header4ToHtmlConf,\r\n header5ToHtmlConf,\r\n ],\r\n parseElemsHtml: [\r\n parseHeader1HtmlConf,\r\n parseHeader2HtmlConf,\r\n parseHeader3HtmlConf,\r\n parseHeader4HtmlConf,\r\n parseHeader5HtmlConf,\r\n ],\r\n menus: [\r\n HeaderSelectMenuConf,\r\n Header1ButtonMenuConf,\r\n Header2ButtonMenuConf,\r\n Header3ButtonMenuConf,\r\n Header4ButtonMenuConf,\r\n Header5ButtonMenuConf,\r\n ],\r\n editorPlugin: withHeader,\r\n}\r\n\r\nexport default header\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Transforms } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction withHeader<T extends IDomEditor>(editor: T): T {\r\n const { insertBreak, insertNode } = editor\r\n const newEditor = editor\r\n\r\n // 重写 insertBreak - header 末尾回车时要插入 paragraph\r\n newEditor.insertBreak = () => {\r\n const [match] = Editor.nodes(newEditor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n return type.startsWith('header') // 匹配 node.type 是 header 开头的 node\r\n },\r\n universal: true,\r\n })\r\n\r\n if (!match) {\r\n // 未匹配到\r\n insertBreak()\r\n return\r\n }\r\n\r\n const isAtLineEnd = DomEditor.isSelectionAtLineEnd(editor, match[1])\r\n\r\n // 如果在行末插入一个空 p,否则正常换行\r\n if (isAtLineEnd) {\r\n const p = { type: 'paragraph', children: [{ text: '' }] }\r\n Transforms.insertNodes(newEditor, p, { mode: 'highest' })\r\n } else {\r\n insertBreak()\r\n }\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withHeader\r\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","/**\r\n * @description vdom utils fn\r\n * @author wangfupeng\r\n */\r\n\r\nimport { VNode, VNodeStyle, Dataset } from 'snabbdom'\r\n\r\n// /**\r\n// * 给 vnode 添加 dataset\r\n// * @param vnode vnode\r\n// * @param newDataset { key: val }\r\n// */\r\n// export function addVnodeDataset(vnode: VNode, newDataset: Dataset) {\r\n// if (vnode.data == null) vnode.data = {}\r\n// const data = vnode.data\r\n// if (data.dataset == null) data.dataset = {}\r\n\r\n// Object.assign(data.dataset, newDataset)\r\n// }\r\n\r\n/**\r\n * 给 vnode 添加样式\r\n * @param vnode vnode\r\n * @param newStyle { key: val }\r\n */\r\nexport function addVnodeStyle(vnode: VNode, newStyle: VNodeStyle) {\r\n if (vnode.data == null) vnode.data = {}\r\n const data = vnode.data\r\n if (data.style == null) data.style = {}\r\n\r\n Object.assign(data.style, newStyle)\r\n}\r\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","/**\r\n * @description pre-parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, { DOMElement, getTagName } from '../../utils/dom'\r\n\r\n/**\r\n * pre-prase font ,兼容 V4\r\n * @param fontElem fontElem\r\n */\r\nfunction preParse(fontElem: DOMElement): DOMElement {\r\n const $font = $(fontElem)\r\n const tagName = getTagName($font)\r\n if (tagName !== 'font') return fontElem\r\n\r\n // 处理 color (V4 使用 <font color=\"#ccc\">xx</font> 格式)\r\n const color = $font.attr('color') || ''\r\n if (color) {\r\n $font.removeAttr('color')\r\n $font.css('color', color)\r\n }\r\n\r\n return $font[0]\r\n}\r\n\r\nexport const preParseHtmlConf = {\r\n selector: 'font',\r\n preParseHtml: preParse,\r\n}\r\n","/**\r\n * @description color base menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Range } from 'slate'\r\nimport { IDropPanelMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array, DOMElement } from '../../../utils/dom'\r\nimport { CLEAN_SVG } from '../../../constants/icon-svg'\r\n\r\nabstract class BaseMenu implements IDropPanelMenu {\r\n abstract readonly title: string\r\n abstract readonly iconSvg: string\r\n readonly tag = 'button'\r\n readonly showDropPanel = true // 点击 button 时显示 dropPanel\r\n protected abstract readonly mark: string\r\n private $content: Dom7Array | null = null\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 点击菜单时,弹出 droPanel 之前,不需要执行其他代码\r\n // 此处空着即可\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const mark = this.mark\r\n const curMarks = Editor.marks(editor)\r\n // @ts-ignore\r\n if (curMarks && curMarks[mark]) return curMarks[mark]\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n const color = this.getValue(editor)\r\n return !!color\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n if (type === 'pre') return true // 代码块\r\n if (Editor.isVoid(editor, n)) return true // void node\r\n\r\n return false\r\n },\r\n universal: true,\r\n })\r\n\r\n // 命中,则禁用\r\n if (match) return true\r\n return false\r\n }\r\n\r\n getPanelContentElem(editor: IDomEditor): DOMElement {\r\n const mark = this.mark\r\n\r\n if (this.$content == null) {\r\n // 第一次渲染\r\n const $content = $('<ul class=\"w-e-panel-content-color\"></ul>')\r\n\r\n // 绑定事件(只在第一次绑定,不要重复绑定)\r\n $content.on('click', 'li', (e: Event) => {\r\n const { target } = e\r\n if (target == null) return\r\n e.preventDefault()\r\n\r\n const { selection } = editor\r\n if (selection == null) return\r\n\r\n const $li = $(target)\r\n const val = $li.attr('data-value')\r\n\r\n // 修改文本样式\r\n if (val === '0') {\r\n Editor.removeMark(editor, mark)\r\n } else {\r\n Editor.addMark(editor, mark, val)\r\n }\r\n })\r\n\r\n this.$content = $content\r\n }\r\n const $content = this.$content\r\n if ($content == null) return document.createElement('ul')\r\n $content.empty() // 清空之后再重置内容\r\n\r\n // 当前选中文本的颜色之\r\n const selectedColor = this.getValue(editor)\r\n\r\n // 获取菜单配置\r\n const colorConf = editor.getMenuConfig(mark)\r\n const { colors = [] } = colorConf\r\n // 根据菜单配置生成 panel content\r\n colors.forEach((color: string) => {\r\n const $block = $(`<div class=\"color-block\" data-value=\"${color}\"></div>`)\r\n $block.css('background-color', color)\r\n\r\n const $li = $(`<li data-value=\"${color}\"></li>`)\r\n if (selectedColor === color) {\r\n $li.addClass('active')\r\n }\r\n $li.append($block)\r\n\r\n $content.append($li)\r\n })\r\n\r\n // 清除颜色\r\n let clearText = ''\r\n if (mark === 'color') clearText = t('color.default')\r\n if (mark === 'bgColor') clearText = t('color.clear')\r\n const $clearLi = $(`\r\n <li data-value=\"0\" class=\"clear\">\r\n ${CLEAN_SVG}\r\n ${clearText}\r\n </li>\r\n `)\r\n $content.prepend($clearLi)\r\n\r\n return $content[0]\r\n }\r\n}\r\n\r\nexport default BaseMenu\r\n","/**\r\n * @description color menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { FONT_COLOR_SVG } from '../../../constants/icon-svg'\r\n\r\nclass ColorMenu extends BaseMenu {\r\n readonly title = t('color.color')\r\n readonly iconSvg = FONT_COLOR_SVG\r\n readonly mark = 'color'\r\n}\r\n\r\nexport default ColorMenu\r\n","/**\r\n * @description bg color menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { BG_COLOR_SVG } from '../../../constants/icon-svg'\r\n\r\nclass BgColorMenu extends BaseMenu {\r\n readonly title = t('color.bgColor')\r\n readonly iconSvg = BG_COLOR_SVG\r\n readonly mark = 'bgColor'\r\n}\r\n\r\nexport default BgColorMenu\r\n","/**\r\n * @description menu config\r\n * @author wangfupeng\r\n */\r\n\r\nconst COLORS = [\r\n 'rgb(0, 0, 0)',\r\n 'rgb(38, 38, 38)',\r\n 'rgb(89, 89, 89)',\r\n 'rgb(140, 140, 140)',\r\n 'rgb(191, 191, 191)',\r\n 'rgb(217, 217, 217)',\r\n 'rgb(233, 233, 233)',\r\n 'rgb(245, 245, 245)',\r\n 'rgb(250, 250, 250)',\r\n 'rgb(255, 255, 255)', // 10\r\n 'rgb(225, 60, 57)',\r\n 'rgb(231, 95, 51)',\r\n 'rgb(235, 144, 58)',\r\n 'rgb(245, 219, 77)',\r\n 'rgb(114, 192, 64)',\r\n 'rgb(89, 191, 192)',\r\n 'rgb(66, 144, 247)',\r\n 'rgb(54, 88, 226)',\r\n 'rgb(106, 57, 201)',\r\n 'rgb(216, 68, 147)', // 10\r\n 'rgb(251, 233, 230)',\r\n 'rgb(252, 237, 225)',\r\n 'rgb(252, 239, 212)',\r\n 'rgb(252, 251, 207)',\r\n 'rgb(231, 246, 213)',\r\n 'rgb(218, 244, 240)',\r\n 'rgb(217, 237, 250)',\r\n 'rgb(224, 232, 250)',\r\n 'rgb(237, 225, 248)',\r\n 'rgb(246, 226, 234)', // 10\r\n 'rgb(255, 163, 158)',\r\n 'rgb(255, 187, 150)',\r\n 'rgb(255, 213, 145)',\r\n 'rgb(255, 251, 143)',\r\n 'rgb(183, 235, 143)',\r\n 'rgb(135, 232, 222)',\r\n 'rgb(145, 213, 255)',\r\n 'rgb(173, 198, 255)',\r\n 'rgb(211, 173, 247)',\r\n 'rgb(255, 173, 210)', // 10\r\n 'rgb(255, 77, 79)',\r\n 'rgb(255, 122, 69)',\r\n 'rgb(255, 169, 64)',\r\n 'rgb(255, 236, 61)',\r\n 'rgb(115, 209, 61)',\r\n 'rgb(54, 207, 201)',\r\n 'rgb(64, 169, 255)',\r\n 'rgb(89, 126, 247)',\r\n 'rgb(146, 84, 222)',\r\n 'rgb(247, 89, 171)', // 10\r\n 'rgb(207, 19, 34)',\r\n 'rgb(212, 56, 13)',\r\n 'rgb(212, 107, 8)',\r\n 'rgb(212, 177, 6)',\r\n 'rgb(56, 158, 13)',\r\n 'rgb(8, 151, 156)',\r\n 'rgb(9, 109, 217)',\r\n 'rgb(29, 57, 196)',\r\n 'rgb(83, 29, 171)',\r\n 'rgb(196, 29, 127)', // 10\r\n 'rgb(130, 0, 20)',\r\n 'rgb(135, 20, 0)',\r\n 'rgb(135, 56, 0)',\r\n 'rgb(97, 71, 0)',\r\n 'rgb(19, 82, 0)',\r\n 'rgb(0, 71, 79)',\r\n 'rgb(0, 58, 140)',\r\n 'rgb(6, 17, 120)',\r\n 'rgb(34, 7, 94)',\r\n 'rgb(120, 6, 80)', // 10\r\n]\r\n\r\nexport function genColors() {\r\n return COLORS\r\n}\r\n\r\nexport function genBgColors() {\r\n return COLORS\r\n}\r\n","/**\r\n * @description menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport ColorMenu from './ColorMenu'\r\nimport BgColorMenu from './BgColorMenu'\r\nimport { genColors, genBgColors } from './config'\r\n\r\nexport const colorMenuConf = {\r\n key: 'color',\r\n factory() {\r\n return new ColorMenu()\r\n },\r\n\r\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\r\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\r\n config: {\r\n colors: genColors(),\r\n },\r\n}\r\n\r\nexport const bgColorMenuConf = {\r\n key: 'bgColor',\r\n factory() {\r\n return new BgColorMenu()\r\n },\r\n config: {\r\n colors: genBgColors(),\r\n },\r\n}\r\n","/**\r\n * @description color bgColor\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { preParseHtmlConf } from './pre-parse-html'\r\nimport { parseStyleHtml } from './parse-style-html'\r\nimport { colorMenuConf, bgColorMenuConf } from './menu/index'\r\n\r\nconst color: Partial<IModuleConf> = {\r\n renderStyle,\r\n styleToHtml,\r\n preParseHtml: [preParseHtmlConf],\r\n parseStyleHtml,\r\n menus: [colorMenuConf, bgColorMenuConf],\r\n}\r\n\r\nexport default color\r\n","/**\r\n * @description render color style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { addVnodeStyle } from '../../utils/vdom'\r\nimport { ColorText } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node text node\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n const { color, bgColor } = node as ColorText\r\n let styleVnode: VNode = vnode\r\n\r\n if (color) {\r\n addVnodeStyle(styleVnode, { color })\r\n }\r\n if (bgColor) {\r\n addVnodeStyle(styleVnode, { backgroundColor: bgColor })\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description textStyle to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Text, Descendant } from 'slate'\r\nimport $, { getOuterHTML, getTagName, isPlainText } from '../../utils/dom'\r\nimport { ColorText } from './custom-types'\r\n\r\n/**\r\n * style to html\r\n * @param textNode slate text node\r\n * @param textHtml text html\r\n * @returns styled html\r\n */\r\nexport function styleToHtml(textNode: Descendant, textHtml: string): string {\r\n if (!Text.isText(textNode)) return textHtml\r\n\r\n const { color, bgColor } = textNode as ColorText\r\n if (!color && !bgColor) return textHtml\r\n\r\n let $text\r\n\r\n if (isPlainText(textHtml)) {\r\n // textHtml 是纯文本,不是 html tag\r\n $text = $(`<span>${textHtml}</span>`)\r\n } else {\r\n // textHtml 是 html tag\r\n $text = $(textHtml)\r\n const tagName = getTagName($text)\r\n if (tagName !== 'span') {\r\n // 如果不是 span ,则包裹一层,接下来要设置 css\r\n $text = $(`<span>${textHtml}</span>`)\r\n }\r\n }\r\n\r\n // 设置样式\r\n if (color) $text.css('color', color)\r\n if (bgColor) $text.css('background-color', bgColor)\r\n\r\n // 输出 html\r\n return getOuterHTML($text)\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { ColorText } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nexport function parseStyleHtml(text: DOMElement, node: Descendant, editor: IDomEditor): Descendant {\r\n const $text = $(text)\r\n if (!Text.isText(node)) return node\r\n\r\n const textNode = node as ColorText\r\n\r\n const color = getStyleValue($text, 'color')\r\n if (color) {\r\n textNode.color = color\r\n }\r\n\r\n let bgColor = getStyleValue($text, 'background-color')\r\n if (!bgColor) bgColor = getStyleValue($text, 'background') // word 背景色\r\n if (bgColor) {\r\n textNode.bgColor = bgColor\r\n }\r\n\r\n return textNode\r\n}\r\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.anchor` method\n// https://tc39.es/ecma262/#sec-string.prototype.anchor\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('anchor') }, {\n anchor: function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n }\n});\n","\n/**\n * Expose `isUrl`.\n */\n\nmodule.exports = isUrl;\n\n/**\n * RegExps.\n * A URL must match #1 and then at least one of #2/#3.\n * Use two levels of REs to avoid REDOS.\n */\n\nvar protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n\nvar localhostDomainRE = /^localhost[\\:?\\d]*(?:[^\\:?\\d]\\S*)?$/\nvar nonLocalhostDomainRE = /^[^\\s\\.]+\\.\\S{2,}$/;\n\n/**\n * Loosely validate a URL `string`.\n *\n * @param {String} string\n * @return {Boolean}\n */\n\nfunction isUrl(string){\n if (typeof string !== 'string') {\n return false;\n }\n\n var match = string.match(protocolAndDomainRE);\n if (!match) {\n return false;\n }\n\n var everythingAfterProtocol = match[1];\n if (!everythingAfterProtocol) {\n return false;\n }\n\n if (localhostDomainRE.test(everythingAfterProtocol) ||\n nonLocalhostDomainRE.test(everythingAfterProtocol)) {\n return true;\n }\n\n return false;\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","/**\r\n * @description 工具函数\r\n * @author wangfupeng\r\n */\r\n\r\nimport { nanoid } from 'nanoid'\r\n\r\n/**\r\n * 获取随机数字符串\r\n * @param prefix 前缀\r\n * @returns 随机数字符串\r\n */\r\nexport function genRandomStr(prefix: string = 'r'): string {\r\n return `${prefix}-${nanoid()}`\r\n}\r\n\r\nexport function replaceSymbols(str: string) {\r\n return str.replace(/</g, '&lt;').replace(/>/g, '&gt;')\r\n}\r\n","/**\r\n * @description link helper\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Range, Transforms } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { LinkElement } from './custom-types'\r\nimport { replaceSymbols } from '../../utils/util'\r\n\r\n/**\r\n * 校验 link\r\n * @param menuKey menu key\r\n * @param editor editor\r\n * @param text menu text\r\n * @param url menu url\r\n */\r\nasync function check(\r\n menuKey: string,\r\n editor: IDomEditor,\r\n text: string,\r\n url: string\r\n): Promise<boolean> {\r\n const { checkLink } = editor.getMenuConfig(menuKey)\r\n if (checkLink) {\r\n const res = await checkLink(text, url)\r\n if (typeof res === 'string') {\r\n // 检验未通过,提示信息\r\n editor.alert(res, 'error')\r\n return false\r\n }\r\n if (res == null) {\r\n // 检验未通过,不提示信息\r\n return false\r\n }\r\n }\r\n\r\n return true // 校验通过\r\n}\r\n\r\n/**\r\n * 转换链接 url\r\n * @param menuKey menu key\r\n * @param editor editor\r\n * @param url url\r\n * @returns parsedUrl\r\n */\r\nasync function parse(menuKey: string, editor: IDomEditor, url: string): Promise<string> {\r\n const { parseLinkUrl } = editor.getMenuConfig(menuKey)\r\n if (parseLinkUrl) {\r\n const newUrl = await parseLinkUrl(url)\r\n return newUrl\r\n }\r\n return url\r\n}\r\n\r\nexport function isMenuDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const selectedElems = DomEditor.getSelectedElems(editor)\r\n const notMatch = selectedElems.some(elem => {\r\n const { type } = elem\r\n if (editor.isVoid(elem)) return true\r\n if (['pre', 'code', 'link'].includes(type)) return true\r\n })\r\n if (notMatch) return true // disabled\r\n return false // enable\r\n}\r\n\r\n/**\r\n * 生成 link node\r\n * @param url url\r\n * @param text text\r\n */\r\nfunction genLinkNode(url: string, text?: string): LinkElement {\r\n const linkNode: LinkElement = {\r\n type: 'link',\r\n url: replaceSymbols(url),\r\n children: text ? [{ text }] : [],\r\n }\r\n return linkNode\r\n}\r\n\r\n/**\r\n * 插入 link\r\n * @param editor editor\r\n * @param text text\r\n * @param url url\r\n */\r\nexport async function insertLink(editor: IDomEditor, text: string, url: string) {\r\n if (!url) return\r\n if (!text) text = url // 无 text 则用 url 代替\r\n\r\n // 还原选区\r\n editor.restoreSelection()\r\n\r\n if (isMenuDisabled(editor)) return\r\n\r\n // 校验\r\n const checkRes = await check('insertLink', editor, text, url)\r\n if (!checkRes) return // 校验未通过\r\n\r\n // 转换 url\r\n const parsedUrl = await parse('insertLink', editor, url)\r\n\r\n // 判断选区是否折叠\r\n const { selection } = editor\r\n if (selection == null) return\r\n const isCollapsed = Range.isCollapsed(selection)\r\n\r\n // 执行:插入链接\r\n if (isCollapsed) {\r\n // 链接前后插入空格,方便操作\r\n editor.insertText(' ')\r\n\r\n const linkNode = genLinkNode(parsedUrl, text)\r\n Transforms.insertNodes(editor, linkNode)\r\n\r\n // https://github.com/wangeditor-team/wangEditor/issues/332\r\n // 不能直接使用 insertText, 会造成添加的空格被添加到链接文本中,参考上面 issue,替换为 insertFragment 方式添加空格\r\n editor.insertFragment([{ text: ' ' }])\r\n } else {\r\n const selectedText = Editor.string(editor, selection) // 选中的文字\r\n if (selectedText !== text) {\r\n // 选中的文字和输入的文字不一样,则删掉文字,插入链接\r\n editor.deleteFragment()\r\n const linkNode = genLinkNode(parsedUrl, text)\r\n Transforms.insertNodes(editor, linkNode)\r\n } else {\r\n // 选中的文字和输入的文字一样,则只包裹链接即可\r\n const linkNode = genLinkNode(parsedUrl)\r\n Transforms.wrapNodes(editor, linkNode, { split: true })\r\n Transforms.collapse(editor, { edge: 'end' })\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 修改 link url\r\n * @param editor editor\r\n * @param text text\r\n * @param url link url\r\n */\r\nexport async function updateLink(editor: IDomEditor, text: string, url: string) {\r\n if (!url) return\r\n\r\n // 校验\r\n const checkRes = await check('editLink', editor, text, url)\r\n if (!checkRes) return // 校验未通过\r\n\r\n // 转换 url\r\n const parsedUrl = await parse('editLink', editor, url)\r\n\r\n // 修改链接\r\n const props: Partial<LinkElement> = { url: replaceSymbols(parsedUrl) }\r\n Transforms.setNodes(editor, props, {\r\n match: n => DomEditor.checkNodeType(n, 'link'),\r\n })\r\n}\r\n","/**\r\n * @description render link elem\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { LinkElement } from './custom-types'\r\n\r\n/**\r\n * render link elem\r\n * @param elemNode slate elem\r\n * @param children children\r\n * @param editor editor\r\n * @returns vnode\r\n */\r\nfunction renderLink(elemNode: SlateElement, children: VNode[] | null, editor: IDomEditor): VNode {\r\n const { url, target = '_blank' } = elemNode as LinkElement\r\n const vnode = (\r\n <a href={url} target={target}>\r\n {children}\r\n </a>\r\n )\r\n\r\n return vnode\r\n}\r\n\r\nconst renderLinkConf = {\r\n type: 'link', // 和 elemNode.type 一致\r\n renderElem: renderLink,\r\n}\r\n\r\nexport { renderLinkConf }\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\nimport { LinkElement } from './custom-types'\r\n\r\nfunction linkToHtml(elem: Element, childrenHtml: string): string {\r\n const { url, target = '_blank' } = elem as LinkElement\r\n\r\n return `<a href=\"${url}\" target=\"${target}\">${childrenHtml}</a>`\r\n}\r\n\r\nexport const linkToHtmlConf = {\r\n type: 'link',\r\n elemToHtml: linkToHtml,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { LinkElement } from './custom-types'\r\nimport $, { DOMElement } from '../../utils/dom'\r\n\r\nfunction parseHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): LinkElement {\r\n const $elem = $(elem)\r\n children = children.filter(child => {\r\n if (Text.isText(child)) return true\r\n if (editor.isInline(child)) return true\r\n return false\r\n })\r\n\r\n // 无 children ,则用纯文本\r\n if (children.length === 0) {\r\n children = [{ text: $elem.text().replace(/\\s+/gm, ' ') }]\r\n }\r\n\r\n return {\r\n type: 'link',\r\n url: $elem.attr('href') || '',\r\n target: $elem.attr('target') || '',\r\n // @ts-ignore\r\n children,\r\n }\r\n}\r\n\r\nexport const parseHtmlConf = {\r\n selector: 'a:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parseHtml,\r\n}\r\n","/**\r\n * @description unlink menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { UN_LINK_SVG } from '../../../constants/icon-svg'\r\n\r\nclass UnLink implements IButtonMenu {\r\n readonly title = t('link.unLink')\r\n readonly iconSvg = UN_LINK_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 无需获取 val\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const linkNode = DomEditor.getSelectedNodeByType(editor, 'link')\r\n if (linkNode == null) {\r\n // 选区未处于 link node ,则禁用\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n // 取消链接\r\n Transforms.unwrapNodes(editor, {\r\n match: n => DomEditor.checkNodeType(n, 'link'),\r\n })\r\n }\r\n}\r\n\r\nexport default UnLink\r\n","/**\r\n * @description view link menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { EXTERNAL_SVG } from '../../../constants/icon-svg'\r\nimport { LinkElement } from '../custom-types'\r\n\r\nclass ViewLink implements IButtonMenu {\r\n readonly title = t('link.view')\r\n readonly iconSvg = EXTERNAL_SVG\r\n readonly tag = 'button'\r\n\r\n private getSelectedLinkElem(editor: IDomEditor): LinkElement | null {\r\n const node = DomEditor.getSelectedNodeByType(editor, 'link')\r\n if (node == null) return null\r\n return node as LinkElement\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const linkElem = this.getSelectedLinkElem(editor)\r\n if (linkElem) {\r\n return linkElem.url || ''\r\n }\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const linkElem = this.getSelectedLinkElem(editor)\r\n if (linkElem == null) {\r\n // 选区未处于 link node ,则禁用\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n if (!value || typeof value !== 'string') {\r\n throw new Error(`View link failed, link url is '${value}'`)\r\n }\r\n\r\n // 查看链接\r\n window.open(value, '_blank')\r\n }\r\n}\r\n\r\nexport default ViewLink\r\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar un$Slice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (isConstructor(Constructor) && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return un$Slice(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","/**\r\n * @description 链接表单共享状态(与 yunkee 悬停栏协作)\r\n */\r\n\r\nimport { DomEditor, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\n/** 写入中:忽略因 change 触发的 deselect */\r\nexport let linkFormApplying = false\r\n\r\nfunction syncApplyingFlag() {\r\n try {\r\n if (typeof window !== 'undefined') {\r\n ;(window as any).__wELinkFormApplying = linkFormApplying\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n}\r\n\r\nexport function setLinkFormApplying(v: boolean) {\r\n linkFormApplying = !!v\r\n syncApplyingFlag()\r\n}\r\n\r\n/** 可选:yunkee 注入「当前悬停链接 href」 */\r\nlet hoverHrefGetter: (() => string) | null = null\r\n\r\nexport function setLinkHoverHrefGetter(fn: (() => string) | null) {\r\n hoverHrefGetter = fn\r\n}\r\n\r\nexport function getLinkHoverHref(): string {\r\n try {\r\n if (hoverHrefGetter) return hoverHrefGetter() || ''\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n try {\r\n if (typeof window !== 'undefined') {\r\n return String((window as any).__wELinkHoverHref || '')\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return ''\r\n}\r\n\r\nexport function setLinkFormModalOpen(open: boolean, editor?: IDomEditor | null) {\r\n const container =\r\n (typeof document !== 'undefined' &&\r\n (document.querySelector('.editor-content .w-e-text-container') ||\r\n document.querySelector('.w-e-text-container'))) ||\r\n null\r\n if (!container) return\r\n const wasOpen = container.classList.contains('mdg-link-modal-open')\r\n if (open) {\r\n container.classList.add('mdg-link-modal-open')\r\n container.classList.add('w-e-link-modal-open')\r\n return\r\n }\r\n container.classList.remove('mdg-link-modal-open')\r\n container.classList.remove('w-e-link-modal-open')\r\n if (!wasOpen) return\r\n if (linkFormApplying) return\r\n dismissLinkFocusAfterEdit(editor)\r\n}\r\n\r\nexport function dismissLinkFocusAfterEdit(editor?: IDomEditor | null) {\r\n const ed = editor\r\n const hideBar = () => {\r\n try {\r\n DomEditor.getHoverbar?.(ed as any)?.hideAndClean?.()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n try {\r\n if (ed && !ed.isDestroyed && typeof ed.deselect === 'function') {\r\n ed.deselect()\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n hideBar()\r\n if (typeof requestAnimationFrame === 'function') requestAnimationFrame(hideBar)\r\n}\r\n\r\nexport function normalizeLinkUrl(url: string): string {\r\n let s = String(url || '').trim()\r\n if (!s || s === '#' || /^javascript:/i.test(s)) return ''\r\n s = s.replace(/</g, '&lt;').replace(/>/g, '&gt;')\r\n if (/^[a-z][a-z0-9+.-]*:/i.test(s)) return s\r\n return `http://${s}`\r\n}\r\n","/**\r\n * @description 插入/修改链接共用弹层(文本 + 链接 + 取消/确定)\r\n */\r\n\r\nimport { Editor, Node, Range, Transforms } from 'slate'\r\nimport {\r\n IModalMenu,\r\n IDomEditor,\r\n DomEditor,\r\n t,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { DOMElement } from '../../../utils/dom'\r\nimport { LINK_SVG, PENCIL_SVG } from '../../../constants/icon-svg'\r\nimport { LinkElement } from '../custom-types'\r\nimport {\r\n dismissLinkFocusAfterEdit,\r\n setLinkFormApplying,\r\n normalizeLinkUrl,\r\n setLinkFormModalOpen,\r\n} from './link-form-state'\r\n\r\ntype Mode = 'insert' | 'edit'\r\n\r\nclass LinkFormMenu implements IModalMenu {\r\n readonly title: string\r\n readonly iconSvg: string\r\n readonly tag = 'button'\r\n readonly showModal = true\r\n readonly modalWidth = 300\r\n readonly mode: Mode\r\n\r\n private _root: HTMLElement | null = null\r\n private _editor: IDomEditor | null = null\r\n private _editLinkPath: number[] | null = null\r\n private _savedSelection: any = null\r\n private readonly _textInputId: string\r\n private readonly _urlInputId: string\r\n\r\n constructor(mode: Mode = 'edit') {\r\n this.mode = mode === 'insert' ? 'insert' : 'edit'\r\n this.title = this.mode === 'insert' ? t('link.insert') : t('link.edit')\r\n this.iconSvg = this.mode === 'insert' ? LINK_SVG : PENCIL_SVG\r\n const rand = Math.random().toString(36).slice(2, 9)\r\n this._textInputId = `w-e-link-form-text-${rand}`\r\n this._urlInputId = `w-e-link-form-url-${rand}`\r\n }\r\n\r\n getSelectedLinkElem(editor: IDomEditor): LinkElement | null {\r\n const node = DomEditor.getSelectedNodeByType(editor, 'link')\r\n return (node as LinkElement) || null\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const linkElem = this.getSelectedLinkElem(editor)\r\n return linkElem?.url || ''\r\n }\r\n\r\n isActive(): boolean {\r\n return false\r\n }\r\n\r\n exec() {\r\n /* modal 由 showModal 打开 */\r\n }\r\n\r\n private _isInsertDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n try {\r\n const elems = DomEditor.getSelectedElems(editor) || []\r\n return elems.some(el => {\r\n if (editor.isVoid?.(el)) return true\r\n const t = DomEditor.getNodeType(el)\r\n return t === 'pre' || t === 'code' || t === 'link'\r\n })\r\n } catch (_) {\r\n return true\r\n }\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (this.mode === 'insert') return this._isInsertDisabled(editor)\r\n if (editor.selection == null) return true\r\n return this.getSelectedLinkElem(editor) == null\r\n }\r\n\r\n getModalPositionNode(editor: IDomEditor): Node | null {\r\n if (this.mode === 'insert') return null\r\n return DomEditor.getSelectedNodeByType(editor, 'link')\r\n }\r\n\r\n private _isCollapsedSelection(sel: any): boolean {\r\n if (!sel?.anchor || !sel?.focus) return true\r\n const a = sel.anchor\r\n const f = sel.focus\r\n if (a.offset !== f.offset) return false\r\n if (!Array.isArray(a.path) || !Array.isArray(f.path) || a.path.length !== f.path.length) {\r\n return false\r\n }\r\n return a.path.every((p: number, i: number) => p === f.path[i])\r\n }\r\n\r\n private _readFormAndValidate(): { text: string; url: string } | null {\r\n if (!this._root) return null\r\n const textInput = this._root.querySelector(`#${this._textInputId}`) as HTMLInputElement | null\r\n const urlInput = this._root.querySelector(`#${this._urlInputId}`) as HTMLInputElement | null\r\n let text = String(textInput?.value || '').trim()\r\n let url = String(urlInput?.value || '').trim()\r\n if (!url) return null\r\n url = normalizeLinkUrl(url)\r\n if (!url) return null\r\n if (!text) text = url\r\n return { text, url }\r\n }\r\n\r\n private _restoreEditorSelection(editor: IDomEditor): boolean {\r\n try {\r\n editor.focus?.()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n if (this._savedSelection) {\r\n try {\r\n if (typeof editor.select === 'function') editor.select(this._savedSelection)\r\n else Transforms.select(editor, this._savedSelection)\r\n if (editor.selection) return true\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n try {\r\n if (typeof editor.restoreSelection === 'function') editor.restoreSelection()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return !!editor.selection\r\n }\r\n\r\n private async _applyInsert(editor: IDomEditor) {\r\n setLinkFormApplying(true)\r\n try {\r\n if (!this._restoreEditorSelection(editor)) return\r\n if (this._isInsertDisabled(editor)) return\r\n const form = this._readFormAndValidate()\r\n if (!form) return\r\n if (!this._restoreEditorSelection(editor)) return\r\n const { text, url } = form\r\n const sel = editor.selection\r\n if (!sel) return\r\n\r\n if (this._isCollapsedSelection(sel)) {\r\n if (typeof editor.insertText === 'function') editor.insertText(' ')\r\n else Transforms.insertText(editor, ' ')\r\n Transforms.insertNodes(editor, {\r\n type: 'link',\r\n url,\r\n children: [{ text }],\r\n } as LinkElement)\r\n if (typeof editor.insertFragment === 'function') {\r\n editor.insertFragment([{ text: ' ' }])\r\n } else {\r\n Transforms.insertNodes(editor, { text: ' ' })\r\n }\r\n } else {\r\n let selectedText = ''\r\n try {\r\n selectedText = String(Editor.string(editor, sel) || '')\r\n } catch (_) {\r\n selectedText = ''\r\n }\r\n if (selectedText !== text) {\r\n if (typeof editor.deleteFragment === 'function') editor.deleteFragment()\r\n else Transforms.delete(editor)\r\n Transforms.insertNodes(editor, {\r\n type: 'link',\r\n url,\r\n children: [{ text }],\r\n } as LinkElement)\r\n } else {\r\n Transforms.wrapNodes(editor, { type: 'link', url, children: [] } as LinkElement, {\r\n split: true,\r\n })\r\n Transforms.collapse(editor, { edge: 'end' })\r\n }\r\n }\r\n } catch (e) {\r\n console.warn('[wangeditor] insertLinkForm apply', e)\r\n } finally {\r\n setLinkFormApplying(false)\r\n try {\r\n editor.hidePanelOrModal()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n setLinkFormModalOpen(false, editor)\r\n dismissLinkFocusAfterEdit(editor)\r\n }\r\n }\r\n\r\n private _resolveEditLinkPath(editor: IDomEditor) {\r\n let linkElem = this.getSelectedLinkElem(editor)\r\n let path: number[] | null = null\r\n if (linkElem) {\r\n try {\r\n path = DomEditor.findPath(editor, linkElem) as number[]\r\n } catch (_) {\r\n path = null\r\n }\r\n }\r\n if ((!path || !path.length) && Array.isArray(this._editLinkPath) && this._editLinkPath.length) {\r\n path = [...this._editLinkPath]\r\n try {\r\n const entry = Editor.node(editor, path)\r\n const node = entry?.[0]\r\n if (node && DomEditor.checkNodeType(node, 'link')) {\r\n linkElem = node as LinkElement\r\n }\r\n } catch (_) {\r\n /* path 可能失效 */\r\n }\r\n }\r\n return { linkElem, path }\r\n }\r\n\r\n private async _applyEdit(editor: IDomEditor) {\r\n setLinkFormApplying(true)\r\n try {\r\n this._restoreEditorSelection(editor)\r\n const form = this._readFormAndValidate()\r\n if (!form) return\r\n const { text, url } = form\r\n\r\n this._restoreEditorSelection(editor)\r\n let { linkElem, path } = this._resolveEditLinkPath(editor)\r\n if ((!path || !path.length) && linkElem) {\r\n try {\r\n path = DomEditor.findPath(editor, linkElem) as number[]\r\n } catch (_) {\r\n path = null\r\n }\r\n }\r\n if (!path?.length) return\r\n\r\n const oldText = linkElem ? String(Node.string(linkElem) || '') : ''\r\n Transforms.setNodes(editor, { url } as any, { at: path })\r\n if (text !== oldText) {\r\n const start = Editor.start(editor, path)\r\n const end = Editor.end(editor, path)\r\n if (start && end) {\r\n Transforms.select(editor, { anchor: start, focus: end })\r\n Transforms.insertText(editor, text)\r\n }\r\n }\r\n } catch (e) {\r\n console.warn('[wangeditor] editLinkForm apply', e)\r\n } finally {\r\n setLinkFormApplying(false)\r\n try {\r\n editor.hidePanelOrModal()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n setLinkFormModalOpen(false, editor)\r\n dismissLinkFocusAfterEdit(editor)\r\n }\r\n }\r\n\r\n private async _apply(editor: IDomEditor | null) {\r\n if (!editor || editor.isDestroyed || !this._root) return\r\n if (this.mode === 'insert') {\r\n await this._applyInsert(editor)\r\n return\r\n }\r\n await this._applyEdit(editor)\r\n }\r\n\r\n private _onRootClick(e: Event) {\r\n const editor = this._editor\r\n if (!editor || editor.isDestroyed) return\r\n const el = e.target\r\n if (!(el instanceof Element)) return\r\n const action = el.closest?.('[data-w-e-link-action]')?.getAttribute('data-w-e-link-action')\r\n if (!action) return\r\n e.preventDefault()\r\n if (action === 'cancel') {\r\n editor.hidePanelOrModal()\r\n setLinkFormModalOpen(false, editor)\r\n return\r\n }\r\n if (action === 'ok') {\r\n void this._apply(editor)\r\n }\r\n }\r\n\r\n private _onRootKeydown(e: KeyboardEvent) {\r\n if (e.key !== 'Enter') return\r\n const t = e.target\r\n if (!(t instanceof HTMLInputElement)) return\r\n e.preventDefault()\r\n void this._apply(this._editor)\r\n }\r\n\r\n getModalContentElem(editor: IDomEditor): DOMElement {\r\n this._editor = editor\r\n try {\r\n DomEditor.getHoverbar?.(editor)?.hideAndClean?.()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n setLinkFormModalOpen(true, editor)\r\n\r\n if (!this._root) {\r\n const root = document.createElement('div')\r\n root.className = 'mdgch-edit-link-form w-e-link-form'\r\n root.addEventListener('click', ev => this._onRootClick(ev))\r\n root.addEventListener('keydown', ev => this._onRootKeydown(ev))\r\n this._root = root\r\n }\r\n\r\n this._editLinkPath = null\r\n this._savedSelection = null\r\n try {\r\n if (editor.selection) {\r\n this._savedSelection = JSON.parse(JSON.stringify(editor.selection))\r\n }\r\n } catch (_) {\r\n this._savedSelection = editor.selection || null\r\n }\r\n\r\n let url = ''\r\n let text = ''\r\n if (this.mode === 'edit') {\r\n const linkElem = this.getSelectedLinkElem(editor)\r\n url = linkElem?.url || ''\r\n text = linkElem ? String(Node.string(linkElem) || '') : ''\r\n if (linkElem) {\r\n try {\r\n const p = DomEditor.findPath(editor, linkElem)\r\n if (p?.length) this._editLinkPath = [...p]\r\n } catch (_) {\r\n this._editLinkPath = null\r\n }\r\n }\r\n } else {\r\n const sel = editor.selection\r\n if (sel && !this._isCollapsedSelection(sel)) {\r\n try {\r\n text = String(Editor.string(editor, sel) || '')\r\n } catch (_) {\r\n text = ''\r\n }\r\n }\r\n url = ''\r\n }\r\n\r\n this._root.innerHTML = `\r\n <div class=\"mdgch-edit-link-row\">\r\n <span class=\"mdgch-edit-link-label\">文本</span>\r\n <input type=\"text\" class=\"mdgch-edit-link-input\" id=\"${this._textInputId}\" autocomplete=\"off\" />\r\n </div>\r\n <div class=\"mdgch-edit-link-row\">\r\n <span class=\"mdgch-edit-link-label\">链接</span>\r\n <input type=\"text\" class=\"mdgch-edit-link-input\" id=\"${this._urlInputId}\" autocomplete=\"off\" />\r\n </div>\r\n <div class=\"mdgch-edit-link-actions\">\r\n <button type=\"button\" class=\"mdgch-edit-link-btn mdgch-edit-link-btn-cancel\" data-w-e-link-action=\"cancel\"><span>取消</span></button>\r\n <button type=\"button\" class=\"mdgch-edit-link-btn mdgch-edit-link-btn-ok\" data-w-e-link-action=\"ok\"><span>确定</span></button>\r\n </div>\r\n `\r\n\r\n const textInput = this._root.querySelector(`#${this._textInputId}`) as HTMLInputElement | null\r\n const urlInput = this._root.querySelector(`#${this._urlInputId}`) as HTMLInputElement | null\r\n if (textInput) textInput.value = text\r\n if (urlInput) urlInput.value = url\r\n\r\n setTimeout(() => {\r\n textInput?.focus?.()\r\n }, 0)\r\n\r\n return this._root\r\n }\r\n}\r\n\r\nexport default LinkFormMenu\r\n","/**\r\n * @description 查看链接:alwaysEnable + 悬停 href 兜底\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { EXTERNAL_SVG } from '../../../constants/icon-svg'\r\nimport { getLinkHoverHref, normalizeLinkUrl } from './link-form-state'\r\n\r\nclass ViewLinkOpenMenu implements IButtonMenu {\r\n readonly title = t('link.view')\r\n readonly iconSvg = EXTERNAL_SVG\r\n readonly tag = 'button'\r\n readonly alwaysEnable = true\r\n\r\n private _hrefFromSelection(editor: IDomEditor): string {\r\n try {\r\n const node = DomEditor.getSelectedNodeByType(editor, 'link') as any\r\n const u = String(node?.url || '').trim()\r\n if (u && u !== '#' && !/^javascript:/i.test(u)) return u\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return ''\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return this._hrefFromSelection(editor) || getLinkHoverHref() || ''\r\n }\r\n\r\n isActive(): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return !this.getValue(editor)\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n let href = typeof value === 'string' ? value.trim() : ''\r\n if (!href || href === '#' || /^javascript:/i.test(href)) {\r\n href = String(this.getValue(editor) || '')\r\n }\r\n href = normalizeLinkUrl(href) || href\r\n if (!href) return\r\n window.open(href, '_blank', 'noopener,noreferrer')\r\n }\r\n}\r\n\r\nexport default ViewLinkOpenMenu\r\n","/**\r\n * @description link menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport UnLink from './UnLink'\r\nimport ViewLink from './ViewLink'\r\nimport LinkFormMenu from './LinkFormMenu'\r\nimport ViewLinkOpenMenu from './ViewLinkOpenMenu'\r\nimport { genLinkMenuConfig } from './config'\r\n\r\nconst config = genLinkMenuConfig()\r\n\r\n/** 官方 insertLink / editLink:文本 + 链接 + 取消/确定(无「链接至」) */\r\nconst insertLinkMenuConf = {\r\n key: 'insertLink',\r\n factory() {\r\n return new LinkFormMenu('insert')\r\n },\r\n config,\r\n}\r\n\r\nconst editLinkMenuConf = {\r\n key: 'editLink',\r\n factory() {\r\n return new LinkFormMenu('edit')\r\n },\r\n config,\r\n}\r\n\r\nconst unLinkMenuConf = {\r\n key: 'unLink',\r\n factory() {\r\n return new UnLink()\r\n },\r\n}\r\n\r\nconst viewLinkMenuConf = {\r\n key: 'viewLink',\r\n factory() {\r\n return new ViewLink()\r\n },\r\n}\r\n\r\nconst insertLinkFormMenuConf = {\r\n key: 'insertLinkForm',\r\n factory() {\r\n return new LinkFormMenu('insert')\r\n },\r\n config,\r\n}\r\n\r\nconst editLinkFormMenuConf = {\r\n key: 'editLinkForm',\r\n factory() {\r\n return new LinkFormMenu('edit')\r\n },\r\n config,\r\n}\r\n\r\nconst viewLinkOpenMenuConf = {\r\n key: 'viewLinkOpen',\r\n factory() {\r\n return new ViewLinkOpenMenu()\r\n },\r\n}\r\n\r\nexport {\r\n insertLinkMenuConf,\r\n editLinkMenuConf,\r\n unLinkMenuConf,\r\n viewLinkMenuConf,\r\n insertLinkFormMenuConf,\r\n editLinkFormMenuConf,\r\n viewLinkOpenMenuConf,\r\n}\r\n\r\nexport { setLinkHoverHrefGetter } from './link-form-state'\r\n","/**\r\n * @description link menu config\r\n * @author wangfupeng\r\n */\r\n\r\nexport function genLinkMenuConfig() {\r\n return {\r\n /**\r\n * 检查链接,支持 async fn\r\n * @param text link text\r\n * @param url link url\r\n */\r\n checkLink(text: string, url: string): boolean | string | undefined {\r\n // 1. 返回 true ,说明检查通过\r\n // 2. 返回一个字符串,说明检查未通过,编辑器会阻止插入。会 alert 出错误信息(即返回的字符串)\r\n // 3. 返回 undefined(即没有任何返回),说明检查未通过,编辑器会阻止插入\r\n return true\r\n },\r\n\r\n /**\r\n * parse link url\r\n * @param url url\r\n * @returns newUrl\r\n */\r\n parseLinkUrl(url: string): string {\r\n return url\r\n },\r\n }\r\n}\r\n","/**\r\n * @description link entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport withLink from './plugin'\r\nimport { renderLinkConf } from './render-elem'\r\nimport { linkToHtmlConf } from './elem-to-html'\r\nimport { parseHtmlConf } from './parse-elem-html'\r\nimport {\r\n insertLinkMenuConf,\r\n editLinkMenuConf,\r\n unLinkMenuConf,\r\n viewLinkMenuConf,\r\n insertLinkFormMenuConf,\r\n editLinkFormMenuConf,\r\n viewLinkOpenMenuConf,\r\n} from './menu/index'\r\n\r\nconst link: Partial<IModuleConf> = {\r\n renderElems: [renderLinkConf],\r\n elemsToHtml: [linkToHtmlConf],\r\n parseElemsHtml: [parseHtmlConf],\r\n menus: [\r\n insertLinkMenuConf,\r\n editLinkMenuConf,\r\n unLinkMenuConf,\r\n viewLinkMenuConf,\r\n insertLinkFormMenuConf,\r\n editLinkFormMenuConf,\r\n viewLinkOpenMenuConf,\r\n ],\r\n editorPlugin: withLink,\r\n}\r\n\r\nexport default link\r\n\r\n// 供 yunkee 注入悬停链接 href\r\nexport { setLinkHoverHrefGetter } from './menu/link-form-state'\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Node, Path, Range, Transforms } from 'slate'\r\nimport { DomEditor, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport isUrl from 'is-url'\r\nimport { isMenuDisabled, insertLink } from './helper'\r\n\r\nfunction withLink<T extends IDomEditor>(editor: T): T {\r\n const { isInline, insertData, normalizeNode, insertNode, insertText } = editor\r\n const newEditor = editor\r\n\r\n // 重写 isInline\r\n newEditor.isInline = elem => {\r\n const { type } = elem\r\n\r\n if (type === 'link') {\r\n return true\r\n }\r\n\r\n return isInline(elem)\r\n }\r\n\r\n /**\r\n * Slate 0.72 在 inline 末尾 insertText 不会自动跳出;\r\n * 光标在链接末尾时先移到链接外再写入,避免继续算进链接。\r\n */\r\n newEditor.insertText = (text: string) => {\r\n const { selection } = newEditor\r\n if (text && selection && Range.isCollapsed(selection)) {\r\n const linkEntry = Editor.above(newEditor, {\r\n at: selection,\r\n match: n => DomEditor.checkNodeType(n, 'link'),\r\n })\r\n if (linkEntry) {\r\n const [, linkPath] = linkEntry\r\n if (Editor.isEnd(newEditor, selection.anchor, linkPath)) {\r\n const after = Editor.after(newEditor, linkPath)\r\n if (after) {\r\n Transforms.select(newEditor, after)\r\n } else {\r\n const nextPath = Path.next(linkPath)\r\n Transforms.insertNodes(newEditor, { text: '' }, { at: nextPath })\r\n Transforms.select(newEditor, { path: nextPath, offset: 0 })\r\n }\r\n insertText(text)\r\n return\r\n }\r\n }\r\n }\r\n insertText(text)\r\n }\r\n\r\n // 重写 insertData ,粘贴插入链接\r\n newEditor.insertData = (data: DataTransfer) => {\r\n const text = data.getData('text/plain')\r\n if (!isUrl(text)) {\r\n // 非链接\r\n insertData(data)\r\n return\r\n }\r\n\r\n // 插入链接\r\n if (isMenuDisabled(newEditor)) return // disabled\r\n const { selection } = newEditor\r\n if (selection == null) return\r\n const selectedText = Editor.string(newEditor, selection) // 获取选中的文字\r\n insertLink(newEditor, selectedText, text)\r\n }\r\n\r\n newEditor.normalizeNode = ([node, path]) => {\r\n const type = DomEditor.getNodeType(node)\r\n if (type !== 'link') {\r\n // 未命中 link ,执行默认的 normalizeNode\r\n return normalizeNode([node, path])\r\n }\r\n\r\n // 如果链接内容为空,则删除\r\n const str = Node.string(node)\r\n if (str === '') {\r\n return Transforms.removeNodes(newEditor, { at: path })\r\n }\r\n\r\n return normalizeNode([node, path])\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withLink\r\n","var uncurryThis = require('../internals/function-uncurry-this');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n","'use strict';\nvar global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar RangeError = global.RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toIntegerOrInfinity(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar String = global.String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar un$ToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = fails(function () {\n return un$ToFixed(0.00008, 3) !== '0.000' ||\n un$ToFixed(0.9, 0) !== '1' ||\n un$ToFixed(1.255, 2) !== '1.25' ||\n un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n // V8 ~ Android 4.3-\n un$ToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toIntegerOrInfinity(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat('0', fractDigits - k) + result\n : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","/**\r\n * @description image render elem\r\n * @author wangfupeng\r\n */\r\n\r\nimport throttle from 'lodash.throttle'\r\nimport { Element as SlateElement, Transforms } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array } from '../../utils/dom'\r\nimport { ImageElement } from './custom-types'\r\n\r\ninterface IImageSize {\r\n width?: string\r\n height?: string\r\n}\r\n\r\nfunction genContainerId(editor: IDomEditor, elemNode: SlateElement) {\r\n const { id } = DomEditor.findKey(editor, elemNode) // node 唯一 id\r\n return `w-e-image-container-${id}`\r\n}\r\n\r\n/**\r\n * 未选中时,渲染 image container\r\n */\r\nfunction renderContainer(\r\n editor: IDomEditor,\r\n elemNode: SlateElement,\r\n imageVnode: VNode,\r\n imageInfo: IImageSize\r\n): VNode {\r\n const { width, height } = imageInfo\r\n\r\n const style: any = {}\r\n if (width) style.width = width\r\n if (height) style.height = height\r\n\r\n const containerId = genContainerId(editor, elemNode)\r\n\r\n return (\r\n <div id={containerId} style={style} className=\"w-e-image-container\">\r\n {imageVnode}\r\n </div>\r\n )\r\n}\r\n\r\n/**\r\n * 选中状态下,渲染 image container(渲染拖拽容器,修改图片尺寸)\r\n */\r\nfunction renderResizeContainer(\r\n editor: IDomEditor,\r\n elemNode: SlateElement,\r\n imageVnode: VNode,\r\n imageInfo: IImageSize\r\n) {\r\n const $body = $('body')\r\n const containerId = genContainerId(editor, elemNode)\r\n const { width, height } = imageInfo\r\n\r\n let originalX = 0\r\n let originalWith = 0\r\n let originalHeight = 0\r\n let revers = false // 是否反转。如向右拖拽 right-top 需增加宽度(非反转),但向右拖拽 left-top 则需要减少宽度(反转)\r\n let $container: Dom7Array | null = null\r\n\r\n function getContainerElem(): Dom7Array {\r\n const $container = $(`#${containerId}`)\r\n if ($container.length === 0) throw new Error('Cannot find image container elem')\r\n return $container\r\n }\r\n\r\n /**\r\n * 初始化。监听事件,记录原始数据\r\n */\r\n function init(clientX: number) {\r\n $container = getContainerElem()\r\n\r\n // 记录当前 x 坐标值\r\n originalX = clientX\r\n\r\n // 记录 img 原始宽高\r\n const $img = $container.find('img')\r\n if ($img.length === 0) throw new Error('Cannot find image elem')\r\n originalWith = $img.width()\r\n originalHeight = $img.height()\r\n\r\n // 监听 mousemove\r\n $body.on('mousemove', onMousemove)\r\n\r\n // 监听 mouseup\r\n $body.on('mouseup', onMouseup)\r\n\r\n // 隐藏 hoverbar\r\n const hoverbar = DomEditor.getHoverbar(editor)\r\n if (hoverbar) hoverbar.hideAndClean()\r\n }\r\n\r\n // mouseover callback (节流)\r\n const onMousemove = throttle((e: Event) => {\r\n e.preventDefault()\r\n\r\n const { clientX } = e as MouseEvent\r\n const gap = revers ? originalX - clientX : clientX - originalX // 考虑是否反转\r\n const newWidth = originalWith + gap\r\n const newHeight = originalHeight * (newWidth / originalWith) // 根据 width ,按比例计算 height\r\n\r\n // 实时修改 img 宽高 -【注意】这里只修改 DOM ,mouseup 时再统一不修改 node\r\n if ($container == null) return\r\n if (newWidth <= 15 || newHeight <= 15) return // 最小就是 15px\r\n\r\n $container.css('width', `${newWidth}px`)\r\n $container.css('height', `${newHeight}px`)\r\n }, 100)\r\n\r\n function onMouseup(e: Event) {\r\n // 取消监听 mousemove\r\n $body.off('mousemove', onMousemove)\r\n\r\n if ($container == null) return\r\n const newWidth = $container.width().toFixed(2)\r\n const newHeight = $container.height().toFixed(2)\r\n\r\n // 修改 node\r\n const props: Partial<ImageElement> = {\r\n style: {\r\n ...(elemNode as ImageElement).style,\r\n width: `${newWidth}px`,\r\n height: `${newHeight}px`,\r\n },\r\n }\r\n Transforms.setNodes(editor, props, { at: DomEditor.findPath(editor, elemNode) })\r\n\r\n // 取消监听 mouseup\r\n $body.off('mouseup', onMouseup)\r\n }\r\n\r\n const style: any = {}\r\n if (width) style.width = width\r\n if (height) style.height = height\r\n // style.boxShadow = '0 0 0 1px #B4D5FF' // 自定义 selected 样式,因为有拖拽触手\r\n\r\n return (\r\n <div\r\n id={containerId}\r\n style={style}\r\n className=\"w-e-image-container w-e-selected-image-container\"\r\n on={{\r\n // 统一绑定拖拽触手的 mousedown 事件\r\n mousedown: (e: MouseEvent) => {\r\n const $target = $(e.target as Element)\r\n if (!$target.hasClass('w-e-image-dragger')) {\r\n // target 不是 .w-e-image-dragger 拖拽触手,则忽略\r\n return\r\n }\r\n e.preventDefault()\r\n\r\n if ($target.hasClass('left-top') || $target.hasClass('left-bottom')) {\r\n revers = true // 反转。向右拖拽,减少宽度\r\n }\r\n init(e.clientX) // 初始化\r\n },\r\n }}\r\n >\r\n {imageVnode}\r\n\r\n {/* 拖拽的触手,会统一在上级 DOM 绑定拖拽事件 */}\r\n <div className=\"w-e-image-dragger left-top\"></div>\r\n <div className=\"w-e-image-dragger right-top\"></div>\r\n <div className=\"w-e-image-dragger left-bottom\"></div>\r\n <div className=\"w-e-image-dragger right-bottom\"></div>\r\n </div>\r\n )\r\n}\r\n\r\nfunction renderImage(elemNode: SlateElement, children: VNode[] | null, editor: IDomEditor): VNode {\r\n const { src, alt = '', href = '', style = {} } = elemNode as ImageElement\r\n const { width = '', height = '' } = style\r\n const selected = DomEditor.isNodeSelected(editor, elemNode) // 图片是否选中\r\n\r\n const imageStyle: any = {}\r\n if (width) imageStyle.width = '100%'\r\n if (height) imageStyle.height = '100%'\r\n\r\n // 【注意】void node 中,renderElem 不用处理 children 。core 会统一处理。\r\n const vnode = <img style={imageStyle} src={src} alt={alt} data-href={href} />\r\n\r\n const isDisabled = editor.isDisabled()\r\n\r\n if (selected && !isDisabled) {\r\n // 选中,未禁用 - 渲染 resize container\r\n return renderResizeContainer(editor, elemNode, vnode, { width, height })\r\n }\r\n\r\n // 其他,渲染普通 image container\r\n return renderContainer(editor, elemNode, vnode, { width, height })\r\n}\r\n\r\nconst renderImageConf = {\r\n type: 'image', // 和 elemNode.type 一致\r\n renderElem: renderImage,\r\n}\r\n\r\nexport { renderImageConf }\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\nimport { ImageElement } from './custom-types'\r\n\r\nfunction imageToHtml(elemNode: Element, childrenHtml: string): string {\r\n const { src, alt = '', href = '', style = {} } = elemNode as ImageElement\r\n const { width = '', height = '' } = style\r\n\r\n let styleStr = ''\r\n if (width) styleStr += `width: ${width};`\r\n if (height) styleStr += `height: ${height};`\r\n return `<img src=\"${src}\" alt=\"${alt}\" data-href=\"${href}\" style=\"${styleStr}\"/>`\r\n}\r\n\r\nexport const imageToHtmlConf = {\r\n type: 'image',\r\n elemToHtml: imageToHtml,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { ImageElement } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nfunction parseHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): ImageElement {\r\n const $elem = $(elem)\r\n let href = $elem.attr('data-href') || ''\r\n href = decodeURIComponent(href) // 兼容 V4\r\n\r\n return {\r\n type: 'image',\r\n src: $elem.attr('src') || '',\r\n alt: $elem.attr('alt') || '',\r\n href,\r\n style: {\r\n width: getStyleValue($elem, 'width'),\r\n height: getStyleValue($elem, 'height'),\r\n },\r\n children: [{ text: '' }], // void node 有一个空白 text\r\n }\r\n}\r\n\r\nexport const parseHtmlConf = {\r\n selector: 'img:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parseHtml,\r\n}\r\n","/**\r\n * @description image menu helper\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Range, Editor } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { ImageElement, ImageStyle } from './custom-types'\r\nimport { replaceSymbols } from '../../utils/util'\r\n\r\nasync function check(\r\n menuKey: string,\r\n editor: IDomEditor,\r\n src: string,\r\n alt: string = '',\r\n href: string = ''\r\n): Promise<boolean> {\r\n const { checkImage } = editor.getMenuConfig(menuKey)\r\n if (checkImage) {\r\n const res = await checkImage(src, alt, href)\r\n if (typeof res === 'string') {\r\n // 检验未通过,提示信息\r\n editor.alert(res, 'error')\r\n return false\r\n }\r\n if (res == null) {\r\n // 检验未通过,不提示信息\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n}\r\n\r\nasync function parseSrc(menuKey: string, editor: IDomEditor, src: string): Promise<string> {\r\n const { parseImageSrc } = editor.getMenuConfig(menuKey)\r\n if (parseImageSrc) {\r\n const newSrc = await parseImageSrc(src)\r\n return newSrc\r\n }\r\n return src\r\n}\r\n\r\nexport async function insertImageNode(\r\n editor: IDomEditor,\r\n src: string,\r\n alt: string = '',\r\n href: string = ''\r\n) {\r\n const res = await check('insertImage', editor, src, alt, href)\r\n if (!res) return // 检查失败,终止操作\r\n\r\n const parsedSrc = await parseSrc('insertImage', editor, src)\r\n\r\n // 新建一个 image node\r\n const image: ImageElement = {\r\n type: 'image',\r\n src: replaceSymbols(parsedSrc),\r\n href,\r\n alt,\r\n style: {},\r\n children: [{ text: '' }], // 【注意】void node 需要一个空 text 作为 children\r\n }\r\n\r\n // 如果 blur ,则恢复选区\r\n if (editor.selection === null) editor.restoreSelection()\r\n\r\n // 如果当前正好选中了图片,则 move 一下(如:连续上传多张图片时)\r\n if (DomEditor.getSelectedNodeByType(editor, 'image')) {\r\n editor.move(1)\r\n }\r\n\r\n if (isInsertImageMenuDisabled(editor)) return\r\n\r\n // 插入图片\r\n Transforms.insertNodes(editor, image)\r\n\r\n // 回调\r\n const { onInsertedImage } = editor.getMenuConfig('insertImage')\r\n if (onInsertedImage) onInsertedImage(image)\r\n}\r\n\r\nexport async function updateImageNode(\r\n editor: IDomEditor,\r\n src: string,\r\n alt: string = '',\r\n href: string = '',\r\n style: ImageStyle = {}\r\n) {\r\n const res = await check('editImage', editor, src, alt, href)\r\n if (!res) return // 检查失败,终止操作\r\n\r\n const parsedSrc = await parseSrc('editImage', editor, src)\r\n\r\n const selectedImageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n if (selectedImageNode == null) return\r\n const { style: curStyle = {} } = selectedImageNode as ImageElement\r\n\r\n // 修改图片\r\n const nodeProps: Partial<ImageElement> = {\r\n src: parsedSrc,\r\n alt,\r\n href,\r\n style: {\r\n ...curStyle,\r\n ...style,\r\n },\r\n }\r\n Transforms.setNodes(editor, nodeProps, {\r\n match: n => DomEditor.checkNodeType(n, 'image'),\r\n })\r\n\r\n // 回调\r\n const imageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n const { onUpdatedImage } = editor.getMenuConfig('editImage')\r\n if (onUpdatedImage) onUpdatedImage(imageNode)\r\n}\r\n\r\n/**\r\n * 判断菜单是否要 disabled\r\n * @param editor editor\r\n */\r\nexport function isInsertImageMenuDisabled(editor: IDomEditor): boolean {\r\n const { selection } = editor\r\n if (selection == null) return true\r\n if (!Range.isCollapsed(selection)) return true // 选区非折叠,禁用\r\n\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n if (type === 'code') return true // 代码块\r\n if (type === 'pre') return true // 代码块\r\n if (type === 'link') return true // 链接\r\n if (type === 'list-item') return true // list\r\n if (type.startsWith('header')) return true // 标题\r\n if (type === 'blockquote') return true // 引用\r\n if (Editor.isVoid(editor, n)) return true // void\r\n\r\n return false\r\n },\r\n universal: true,\r\n })\r\n\r\n if (match) return true\r\n return false\r\n}\r\n","/**\r\n * @description insert image menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Node } from 'slate'\r\nimport {\r\n IModalMenu,\r\n IDomEditor,\r\n genModalInputElems,\r\n genModalButtonElems,\r\n t,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array, DOMElement } from '../../../utils/dom'\r\nimport { genRandomStr } from '../../../utils/util'\r\nimport { IMAGE_SVG } from '../../../constants/icon-svg'\r\nimport { insertImageNode, isInsertImageMenuDisabled } from '../helper'\r\n\r\n/**\r\n * 生成唯一的 DOM ID\r\n */\r\nfunction genDomID(): string {\r\n return genRandomStr('w-e-insert-image')\r\n}\r\n\r\nclass InsertImage implements IModalMenu {\r\n readonly title = t('image.netImage')\r\n readonly iconSvg = IMAGE_SVG\r\n readonly tag = 'button'\r\n readonly showModal = true // 点击 button 时显示 modal\r\n readonly modalWidth = 300\r\n private $content: Dom7Array | null = null\r\n private readonly srcInputId = genDomID()\r\n private readonly altInputId = genDomID()\r\n private readonly hrefInputId = genDomID()\r\n private readonly buttonId = genDomID()\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 插入菜单,不需要 value\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 任何时候,都不用激活 menu\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 点击菜单时,弹出 modal 之前,不需要执行其他代码\r\n // 此处空着即可\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return isInsertImageMenuDisabled(editor)\r\n }\r\n\r\n getModalPositionNode(editor: IDomEditor): Node | null {\r\n return null // modal 依据选区定位\r\n }\r\n\r\n getModalContentElem(editor: IDomEditor): DOMElement {\r\n const { srcInputId, altInputId, hrefInputId, buttonId } = this\r\n\r\n // 获取 input button elem\r\n const [srcContainerElem, inputSrcElem] = genModalInputElems(t('image.src'), srcInputId)\r\n const $inputSrc = $(inputSrcElem)\r\n const [altContainerElem, inputAltElem] = genModalInputElems(t('image.desc'), altInputId)\r\n const $inputAlt = $(inputAltElem)\r\n const [hrefContainerElem, inputHrefElem] = genModalInputElems(t('image.link'), hrefInputId)\r\n const $inputHref = $(inputHrefElem)\r\n const [buttonContainerElem] = genModalButtonElems(buttonId, t('common.ok'))\r\n\r\n if (this.$content == null) {\r\n // 第一次渲染\r\n const $content = $('<div></div>')\r\n\r\n // 绑定事件(第一次渲染时绑定,不要重复绑定)\r\n $content.on('click', `#${buttonId}`, e => {\r\n e.preventDefault()\r\n const src = $content.find(`#${srcInputId}`).val().trim()\r\n const alt = $content.find(`#${altInputId}`).val().trim()\r\n const href = $content.find(`#${hrefInputId}`).val().trim()\r\n this.insertImage(editor, src, alt, href)\r\n editor.hidePanelOrModal() // 隐藏 modal\r\n })\r\n\r\n // 记录属性,重要\r\n this.$content = $content\r\n }\r\n\r\n const $content = this.$content\r\n $content.empty() // 先清空内容\r\n\r\n // append inputs and button\r\n $content.append(srcContainerElem)\r\n $content.append(altContainerElem)\r\n $content.append(hrefContainerElem)\r\n $content.append(buttonContainerElem)\r\n\r\n // 设置 input val\r\n $inputSrc.val('')\r\n $inputAlt.val('')\r\n $inputHref.val('')\r\n\r\n // focus 一个 input(异步,此时 DOM 尚未渲染)\r\n setTimeout(() => {\r\n $inputSrc.focus()\r\n })\r\n\r\n return $content[0]\r\n }\r\n\r\n private insertImage(editor: IDomEditor, src: string, alt: string = '', href: string = '') {\r\n if (!src) return\r\n\r\n // 还原选区\r\n editor.restoreSelection()\r\n\r\n if (this.isDisabled(editor)) return\r\n\r\n // 插入图片\r\n insertImageNode(editor, src, alt, href)\r\n }\r\n}\r\n\r\nexport default InsertImage\r\n","/**\r\n * @description delete image menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { TRASH_SVG } from '../../../constants/icon-svg'\r\n\r\nclass DeleteImage implements IButtonMenu {\r\n readonly title = t('image.delete')\r\n readonly iconSvg = TRASH_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 无需获取 val\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const imageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n if (imageNode == null) {\r\n // 选区未处于 image node ,则禁用\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n // 删除图片\r\n Transforms.removeNodes(editor, {\r\n match: n => DomEditor.checkNodeType(n, 'image'),\r\n })\r\n }\r\n}\r\n\r\nexport default DeleteImage\r\n","/**\r\n * @description editor image menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Node, Range } from 'slate'\r\nimport {\r\n IModalMenu,\r\n IDomEditor,\r\n DomEditor,\r\n genModalInputElems,\r\n genModalButtonElems,\r\n t,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array, DOMElement } from '../../../utils/dom'\r\nimport { genRandomStr } from '../../../utils/util'\r\nimport { PENCIL_SVG } from '../../../constants/icon-svg'\r\nimport { updateImageNode } from '../helper'\r\nimport { ImageElement, ImageStyle } from '../custom-types'\r\n\r\n/**\r\n * 生成唯一的 DOM ID\r\n */\r\nfunction genDomID(): string {\r\n return genRandomStr('w-e-edit-image')\r\n}\r\n\r\nclass EditImage implements IModalMenu {\r\n readonly title = t('image.edit')\r\n readonly iconSvg = PENCIL_SVG\r\n readonly tag = 'button'\r\n readonly showModal = true // 点击 button 时显示 modal\r\n readonly modalWidth = 300\r\n private $content: Dom7Array | null = null\r\n private readonly srcInputId = genDomID()\r\n private readonly altInputId = genDomID()\r\n private readonly hrefInputId = genDomID()\r\n private readonly buttonId = genDomID()\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 编辑图片,用不到 getValue\r\n return ''\r\n }\r\n\r\n private getImageNode(editor: IDomEditor): Node | null {\r\n return DomEditor.getSelectedNodeByType(editor, 'image')\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 点击菜单时,弹出 modal 之前,不需要执行其他代码\r\n // 此处空着即可\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n const { selection } = editor\r\n if (selection == null) return true\r\n if (!Range.isCollapsed(selection)) return true // 选区非折叠,禁用\r\n\r\n const imageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n\r\n // 未匹配到 image node 则禁用\r\n if (imageNode == null) return true\r\n return false\r\n }\r\n\r\n getModalPositionNode(editor: IDomEditor): Node | null {\r\n return this.getImageNode(editor)\r\n }\r\n\r\n getModalContentElem(editor: IDomEditor): DOMElement {\r\n const { srcInputId, altInputId, hrefInputId, buttonId } = this\r\n\r\n const selectedImageNode = this.getImageNode(editor)\r\n if (selectedImageNode == null) {\r\n throw new Error('Not found selected image node')\r\n }\r\n\r\n // 获取 input button elem\r\n const [srcContainerElem, inputSrcElem] = genModalInputElems(t('image.src'), srcInputId)\r\n const $inputSrc = $(inputSrcElem)\r\n const [altContainerElem, inputAltElem] = genModalInputElems(t('image.desc'), altInputId)\r\n const $inputAlt = $(inputAltElem)\r\n const [hrefContainerElem, inputHrefElem] = genModalInputElems(t('image.link'), hrefInputId)\r\n const $inputHref = $(inputHrefElem)\r\n const [buttonContainerElem] = genModalButtonElems(buttonId, t('common.ok'))\r\n\r\n if (this.$content == null) {\r\n // 第一次渲染\r\n const $content = $('<div></div>')\r\n\r\n // 绑定事件(第一次渲染时绑定,不要重复绑定)\r\n $content.on('click', `#${buttonId}`, e => {\r\n e.preventDefault()\r\n\r\n const src = $content.find(`#${srcInputId}`).val()\r\n const alt = $content.find(`#${altInputId}`).val()\r\n const href = $content.find(`#${hrefInputId}`).val()\r\n this.updateImage(editor, src, alt, href)\r\n editor.hidePanelOrModal() // 隐藏 modal\r\n })\r\n\r\n // 记录属性,重要\r\n this.$content = $content\r\n }\r\n\r\n const $content = this.$content\r\n $content.empty() // 先清空内容\r\n\r\n // append inputs and button\r\n $content.append(srcContainerElem)\r\n $content.append(altContainerElem)\r\n $content.append(hrefContainerElem)\r\n $content.append(buttonContainerElem)\r\n\r\n // 设置 input val\r\n const { src, alt = '', href = '' } = selectedImageNode as ImageElement\r\n $inputSrc.val(src)\r\n $inputAlt.val(alt)\r\n $inputHref.val(href)\r\n\r\n // focus 一个 input(异步,此时 DOM 尚未渲染)\r\n setTimeout(() => {\r\n $inputSrc.focus()\r\n })\r\n\r\n return $content[0]\r\n }\r\n\r\n private updateImage(\r\n editor: IDomEditor,\r\n src: string,\r\n alt: string = '',\r\n href: string = '',\r\n style: ImageStyle = {}\r\n ) {\r\n if (!src) return\r\n\r\n // 还原选区\r\n editor.restoreSelection()\r\n\r\n if (this.isDisabled(editor)) return\r\n\r\n // 修改图片信息\r\n updateImageNode(editor, src, alt, href, style)\r\n }\r\n}\r\n\r\nexport default EditImage\r\n","/**\r\n * @description view image link menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { EXTERNAL_SVG } from '../../../constants/icon-svg'\r\nimport { ImageElement } from '../custom-types'\r\n\r\nclass ViewImageLink implements IButtonMenu {\r\n readonly title = t('image.viewLink')\r\n readonly iconSvg = EXTERNAL_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const imageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n if (imageNode) {\r\n // 选区处于 image node\r\n return (imageNode as ImageElement).href || ''\r\n }\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const href = this.getValue(editor)\r\n if (href) {\r\n // 有 image href ,则不禁用\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n if (!value || typeof value !== 'string') {\r\n throw new Error(`View image link failed, image.href is '${value}'`)\r\n return\r\n }\r\n\r\n // 查看链接\r\n window.open(value, '_blank')\r\n }\r\n}\r\n\r\nexport default ViewImageLink\r\n","/**\r\n * @description image width base class\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Node } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { ImageElement } from '../custom-types'\r\n\r\nabstract class ImageWidthBaseClass implements IButtonMenu {\r\n abstract readonly title: string // 菜单标题\r\n readonly tag = 'button'\r\n abstract readonly value: string // css width 的值\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 无需获取 val\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 无需 active\r\n return false\r\n }\r\n\r\n private getSelectedNode(editor: IDomEditor): Node | null {\r\n return DomEditor.getSelectedNodeByType(editor, 'image')\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const imageNode = this.getSelectedNode(editor)\r\n if (imageNode == null) {\r\n // 选区未处于 image node ,则禁用\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n const imageNode = this.getSelectedNode(editor)\r\n if (imageNode == null) return\r\n\r\n // 隐藏 hoverbar\r\n const hoverbar = DomEditor.getHoverbar(editor)\r\n if (hoverbar) hoverbar.hideAndClean()\r\n\r\n const { style = {} } = imageNode as ImageElement\r\n const props: Partial<ImageElement> = {\r\n style: {\r\n ...style,\r\n width: this.value, // 修改 width\r\n height: '', // 清空 height\r\n },\r\n }\r\n\r\n Transforms.setNodes(editor, props, {\r\n match: n => DomEditor.checkNodeType(n, 'image'),\r\n })\r\n }\r\n}\r\n\r\nexport default ImageWidthBaseClass\r\n","/**\r\n * @description image width 30%\r\n * @author wangfupeng\r\n */\r\n\r\nimport ImageWidthBaseClass from './WidthBase'\r\n\r\nclass ImageWidth30 extends ImageWidthBaseClass {\r\n readonly title = '30%' // 菜单标题\r\n readonly value = '30%' // css width 的值\r\n}\r\n\r\nexport default ImageWidth30\r\n","/**\r\n * @description image width 50%\r\n * @author wangfupeng\r\n */\r\n\r\nimport ImageWidthBaseClass from './WidthBase'\r\n\r\nclass ImageWidth50 extends ImageWidthBaseClass {\r\n readonly title = '50%' // 菜单标题\r\n readonly value = '50%' // css width 的值\r\n}\r\n\r\nexport default ImageWidth50\r\n","/**\r\n * @description image width 75%\r\n */\r\n\r\nimport ImageWidthBaseClass from './WidthBase'\r\n\r\nclass ImageWidth75 extends ImageWidthBaseClass {\r\n readonly title = '75%'\r\n readonly value = '75%'\r\n}\r\n\r\nexport default ImageWidth75\r\n","/**\r\n * @description image width 100%\r\n * @author wangfupeng\r\n */\r\n\r\nimport ImageWidthBaseClass from './WidthBase'\r\n\r\nclass ImageWidth100 extends ImageWidthBaseClass {\r\n readonly title = '100%' // 菜单标题\r\n readonly value = '100%' // css width 的值\r\n}\r\n\r\nexport default ImageWidth100\r\n","/**\r\n * @description 图片悬浮栏:上方插入空行(与引用顶栏「回车」一致)\r\n */\r\n\r\nimport { Editor, Transforms } from 'slate'\r\nimport {\r\n IButtonMenu,\r\n IDomEditor,\r\n DomEditor,\r\n t,\r\n genEmptyParagraph,\r\n pinEditorScrollDuring,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { ENTER_SVG } from '../../../constants/icon-svg'\r\n\r\nclass ImageEnterAbove implements IButtonMenu {\r\n readonly title = t('common.enterAbove')\r\n readonly iconSvg = ENTER_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(_editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(_editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n return DomEditor.getSelectedNodeByType(editor, 'image') == null\r\n }\r\n\r\n exec(editor: IDomEditor, _value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n const imageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n if (imageNode == null) return\r\n\r\n let path\r\n try {\r\n path = DomEditor.findPath(editor, imageNode)\r\n } catch (_) {\r\n return\r\n }\r\n if (!path?.length) return\r\n\r\n const at = [path[0]]\r\n const emptyP = genEmptyParagraph(editor)\r\n // 插入空行后图片下移;重新选中图片,悬浮栏保留且「取消回车」可点\r\n pinEditorScrollDuring(editor, () => {\r\n Transforms.insertNodes(editor, emptyP, { at })\r\n try {\r\n Transforms.select(editor, Editor.start(editor, [at[0] + 1]))\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default ImageEnterAbove\r\n","/**\r\n * @description 图片悬浮栏:删除上方空行(与引用顶栏「取消回车」一致)\r\n */\r\n\r\nimport {\r\n IButtonMenu,\r\n IDomEditor,\r\n DomEditor,\r\n t,\r\n canRemoveEmptyLineAboveBlock,\r\n removeEmptyLineAboveTopLevelBlock,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { CANCEL_ENTER_SVG } from '../../../constants/icon-svg'\r\n\r\nclass ImageCancelEnter implements IButtonMenu {\r\n readonly title = t('common.cancelEnter')\r\n readonly iconSvg = CANCEL_ENTER_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(_editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(_editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n const imageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n if (imageNode == null) return true\r\n try {\r\n const path = DomEditor.findPath(editor, imageNode)\r\n return !canRemoveEmptyLineAboveBlock(editor, path)\r\n } catch (_) {\r\n return true\r\n }\r\n }\r\n\r\n exec(editor: IDomEditor, _value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n const imageNode = DomEditor.getSelectedNodeByType(editor, 'image')\r\n if (imageNode == null) return\r\n\r\n try {\r\n const path = DomEditor.findPath(editor, imageNode)\r\n removeEmptyLineAboveTopLevelBlock(editor, path)\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n}\r\n\r\nexport default ImageCancelEnter\r\n","/**\r\n * @description image menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport InsertImage from './InsertImage'\r\nimport DeleteImage from './DeleteImage'\r\nimport EditImage from './EditImage'\r\nimport ViewImageLink from './ViewImageLink'\r\nimport ImageWidth30 from './Width30'\r\nimport ImageWidth50 from './Width50'\r\nimport ImageWidth75 from './Width75'\r\nimport ImageWidth100 from './Width100'\r\nimport ImageEnterAbove from './EnterAbove'\r\nimport ImageCancelEnter from './CancelEnter'\r\nimport { genImageMenuConfig } from './config'\r\n\r\nconst config = genImageMenuConfig() // menu config\r\n\r\nexport const insertImageMenuConf = {\r\n key: 'insertImage',\r\n factory() {\r\n return new InsertImage()\r\n },\r\n\r\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\r\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\r\n config,\r\n}\r\n\r\nexport const deleteImageMenuConf = {\r\n key: 'deleteImage',\r\n factory() {\r\n return new DeleteImage()\r\n },\r\n}\r\n\r\nexport const editImageMenuConf = {\r\n key: 'editImage',\r\n factory() {\r\n return new EditImage()\r\n },\r\n config,\r\n}\r\n\r\nexport const viewImageLinkMenuConf = {\r\n key: 'viewImageLink',\r\n factory() {\r\n return new ViewImageLink()\r\n },\r\n}\r\n\r\nexport const imageWidth30MenuConf = {\r\n key: 'imageWidth30',\r\n factory() {\r\n return new ImageWidth30()\r\n },\r\n}\r\n\r\nexport const imageWidth50MenuConf = {\r\n key: 'imageWidth50',\r\n factory() {\r\n return new ImageWidth50()\r\n },\r\n}\r\n\r\nexport const imageWidth75MenuConf = {\r\n key: 'imageWidth75',\r\n factory() {\r\n return new ImageWidth75()\r\n },\r\n}\r\n\r\nexport const imageWidth100MenuConf = {\r\n key: 'imageWidth100',\r\n factory() {\r\n return new ImageWidth100()\r\n },\r\n}\r\n\r\nexport const imageEnterMenuConf = {\r\n key: 'imageEnter',\r\n factory() {\r\n return new ImageEnterAbove()\r\n },\r\n}\r\n\r\nexport const imageCancelEnterMenuConf = {\r\n key: 'imageCancelEnter',\r\n factory() {\r\n return new ImageCancelEnter()\r\n },\r\n}\r\n","/**\r\n * @description 图片菜单配置\r\n * @author wangfupeng\r\n */\r\n\r\nimport { ImageElement } from '../custom-types'\r\n\r\nexport function genImageMenuConfig() {\r\n return {\r\n /**\r\n * 插入图片之后的回调\r\n * @param imageElem ImageElement\r\n */\r\n onInsertedImage(imageElem: ImageElement) {\r\n /*自定义*/\r\n },\r\n\r\n /**\r\n * 更新图片之后的回调\r\n * @param node image node\r\n */\r\n onUpdatedImage(node: ImageElement | null) {\r\n /*自定义*/\r\n },\r\n\r\n /**\r\n * 检查图片信息,支持 async fn\r\n * @param src image src\r\n * @param alt image alt\r\n * @param href image href\r\n */\r\n checkImage(src: string, alt: string, href: string): boolean | string | undefined {\r\n // 1. 返回 true ,说明检查通过\r\n // 2. 返回一个字符串,说明检查未通过,编辑器会阻止图片插入。会 alert 出错误信息(即返回的字符串)\r\n // 3. 返回 undefined(即没有任何返回),说明检查未通过,编辑器会阻止图片插入\r\n return true\r\n },\r\n\r\n /**\r\n * parse image src\r\n * @param src image src\r\n * @returns new src\r\n */\r\n parseImageSrc(src: string): string {\r\n return src\r\n },\r\n }\r\n}\r\n","/**\r\n * @description image module entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport withImage from './plugin'\r\nimport { renderImageConf } from './render-elem'\r\nimport { imageToHtmlConf } from './elem-to-html'\r\nimport { parseHtmlConf } from './parse-elem-html'\r\nimport {\r\n insertImageMenuConf,\r\n deleteImageMenuConf,\r\n editImageMenuConf,\r\n viewImageLinkMenuConf,\r\n imageWidth30MenuConf,\r\n imageWidth50MenuConf,\r\n imageWidth75MenuConf,\r\n imageWidth100MenuConf,\r\n imageEnterMenuConf,\r\n imageCancelEnterMenuConf,\r\n} from './menu/index'\r\n\r\nconst image: Partial<IModuleConf> = {\r\n renderElems: [renderImageConf],\r\n elemsToHtml: [imageToHtmlConf],\r\n parseElemsHtml: [parseHtmlConf],\r\n menus: [\r\n insertImageMenuConf,\r\n deleteImageMenuConf,\r\n editImageMenuConf,\r\n viewImageLinkMenuConf,\r\n imageWidth30MenuConf,\r\n imageWidth50MenuConf,\r\n imageWidth75MenuConf,\r\n imageWidth100MenuConf,\r\n imageEnterMenuConf,\r\n imageCancelEnterMenuConf,\r\n ],\r\n editorPlugin: withImage,\r\n}\r\n\r\nexport default image\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\n// import { Editor, Path, Operation } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction withImage<T extends IDomEditor>(editor: T): T {\r\n const { isInline, isVoid, insertNode } = editor\r\n const newEditor = editor\r\n\r\n // 重写 isInline\r\n newEditor.isInline = elem => {\r\n const { type } = elem\r\n\r\n if (type === 'image') {\r\n return true\r\n }\r\n\r\n return isInline(elem)\r\n }\r\n\r\n // 重写 isVoid\r\n newEditor.isVoid = elem => {\r\n const { type } = elem\r\n\r\n if (type === 'image') {\r\n return true\r\n }\r\n\r\n return isVoid(elem)\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withImage\r\n","/**\r\n * @description render todo\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement, Transforms } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { TodoElement } from './custom-types'\r\n\r\n/**\r\n * render todo elem\r\n * @param elemNode slate elem\r\n * @param children children\r\n * @param editor editor\r\n * @returns vnode\r\n */\r\nfunction renderTodo(elemNode: SlateElement, children: VNode[] | null, editor: IDomEditor): VNode {\r\n // 判断 disabled\r\n let disabled = false\r\n if (editor.isDisabled()) disabled = true\r\n\r\n const { checked } = elemNode as TodoElement\r\n const vnode = (\r\n <div style={{ margin: '5px 0' }}>\r\n <span contentEditable={false} style={{ marginRight: '0.5em' }}>\r\n <input\r\n type=\"checkbox\"\r\n checked={checked}\r\n disabled={disabled}\r\n on={{\r\n change: event => {\r\n const path = DomEditor.findPath(editor, elemNode)\r\n const newProps: Partial<TodoElement> = {\r\n // @ts-ignore\r\n checked: event.target.checked,\r\n }\r\n Transforms.setNodes(editor, newProps, { at: path })\r\n },\r\n }}\r\n />\r\n </span>\r\n <span>{children}</span>\r\n </div>\r\n )\r\n\r\n return vnode\r\n}\r\n\r\nconst renderTodoConf = {\r\n type: 'todo', // 和 elemNode.type 一致\r\n renderElem: renderTodo,\r\n}\r\n\r\nexport { renderTodoConf }\r\n","/**\r\n * @description Todo menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Element, Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { CHECK_BOX_SVG } from '../../../constants/icon-svg'\r\n\r\nclass TodoMenu implements IButtonMenu {\r\n readonly title = t('todo.todo')\r\n readonly iconSvg = CHECK_BOX_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 无需获取 val\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return !!DomEditor.getSelectedNodeByType(editor, 'todo')\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const selectedElems = DomEditor.getSelectedElems(editor)\r\n const notMatch = selectedElems.some((elem: Element) => {\r\n if (Editor.isVoid(editor, elem) && Editor.isBlock(editor, elem)) return true\r\n\r\n const { type } = elem as Element\r\n if (['pre', 'table', 'list-item'].includes(type)) return true\r\n })\r\n if (notMatch) return true\r\n\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n const active = this.isActive(editor)\r\n Transforms.setNodes(editor, { type: active ? 'paragraph' : 'todo' })\r\n }\r\n}\r\n\r\nexport default TodoMenu\r\n","/**\r\n * @description pre parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, { DOMElement } from '../../utils/dom'\r\n\r\n/**\r\n * pre-prase todo ,兼容 V4\r\n * @param elem elem\r\n */\r\nfunction preParse(elem: DOMElement): DOMElement {\r\n const $elem = $(elem)\r\n\r\n // $elem 格式如\r\n // <ul class=\"w-e-todo\"><li><span contenteditable=\"false\"><input type=\"checkbox\"/></span>hello <b>world</b></li></ul>\r\n const $li = $elem.find('li')\r\n\r\n const $container = $('<div data-w-e-type=\"todo\"></div>')\r\n\r\n // 1. 把 input 移动到 $container\r\n const $input = $li.find('input[type]')\r\n $container.append($input)\r\n\r\n // 2. 删除之前包裹 input 的 span\r\n const $spanForInput = $li.children()[0]\r\n $spanForInput.remove()\r\n\r\n // 3. 再把剩余的内容移动到 $container (有纯文本内容,不能用 children ,得用 innerHTML)\r\n $container[0].innerHTML = $container[0].innerHTML + $li[0].innerHTML\r\n\r\n return $container[0]\r\n}\r\n\r\nexport const preParseHtmlConf = {\r\n selector: 'ul.w-e-todo', // 匹配 v4 todo\r\n preParseHtml: preParse,\r\n}\r\n","/**\r\n * @description todo entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderTodoConf } from './render-elem'\r\nimport withTodo from './plugin'\r\nimport { todoMenuConf } from './menu/index'\r\nimport { todoToHtmlConf } from './elem-to-html'\r\nimport { parseHtmlConf } from './parse-elem-html'\r\nimport { preParseHtmlConf } from './pre-parse-html'\r\n\r\nconst todo: Partial<IModuleConf> = {\r\n renderElems: [renderTodoConf],\r\n elemsToHtml: [todoToHtmlConf],\r\n preParseHtml: [preParseHtmlConf],\r\n parseElemsHtml: [parseHtmlConf],\r\n menus: [todoMenuConf],\r\n editorPlugin: withTodo,\r\n}\r\n\r\nexport default todo\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\nimport { TodoElement } from './custom-types'\r\n\r\nfunction todoToHtml(elem: Element, childrenHtml: string): string {\r\n const { checked } = elem as TodoElement\r\n const checkedAttr = checked ? 'checked' : ''\r\n return `<div data-w-e-type=\"todo\"><input type=\"checkbox\" disabled ${checkedAttr}>${childrenHtml}</div>`\r\n}\r\n\r\nexport const todoToHtmlConf = {\r\n type: 'todo',\r\n elemToHtml: todoToHtml,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { TodoElement } from './custom-types'\r\nimport $, { DOMElement } from '../../utils/dom'\r\n\r\nfunction parseHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): TodoElement {\r\n const $elem = $(elem)\r\n\r\n children = children.filter(child => {\r\n if (Text.isText(child)) return true\r\n if (editor.isInline(child)) return true\r\n return false\r\n })\r\n\r\n // 无 children ,则用纯文本\r\n if (children.length === 0) {\r\n children = [{ text: $elem.text().replace(/\\s+/gm, ' ') }]\r\n }\r\n\r\n // 获取 checked\r\n let checked = false\r\n const $input = $elem.find('input[type=\"checkbox\"]')\r\n if ($input.attr('checked') != null) {\r\n checked = true\r\n }\r\n\r\n return {\r\n type: 'todo',\r\n checked,\r\n // @ts-ignore\r\n children,\r\n }\r\n}\r\n\r\nexport const parseHtmlConf = {\r\n selector: 'div[data-w-e-type=\"todo\"]',\r\n parseElemHtml: parseHtml,\r\n}\r\n","/**\r\n * @description todo menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport TodoMenu from './Todo'\r\n\r\nexport const todoMenuConf = {\r\n key: 'todo',\r\n factory() {\r\n return new TodoMenu()\r\n },\r\n}\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Node, Transforms, Range } from 'slate'\r\nimport { DomEditor, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction withTodo<T extends IDomEditor>(editor: T): T {\r\n const { deleteBackward } = editor\r\n const newEditor = editor\r\n\r\n /**\r\n * 删除 todo 无内容时,变为 paragraph\r\n */\r\n newEditor.deleteBackward = unit => {\r\n const { selection } = editor\r\n\r\n if (selection && Range.isCollapsed(selection)) {\r\n // 获取选中的 todo\r\n const selectedTodo = DomEditor.getSelectedNodeByType(editor, 'todo')\r\n if (selectedTodo) {\r\n if (Node.string(selectedTodo).length === 0) {\r\n // 当前 todo 已经没有文字,则转换为 paragraph\r\n Transforms.setNodes(editor, { type: 'paragraph' }, { mode: 'highest' })\r\n return\r\n }\r\n }\r\n }\r\n\r\n deleteBackward(unit)\r\n }\r\n\r\n return newEditor\r\n}\r\n\r\nexport default withTodo\r\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","/**\r\n * @description 块顶栏按钮 vnode 工厂(blockquote / pre / table / video 共用)\r\n */\r\n\r\nimport { h, VNode } from 'snabbdom'\r\n\r\nexport function makeBlockToolbarButton(opts: {\r\n action: string\r\n title: string\r\n iconSvg: string\r\n actionAttr: string // e.g. data-bq-action\r\n className: string\r\n disabled?: boolean\r\n active?: boolean\r\n}): VNode {\r\n const { action, title, iconSvg, actionAttr, className, disabled = false, active = false } = opts\r\n const cls = [className, disabled ? 'is-disabled' : '', active ? 'is-active' : '']\r\n .filter(Boolean)\r\n .join(' ')\r\n\r\n return h('button', {\r\n attrs: {\r\n type: 'button',\r\n class: cls,\r\n title,\r\n [actionAttr]: action,\r\n 'aria-label': title,\r\n ...(disabled ? { disabled: 'disabled' } : {}),\r\n },\r\n props: { contentEditable: false, disabled },\r\n hook: {\r\n insert(vnode) {\r\n const el = vnode.elm as HTMLElement | undefined\r\n if (el) el.innerHTML = iconSvg\r\n },\r\n postpatch(_o, vnode) {\r\n const el = vnode.elm as HTMLElement | undefined\r\n if (el && el.innerHTML !== iconSvg) el.innerHTML = iconSvg\r\n },\r\n },\r\n on: {\r\n mousedown: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n },\r\n },\r\n })\r\n}\r\n\r\nexport function makeBlockToolbarSpacer(className: string): VNode {\r\n return h('span', { attrs: { class: className } }, [])\r\n}\r\n","/**\r\n * @description blockquote 顶栏图标与动作\r\n */\r\n\r\nexport const BQ_TOOLBAR_ICON_ENTER =\r\n '<svg viewBox=\"0 0 1255 1024\"><path d=\"M1095.111111 731.477333h-625.777778V1024L0 658.318222 469.333333 292.408889v292.636444h625.777778V0h156.444445v731.477333z\"></path></svg>'\r\nexport const BQ_TOOLBAR_ICON_CANCEL_ENTER =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M436 680H124v-56h312l-124-124 42-42 220 220-220 220-42-42 124-124z\"></path><path d=\"M198 128l64-64 628 628-64 64z\"></path></svg>'\r\nexport const BQ_TOOLBAR_ICON_UNQUOTE =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M422.6 907.1H133.4c-32.6 0-59-26.4-59-59V608.2l-4-14.9c0-315.9 125.5-485.1 376.5-507.5v59.8C280.7 180.4 239.3 315.8 239.3 442.4v41.2l31.5 12.3h151.8c32.6 0 59 26.4 59 59v293.2c0 32.5-26.4 59-59 59z m472 0H605.4c-32.6 0-59-26.4-59-59V608.2l-4-14.9c0-315.9 125.5-485.1 376.5-507.5v59.8C752.7 180.4 711.3 315.8 711.3 442.4v41.2l31.5 12.3h151.8c32.6 0 59 26.4 59 59v293.2c0 32.5-26.4 59-59 59z\"></path><path d=\"M198 128l64-64 628 628-64 64z\"></path></svg>'\r\nexport const BQ_TOOLBAR_ICON_REMOVE =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M360 184h304v-40H360v40zM184 264h656v72H184V264zm72 120v456c0 22 18 40 40 40h432c22 0 40-18 40-40V384H256zm120 88h64v280h-64V472zm208 0h64v280h-64V472z\"></path></svg>'\r\n","/**\r\n * @description render blockquote with top toolbar\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement, Node } from 'slate'\r\nimport { h, VNode } from 'snabbdom'\r\nimport {\r\n IDomEditor,\r\n DomEditor,\r\n canRemoveEmptyLineAboveBlock,\r\n insertEmptyLineAboveAtPath,\r\n removeEmptyLineAboveTopLevelBlock,\r\n replaceBlockWithEmptyLine,\r\n resolveElemPath,\r\n setBlockToParagraph,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { makeBlockToolbarButton, makeBlockToolbarSpacer } from '../../utils/block-toolbar'\r\nimport {\r\n BQ_TOOLBAR_ICON_CANCEL_ENTER,\r\n BQ_TOOLBAR_ICON_ENTER,\r\n BQ_TOOLBAR_ICON_REMOVE,\r\n BQ_TOOLBAR_ICON_UNQUOTE,\r\n} from './toolbar-icons'\r\n\r\nfunction handleBlockquoteToolbarAction(\r\n editor: IDomEditor,\r\n elem: Node,\r\n action: string\r\n): void {\r\n if (!editor || editor.isDestroyed || editor.isDisabled()) return\r\n const path = resolveElemPath(editor, elem)\r\n if (!path?.length) return\r\n\r\n if (action === 'enter') {\r\n insertEmptyLineAboveAtPath(editor, path)\r\n return\r\n }\r\n if (action === 'cancel-enter') {\r\n removeEmptyLineAboveTopLevelBlock(editor, path)\r\n return\r\n }\r\n if (action === 'unquote') {\r\n setBlockToParagraph(editor, path)\r\n return\r\n }\r\n if (action === 'remove') {\r\n const node = DomEditor.getSelectedNodeByType(editor, 'blockquote') || elem\r\n try {\r\n const livePath = DomEditor.findPath(editor, node)\r\n replaceBlockWithEmptyLine(editor, livePath, node)\r\n } catch (_) {\r\n replaceBlockWithEmptyLine(editor, path, elem)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * render block quote elem\r\n */\r\nfunction renderBlockQuote(\r\n elemNode: SlateElement,\r\n children: VNode[] | null,\r\n editor: IDomEditor\r\n): VNode {\r\n const kids = children == null ? [] : Array.isArray(children) ? children : [children]\r\n\r\n if (editor.isDisabled()) {\r\n return h('blockquote', {}, kids)\r\n }\r\n\r\n let canCancelEnter = false\r\n try {\r\n const path = DomEditor.findPath(editor, elemNode)\r\n canCancelEnter = canRemoveEmptyLineAboveBlock(editor, path)\r\n } catch (_) {\r\n canCancelEnter = false\r\n }\r\n\r\n const toolbar = h(\r\n 'div',\r\n {\r\n attrs: {\r\n class: 'mdg-bq-toolbar',\r\n contenteditable: 'false',\r\n 'data-mdg-bq-toolbar': '1',\r\n },\r\n props: { contentEditable: false },\r\n on: {\r\n mousedown: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n },\r\n click: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n const t = e.target as Element | null\r\n const btn = t?.closest?.('button[data-bq-action]') as HTMLElement | null\r\n const action = btn?.getAttribute?.('data-bq-action')\r\n if (!action || btn?.classList?.contains('is-disabled')) return\r\n handleBlockquoteToolbarAction(editor, elemNode, action)\r\n },\r\n },\r\n },\r\n [\r\n makeBlockToolbarButton({\r\n action: 'enter',\r\n title: '回车(上方空行)',\r\n iconSvg: BQ_TOOLBAR_ICON_ENTER,\r\n actionAttr: 'data-bq-action',\r\n className: 'mdg-bq-btn',\r\n }),\r\n makeBlockToolbarButton({\r\n action: 'cancel-enter',\r\n title: '取消回车',\r\n iconSvg: BQ_TOOLBAR_ICON_CANCEL_ENTER,\r\n actionAttr: 'data-bq-action',\r\n className: 'mdg-bq-btn',\r\n disabled: !canCancelEnter,\r\n }),\r\n makeBlockToolbarSpacer('mdg-bq-toolbar-spacer'),\r\n makeBlockToolbarButton({\r\n action: 'unquote',\r\n title: '取消引用',\r\n iconSvg: BQ_TOOLBAR_ICON_UNQUOTE,\r\n actionAttr: 'data-bq-action',\r\n className: 'mdg-bq-btn',\r\n }),\r\n makeBlockToolbarButton({\r\n action: 'remove',\r\n title: '删除',\r\n iconSvg: BQ_TOOLBAR_ICON_REMOVE,\r\n actionAttr: 'data-bq-action',\r\n className: 'mdg-bq-btn',\r\n }),\r\n ]\r\n )\r\n\r\n // 顶栏放在正文之后:避免 contentEditable=false 成为 blockquote 首子节点,\r\n // 否则 Chrome 中文 IME / 选区容易把输入和光标拽到行首,回车删除也会失灵。\r\n // 视觉上仍通过 CSS absolute 钉在顶部。\r\n return h('blockquote', { attrs: { class: 'mdg-bq-with-toolbar' } }, [...kids, toolbar])\r\n}\r\n\r\nexport const renderBlockQuoteConf = {\r\n type: 'blockquote',\r\n renderElem: renderBlockQuote,\r\n}\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\n\r\nfunction quoteToHtml(elem: Element, childrenHtml: string): string {\r\n return `<blockquote>${childrenHtml}</blockquote>`\r\n}\r\n\r\nexport const quoteToHtmlConf = {\r\n type: 'blockquote',\r\n elemToHtml: quoteToHtml,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport $, { DOMElement } from '../../utils/dom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { BlockQuoteElement } from './custom-types'\r\n\r\nfunction parseHtml(\r\n elem: DOMElement,\r\n children: Descendant[],\r\n editor: IDomEditor\r\n): BlockQuoteElement {\r\n const $elem = $(elem)\r\n\r\n children = children.filter(child => {\r\n if (Text.isText(child)) return true\r\n if (editor.isInline(child)) return true\r\n return false\r\n })\r\n\r\n // 无 children ,则用纯文本\r\n if (children.length === 0) {\r\n children = [{ text: $elem.text().replace(/\\s+/gm, ' ') }]\r\n }\r\n\r\n return {\r\n type: 'blockquote',\r\n // @ts-ignore\r\n children,\r\n }\r\n}\r\n\r\nexport const parseHtmlConf = {\r\n selector: 'blockquote:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parseHtml,\r\n}\r\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","/**\r\n * @description blockquote menu class\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { QUOTE_SVG } from '../../../constants/icon-svg'\r\n\r\nclass BlockquoteMenu implements IButtonMenu {\r\n readonly title = t('blockQuote.title')\r\n readonly iconSvg = QUOTE_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 用不到 getValue\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n const node = DomEditor.getSelectedNodeByType(editor, 'blockquote')\r\n return !!node\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n // 只可用于 p 和 blockquote\r\n if (type === 'paragraph') return true\r\n if (type === 'blockquote') return true\r\n\r\n return false\r\n },\r\n universal: true,\r\n mode: 'highest', // 匹配最高层级\r\n })\r\n\r\n // 匹配到 p blockquote ,不禁用\r\n if (nodeEntry) {\r\n return false\r\n }\r\n // 未匹配到,则禁用\r\n return true\r\n }\r\n\r\n /**\r\n * 执行命令\r\n * @param editor editor\r\n * @param value node.type\r\n */\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isDisabled(editor)) return\r\n\r\n const active = this.isActive(editor)\r\n const newType = active ? 'paragraph' : 'blockquote'\r\n\r\n // 执行命令\r\n Transforms.setNodes(editor, { type: newType }, { mode: 'highest' })\r\n }\r\n}\r\n\r\nexport default BlockquoteMenu\r\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n return fn && callBind(call, fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = {};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (variable) {\n return isCallable(variable) ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.19.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar isForced = require('../internals/is-forced');\nvar path = require('../internals/path');\nvar bind = require('../internals/function-bind-context');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\n\nvar wrapConstructor = function (NativeConstructor) {\n var Wrapper = function (a, b, c) {\n if (this instanceof Wrapper) {\n switch (arguments.length) {\n case 0: return new NativeConstructor();\n case 1: return new NativeConstructor(a);\n case 2: return new NativeConstructor(a, b);\n } return new NativeConstructor(a, b, c);\n } return apply(NativeConstructor, this, arguments);\n };\n Wrapper.prototype = NativeConstructor.prototype;\n return Wrapper;\n};\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var PROTO = options.proto;\n\n var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;\n\n var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET];\n var targetPrototype = target.prototype;\n\n var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n for (key in source) {\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contains in native\n USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key);\n\n targetProperty = target[key];\n\n if (USE_NATIVE) if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(nativeSource, key);\n nativeProperty = descriptor && descriptor.value;\n } else nativeProperty = nativeSource[key];\n\n // export native or implementation\n sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n if (USE_NATIVE && typeof targetProperty == typeof sourceProperty) continue;\n\n // bind timers to global for call from export context\n if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);\n // wrap global constructors for prevent changs in this version\n else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n // make static versions for prototype methods\n else if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty);\n // default case\n else resultProperty = sourceProperty;\n\n // add a flag to not completely full polyfills\n if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(resultProperty, 'sham', true);\n }\n\n createNonEnumerableProperty(target, key, resultProperty);\n\n if (PROTO) {\n VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n if (!hasOwn(path, VIRTUAL_PROTOTYPE)) {\n createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n }\n // export virtual prototype methods\n createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty);\n // export real prototype methods\n if (options.real && targetPrototype && !targetPrototype[key]) {\n createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n }\n }\n }\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function (argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n // we can't check .prototype since constructors produced by .bind haven't it\n } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\nvar TypeError = global.TypeError;\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = lengthOfArrayLike(E);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","module.exports = {};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (target, key, value, options) {\n if (options && options.enumerable) target[key] = value;\n else createNonEnumerableProperty(target, key, value);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineProperty = require('../internals/object-define-property').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/object-to-string');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC, SET_METHOD) {\n if (it) {\n var target = STATIC ? it : it.prototype;\n if (!hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {\n createNonEnumerableProperty(target, 'toString', toString);\n }\n }\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar arraySlice = require('../internals/array-slice');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n redefine(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = $toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (isCallable($replacer)) value = call($replacer, this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return apply($stringify, null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n var valueOf = SymbolPrototype.valueOf;\n // eslint-disable-next-line no-unused-vars -- required for .length\n redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n // TODO: improve hint logic\n return call(valueOf, this);\n });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.match` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.matchAll` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.matchall\ndefineWellKnownSymbol('matchAll');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.search` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.species` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.split` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","require('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","require('../modules/es.array.iterator');\nvar DOMIterables = require('../internals/dom-iterables');\nvar global = require('../internals/global');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n Iterators[COLLECTION_NAME] = Iterators.Array;\n}\n","var parent = require('../../es/symbol');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncDispose` well-known symbol\n// https://github.com/tc39/proposal-using-statement\ndefineWellKnownSymbol('asyncDispose');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.dispose` well-known symbol\n// https://github.com/tc39/proposal-using-statement\ndefineWellKnownSymbol('dispose');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.matcher` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('matcher');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.metadata` well-known symbol\n// https://github.com/tc39/proposal-decorators\ndefineWellKnownSymbol('metadata');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.observable` well-known symbol\n// https://github.com/tc39/proposal-observable\ndefineWellKnownSymbol('observable');\n","// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('patternMatch');\n","// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\ndefineWellKnownSymbol('replaceAll');\n","var parent = require('../../stable/symbol');\nrequire('../../modules/esnext.symbol.async-dispose');\nrequire('../../modules/esnext.symbol.dispose');\nrequire('../../modules/esnext.symbol.matcher');\nrequire('../../modules/esnext.symbol.metadata');\nrequire('../../modules/esnext.symbol.observable');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.symbol.pattern-match');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.symbol.replace-all');\n\nmodule.exports = parent;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","require('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/es.symbol.iterator');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('iterator');\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var _Symbol = require(\"@babel/runtime-corejs3/core-js/symbol\");\n\nvar _Symbol$iterator = require(\"@babel/runtime-corejs3/core-js/symbol/iterator\");\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof _Symbol === \"function\" && typeof _Symbol$iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n module.exports[\"default\"] = module.exports, module.exports.__esModule = true;\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","module.exports = {};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\nvar fails = require('../internals/fails');\n\nmodule.exports = fails(function () {\n if (typeof ArrayBuffer == 'function') {\n var buffer = new ArrayBuffer(8);\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n }\n});\n","var fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n if (!isObject(it)) return false;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;\n return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar isExtensible = require('../internals/object-is-extensible');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw TypeError('Incorrect invocation');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n","var arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","/**\r\n * @description 多块合并为引用 / 拆回段落\r\n */\r\n\r\nimport { Editor, Element, Node, Path, Transforms } from 'slate'\r\nimport { DomEditor, IDomEditor, getEditorNodeAtPath, pinEditorScrollDuring } from '@mnykj/wangeditoroptimize-core'\r\n\r\nconst QUOTEABLE = new Set([\r\n 'paragraph',\r\n 'blockquote',\r\n 'header1',\r\n 'header2',\r\n 'header3',\r\n 'header4',\r\n 'header5',\r\n 'header6',\r\n])\r\n\r\nexport function isQuoteableBlockType(type: string): boolean {\r\n return QUOTEABLE.has(type)\r\n}\r\n\r\nfunction cloneInlineNode(node: any): any {\r\n if (node == null || typeof node !== 'object') return { text: '' }\r\n if (typeof node.text === 'string') {\r\n const leaf = { ...node }\r\n delete leaf.children\r\n return leaf\r\n }\r\n const cloned = { ...node }\r\n if (Array.isArray(node.children)) {\r\n cloned.children = node.children.map(cloneInlineNode)\r\n }\r\n return cloned\r\n}\r\n\r\nfunction getBlockInlineChildren(node: Node): any[] {\r\n const kids = Array.isArray((node as any)?.children) ? (node as any).children : []\r\n if (!kids.length) return [{ text: '' }]\r\n return kids.map(cloneInlineNode)\r\n}\r\n\r\nfunction mergeBlocksIntoBlockquoteChildren(blocks: Array<[Node, Path]>): any[] {\r\n const children: any[] = []\r\n for (let i = 0; i < blocks.length; i++) {\r\n if (i > 0) children.push({ text: '\\n' })\r\n children.push(...getBlockInlineChildren(blocks[i][0]))\r\n }\r\n return children.length ? children : [{ text: '' }]\r\n}\r\n\r\nfunction splitInlinesByNewline(inlines: any[]): any[][] {\r\n const parts: any[][] = [[]]\r\n for (const node of inlines) {\r\n if (typeof node.text === 'string' && !node.type && node.text.includes('\\n')) {\r\n const segs = node.text.split('\\n')\r\n segs.forEach((seg, i) => {\r\n if (i > 0) parts.push([])\r\n parts[parts.length - 1].push({ ...node, text: seg })\r\n })\r\n } else {\r\n parts[parts.length - 1].push(node)\r\n }\r\n }\r\n return parts.map(p => (p.length ? p : [{ text: '' }]))\r\n}\r\n\r\n/** 当前选区内可引用的顶层块 */\r\nexport function collectSelectedQuoteableTopBlocks(editor: IDomEditor): Array<[Node, Path]> {\r\n const sel = editor?.selection\r\n if (!sel) return []\r\n const out: Array<[Node, Path]> = []\r\n const seen = new Set<string>()\r\n try {\r\n for (const [node, path] of Editor.nodes(editor, {\r\n at: sel,\r\n match: n => {\r\n if (n == null || typeof n !== 'object') return false\r\n if (typeof editor.isVoid === 'function' && editor.isVoid(n as Element)) return false\r\n return isQuoteableBlockType(DomEditor.getNodeType(n))\r\n },\r\n mode: 'highest',\r\n })) {\r\n if (!Array.isArray(path) || path.length !== 1) continue\r\n const key = String(path[0])\r\n if (seen.has(key)) continue\r\n seen.add(key)\r\n out.push([node, [...path] as Path])\r\n }\r\n } catch (_) {\r\n return []\r\n }\r\n out.sort((a, b) => a[1][0] - b[1][0])\r\n return out\r\n}\r\n\r\nexport function resolveBlocksForMerge(editor: IDomEditor): Array<[Node, Path]> {\r\n const live = collectSelectedQuoteableTopBlocks(editor).filter(\r\n ([node]) => DomEditor.getNodeType(node) !== 'pre'\r\n )\r\n if (live.length > 0) return live\r\n\r\n const cached = (editor as any)?.__mdgchTrustedBlockPaths\r\n if (Array.isArray(cached) && cached.length) {\r\n const out: Array<[Node, Path]> = []\r\n for (const path of cached) {\r\n if (!Array.isArray(path) || !path.length) continue\r\n const node = getEditorNodeAtPath(editor, path)\r\n if (!node || (node as any).type === 'pre') continue\r\n if (!isQuoteableBlockType(DomEditor.getNodeType(node))) continue\r\n out.push([node, [...path] as Path])\r\n }\r\n if (out.length) return out\r\n }\r\n\r\n const sel = editor?.selection\r\n if (sel?.anchor?.path?.length) {\r\n const path: Path = [sel.anchor.path[0]]\r\n const node = getEditorNodeAtPath(editor, path)\r\n if (node && (node as any).type !== 'pre' && isQuoteableBlockType(DomEditor.getNodeType(node))) {\r\n return [[node, path]]\r\n }\r\n }\r\n return []\r\n}\r\n\r\nfunction splitBlockquoteToParagraphs(\r\n editor: IDomEditor,\r\n path: Path,\r\n node: Node,\r\n parts: any[][]\r\n): void {\r\n const idx = path[0]\r\n pinEditorScrollDuring(editor, () => {\r\n Editor.withoutNormalizing(editor, () => {\r\n Transforms.removeNodes(editor, { at: path })\r\n for (let i = 0; i < parts.length; i++) {\r\n Transforms.insertNodes(\r\n editor,\r\n { type: 'paragraph', children: parts[i] } as Element,\r\n { at: [idx + i] }\r\n )\r\n }\r\n try {\r\n editor.select(Editor.end(editor, [idx + parts.length - 1]))\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n })\r\n}\r\n\r\n/** 切换引用:多行合并为一个 blockquote;再点取消 */\r\nexport function toggleBlockquoteMerged(editor: IDomEditor): void {\r\n if (!editor || editor.isDestroyed) return\r\n\r\n const blocks = resolveBlocksForMerge(editor)\r\n if (!blocks.length) {\r\n try {\r\n const inBq = DomEditor.getSelectedNodeByType(editor, 'blockquote')\r\n Transforms.setNodes(\r\n editor,\r\n { type: inBq ? 'paragraph' : 'blockquote' } as any,\r\n { mode: 'highest' }\r\n )\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return\r\n }\r\n\r\n const allQuoted = blocks.every(([n]) => DomEditor.getNodeType(n) === 'blockquote')\r\n if (allQuoted) {\r\n try {\r\n if (blocks.length === 1) {\r\n const [node, path] = blocks[0]\r\n const inlines = getBlockInlineChildren(node)\r\n const parts = splitInlinesByNewline(inlines)\r\n if (parts.length > 1) {\r\n splitBlockquoteToParagraphs(editor, path, node, parts)\r\n return\r\n }\r\n }\r\n Transforms.setNodes(editor, { type: 'paragraph' } as any, { mode: 'highest' })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return\r\n }\r\n\r\n if (blocks.length === 1) {\r\n try {\r\n Transforms.setNodes(editor, { type: 'blockquote' } as any, { mode: 'highest' })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return\r\n }\r\n\r\n const firstIdx = blocks[0][1][0]\r\n const bqNode = {\r\n type: 'blockquote',\r\n children: mergeBlocksIntoBlockquoteChildren(blocks),\r\n }\r\n\r\n try {\r\n pinEditorScrollDuring(editor, () => {\r\n Editor.withoutNormalizing(editor, () => {\r\n for (let i = blocks.length - 1; i >= 0; i--) {\r\n const livePath: Path = [blocks[i][1][0]]\r\n const liveNode = getEditorNodeAtPath(editor, livePath)\r\n if (!liveNode) continue\r\n Transforms.removeNodes(editor, { at: livePath })\r\n }\r\n const insertAt: Path = [Math.min(firstIdx, editor.children.length)]\r\n Transforms.insertNodes(editor, bqNode as Element, { at: insertAt })\r\n try {\r\n editor.select(Editor.end(editor, insertAt))\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n ;(editor as any).__mdgchTrustedBlockPath = [...insertAt]\r\n })\r\n })\r\n } catch (e) {\r\n console.warn('[wangeditor] toggleBlockquoteMerged merge failed', e)\r\n }\r\n}\r\n","/**\r\n * @description 工具栏引用:多行合并为一个引用块\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { QUOTE_SVG } from '../../../constants/icon-svg'\r\nimport { isQuoteableBlockType, toggleBlockquoteMerged } from '../merge'\r\n\r\nclass BlockquoteMergedMenu implements IButtonMenu {\r\n readonly title = t('blockQuote.title')\r\n readonly iconSvg = QUOTE_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return DomEditor.getSelectedNodeByType(editor, 'blockquote') != null\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n try {\r\n const elems = DomEditor.getSelectedElems(editor)\r\n if (elems.some(el => editor.isVoid(el))) return true\r\n return !elems.some(el => isQuoteableBlockType(DomEditor.getNodeType(el)))\r\n } catch (_) {\r\n return true\r\n }\r\n }\r\n\r\n exec(editor: IDomEditor): void {\r\n if (this.isDisabled(editor)) return\r\n toggleBlockquoteMerged(editor)\r\n }\r\n}\r\n\r\nexport default BlockquoteMergedMenu\r\n","/**\r\n * @description blockquote entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderBlockQuoteConf } from './render-elem'\r\nimport { quoteToHtmlConf } from './elem-to-html'\r\nimport { parseHtmlConf } from './parse-elem-html'\r\nimport { blockquoteMenuConf, blockquoteMergedMenuConf } from './menu/index'\r\nimport withBlockquote from './plugin'\r\n\r\nconst blockquote: Partial<IModuleConf> = {\r\n renderElems: [renderBlockQuoteConf],\r\n elemsToHtml: [quoteToHtmlConf],\r\n parseElemsHtml: [parseHtmlConf],\r\n menus: [blockquoteMenuConf, blockquoteMergedMenuConf],\r\n editorPlugin: withBlockquote,\r\n}\r\n\r\nexport default blockquote\r\n","/**\r\n * @description block quote menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport BlockquoteMenu from './BlockquoteMenu'\r\nimport BlockquoteMergedMenu from './BlockquoteMergedMenu'\r\n\r\nexport const blockquoteMenuConf = {\r\n key: 'blockquote',\r\n factory() {\r\n return new BlockquoteMenu()\r\n },\r\n}\r\n\r\n/** yunkee 工具栏:多行合并引用 */\r\nexport const blockquoteMergedMenuConf = {\r\n key: 'blockquoteMerged',\r\n factory() {\r\n return new BlockquoteMergedMenu()\r\n },\r\n}\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Transforms, Node, Point } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction withBlockquote<T extends IDomEditor>(editor: T): T {\r\n const { insertBreak, insertText, insertData } = editor\r\n const newEditor = editor\r\n\r\n // 重写 insertBreak - 换行时插入 p\r\n newEditor.insertBreak = () => {\r\n const { selection } = newEditor\r\n if (selection == null) return insertBreak()\r\n\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => DomEditor.checkNodeType(n, 'blockquote'),\r\n universal: true,\r\n })\r\n if (!nodeEntry) return insertBreak()\r\n\r\n const quoteElem = nodeEntry[0]\r\n const quotePath = DomEditor.findPath(editor, quoteElem)\r\n const quoteEndLocation = Editor.end(editor, quotePath)\r\n\r\n if (Point.equals(quoteEndLocation, selection.focus)) {\r\n // 光标位于 blockquote 最后\r\n const str = Node.string(quoteElem)\r\n if (str && str.slice(-1) === '\\n') {\r\n // blockquote 文本最后一个是 \\n\r\n editor.deleteBackward('character') // 删除最后一个 \\n\r\n\r\n // 则插入一个 paragraph\r\n const p = { type: 'paragraph', children: [{ text: '' }] }\r\n Transforms.insertNodes(newEditor, p, { mode: 'highest' })\r\n return\r\n }\r\n }\r\n\r\n // 情况情况,插入换行符\r\n insertText('\\n')\r\n }\r\n\r\n // 重写 insertData - 引用内粘贴多行时保持为单个 blockquote\r\n // 默认 withEventData 对纯文本用 splitNodes,会对 blockquote 拆成多个引用;\r\n // HTML 粘贴也会以最高级插入多个块。此处与 code-block/table 一致,改为插入带 \\n 的纯文本。\r\n newEditor.insertData = (data: DataTransfer) => {\r\n const quoteNode = DomEditor.getSelectedNodeByType(newEditor, 'blockquote')\r\n if (quoteNode == null) {\r\n insertData(data)\r\n return\r\n }\r\n\r\n // 图片等非纯文本粘贴走默认逻辑\r\n const files = data.files\r\n if (files && files.length > 0) {\r\n insertData(data)\r\n return\r\n }\r\n const html = data.getData('text/html')\r\n if (html && /<img[^>]+>/i.test(html)) {\r\n insertData(data)\r\n return\r\n }\r\n\r\n const text = data.getData('text/plain')\r\n if (!text) {\r\n insertData(data)\r\n return\r\n }\r\n\r\n const normalized = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n')\r\n Editor.insertText(newEditor, normalized)\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withBlockquote\r\n","/**\r\n * @description emotion menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor } from 'slate'\r\nimport { IDropPanelMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport $, { Dom7Array, DOMElement } from '../../../utils/dom'\r\nimport { EMOTION_SVG } from '../../../constants/icon-svg'\r\n\r\nclass EmotionMenu implements IDropPanelMenu {\r\n readonly title = t('emotion.title')\r\n readonly iconSvg = EMOTION_SVG\r\n readonly tag = 'button'\r\n readonly showDropPanel = true // 点击 button 时显示 dropPanel\r\n private $content: Dom7Array | null = null\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n // 点击菜单时,弹出 droPanel 之前,不需要执行其他代码\r\n // 此处空着即可\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 不需要 getValue\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 不需要 active\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n if (type === 'pre') return true // 代码块\r\n if (Editor.isVoid(editor, n)) return true // void node\r\n\r\n return false\r\n },\r\n universal: true,\r\n })\r\n\r\n if (match) return true\r\n return false\r\n }\r\n\r\n getPanelContentElem(editor: IDomEditor): DOMElement {\r\n if (this.$content == null) {\r\n // 第一次渲染\r\n const $content = $('<ul class=\"w-e-panel-content-emotion\"></ul>')\r\n\r\n // 绑定事件(仅第一次绑定,不可重复绑定)\r\n $content.on('click', 'li', (e: Event) => {\r\n const { target } = e\r\n if (target == null) return\r\n e.preventDefault()\r\n\r\n const $li = $(target)\r\n const emotionStr = $li.text()\r\n editor.insertText(emotionStr)\r\n })\r\n\r\n this.$content = $content\r\n }\r\n\r\n const $content = this.$content\r\n if ($content == null) return document.createElement('ul')\r\n $content.empty() // 清空之后再重置内容\r\n\r\n // 获取菜单配置\r\n const colorConf = editor.getMenuConfig('emotion')\r\n const { emotions = [] } = colorConf\r\n // 根据菜单配置生成 panel content\r\n emotions.forEach((emotion: string) => {\r\n const $li = $(`<li>${emotion}</li>`)\r\n $content.append($li)\r\n })\r\n\r\n return $content[0]\r\n }\r\n}\r\n\r\nexport default EmotionMenu\r\n","/**\r\n * @description emotion menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport EmotionMenu from './EmotionMenu'\r\nimport { genConfig } from './config'\r\n\r\nexport const emotionMenuConf = {\r\n key: 'emotion',\r\n factory() {\r\n return new EmotionMenu()\r\n },\r\n\r\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\r\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\r\n config: {\r\n emotions: genConfig(),\r\n },\r\n}\r\n","/**\r\n * @description emotion entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { emotionMenuConf } from './menu/index'\r\n\r\nconst emotion: Partial<IModuleConf> = {\r\n menus: [emotionMenuConf],\r\n}\r\n\r\nexport default emotion\r\n","/**\r\n * @description menu config\r\n * @author wangfupeng\r\n */\r\n\r\nexport function genConfig() {\r\n const emotions =\r\n '😀 😃 😄 😁 😆 😅 😂 🤣 😊 😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 😛 😝 😜 🤓 😎 😏 😒 😞 😔 😟 😕 🙁 😣 😖 😫 😩 😢 😭 😤 😠 😡 😳 😱 😨 🤗 🤔 😶 😑 😬 🙄 😯 😴 😷 🤑 😈 🤡 💩 👻 💀 👀 👣 👐 🙌 👏 🤝 👍 👎 👊 ✊ 🤛 🤜 🤞 ✌️ 🤘 👌 👈 👉 👆 👇 ☝️ ✋ 🤚 🖐 🖖 👋 🤙 💪 🖕 ✍️ 🙏'\r\n return emotions.split(' ')\r\n}\r\n","/**\r\n * @description pre-parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, { DOMElement, getTagName } from '../../utils/dom'\r\n\r\n// V4 font-size 对应关系(V4 使用 <font size=\"1\">xxx</font> 格式)\r\nconst FONT_SIZE_MAP_FOR_V4 = {\r\n '1': '12px',\r\n '2': '14px',\r\n '3': '16px',\r\n '4': '19px',\r\n '5': '24px',\r\n '6': '32px',\r\n '7': '48px',\r\n}\r\n\r\n/**\r\n * pre-prase font ,兼容 V4\r\n * @param fontElem fontElem\r\n */\r\nfunction preParse(fontElem: DOMElement): DOMElement {\r\n const $font = $(fontElem)\r\n const tagName = getTagName($font)\r\n if (tagName !== 'font') return fontElem\r\n\r\n // 处理 size (V4 使用 <font size=\"1\">xxx</font> 格式)\r\n const size = $font.attr('size') || ''\r\n if (size) {\r\n $font.removeAttr('size')\r\n $font.css('font-size', FONT_SIZE_MAP_FOR_V4[size])\r\n }\r\n\r\n // 处理 face (V4 使用 <font face=\"黑体\">xx</font> 格式)\r\n const face = $font.attr('face') || ''\r\n if (face) {\r\n $font.removeAttr('face')\r\n $font.css('font-family', face)\r\n }\r\n\r\n return $font[0]\r\n}\r\n\r\nexport const preParseHtmlConf = {\r\n selector: 'font',\r\n preParseHtml: preParse,\r\n}\r\n","var DESCRIPTORS = require('../internals/descriptors');\nvar FUNCTION_NAME_EXISTS = require('../internals/function-name').EXISTS;\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /function\\b(?:\\s|\\/\\*[\\S\\s]*?\\*\\/|\\/\\/[^\\n\\r]*[\\n\\r]+)*([^\\s(/]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return regExpExec(nameRE, functionToString(this))[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","/**\r\n * @description header menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor } from 'slate'\r\nimport { ISelectMenu, IDomEditor, DomEditor, IOption } from '@mnykj/wangeditoroptimize-core'\r\n\r\nabstract class BaseMenu implements ISelectMenu {\r\n abstract readonly title: string\r\n abstract readonly iconSvg: string\r\n abstract readonly mark: string // 'fontSize'/'fontFamily'\r\n readonly tag = 'select'\r\n readonly width = 80\r\n\r\n abstract getOptions(editor: IDomEditor): IOption[]\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // select menu 会显示 selected value ,用不到 active\r\n return false\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const mark = this.mark\r\n const curMarks = Editor.marks(editor)\r\n // @ts-ignore\r\n if (curMarks && curMarks[mark]) return curMarks[mark]\r\n return ''\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const mark = this.mark\r\n const [match] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n if (type === 'pre') return true // 代码块\r\n if (Editor.isVoid(editor, n)) return true // void node\r\n\r\n return false\r\n },\r\n universal: true,\r\n })\r\n\r\n // 匹配到,则禁用\r\n if (match) return true\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n const mark = this.mark\r\n if (value) {\r\n editor.addMark(mark, value)\r\n } else {\r\n editor.removeMark(mark)\r\n }\r\n }\r\n}\r\n\r\nexport default BaseMenu\r\n","/**\r\n * @description font-size menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IDomEditor, IOption, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { FONT_SIZE_SVG } from '../../../constants/icon-svg'\r\n\r\nclass FontSizeMenu extends BaseMenu {\r\n readonly title = t('fontSize.title')\r\n readonly iconSvg = FONT_SIZE_SVG\r\n readonly mark = 'fontSize'\r\n\r\n getOptions(editor: IDomEditor): IOption[] {\r\n const options: IOption[] = []\r\n\r\n // 获取配置,参考 './config.ts'\r\n const { fontSizeList = [] } = editor.getMenuConfig(this.mark)\r\n\r\n // 生成 options\r\n options.push({\r\n text: t('fontSize.default'),\r\n value: '', // this.getValue(editor) 未找到结果时,会返回 '' ,正好对应到这里\r\n })\r\n fontSizeList.forEach((size: string | { name: string; value: string }) => {\r\n if (typeof size === 'string') {\r\n options.push({\r\n text: size,\r\n value: size,\r\n })\r\n } else if (typeof size === 'object') {\r\n const { name, value } = size\r\n options.push({\r\n text: name,\r\n value: value,\r\n })\r\n }\r\n })\r\n\r\n // 设置 selected\r\n const curValue = this.getValue(editor)\r\n options.forEach(opt => {\r\n if (opt.value === curValue) {\r\n opt.selected = true\r\n } else {\r\n delete opt.selected\r\n }\r\n })\r\n\r\n return options\r\n }\r\n}\r\n\r\nexport default FontSizeMenu\r\n","/**\r\n * @description font-family menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IDomEditor, IOption, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { FONT_FAMILY_SVG } from '../../../constants/icon-svg'\r\n\r\nclass FontFamilyMenu extends BaseMenu {\r\n readonly title = t('fontFamily.title')\r\n readonly iconSvg = FONT_FAMILY_SVG\r\n readonly mark = 'fontFamily'\r\n readonly selectPanelWidth = 150\r\n\r\n getOptions(editor: IDomEditor): IOption[] {\r\n const options: IOption[] = []\r\n\r\n // 获取配置,参考 './config.ts'\r\n const { fontFamilyList = [] } = editor.getMenuConfig(this.mark)\r\n\r\n // 生成 options\r\n options.push({\r\n text: t('fontFamily.default'),\r\n value: '', // this.getValue(editor) 未找到结果时,会返回 '' ,正好对应到这里\r\n })\r\n fontFamilyList.forEach((family: string | { name: string; value: string }) => {\r\n if (typeof family === 'string') {\r\n options.push({\r\n text: family,\r\n value: family,\r\n styleForRenderMenuList: { 'font-family': family },\r\n })\r\n } else if (typeof family === 'object') {\r\n const { name, value } = family\r\n options.push({\r\n text: name,\r\n value,\r\n styleForRenderMenuList: { 'font-family': value },\r\n })\r\n }\r\n })\r\n\r\n // 设置 selected\r\n const curValue = this.getValue(editor)\r\n options.forEach(opt => {\r\n if (opt.value === curValue) {\r\n opt.selected = true\r\n } else {\r\n delete opt.selected\r\n }\r\n })\r\n\r\n return options\r\n }\r\n}\r\n\r\nexport default FontFamilyMenu\r\n","/**\r\n * @description font-size font-family menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport FontSizeMenu from './FontSizeMenu'\r\nimport FontFamilyMenu from './FontFamilyMenu'\r\nimport { genFontSizeConfig, getFontFamilyConfig } from './config'\r\n\r\nexport const fontSizeMenuConf = {\r\n key: 'fontSize',\r\n factory() {\r\n return new FontSizeMenu()\r\n },\r\n\r\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\r\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\r\n config: {\r\n fontSizeList: genFontSizeConfig(),\r\n },\r\n}\r\n\r\nexport const fontFamilyMenuConf = {\r\n key: 'fontFamily',\r\n factory() {\r\n return new FontFamilyMenu()\r\n },\r\n config: {\r\n fontFamilyList: getFontFamilyConfig(),\r\n },\r\n}\r\n","/**\r\n * @description font-size font-family\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { preParseHtmlConf } from './pre-parse-html'\r\nimport { parseStyleHtml } from './parse-style-html'\r\nimport { fontSizeMenuConf, fontFamilyMenuConf } from './menu/index'\r\n\r\nconst fontSizeAndFamily: Partial<IModuleConf> = {\r\n renderStyle,\r\n styleToHtml,\r\n preParseHtml: [preParseHtmlConf],\r\n parseStyleHtml,\r\n menus: [fontSizeMenuConf, fontFamilyMenuConf],\r\n}\r\n\r\nexport default fontSizeAndFamily\r\n","/**\r\n * @description render font-size font-family style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { addVnodeStyle } from '../../utils/vdom'\r\nimport { FontSizeAndFamilyText } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node slate elem\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n const { fontSize, fontFamily } = node as FontSizeAndFamilyText\r\n let styleVnode: VNode = vnode\r\n\r\n if (fontSize) {\r\n addVnodeStyle(styleVnode, { fontSize })\r\n }\r\n if (fontFamily) {\r\n addVnodeStyle(styleVnode, { fontFamily })\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description textStyle to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Text, Descendant } from 'slate'\r\nimport $, { getOuterHTML, getTagName, isPlainText } from '../../utils/dom'\r\nimport { FontSizeAndFamilyText } from './custom-types'\r\n\r\n/**\r\n * style to html\r\n * @param textNode slate text node\r\n * @param textHtml text html\r\n * @returns styled html\r\n */\r\nexport function styleToHtml(textNode: Descendant, textHtml: string): string {\r\n if (!Text.isText(textNode)) return textHtml\r\n\r\n const { fontSize, fontFamily } = textNode as FontSizeAndFamilyText\r\n if (!fontSize && !fontFamily) return textHtml\r\n\r\n let $text\r\n\r\n if (isPlainText(textHtml)) {\r\n // textHtml 是纯文本,不是 html tag\r\n $text = $(`<span>${textHtml}</span>`)\r\n } else {\r\n // textHtml 是 html tag\r\n $text = $(textHtml)\r\n const tagName = getTagName($text)\r\n if (tagName !== 'span') {\r\n // 如果不是 span ,则包裹一层,接下来要设置 css\r\n $text = $(`<span>${textHtml}</span>`)\r\n }\r\n }\r\n\r\n if (fontSize) $text.css('font-size', fontSize)\r\n if (fontFamily) $text.css('font-family', fontFamily)\r\n\r\n return getOuterHTML($text)\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Text } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { FontSizeAndFamilyText } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nexport function parseStyleHtml(text: DOMElement, node: Descendant, editor: IDomEditor): Descendant {\r\n const $text = $(text)\r\n if (!Text.isText(node)) return node\r\n\r\n const textNode = node as FontSizeAndFamilyText\r\n\r\n // -------- 处理 font-size --------\r\n const { fontSizeList = [] } = editor.getMenuConfig('fontSize')\r\n const fontSize = getStyleValue($text, 'font-size')\r\n\r\n const includesSize =\r\n fontSizeList.find(item => item.value && item.value === fontSize) ||\r\n fontSizeList.includes(fontSize)\r\n\r\n if (fontSize && includesSize) {\r\n textNode.fontSize = fontSize\r\n }\r\n\r\n // -------- 处理 font-family --------\r\n const { fontFamilyList = [] } = editor.getMenuConfig('fontFamily')\r\n // 这里需要替换掉 \", css 设置 font-family,会将有空格的字体使用 \" 包裹\r\n const fontFamily = getStyleValue($text, 'font-family').replace(/\"/g, '')\r\n\r\n // getFontFamilyConfig 配置支持对象形式\r\n const includesFamily =\r\n fontFamilyList.find(item => item.value && item.value === fontFamily) ||\r\n fontFamilyList.includes(fontFamily)\r\n\r\n if (fontFamily && includesFamily) {\r\n textNode.fontFamily = fontFamily\r\n }\r\n\r\n return textNode\r\n}\r\n","/**\r\n * @description font-size font-family config\r\n * @author wangfupeng\r\n */\r\n\r\nexport function genFontSizeConfig() {\r\n const fontSizeList: Array<string | { name: string; value: string }> = [\r\n // 元素支持两种形式:1. 字符串;2. { name: 'xxx', value: 'xxx' }\r\n '12px',\r\n { name: '13px', value: '13px' },\r\n '14px',\r\n '15px',\r\n '16px',\r\n '19px',\r\n { name: '22px', value: '22px' },\r\n '24px',\r\n '29px',\r\n '32px',\r\n '40px',\r\n '48px',\r\n ]\r\n\r\n return fontSizeList\r\n}\r\n\r\nexport function getFontFamilyConfig() {\r\n let fontFamilyList: Array<string | { name: string; value: string }> = [\r\n // 元素支持两种形式:1. 字符串;2. { name: 'xxx', value: 'xxx' }\r\n '黑体',\r\n { name: '仿宋', value: '仿宋' },\r\n '楷体',\r\n '标楷体',\r\n '华文仿宋',\r\n '华文楷体',\r\n { name: '宋体', value: '宋体' },\r\n '微软雅黑',\r\n 'Arial',\r\n 'Tahoma',\r\n 'Verdana',\r\n 'Times New Roman',\r\n 'Courier New',\r\n ]\r\n\r\n return fontFamilyList\r\n}\r\n","/**\r\n * @description pre-parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\n/**\r\n * pre-prase text-indent 兼容 V4 和 V5 早期格式(都使用 padding-left)\r\n * @param elem elem\r\n */\r\nfunction preParse(elem: DOMElement): DOMElement {\r\n const $elem = $(elem)\r\n const paddingLeft = getStyleValue($elem, 'padding-left')\r\n\r\n if (/\\dem/.test(paddingLeft)) {\r\n // 如 '2em' ,V4 格式\r\n $elem.css('text-indent', '2em')\r\n }\r\n\r\n if (/\\dpx/.test(paddingLeft)) {\r\n // px 单位\r\n const num = parseInt(paddingLeft, 10)\r\n if (num % 32 === 0) {\r\n // 如 32px 64px ,V5 早期格式\r\n $elem.css('text-indent', '2em')\r\n }\r\n }\r\n\r\n return $elem[0]\r\n}\r\n\r\nexport const preParseHtmlConf = {\r\n selector: 'p,h1,h2,h3,h4,h5',\r\n preParseHtml: preParse,\r\n}\r\n","/**\r\n * @description indent base menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Node } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nabstract class BaseMenu implements IButtonMenu {\r\n abstract readonly title: string\r\n abstract readonly iconSvg: string\r\n readonly tag = 'button'\r\n\r\n /**\r\n * 获取 node.indent 的值,如 `2em`\r\n * @param editor editor\r\n */\r\n getValue(editor: IDomEditor): string | boolean {\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n // @ts-ignore\r\n match: n => !!n.indent,\r\n universal: true,\r\n })\r\n\r\n if (nodeEntry == null) return ''\r\n const [n] = nodeEntry\r\n // @ts-ignore\r\n return n.indent || ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 不需要 active\r\n return false\r\n }\r\n\r\n /**\r\n * 获取 node 节点\r\n * @param editor editor\r\n */\r\n protected getMatchNode(editor: IDomEditor): Node | null {\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n // 只可用于 p 和 header\r\n if (type === 'paragraph') return true\r\n if (type.startsWith('header')) return true\r\n\r\n return false\r\n },\r\n universal: true,\r\n mode: 'highest', // 匹配最高层级\r\n })\r\n\r\n if (nodeEntry == null) return null\r\n return nodeEntry[0]\r\n }\r\n\r\n abstract isDisabled(editor: IDomEditor): boolean\r\n\r\n abstract exec(editor: IDomEditor, value: string | boolean): void\r\n}\r\n\r\nexport default BaseMenu\r\n","/**\r\n * @description 减少缩进\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { INDENT_LEFT_SVG } from '../../../constants/icon-svg'\r\nimport { IndentElement } from '../custom-types'\r\n\r\nclass DecreaseIndentMenu extends BaseMenu {\r\n readonly title = t('indent.decrease')\r\n readonly iconSvg = INDENT_LEFT_SVG\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n const matchNode = this.getMatchNode(editor)\r\n if (matchNode == null) return true // 未匹配 p header 等,则禁用\r\n\r\n const { indent } = matchNode as IndentElement\r\n if (!indent) {\r\n // 没有 indent ,则禁用\r\n return true\r\n }\r\n\r\n return false // 其他情况,不禁用\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n indent: null,\r\n },\r\n { match: n => Element.isElement(n) }\r\n )\r\n }\r\n}\r\n\r\nexport default DecreaseIndentMenu\r\n","/**\r\n * @description 增加缩进\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element, Editor, Text } from 'slate'\r\nimport { IDomEditor, t, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { INDENT_RIGHT_SVG } from '../../../constants/icon-svg'\r\nimport { IndentElement } from '../custom-types'\r\nimport type { FontSizeAndFamilyText } from '../../font-size-family/custom-types'\r\n\r\nclass IncreaseIndentMenu extends BaseMenu {\r\n readonly title = t('indent.increase')\r\n readonly iconSvg = INDENT_RIGHT_SVG\r\n private DEFAULT_INDENT_VALUE = '2em'\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n const matchNode = this.getMatchNode(editor)\r\n if (matchNode == null) return true // 未匹配 p header 等,则禁用\r\n\r\n const { indent } = matchNode as IndentElement\r\n if (indent) {\r\n // 有 indent ,则禁用\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n private getIndentValue(editor: IDomEditor) {\r\n const matchNode = this.getMatchNode(editor)\r\n\r\n if (!matchNode) return this.DEFAULT_INDENT_VALUE\r\n const textChildren = (matchNode as Element).children.filter(Text.isText)\r\n\r\n const lastTextNode = textChildren[0] as FontSizeAndFamilyText\r\n\r\n if (!lastTextNode || !lastTextNode.fontSize) return this.DEFAULT_INDENT_VALUE\r\n\r\n // 如果段落的第一个 Text 节点 设置了 fontSize 样式,indent 值需要根据 fontSize 进行计算\r\n const fontSize = lastTextNode.fontSize\r\n const value = parseInt(lastTextNode.fontSize)\r\n const unit = fontSize.replace(`${value}`, '')\r\n\r\n return `${value * 2}${unit}`\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n const indent = this.getIndentValue(editor)\r\n\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n indent,\r\n },\r\n {\r\n match: n => Element.isElement(n),\r\n mode: 'highest',\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport default IncreaseIndentMenu\r\n","/**\r\n * @description indent entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { preParseHtmlConf } from './pre-parse-html'\r\nimport { parseStyleHtml } from './parse-style-html'\r\nimport { indentMenuConf, delIndentMenuConf } from './menu/index'\r\n\r\nconst indent: Partial<IModuleConf> = {\r\n renderStyle,\r\n styleToHtml,\r\n preParseHtml: [preParseHtmlConf],\r\n parseStyleHtml,\r\n menus: [indentMenuConf, delIndentMenuConf],\r\n}\r\n\r\nexport default indent\r\n","/**\r\n * @description render indent style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element, Descendant } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { addVnodeStyle } from '../../utils/vdom'\r\nimport { IndentElement } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node slate elem\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n if (!Element.isElement(node)) return vnode\r\n\r\n const { indent } = node as IndentElement // 如 '2em'\r\n let styleVnode: VNode = vnode\r\n\r\n if (indent) {\r\n addVnodeStyle(styleVnode, { textIndent: indent })\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description textStyle to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element, Descendant } from 'slate'\r\nimport $, { getOuterHTML } from '../../utils/dom'\r\nimport { IndentElement } from './custom-types'\r\n\r\nexport function styleToHtml(node: Descendant, elemHtml: string): string {\r\n if (!Element.isElement(node)) return elemHtml\r\n\r\n const { indent } = node as IndentElement // 如 '2em'\r\n if (!indent) return elemHtml\r\n\r\n // 设置样式\r\n const $elem = $(elemHtml)\r\n $elem.css('text-indent', indent)\r\n\r\n // 输出 html\r\n return getOuterHTML($elem)\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Element } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { IndentElement } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nexport function parseStyleHtml(elem: DOMElement, node: Descendant, editor: IDomEditor): Descendant {\r\n const $elem = $(elem)\r\n if (!Element.isElement(node)) return node\r\n\r\n const elemNode = node as IndentElement\r\n\r\n const indent = getStyleValue($elem, 'text-indent')\r\n const indentNumber = parseInt(indent, 10)\r\n if (indent && indentNumber > 0) {\r\n elemNode.indent = indent\r\n }\r\n\r\n return elemNode\r\n}\r\n","/**\r\n * @description indent menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport DecreaseIndentMenu from './DecreaseIndentMenu'\r\nimport IncreaseIndentMenu from './IncreaseIndentMenu'\r\n\r\nexport const indentMenuConf = {\r\n key: 'indent',\r\n factory() {\r\n return new IncreaseIndentMenu()\r\n },\r\n}\r\n\r\nexport const delIndentMenuConf = {\r\n key: 'delIndent',\r\n factory() {\r\n return new DecreaseIndentMenu()\r\n },\r\n}\r\n","/**\r\n * @description justify base menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Node, Element } from 'slate'\r\nimport { IButtonMenu, IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nabstract class BaseMenu implements IButtonMenu {\r\n abstract readonly title: string\r\n abstract readonly iconSvg: string\r\n readonly tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n // 不需要 value\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // 不需要 active\r\n return false\r\n }\r\n\r\n /**\r\n * 获取 node 节点\r\n * @param editor editor\r\n */\r\n protected getMatchNode(editor: IDomEditor): Node | null {\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n // 只可用于 p blockquote header\r\n if (type === 'paragraph') return true\r\n if (type === 'blockquote') return true\r\n if (type.startsWith('header')) return true\r\n\r\n return false\r\n },\r\n universal: true,\r\n mode: 'highest', // 匹配最高层级\r\n })\r\n\r\n if (nodeEntry == null) return null\r\n return nodeEntry[0]\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n\r\n const selectedElems = DomEditor.getSelectedElems(editor)\r\n const notMatch = selectedElems.some((elem: Node) => {\r\n if (Editor.isVoid(editor, elem) && Editor.isBlock(editor, elem)) return true\r\n\r\n const { type } = elem as unknown as Element\r\n if (['pre', 'code'].includes(type)) return true\r\n })\r\n if (notMatch) return true\r\n\r\n return false\r\n }\r\n\r\n abstract exec(editor: IDomEditor, value: string | boolean): void\r\n}\r\n\r\nexport default BaseMenu\r\n","/**\r\n * @description justify left menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { JUSTIFY_LEFT_SVG } from '../../../constants/icon-svg'\r\n\r\nclass JustifyLeftMenu extends BaseMenu {\r\n readonly title = t('justify.left')\r\n readonly iconSvg = JUSTIFY_LEFT_SVG\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n textAlign: 'left',\r\n },\r\n { match: n => Element.isElement(n) && !editor.isInline(n) }\r\n )\r\n }\r\n}\r\n\r\nexport default JustifyLeftMenu\r\n","/**\r\n * @description justify right menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { JUSTIFY_RIGHT_SVG } from '../../../constants/icon-svg'\r\n\r\nclass JustifyRightMenu extends BaseMenu {\r\n readonly title = t('justify.right')\r\n readonly iconSvg = JUSTIFY_RIGHT_SVG\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n textAlign: 'right',\r\n },\r\n { match: n => Element.isElement(n) && !editor.isInline(n) }\r\n )\r\n }\r\n}\r\n\r\nexport default JustifyRightMenu\r\n","/**\r\n * @description justify center menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { JUSTIFY_CENTER_SVG } from '../../../constants/icon-svg'\r\n\r\nclass JustifyCenterMenu extends BaseMenu {\r\n readonly title = t('justify.center')\r\n readonly iconSvg = JUSTIFY_CENTER_SVG\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n textAlign: 'center',\r\n },\r\n { match: n => Element.isElement(n) && !editor.isInline(n) } // inline 元素设置text-align 是没作用的\r\n )\r\n }\r\n}\r\n\r\nexport default JustifyCenterMenu\r\n","/**\r\n * @description 两端对齐\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport BaseMenu from './BaseMenu'\r\nimport { JUSTIFY_JUSTIFY_SVG } from '../../../constants/icon-svg'\r\n\r\nclass JustifyJustifyMenu extends BaseMenu {\r\n readonly title = t('justify.justify')\r\n readonly iconSvg = JUSTIFY_JUSTIFY_SVG\r\n\r\n exec(editor: IDomEditor, value: string | boolean): void {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n textAlign: 'justify',\r\n },\r\n { match: n => Element.isElement(n) && !editor.isInline(n) }\r\n )\r\n }\r\n}\r\n\r\nexport default JustifyJustifyMenu\r\n","/**\r\n * @description justify module entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { parseStyleHtml } from './parse-style-html'\r\nimport {\r\n justifyLeftMenuConf,\r\n justifyRightMenuConf,\r\n justifyCenterMenuConf,\r\n justifyJustifyMenuConf,\r\n} from './menu/index'\r\n\r\nconst justify: Partial<IModuleConf> = {\r\n renderStyle,\r\n styleToHtml,\r\n parseStyleHtml,\r\n menus: [justifyLeftMenuConf, justifyRightMenuConf, justifyCenterMenuConf, justifyJustifyMenuConf],\r\n}\r\n\r\nexport default justify\r\n","/**\r\n * @description render justify style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Element } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { addVnodeStyle } from '../../utils/vdom'\r\nimport { JustifyElement } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node slate elem\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n if (!Element.isElement(node)) return vnode\r\n\r\n const { textAlign } = node as JustifyElement // 如 'left'/'right'/'center' 等\r\n let styleVnode: VNode = vnode\r\n\r\n if (textAlign) {\r\n addVnodeStyle(styleVnode, { textAlign })\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description textStyle to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element, Descendant } from 'slate'\r\nimport $, { getOuterHTML } from '../../utils/dom'\r\nimport { JustifyElement } from './custom-types'\r\n\r\nexport function styleToHtml(node: Descendant, elemHtml: string): string {\r\n if (!Element.isElement(node)) return elemHtml\r\n\r\n const { textAlign } = node as JustifyElement // 如 'left'/'right'/'center' 等\r\n if (!textAlign) return elemHtml\r\n\r\n // 设置样式\r\n const $elem = $(elemHtml)\r\n $elem.css('text-align', textAlign)\r\n\r\n // 输出 html\r\n const outerHtml = getOuterHTML($elem)\r\n return outerHtml\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Element } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { JustifyElement } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nexport function parseStyleHtml(elem: DOMElement, node: Descendant, editor: IDomEditor): Descendant {\r\n const $elem = $(elem)\r\n if (!Element.isElement(node)) return node\r\n\r\n const elemNode = node as JustifyElement\r\n\r\n const textAlign = getStyleValue($elem, 'text-align')\r\n if (textAlign) {\r\n elemNode.textAlign = textAlign\r\n }\r\n\r\n return elemNode\r\n}\r\n","/**\r\n * @description justify menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport JustifyLeftMenu from './JustifyLeftMenu'\r\nimport JustifyRightMenu from './JustifyRightMenu'\r\nimport JustifyCenterMenu from './JustifyCenterMenu'\r\nimport JustifyJustifyMenu from './JustifyJustifyMenu'\r\n\r\nexport const justifyLeftMenuConf = {\r\n key: 'justifyLeft',\r\n factory() {\r\n return new JustifyLeftMenu()\r\n },\r\n}\r\n\r\nexport const justifyRightMenuConf = {\r\n key: 'justifyRight',\r\n factory() {\r\n return new JustifyRightMenu()\r\n },\r\n}\r\n\r\nexport const justifyCenterMenuConf = {\r\n key: 'justifyCenter',\r\n factory() {\r\n return new JustifyCenterMenu()\r\n },\r\n}\r\n\r\nexport const justifyJustifyMenuConf = {\r\n key: 'justifyJustify',\r\n factory() {\r\n return new JustifyJustifyMenu()\r\n },\r\n}\r\n","/**\r\n * @description header menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Editor, Node, Element, Transforms } from 'slate'\r\nimport { ISelectMenu, IDomEditor, DomEditor, IOption, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { LINE_HEIGHT_SVG } from '../../../constants/icon-svg'\r\nimport { LineHeightElement } from '../custom-types'\r\n\r\nclass LineHeightMenu implements ISelectMenu {\r\n readonly title = t('lineHeight.title')\r\n readonly iconSvg = LINE_HEIGHT_SVG\r\n readonly tag = 'select'\r\n readonly width = 80\r\n\r\n getOptions(editor: IDomEditor): IOption[] {\r\n const options: IOption[] = []\r\n\r\n // 获取配置,参考 './config.ts'\r\n const { lineHeightList = [] } = editor.getMenuConfig('lineHeight')\r\n\r\n // 生成 options\r\n options.push({\r\n text: t('lineHeight.default'),\r\n value: '', // this.getValue(editor) 未找到结果时,会返回 '' ,正好对应到这里\r\n })\r\n lineHeightList.forEach((height: string) => {\r\n options.push({\r\n text: height,\r\n value: height,\r\n })\r\n })\r\n\r\n // 设置 selected\r\n const curValue = this.getValue(editor)\r\n options.forEach(opt => {\r\n if (opt.value === curValue) {\r\n opt.selected = true\r\n } else {\r\n delete opt.selected\r\n }\r\n })\r\n\r\n return options\r\n }\r\n\r\n /**\r\n * 获取匹配的 node 节点\r\n * @param editor editor\r\n */\r\n private getMatchNode(editor: IDomEditor): Node | null {\r\n const [nodeEntry] = Editor.nodes(editor, {\r\n match: n => {\r\n const type = DomEditor.getNodeType(n)\r\n\r\n // line-height 匹配如下类型的 node\r\n if (type.startsWith('header')) return true\r\n if (['paragraph', 'blockquote', 'list-item'].includes(type)) {\r\n return true\r\n }\r\n\r\n return false\r\n },\r\n universal: true,\r\n mode: 'highest', // 匹配最高层级\r\n })\r\n\r\n if (nodeEntry == null) return null\r\n return nodeEntry[0]\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n // select menu 会显示 selected value ,用不到 active\r\n return false\r\n }\r\n\r\n /**\r\n * 获取 node.lineHeight 的值(如 '1' '1.5'),没有则返回 ''\r\n * @param editor editor\r\n */\r\n getValue(editor: IDomEditor): string | boolean {\r\n const node = this.getMatchNode(editor)\r\n if (node == null) return ''\r\n if (!Element.isElement(node)) return ''\r\n\r\n return (node as LineHeightElement).lineHeight || ''\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true // 禁用\r\n\r\n const node = this.getMatchNode(editor)\r\n if (node == null) return true // 未匹配到指定 node ,禁用\r\n\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n Transforms.setNodes(\r\n editor,\r\n {\r\n lineHeight: value.toString(),\r\n },\r\n { mode: 'highest' }\r\n )\r\n }\r\n}\r\n\r\nexport default LineHeightMenu\r\n","/**\r\n * @description line-height module entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { renderStyle } from './render-style'\r\nimport { styleToHtml } from './style-to-html'\r\nimport { lineHeightMenuConf } from './menu/index'\r\nimport { parseStyleHtml } from './parse-style-html'\r\n\r\nconst lineHeight: Partial<IModuleConf> = {\r\n renderStyle,\r\n styleToHtml,\r\n parseStyleHtml,\r\n menus: [lineHeightMenuConf],\r\n}\r\n\r\nexport default lineHeight\r\n","/**\r\n * @description render line-height style\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element, Descendant } from 'slate'\r\nimport { jsx, VNode } from 'snabbdom'\r\nimport { addVnodeStyle } from '../../utils/vdom'\r\nimport { LineHeightElement } from './custom-types'\r\n\r\n/**\r\n * 添加样式\r\n * @param node slate elem\r\n * @param vnode vnode\r\n * @returns vnode\r\n */\r\nexport function renderStyle(node: Descendant, vnode: VNode): VNode {\r\n if (!Element.isElement(node)) return vnode\r\n\r\n const { lineHeight } = node as LineHeightElement // 如 '1' '1.5'\r\n let styleVnode: VNode = vnode\r\n\r\n if (lineHeight) {\r\n addVnodeStyle(styleVnode, { lineHeight })\r\n }\r\n\r\n return styleVnode\r\n}\r\n","/**\r\n * @description textStyle to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element, Descendant } from 'slate'\r\nimport $, { getOuterHTML } from '../../utils/dom'\r\nimport { LineHeightElement } from './custom-types'\r\n\r\nexport function styleToHtml(node: Descendant, elemHtml: string): string {\r\n if (!Element.isElement(node)) return elemHtml\r\n\r\n const { lineHeight } = node as LineHeightElement // 如 '1' '1.5'\r\n if (!lineHeight) return elemHtml\r\n\r\n // 设置样式\r\n const $elem = $(elemHtml)\r\n $elem.css('line-height', lineHeight)\r\n\r\n // 输出 html\r\n return getOuterHTML($elem)\r\n}\r\n","/**\r\n * @description parse style html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant, Element } from 'slate'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { LineHeightElement } from './custom-types'\r\nimport $, { DOMElement, getStyleValue } from '../../utils/dom'\r\n\r\nexport function parseStyleHtml(elem: DOMElement, node: Descendant, editor: IDomEditor): Descendant {\r\n const $elem = $(elem)\r\n if (!Element.isElement(node)) return node\r\n\r\n const elemNode = node as LineHeightElement\r\n\r\n const { lineHeightList = [] } = editor.getMenuConfig('lineHeight')\r\n const lineHeight = getStyleValue($elem, 'line-height')\r\n if (lineHeight && lineHeightList.includes(lineHeight)) {\r\n elemNode.lineHeight = lineHeight\r\n }\r\n\r\n return elemNode\r\n}\r\n","/**\r\n * @description line-height menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport LineHeightMenu from './LineHeightMenu'\r\nimport { genLineHeightConfig } from './config'\r\n\r\nexport const lineHeightMenuConf = {\r\n key: 'lineHeight',\r\n factory() {\r\n return new LineHeightMenu()\r\n },\r\n\r\n // 默认的菜单菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\r\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\r\n config: {\r\n lineHeightList: genLineHeightConfig(),\r\n },\r\n}\r\n","/**\r\n * @description line-height config\r\n * @author wangfupeng\r\n */\r\n\r\nexport function genLineHeightConfig() {\r\n return ['1', '1.15', '1.5', '2', '2.5', '3']\r\n}\r\n","/**\r\n * @description redo menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { REDO_SVG } from '../../../constants/icon-svg'\r\n\r\nclass RedoMenu implements IButtonMenu {\r\n title = t('undo.redo')\r\n iconSvg = REDO_SVG\r\n tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (typeof editor.redo === 'function') {\r\n editor.redo()\r\n }\r\n }\r\n}\r\n\r\nexport default RedoMenu\r\n","/**\r\n * @description undo menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { UNDO_SVG } from '../../../constants/icon-svg'\r\n\r\nclass UndoMenu implements IButtonMenu {\r\n title = t('undo.undo')\r\n iconSvg = UNDO_SVG\r\n tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (typeof editor.undo === 'function') {\r\n editor.undo()\r\n }\r\n }\r\n}\r\n\r\nexport default UndoMenu\r\n","/**\r\n * @description undo redo\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { redoMenuConf, undoMenuConf } from './menu/index'\r\n\r\nconst undoRedo: Partial<IModuleConf> = {\r\n menus: [redoMenuConf, undoMenuConf],\r\n}\r\n\r\nexport default undoRedo\r\n","/**\r\n * @description menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport RedoMenu from './RedoMenu'\r\nimport UndoMenu from './UndoMenu'\r\n\r\nexport const undoMenuConf = {\r\n key: 'undo',\r\n factory() {\r\n return new UndoMenu()\r\n },\r\n}\r\n\r\nexport const redoMenuConf = {\r\n key: 'redo',\r\n factory() {\r\n return new RedoMenu()\r\n },\r\n}\r\n","/**\r\n * @description render divider elem\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement } from 'slate'\r\nimport { h, VNode } from 'snabbdom'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction renderDivider(\r\n elemNode: SlateElement,\r\n children: VNode[] | null,\r\n editor: IDomEditor\r\n): VNode {\r\n const renderStyle: any = {}\r\n\r\n // 是否选中\r\n const selected = DomEditor.isNodeSelected(editor, elemNode)\r\n\r\n const vnode = h(\r\n 'div',\r\n {\r\n props: {\r\n contentEditable: false,\r\n className: 'w-e-textarea-divider',\r\n },\r\n dataset: {\r\n selected: selected ? 'true' : '',\r\n },\r\n style: renderStyle,\r\n on: {\r\n mousedown: event => event.preventDefault(),\r\n },\r\n },\r\n [h('hr')]\r\n )\r\n // 【注意】void node 中,renderElem 不用处理 children 。core 会统一处理。\r\n\r\n return vnode\r\n}\r\n\r\nconst renderDividerConf = {\r\n type: 'divider', // 和 elemNode.type 一致\r\n renderElem: renderDivider,\r\n}\r\n\r\nexport { renderDividerConf }\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\n\r\nfunction dividerToHtml(elem: Element, childrenHtml: string): string {\r\n return `<hr/>`\r\n}\r\n\r\nexport const dividerToHtmlConf = {\r\n type: 'divider',\r\n elemToHtml: dividerToHtml,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport $, { DOMElement } from '../../utils/dom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { DividerElement } from './custom-types'\r\n\r\nfunction parseHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): DividerElement {\r\n return {\r\n type: 'divider',\r\n children: [{ text: '' }], // void node 有一个空白 text\r\n }\r\n}\r\n\r\nexport const parseHtmlConf = {\r\n selector: 'hr:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parseHtml,\r\n}\r\n","/**\r\n * @description insert divider menu\r\n * @author wangfupeng\r\n *\r\n * 空白段原地替换为分割线(不留下方/上方空行);非空段走 highest 插入。\r\n */\r\n\r\nimport { Editor, Transforms } from 'slate'\r\nimport {\r\n IButtonMenu,\r\n IDomEditor,\r\n DomEditor,\r\n t,\r\n getEditorNodeAtPath,\r\n isBlankParagraphNode,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { DIVIDER_SVG } from '../../../constants/icon-svg'\r\nimport { DividerElement } from '../custom-types'\r\n\r\nfunction insertDividerSmart(editor: IDomEditor): void {\r\n const divider: DividerElement = {\r\n type: 'divider',\r\n children: [{ text: '' }],\r\n }\r\n\r\n const { selection } = editor\r\n const topPath =\r\n selection?.anchor?.path?.length != null ? ([selection.anchor.path[0]] as number[]) : null\r\n const topNode = topPath ? getEditorNodeAtPath(editor, topPath) : null\r\n\r\n if (topPath && isBlankParagraphNode(topNode)) {\r\n Editor.withoutNormalizing(editor, () => {\r\n Transforms.removeNodes(editor, { at: topPath })\r\n const insertAt = [Math.min(topPath[0], editor.children.length)] as number[]\r\n Transforms.insertNodes(editor, divider, { at: insertAt })\r\n const nextPath = [insertAt[0] + 1] as number[]\r\n try {\r\n if (getEditorNodeAtPath(editor, nextPath)) {\r\n editor.select(Editor.start(editor, nextPath))\r\n } else {\r\n // 末尾:normalize 会补空段\r\n ;(editor as any).__mdgchTrustedBlockPath = [...insertAt]\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n try {\r\n if (typeof (editor as any).normalize === 'function') (editor as any).normalize()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n try {\r\n const divIdx = (editor as any).__mdgchTrustedBlockPath?.[0]\r\n if (divIdx != null) {\r\n const after = getEditorNodeAtPath(editor, [divIdx + 1])\r\n const atDiv = getEditorNodeAtPath(editor, [divIdx]) as any\r\n if (atDiv?.type === 'divider' && after) {\r\n editor.select(Editor.start(editor, [divIdx + 1]))\r\n }\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return\r\n }\r\n\r\n Transforms.insertNodes(editor, divider, { mode: 'highest' })\r\n}\r\n\r\nclass InsertDividerMenu implements IButtonMenu {\r\n readonly title = t('divider.title')\r\n readonly iconSvg = DIVIDER_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n const { selection } = editor\r\n if (selection == null) return true\r\n\r\n const selectedElems = DomEditor.getSelectedElems(editor)\r\n const hasVoidOrTableOrPre = selectedElems.some(elem => {\r\n if (editor.isVoid(elem)) return true\r\n const type = DomEditor.getNodeType(elem)\r\n if (type === 'table') return true\r\n if (type === 'pre') return true\r\n return false\r\n })\r\n if (hasVoidOrTableOrPre) return true\r\n\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor): void {\r\n if (this.isDisabled(editor)) return\r\n insertDividerSmart(editor)\r\n }\r\n}\r\n\r\nexport default InsertDividerMenu\r\n","/**\r\n * @description 删除分割线(原位留空行)\r\n */\r\n\r\nimport { Node } from 'slate'\r\nimport {\r\n IButtonMenu,\r\n IDomEditor,\r\n DomEditor,\r\n getEditorNodeAtPath,\r\n replaceBlockWithEmptyLine,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { TRASH_SVG } from '../../../constants/icon-svg'\r\n\r\nfunction findSelectedDividerPath(editor: IDomEditor): number[] | null {\r\n try {\r\n const byType = DomEditor.getSelectedNodeByType(editor, 'divider')\r\n if (byType) {\r\n const path = DomEditor.findPath(editor, byType)\r\n if (path?.length) return path as number[]\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n const sel = editor?.selection\r\n if (!sel?.anchor?.path) return null\r\n const anchorPath = sel.anchor.path\r\n for (let len = anchorPath.length; len >= 1; len--) {\r\n const path = anchorPath.slice(0, len) as number[]\r\n const node = getEditorNodeAtPath(editor, path) as any\r\n if (node?.type === 'divider') return path\r\n }\r\n return null\r\n}\r\n\r\nclass RemoveDividerMenu implements IButtonMenu {\r\n readonly title = '删除'\r\n readonly iconSvg = TRASH_SVG\r\n readonly tag = 'button'\r\n\r\n getValue(): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return true\r\n return findSelectedDividerPath(editor) == null\r\n }\r\n\r\n exec(editor: IDomEditor): void {\r\n if (this.isDisabled(editor)) return\r\n try {\r\n DomEditor.getHoverbar?.(editor as any)?.hideAndClean?.()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n const path = findSelectedDividerPath(editor)\r\n if (!path?.length) return\r\n const node = getEditorNodeAtPath(editor, path)\r\n if (!node || (node as any).type !== 'divider') return\r\n replaceBlockWithEmptyLine(editor, path, node as Node)\r\n }\r\n}\r\n\r\nexport default RemoveDividerMenu\r\n","/**\r\n * @description divider module\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport withDivider from './plugin'\r\nimport { renderDividerConf } from './render-elem'\r\nimport { dividerToHtmlConf } from './elem-to-html'\r\nimport { parseHtmlConf } from './parse-elem-html'\r\nimport { insertDividerMenuConf, dividerAtCursorMenuConf, removeDividerMenuConf } from './menu/index'\r\n\r\nconst image: Partial<IModuleConf> = {\r\n renderElems: [renderDividerConf],\r\n elemsToHtml: [dividerToHtmlConf],\r\n parseElemsHtml: [parseHtmlConf],\r\n menus: [insertDividerMenuConf, dividerAtCursorMenuConf, removeDividerMenuConf],\r\n editorPlugin: withDivider,\r\n}\r\n\r\nexport default image\r\n","/**\r\n * @description divider menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport InsertDividerMenu from './InsertDividerMenu'\r\nimport RemoveDividerMenu from './RemoveDividerMenu'\r\n\r\nexport const insertDividerMenuConf = {\r\n key: 'divider',\r\n factory() {\r\n return new InsertDividerMenu()\r\n },\r\n}\r\n\r\n/** yunkee 工具栏用的 key(与官方 divider 同一实现) */\r\nexport const dividerAtCursorMenuConf = {\r\n key: 'dividerAtCursor',\r\n factory() {\r\n return new InsertDividerMenu()\r\n },\r\n}\r\n\r\nexport const removeDividerMenuConf = {\r\n key: 'removeDivider',\r\n factory() {\r\n return new RemoveDividerMenu()\r\n },\r\n}\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Transforms, Element } from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction withDivider<T extends IDomEditor>(editor: T): T {\r\n const { isVoid, normalizeNode } = editor\r\n const newEditor = editor\r\n\r\n // 重写 isVoid\r\n newEditor.isVoid = elem => {\r\n const { type } = elem\r\n\r\n if (type === 'divider') {\r\n return true\r\n }\r\n\r\n return isVoid(elem)\r\n }\r\n\r\n // 重新 normalize\r\n newEditor.normalizeNode = ([node, path]) => {\r\n const type = DomEditor.getNodeType(node)\r\n if (type !== 'divider') {\r\n // 未命中 divider ,执行默认的 normalizeNode\r\n return normalizeNode([node, path])\r\n }\r\n\r\n // -------------- divider 是 editor 最后一个节点,需要后面插入 p --------------\r\n const isLast = DomEditor.isLastNode(newEditor, node)\r\n if (isLast) {\r\n Transforms.insertNodes(newEditor, DomEditor.genEmptyParagraph(), { at: [path[0] + 1] })\r\n }\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withDivider\r\n","/**\r\n * @description 选区块转为代码块 / 取消代码块\r\n */\r\n\r\nimport { Editor, Element, Node, Path, Transforms } from 'slate'\r\nimport {\r\n DomEditor,\r\n IDomEditor,\r\n getEditorNodeAtPath,\r\n pinEditorScrollDuring,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { resolveBlocksForMerge, isQuoteableBlockType } from '../blockquote/merge'\r\n\r\nconst CODEABLE = new Set([\r\n 'pre',\r\n 'paragraph',\r\n 'blockquote',\r\n 'header1',\r\n 'header2',\r\n 'header3',\r\n 'header4',\r\n 'header5',\r\n 'header6',\r\n])\r\n\r\nexport function findSelectedPrePath(editor: IDomEditor): Path | null {\r\n try {\r\n const code = DomEditor.getSelectedNodeByType(editor, 'code')\r\n if (code) {\r\n const parent = DomEditor.getParentNode(editor, code)\r\n if (parent && DomEditor.getNodeType(parent) === 'pre') {\r\n return DomEditor.findPath(editor, parent) as Path\r\n }\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n const sel = editor?.selection\r\n if (!sel?.anchor?.path?.length) return null\r\n const path: Path = [sel.anchor.path[0]]\r\n const node = getEditorNodeAtPath(editor, path)\r\n if (node && (node as any).type === 'pre') return path\r\n return null\r\n}\r\n\r\n/** 取消代码块:拆成段落 */\r\nexport function uncodePreInPlace(editor: IDomEditor, path?: Path | null): boolean {\r\n const prePath = path || findSelectedPrePath(editor)\r\n if (!prePath?.length) return false\r\n const preNode = getEditorNodeAtPath(editor, prePath)\r\n if (!preNode || (preNode as any).type !== 'pre') return false\r\n\r\n let text = ''\r\n try {\r\n text = Node.string(Node.get(editor, [...prePath, 0] as Path))\r\n } catch (_) {\r\n text = Node.string(preNode)\r\n }\r\n const paragraphs = String(text)\r\n .split('\\n')\r\n .map(line => ({ type: 'paragraph', children: [{ text: line }] }))\r\n if (!paragraphs.length) {\r\n paragraphs.push({ type: 'paragraph', children: [{ text: '' }] })\r\n }\r\n\r\n try {\r\n pinEditorScrollDuring(editor, () => {\r\n Transforms.removeNodes(editor, { at: prePath })\r\n let insertAt = Math.min(prePath[0], editor.children.length)\r\n for (const p of paragraphs) {\r\n Transforms.insertNodes(editor, p as Element, { at: [insertAt] })\r\n insertAt += 1\r\n }\r\n try {\r\n const firstPath: Path = [Math.min(prePath[0], editor.children.length - 1)]\r\n editor.select({\r\n anchor: { path: [...firstPath, 0], offset: 0 },\r\n focus: { path: [...firstPath, 0], offset: 0 },\r\n })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n return true\r\n } catch (_) {\r\n return false\r\n }\r\n}\r\n\r\n/** 选区多块合并为一个代码块 */\r\nexport function convertSelectionBlockToCodeBlock(\r\n editor: IDomEditor,\r\n language = ''\r\n): boolean {\r\n if (!editor || editor.isDestroyed) return false\r\n\r\n let blocks = resolveBlocksForMerge(editor)\r\n if (!blocks.length) {\r\n // 允许 header 等:resolveBlocksForMerge 已含 quoteable;再兜底当前顶层\r\n const sel = editor.selection\r\n if (sel?.anchor?.path?.length) {\r\n const path: Path = [sel.anchor.path[0]]\r\n const node = getEditorNodeAtPath(editor, path)\r\n if (node && isQuoteableBlockType(DomEditor.getNodeType(node))) {\r\n blocks = [[node, path]]\r\n }\r\n }\r\n }\r\n if (!blocks.length) return false\r\n\r\n const texts = blocks.map(([node, path]) => {\r\n try {\r\n return Node.string(Node.get(editor, path))\r\n } catch (_) {\r\n return Node.string(node)\r\n }\r\n })\r\n const text = texts.join('\\n')\r\n const firstIdx = blocks[0][1][0]\r\n const pre = {\r\n type: 'pre',\r\n children: [\r\n {\r\n type: 'code',\r\n language: language || '',\r\n children: [{ text }],\r\n },\r\n ],\r\n }\r\n\r\n try {\r\n pinEditorScrollDuring(editor, () => {\r\n Editor.withoutNormalizing(editor, () => {\r\n for (let i = blocks.length - 1; i >= 0; i--) {\r\n const livePath: Path = [blocks[i][1][0]]\r\n const liveNode = getEditorNodeAtPath(editor, livePath)\r\n if (!liveNode || (liveNode as any).type === 'pre') continue\r\n Transforms.removeNodes(editor, { at: livePath })\r\n }\r\n const insertAt: Path = [Math.min(firstIdx, editor.children.length)]\r\n Transforms.insertNodes(editor, pre as Element, { at: insertAt })\r\n try {\r\n editor.select(Editor.start(editor, [...insertAt, 0] as Path))\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n ;(editor as any).__mdgchTrustedBlockPath = [...insertAt]\r\n })\r\n })\r\n return true\r\n } catch (e) {\r\n console.warn('[wangeditor] convertSelectionBlockToCodeBlock failed', e)\r\n return false\r\n }\r\n}\r\n\r\nexport function canToggleCodeBlock(editor: IDomEditor): boolean {\r\n if (editor.selection == null) return false\r\n try {\r\n const elems = DomEditor.getSelectedElems(editor)\r\n if (elems.some(el => editor.isVoid(el))) return false\r\n return elems.some(el => CODEABLE.has(DomEditor.getNodeType(el)))\r\n } catch (_) {\r\n return findSelectedPrePath(editor) != null\r\n }\r\n}\r\n","/**\r\n * @description insert code-block menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, DomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { CODE_BLOCK_SVG } from '../../../constants/icon-svg'\r\nimport { CodeElement } from '../custom-types'\r\nimport {\r\n canToggleCodeBlock,\r\n convertSelectionBlockToCodeBlock,\r\n findSelectedPrePath,\r\n uncodePreInPlace,\r\n} from '../code-block-ops'\r\n\r\nclass CodeBlockMenu implements IButtonMenu {\r\n readonly title = t('codeBlock.title')\r\n readonly iconSvg = CODE_BLOCK_SVG\r\n readonly tag = 'button'\r\n\r\n private getSelectCodeElem(editor: IDomEditor): CodeElement | null {\r\n const codeNode = DomEditor.getSelectedNodeByType(editor, 'code')\r\n if (codeNode == null) return null\r\n const preNode = DomEditor.getParentNode(editor, codeNode)\r\n if (preNode == null) return null\r\n if (DomEditor.getNodeType(preNode) !== 'pre') return null\r\n return codeNode as CodeElement\r\n }\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n const elem = this.getSelectCodeElem(editor)\r\n if (elem == null) return ''\r\n return elem.language || ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return !!this.getSelectCodeElem(editor)\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (this.isActive(editor)) return false\r\n return !canToggleCodeBlock(editor)\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (this.isActive(editor)) {\r\n const path = findSelectedPrePath(editor)\r\n uncodePreInPlace(editor, path)\r\n return\r\n }\r\n if (this.isDisabled(editor)) return\r\n convertSelectionBlockToCodeBlock(editor, value != null ? String(value) : '')\r\n }\r\n}\r\n\r\nexport default CodeBlockMenu\r\n","/**\r\n * @description code-block menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport CodeBlockMenu from './CodeBlockMenu'\r\n\r\nexport const codeBlockMenuConf = {\r\n key: 'codeBlock',\r\n factory() {\r\n return new CodeBlockMenu()\r\n },\r\n}\r\n\r\n/** yunkee 工具栏 key */\r\nexport const codeBlockAtCursorMenuConf = {\r\n key: 'codeBlockAtCursor',\r\n factory() {\r\n return new CodeBlockMenu()\r\n },\r\n}\r\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","/**\r\n * @description 代码块 pre 顶栏:语言面板 / 动作\r\n */\r\n\r\nimport { Element, Node, Path, Transforms } from 'slate'\r\nimport {\r\n IDomEditor,\r\n DomEditor,\r\n pinEditorScrollDuring,\r\n insertEmptyLineAboveAtPath,\r\n removeEmptyLineAboveTopLevelBlock,\r\n replaceBlockWithEmptyLine,\r\n resolveElemPath,\r\n getEditorNodeAtPath,\r\n canRemoveEmptyLineAboveBlock,\r\n} from '@mnykj/wangeditoroptimize-core'\r\nimport { CodeElement, PreElement } from './custom-types'\r\n\r\nexport const CODE_BLOCK_LANG_OPTIONS = [\r\n { text: 'Plain Text', value: '' },\r\n { text: 'CSS', value: 'css' },\r\n { text: 'HTML', value: 'html' },\r\n { text: 'XML', value: 'xml' },\r\n { text: 'Javascript', value: 'javascript' },\r\n { text: 'Typescript', value: 'typescript' },\r\n { text: 'JSX', value: 'jsx' },\r\n { text: 'Go', value: 'go' },\r\n { text: 'PHP', value: 'php' },\r\n { text: 'C', value: 'c' },\r\n { text: 'Python', value: 'python' },\r\n { text: 'Java', value: 'java' },\r\n { text: 'C++', value: 'cpp' },\r\n { text: 'C#', value: 'csharp' },\r\n { text: 'Visual Basic', value: 'visual-basic' },\r\n { text: 'SQL', value: 'sql' },\r\n { text: 'Ruby', value: 'ruby' },\r\n { text: 'Swift', value: 'swift' },\r\n { text: 'Bash', value: 'bash' },\r\n { text: 'Lua', value: 'lua' },\r\n { text: 'Groovy', value: 'groovy' },\r\n { text: 'Markdown', value: 'markdown' },\r\n]\r\n\r\nexport const PRE_TOOLBAR_ICON_UNCODE =\r\n '<svg viewBox=\"0 0 1024 1024\"><path d=\"M332.288 758.016l-151.552-151.552 151.552-151.552-60.416-60.416-212.992 211.968 212.992 211.968zM691.712 758.016l151.552-151.552-151.552-151.552 60.416-60.416 212.992 211.968-212.992 211.968zM586.752 264.192l-90.112 495.616h-69.632l90.112-495.616z\"></path><path d=\"M198 128l64-64 628 628-64 64z\"></path></svg>'\r\n\r\nexport function getCodeChildFromPre(preElem: Node): CodeElement | null {\r\n const kids = (preElem as PreElement)?.children\r\n if (!Array.isArray(kids) || !kids.length) return null\r\n return (kids.find(c => (c as CodeElement)?.type === 'code') as CodeElement) || null\r\n}\r\n\r\nexport function getCodeLangLabel(value: string): string {\r\n const v = value != null ? String(value) : ''\r\n const hit = CODE_BLOCK_LANG_OPTIONS.find(o => o.value === v)\r\n return hit?.text || v || 'Plain Text'\r\n}\r\n\r\ntype LangPanelState = {\r\n el: HTMLElement | null\r\n anchorEl: HTMLElement | null\r\n onDoc: ((e: MouseEvent) => void) | null\r\n onScroll: ((e: Event) => void) | null\r\n onKey: ((e: KeyboardEvent) => void) | null\r\n}\r\n\r\nlet preLangPanelState: LangPanelState = {\r\n el: null,\r\n anchorEl: null,\r\n onDoc: null,\r\n onScroll: null,\r\n onKey: null,\r\n}\r\n\r\nexport function closePreLangPanel(): void {\r\n const { el, onDoc, onScroll, onKey } = preLangPanelState\r\n if (onDoc) document.removeEventListener('mousedown', onDoc, true)\r\n if (onScroll) window.removeEventListener('scroll', onScroll, true)\r\n if (onKey) document.removeEventListener('keydown', onKey, true)\r\n if (el?.parentNode) el.parentNode.removeChild(el)\r\n preLangPanelState = { el: null, anchorEl: null, onDoc: null, onScroll: null, onKey: null }\r\n}\r\n\r\nexport function openPreLangPanel(\r\n anchorEl: HTMLElement,\r\n editor: IDomEditor,\r\n preElem: Node,\r\n currentLang: string\r\n): void {\r\n if (preLangPanelState.el && preLangPanelState.anchorEl === anchorEl) {\r\n closePreLangPanel()\r\n return\r\n }\r\n closePreLangPanel()\r\n if (!anchorEl || typeof document === 'undefined') return\r\n\r\n const lang = currentLang != null ? String(currentLang) : ''\r\n const panel = document.createElement('div')\r\n panel.className = 'mdg-pre-lang-panel'\r\n panel.setAttribute('contenteditable', 'false')\r\n panel.setAttribute('role', 'listbox')\r\n\r\n const opts = [...CODE_BLOCK_LANG_OPTIONS]\r\n if (lang && !opts.some(o => o.value === lang)) {\r\n opts.push({ text: lang, value: lang })\r\n }\r\n\r\n for (const opt of opts) {\r\n const item = document.createElement('button')\r\n item.type = 'button'\r\n item.className = 'mdg-pre-lang-option' + (opt.value === lang ? ' is-selected' : '')\r\n item.setAttribute('role', 'option')\r\n item.textContent = opt.text\r\n item.addEventListener('mousedown', e => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n })\r\n item.addEventListener('click', e => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n closePreLangPanel()\r\n handlePreToolbarAction(editor, preElem, 'lang', opt.value)\r\n })\r\n panel.appendChild(item)\r\n }\r\n\r\n document.body.appendChild(panel)\r\n\r\n const place = () => {\r\n if (!anchorEl.isConnected) {\r\n closePreLangPanel()\r\n return\r\n }\r\n const rect = anchorEl.getBoundingClientRect()\r\n if (\r\n rect.bottom < 0 ||\r\n rect.top > window.innerHeight ||\r\n rect.right < 0 ||\r\n rect.left > window.innerWidth\r\n ) {\r\n closePreLangPanel()\r\n return\r\n }\r\n const gap = 4\r\n const margin = 8\r\n const maxListH = 240\r\n const spaceBelow = window.innerHeight - rect.bottom - margin\r\n const spaceAbove = rect.top - margin\r\n const openAbove = spaceBelow < 140 && spaceAbove > spaceBelow\r\n const avail = Math.max(96, openAbove ? spaceAbove - gap : spaceBelow - gap)\r\n panel.style.maxHeight = `${Math.min(maxListH, Math.floor(avail))}px`\r\n panel.style.minWidth = `${Math.max(140, Math.round(rect.width))}px`\r\n\r\n const pw = panel.offsetWidth || Math.max(140, rect.width)\r\n const ph = panel.offsetHeight || Math.min(maxListH, avail)\r\n let top = openAbove ? Math.max(margin, rect.top - ph - gap) : rect.bottom + gap\r\n let left = rect.left\r\n if (left + pw > window.innerWidth - margin) {\r\n left = Math.max(margin, window.innerWidth - pw - margin)\r\n }\r\n if (left < margin) left = margin\r\n panel.style.top = `${Math.round(top)}px`\r\n panel.style.left = `${Math.round(left)}px`\r\n }\r\n place()\r\n requestAnimationFrame(place)\r\n\r\n const onDoc = (e: MouseEvent) => {\r\n const t = e.target\r\n if (t instanceof globalThis.Node && (panel.contains(t) || anchorEl.contains(t))) return\r\n closePreLangPanel()\r\n }\r\n const onScroll = (e: Event) => {\r\n const t = e?.target\r\n if (t instanceof globalThis.Node && (t === panel || panel.contains(t))) return\r\n place()\r\n }\r\n const onKey = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n e.preventDefault()\r\n closePreLangPanel()\r\n }\r\n }\r\n preLangPanelState = { el: panel, anchorEl, onDoc, onScroll, onKey }\r\n requestAnimationFrame(() => {\r\n document.addEventListener('mousedown', onDoc, true)\r\n window.addEventListener('scroll', onScroll, true)\r\n document.addEventListener('keydown', onKey, true)\r\n })\r\n}\r\n\r\n/** 取消代码块:拆成段落 */\r\nfunction uncodePreInPlace(editor: IDomEditor, path: Path, preNode: Node): boolean {\r\n let text = ''\r\n try {\r\n const codePath = [...path, 0] as Path\r\n text = Node.string(Node.get(editor, codePath))\r\n } catch (_) {\r\n text = Node.string(preNode)\r\n }\r\n const paragraphs = String(text)\r\n .split('\\n')\r\n .map(line => ({ type: 'paragraph', children: [{ text: line }] }))\r\n if (!paragraphs.length) {\r\n paragraphs.push({ type: 'paragraph', children: [{ text: '' }] })\r\n }\r\n\r\n try {\r\n pinEditorScrollDuring(editor, () => {\r\n Transforms.removeNodes(editor, { at: path })\r\n let insertAt = Math.min(path[0], editor.children.length)\r\n for (const p of paragraphs) {\r\n Transforms.insertNodes(editor, p as Element, { at: [insertAt] })\r\n insertAt += 1\r\n }\r\n try {\r\n const firstPath: Path = [Math.min(path[0], editor.children.length - 1)]\r\n editor.select({\r\n anchor: { path: [...firstPath, 0], offset: 0 },\r\n focus: { path: [...firstPath, 0], offset: 0 },\r\n })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n return true\r\n } catch (_) {\r\n return false\r\n }\r\n}\r\n\r\nexport function handlePreToolbarAction(\r\n editor: IDomEditor,\r\n elem: Node,\r\n action: string,\r\n value?: string\r\n): void {\r\n if (!editor || editor.isDestroyed || editor.isDisabled()) return\r\n const path = resolveElemPath(editor, elem)\r\n if (!path?.length) return\r\n\r\n if (action === 'enter') {\r\n insertEmptyLineAboveAtPath(editor, path)\r\n return\r\n }\r\n if (action === 'cancel-enter') {\r\n removeEmptyLineAboveTopLevelBlock(editor, path)\r\n return\r\n }\r\n if (action === 'lang') {\r\n const codePath = [...path, 0] as Path\r\n const code = getEditorNodeAtPath(editor, codePath)\r\n if (!code || !Element.isElement(code) || code.type !== 'code') return\r\n pinEditorScrollDuring(editor, () => {\r\n Transforms.setNodes(\r\n editor,\r\n { language: value != null ? String(value) : '' } as any,\r\n { at: codePath }\r\n )\r\n })\r\n return\r\n }\r\n if (action === 'word-wrap') {\r\n const codePath = [...path, 0] as Path\r\n const code = getEditorNodeAtPath(editor, codePath) as CodeElement | null\r\n if (!code || code.type !== 'code') return\r\n pinEditorScrollDuring(editor, () => {\r\n Transforms.setNodes(editor, { wordWrap: !code.wordWrap } as any, { at: codePath })\r\n })\r\n return\r\n }\r\n if (action === 'uncode') {\r\n const node = getEditorNodeAtPath(editor, path) || elem\r\n uncodePreInPlace(editor, path, node)\r\n return\r\n }\r\n if (action === 'remove') {\r\n const node = getEditorNodeAtPath(editor, path) || elem\r\n replaceBlockWithEmptyLine(editor, path, node)\r\n }\r\n}\r\n\r\nexport function getPreToolbarState(editor: IDomEditor, elem: Node) {\r\n let canCancelEnter = false\r\n let lang = ''\r\n let wordWrap = false\r\n try {\r\n const path = DomEditor.findPath(editor, elem)\r\n canCancelEnter = canRemoveEmptyLineAboveBlock(editor, path)\r\n const code = getCodeChildFromPre(elem)\r\n lang = code?.language != null ? String(code.language) : ''\r\n wordWrap = !!code?.wordWrap\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return { canCancelEnter, lang, wordWrap }\r\n}\r\n","/**\r\n * @description render code-block with pre top toolbar\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element as SlateElement, Node } from 'slate'\r\nimport { h, jsx, VNode } from 'snabbdom'\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { CodeElement } from './custom-types'\r\nimport { makeBlockToolbarButton, makeBlockToolbarSpacer } from '../../utils/block-toolbar'\r\nimport {\r\n BQ_TOOLBAR_ICON_CANCEL_ENTER,\r\n BQ_TOOLBAR_ICON_ENTER,\r\n BQ_TOOLBAR_ICON_REMOVE,\r\n} from '../blockquote/toolbar-icons'\r\nimport {\r\n PRE_TOOLBAR_ICON_UNCODE,\r\n closePreLangPanel,\r\n getCodeLangLabel,\r\n getPreToolbarState,\r\n handlePreToolbarAction,\r\n openPreLangPanel,\r\n} from './pre-toolbar'\r\n\r\nfunction renderCode(elemNode: SlateElement, children: VNode[] | null, editor: IDomEditor): VNode {\r\n const { language = '', wordWrap } = elemNode as CodeElement\r\n const classNames: string[] = []\r\n if (language) classNames.push(`language-${language}`)\r\n if (wordWrap) classNames.push('w-e-code-word-wrap')\r\n const className = classNames.join(' ')\r\n\r\n if (wordWrap) {\r\n return (\r\n <code className={className} data-word-wrap=\"true\">\r\n {children}\r\n </code>\r\n )\r\n }\r\n if (className) {\r\n return <code className={className}>{children}</code>\r\n }\r\n return <code>{children}</code>\r\n}\r\n\r\nfunction makePreLangSelect(currentLang: string): VNode {\r\n const lang = currentLang != null ? String(currentLang) : ''\r\n const label = getCodeLangLabel(lang)\r\n return h(\r\n 'button',\r\n {\r\n attrs: {\r\n type: 'button',\r\n class: 'mdg-pre-lang-btn',\r\n title: '语言',\r\n 'data-pre-action': 'lang-open',\r\n 'data-pre-lang': lang,\r\n 'aria-label': '代码语言',\r\n 'aria-haspopup': 'listbox',\r\n },\r\n props: { contentEditable: false },\r\n on: {\r\n mousedown: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n },\r\n },\r\n },\r\n [\r\n h('span', { attrs: { class: 'mdg-pre-lang-text' } }, [label]),\r\n h('span', { attrs: { class: 'mdg-pre-lang-caret' } }, ['▾']),\r\n ]\r\n )\r\n}\r\n\r\nfunction makePreWordWrapToggle(active: boolean): VNode {\r\n return h(\r\n 'button',\r\n {\r\n attrs: {\r\n type: 'button',\r\n class: active ? 'mdg-pre-wrap-btn is-active' : 'mdg-pre-wrap-btn',\r\n title: '自动换行',\r\n 'data-pre-action': 'word-wrap',\r\n 'aria-label': '自动换行',\r\n 'aria-pressed': active ? 'true' : 'false',\r\n },\r\n props: { contentEditable: false },\r\n on: {\r\n mousedown: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n },\r\n },\r\n },\r\n [\r\n h('span', { attrs: { class: 'mdg-pre-wrap-label' } }, ['自动换行']),\r\n h('span', { attrs: { class: 'mdg-pre-wrap-switch' } }, []),\r\n ]\r\n )\r\n}\r\n\r\nfunction renderPre(elemNode: SlateElement, children: VNode[] | null, editor: IDomEditor): VNode {\r\n const kids = children == null ? [] : Array.isArray(children) ? children : [children]\r\n\r\n if (editor.isDisabled()) {\r\n return h('pre', {}, kids)\r\n }\r\n\r\n const { canCancelEnter, lang, wordWrap } = getPreToolbarState(editor, elemNode)\r\n\r\n const toolbar = h(\r\n 'div',\r\n {\r\n attrs: {\r\n class: 'mdg-pre-toolbar',\r\n contenteditable: 'false',\r\n 'data-mdg-pre-toolbar': '1',\r\n },\r\n props: { contentEditable: false },\r\n on: {\r\n mousedown: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n },\r\n click: (e: Event) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n const t = e.target as Element | null\r\n const btn = t?.closest?.('button[data-pre-action]') as HTMLElement | null\r\n const action = btn?.getAttribute?.('data-pre-action')\r\n if (!btn || !action || btn.classList.contains('is-disabled')) return\r\n if (action === 'lang-open') {\r\n const current = btn.getAttribute('data-pre-lang') || ''\r\n openPreLangPanel(btn, editor, elemNode, current)\r\n return\r\n }\r\n closePreLangPanel()\r\n handlePreToolbarAction(editor, elemNode, action)\r\n },\r\n },\r\n },\r\n [\r\n makeBlockToolbarButton({\r\n action: 'enter',\r\n title: '回车(上方空行)',\r\n iconSvg: BQ_TOOLBAR_ICON_ENTER,\r\n actionAttr: 'data-pre-action',\r\n className: 'mdg-pre-btn',\r\n }),\r\n makeBlockToolbarButton({\r\n action: 'cancel-enter',\r\n title: '取消回车',\r\n iconSvg: BQ_TOOLBAR_ICON_CANCEL_ENTER,\r\n actionAttr: 'data-pre-action',\r\n className: 'mdg-pre-btn',\r\n disabled: !canCancelEnter,\r\n }),\r\n makePreLangSelect(lang),\r\n makeBlockToolbarSpacer('mdg-pre-toolbar-spacer'),\r\n makePreWordWrapToggle(wordWrap),\r\n makeBlockToolbarButton({\r\n action: 'uncode',\r\n title: '取消代码块',\r\n iconSvg: PRE_TOOLBAR_ICON_UNCODE,\r\n actionAttr: 'data-pre-action',\r\n className: 'mdg-pre-btn',\r\n }),\r\n makeBlockToolbarButton({\r\n action: 'remove',\r\n title: '删除',\r\n iconSvg: BQ_TOOLBAR_ICON_REMOVE,\r\n actionAttr: 'data-pre-action',\r\n className: 'mdg-pre-btn',\r\n }),\r\n ]\r\n )\r\n\r\n return h('pre', { attrs: { class: 'mdg-pre-with-toolbar' } }, [toolbar, ...kids])\r\n}\r\n\r\nexport const renderPreConf = {\r\n type: 'pre',\r\n renderElem: renderPre,\r\n}\r\n\r\nexport const renderCodeConf = {\r\n type: 'code',\r\n renderElem: renderCode,\r\n}\r\n","/**\r\n * @description to html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Element } from 'slate'\r\n\r\nfunction codeToHtml(elem: Element, childrenHtml: string): string {\r\n // 代码高亮 `class=\"language-xxx\"` 在 code-highlight 中实现\r\n return `<code>${childrenHtml}</code>`\r\n}\r\n\r\nexport const codeToHtmlConf = {\r\n type: 'code',\r\n elemToHtml: codeToHtml,\r\n}\r\n\r\nfunction preToHtml(elem: Element, childrenHtml: string): string {\r\n return `<pre>${childrenHtml}</pre>`\r\n}\r\n\r\nexport const preToHtmlConf = {\r\n type: 'pre',\r\n elemToHtml: preToHtml,\r\n}\r\n","/**\r\n * @description code block module\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { codeBlockMenuConf, codeBlockAtCursorMenuConf } from './menu/index'\r\nimport withCodeBlock from './plugin'\r\nimport { renderPreConf, renderCodeConf } from './render-elem'\r\nimport { preParseHtmlConf } from './pre-parse-html'\r\nimport { parseCodeHtmlConf, parsePreHtmlConf } from './parse-elem-html'\r\nimport { codeToHtmlConf, preToHtmlConf } from './elem-to-html'\r\n\r\nconst codeBlockModule: Partial<IModuleConf> = {\r\n menus: [codeBlockMenuConf, codeBlockAtCursorMenuConf],\r\n editorPlugin: withCodeBlock,\r\n renderElems: [renderPreConf, renderCodeConf],\r\n elemsToHtml: [codeToHtmlConf, preToHtmlConf],\r\n preParseHtml: [preParseHtmlConf],\r\n parseElemsHtml: [parseCodeHtmlConf, parsePreHtmlConf],\r\n}\r\n\r\nexport default codeBlockModule\r\n","/**\r\n * @description editor 插件,重写 editor API\r\n * @author wangfupeng\r\n */\r\n\r\nimport {\r\n Editor,\r\n Transforms,\r\n Node as SlateNode,\r\n Element as SlateElement,\r\n Range,\r\n Text,\r\n Path,\r\n} from 'slate'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nfunction getLastTextLineBeforeSelection(codeNode: SlateNode, editor: IDomEditor): string {\r\n const selection = editor.selection\r\n if (selection == null) return ''\r\n\r\n const codeText = SlateNode.string(codeNode)\r\n const anchorOffset = selection.anchor.offset\r\n const textBeforeAnchor = codeText.slice(0, anchorOffset) // 选区前的 text\r\n const arr = textBeforeAnchor.split('\\n') // 选区前的 text ,按换行拆分\r\n const length = arr.length\r\n if (length === 0) return ''\r\n\r\n return arr[length - 1]\r\n}\r\n\r\n/** 代码块内 Shift+Tab:去掉当前行(或选中行)行首缩进(1 个 tab 或最多 4 个空格) */\r\nfunction outdentCodeSelection(editor: IDomEditor) {\r\n const { selection } = editor\r\n if (selection == null) return\r\n\r\n // 跨多个 text leaf 时不做(代码块通常单 leaf)\r\n if (!Path.equals(Range.start(selection).path, Range.end(selection).path)) return\r\n\r\n const path = Range.start(selection).path\r\n const textNode = SlateNode.get(editor, path)\r\n if (!Text.isText(textNode)) return\r\n\r\n const fullText = textNode.text\r\n const rangeStart = Range.start(selection).offset\r\n const rangeEnd = Range.isCollapsed(selection) ? rangeStart : Range.end(selection).offset\r\n\r\n const lineStarts: number[] = []\r\n let lineStart = 0\r\n for (let i = 0; i <= fullText.length; i++) {\r\n if (i === fullText.length || fullText[i] === '\\n') {\r\n const lineEnd = i\r\n if (Range.isCollapsed(selection)) {\r\n if (lineStart <= rangeStart && rangeStart <= lineEnd) {\r\n lineStarts.push(lineStart)\r\n }\r\n } else if (lineEnd > rangeStart && lineStart <= rangeEnd) {\r\n lineStarts.push(lineStart)\r\n }\r\n lineStart = i + 1\r\n }\r\n }\r\n\r\n // 从后往前删,避免偏移错乱\r\n for (let i = lineStarts.length - 1; i >= 0; i--) {\r\n const ls = lineStarts[i]\r\n const m = fullText.slice(ls).match(/^(?:\\t| {1,4})/)\r\n if (!m) continue\r\n const len = m[0].length\r\n Transforms.delete(editor, {\r\n at: {\r\n anchor: { path, offset: ls },\r\n focus: { path, offset: ls + len },\r\n },\r\n })\r\n }\r\n}\r\n\r\nfunction withCodeBlock<T extends IDomEditor>(editor: T): T {\r\n const { insertBreak, normalizeNode, insertData, handleShiftTab } = editor\r\n const newEditor = editor\r\n\r\n // 重写换行操作\r\n newEditor.insertBreak = () => {\r\n const codeNode = DomEditor.getSelectedNodeByType(newEditor, 'code')\r\n if (codeNode == null) {\r\n insertBreak() // 执行默认的换行\r\n return\r\n }\r\n\r\n // 回车时,根据当前行的空格,自动插入空格\r\n const lastLineBeforeSelection = getLastTextLineBeforeSelection(codeNode, newEditor)\r\n if (lastLineBeforeSelection) {\r\n const arr = lastLineBeforeSelection.match(/^\\s+/) // 行开始的空格\r\n if (arr != null && arr[0] != null) {\r\n const spaces = arr[0]\r\n newEditor.insertText(`\\n${spaces}`) // 换行后插入空格\r\n return\r\n }\r\n }\r\n\r\n // 普通换行\r\n newEditor.insertText('\\n')\r\n }\r\n\r\n // 代码块内 Shift+Tab 反缩进\r\n newEditor.handleShiftTab = () => {\r\n const codeNode = DomEditor.getSelectedNodeByType(newEditor, 'code')\r\n if (codeNode == null) {\r\n if (typeof handleShiftTab === 'function') handleShiftTab()\r\n return\r\n }\r\n outdentCodeSelection(newEditor)\r\n }\r\n\r\n // 重写 normalizeNode\r\n newEditor.normalizeNode = ([node, path]) => {\r\n const type = DomEditor.getNodeType(node)\r\n\r\n // -------------- code node 不能是顶层,否则替换为 p --------------\r\n if (type === 'code' && path.length <= 1) {\r\n Transforms.setNodes(newEditor, { type: 'paragraph' }, { at: path })\r\n }\r\n\r\n if (type === 'pre') {\r\n // -------------- pre 是 editor 最后一个节点,需要后面插入 p --------------\r\n const isLast = DomEditor.isLastNode(newEditor, node)\r\n if (isLast) {\r\n Transforms.insertNodes(newEditor, DomEditor.genEmptyParagraph(), { at: [path[0] + 1] })\r\n }\r\n\r\n // -------------- pre 下面必须是 code --------------\r\n if (DomEditor.getNodeType((node as SlateElement).children[0]) !== 'code') {\r\n Transforms.unwrapNodes(newEditor)\r\n Transforms.setNodes(newEditor, { type: 'paragraph' }, { mode: 'highest' })\r\n }\r\n }\r\n\r\n // 执行默认行为\r\n return normalizeNode([node, path])\r\n }\r\n\r\n // 重写 insertData - 粘贴文本\r\n newEditor.insertData = (data: DataTransfer) => {\r\n const codeNode = DomEditor.getSelectedNodeByType(newEditor, 'code')\r\n if (codeNode == null) {\r\n insertData(data) // 执行默认的 insertData\r\n return\r\n }\r\n\r\n // 获取文本,并插入到代码块\r\n const text = data.getData('text/plain')\r\n Editor.insertText(newEditor, text)\r\n }\r\n\r\n // 返回 editor ,重要!\r\n return newEditor\r\n}\r\n\r\nexport default withCodeBlock\r\n","/**\r\n * @description pre parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport $, { DOMElement } from '../../utils/dom'\r\nimport { getTagName } from '../../utils/dom'\r\n\r\n/**\r\n * pre-prase <code> ,去掉其中的 <xmp> (兼容 V4)\r\n * @param codeElem codeElem\r\n */\r\nfunction preParse(codeElem: DOMElement): DOMElement {\r\n const $code = $(codeElem)\r\n const tagName = getTagName($code)\r\n if (tagName !== 'code') return codeElem\r\n\r\n const $xmp = $code.find('xmp')\r\n if ($xmp.length === 0) return codeElem // 不是 V4 格式\r\n\r\n const codeText = $xmp.text()\r\n $xmp.remove()\r\n $code.text(codeText)\r\n\r\n return $code[0]\r\n}\r\n\r\nexport const preParseHtmlConf = {\r\n selector: 'pre>code', // 匹配 <pre> 下的 <code>\r\n preParseHtml: preParse,\r\n}\r\n","/**\r\n * @description parse html\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Descendant } from 'slate'\r\nimport $, { DOMElement } from '../../utils/dom'\r\nimport { IDomEditor, DomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport { PreElement, CodeElement } from './custom-types'\r\n\r\nfunction parseCodeHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): CodeElement {\r\n const $elem = $(elem)\r\n\r\n return {\r\n type: 'code',\r\n language: '', // language 在 code-highlight 中实现\r\n children: [{ text: $elem[0].textContent || '' }],\r\n }\r\n}\r\n\r\nexport const parseCodeHtmlConf = {\r\n selector: 'pre:not([data-w-e-type])>code', // 匹配 <pre> 下的 <code>\r\n parseElemHtml: parseCodeHtml,\r\n}\r\n\r\nfunction parsePreHtml(elem: DOMElement, children: Descendant[], editor: IDomEditor): PreElement {\r\n const $elem = $(elem)\r\n\r\n children = children.filter(child => DomEditor.getNodeType(child) === 'code')\r\n if (children.length === 0) {\r\n children = [{ type: 'code', language: '', children: [{ text: $elem[0].textContent || '' }] }]\r\n }\r\n\r\n return {\r\n type: 'pre',\r\n // @ts-ignore\r\n children: children.filter(child => DomEditor.getNodeType(child) === 'code'),\r\n }\r\n}\r\n\r\nexport const parsePreHtmlConf = {\r\n selector: 'pre:not([data-w-e-type])', // data-w-e-type 属性,留给自定义元素,保证扩展性\r\n parseElemHtml: parsePreHtml,\r\n}\r\n","/**\r\n * @description redo menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IButtonMenu, IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { FULL_SCREEN_SVG } from '../../../constants/icon-svg'\r\n\r\nclass FullScreen implements IButtonMenu {\r\n title = t('fullScreen.title')\r\n iconSvg = FULL_SCREEN_SVG\r\n tag = 'button'\r\n alwaysEnable = true\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return editor.isFullScreen\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n if (editor.isFullScreen) {\r\n editor.unFullScreen()\r\n } else {\r\n editor.fullScreen()\r\n }\r\n }\r\n}\r\n\r\nexport default FullScreen\r\n","/**\r\n * @description 全屏\r\n * @author wangfupeng\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { fullScreenConf } from './menu/index'\r\n\r\nconst fullScreen: Partial<IModuleConf> = {\r\n menus: [fullScreenConf],\r\n}\r\n\r\nexport default fullScreen\r\n","/**\r\n * @description menu entry\r\n * @author wangfupeng\r\n */\r\n\r\nimport FullScreen from './FullScreen'\r\n\r\nexport const fullScreenConf = {\r\n key: 'fullScreen',\r\n factory() {\r\n return new FullScreen()\r\n },\r\n}\r\n","/**\r\n * @description enter menu\r\n * @author wangfupeng\r\n */\r\n\r\nimport { Range, Transforms, Editor } from 'slate'\r\nimport { IButtonMenu, IDomEditor, t } from '@mnykj/wangeditoroptimize-core'\r\nimport { ENTER_SVG } from '../../../constants/icon-svg'\r\n\r\nclass EnterMenu implements IButtonMenu {\r\n title = t('common.enter')\r\n iconSvg = ENTER_SVG\r\n tag = 'button'\r\n\r\n getValue(editor: IDomEditor): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(editor: IDomEditor): boolean {\r\n return false\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n const { selection } = editor\r\n if (selection == null) return true\r\n if (Range.isExpanded(selection)) return true\r\n return false\r\n }\r\n\r\n exec(editor: IDomEditor, value: string | boolean) {\r\n const { selection } = editor\r\n if (selection == null) return\r\n const { anchor } = selection\r\n const { path } = anchor\r\n\r\n // 在当前位置插入空行,当前元素下移\r\n const newElem = { type: 'paragraph', children: [{ text: '' }] }\r\n const newPath = [path[0]]\r\n Transforms.insertNodes(editor, newElem, { at: newPath })\r\n editor.select(Editor.start(editor, newPath))\r\n }\r\n}\r\n\r\nexport default EnterMenu\r\n","/**\r\n * @description common module\r\n * @author wangfupeng\r\n */\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { enterMenuConf } from './menu/index'\r\n\r\nconst commonModule: Partial<IModuleConf> = {\r\n menus: [enterMenuConf],\r\n}\r\n\r\nexport default commonModule\r\n","/**\r\n * @description common menu config\r\n * @author wangfupeng\r\n */\r\n\r\nimport EnterMenu from './EnterMenu'\r\n\r\nexport const enterMenuConf = {\r\n key: 'enter',\r\n factory() {\r\n return new EnterMenu()\r\n },\r\n}\r\n","var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","/**\r\n * @description 格式刷 UI / 共享状态\r\n */\r\n\r\nimport { DomEditor, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\n\r\nexport const FORMAT_PAINTER_MARK_KEYS = [\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'through',\r\n 'code',\r\n 'sub',\r\n 'sup',\r\n 'color',\r\n 'bgColor',\r\n 'fontSize',\r\n 'fontFamily',\r\n]\r\n\r\nexport const FORMAT_PAINTER_SVG =\r\n '<svg viewBox=\"5.2 4.8 14.2 15.2\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15.1 5.75a.75.75 0 01.75.75v3.3a.75.75 0 01-.75.75H6.9a.75.75 0 01-.75-.75V6.5a.75.75 0 01.75-.75h8.2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"></path><path d=\"M15.326 8.15h3.141v5.636l-8.4 1.085V19\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"></path></svg>'\r\n\r\nexport type FormatPainterAttrs = {\r\n isSelect: boolean\r\n formatStyle: Record<string, any> | null\r\n formatBlockStyle: Record<string, any> | null\r\n sourceSelKey: string\r\n}\r\n\r\n/** 全局单例状态(菜单与 plugin 共用) */\r\nexport const formatPainterAttrs: FormatPainterAttrs = {\r\n isSelect: false,\r\n formatStyle: null,\r\n formatBlockStyle: null,\r\n sourceSelKey: '',\r\n}\r\n\r\nlet formatPainterCursorCss = ''\r\n\r\nfunction getFormatPainterCursorCss(): string {\r\n if (formatPainterCursorCss) return formatPainterCursorCss\r\n if (typeof document === 'undefined') return 'text'\r\n try {\r\n const canvas = document.createElement('canvas')\r\n const dpr = Math.min(2, window.devicePixelRatio || 1)\r\n const size = 22\r\n canvas.width = size * dpr\r\n canvas.height = size * dpr\r\n const ctx = canvas.getContext('2d')\r\n if (!ctx) return 'text'\r\n ctx.scale(dpr, dpr)\r\n ctx.clearRect(0, 0, size, size)\r\n ctx.fillStyle = '#111'\r\n ctx.strokeStyle = '#111'\r\n\r\n const ix = 16.2\r\n const iy0 = 3.6\r\n const iy1 = 18.4\r\n const iMid = (iy0 + iy1) / 2\r\n const brushH = 14\r\n const by0 = iMid - brushH / 2\r\n const bx = 2.2\r\n ctx.fillRect(bx + 3.1, by0, 2.4, 3.4)\r\n ctx.fillRect(bx, by0 + 3.4, 8.6, 3.1)\r\n ctx.lineCap = 'butt'\r\n ctx.lineWidth = 1.35\r\n const bristleTop = by0 + 6.5\r\n ;[\r\n [bx + 0.9, brushH - 0.8],\r\n [bx + 2.5, brushH],\r\n [bx + 4.1, brushH - 0.2],\r\n [bx + 5.7, brushH - 0.6],\r\n [bx + 7.3, brushH - 1.4],\r\n ].forEach(([x, end]) => {\r\n ctx.beginPath()\r\n ctx.moveTo(x, bristleTop)\r\n ctx.lineTo(x, by0 + end)\r\n ctx.stroke()\r\n })\r\n ctx.lineWidth = 1.15\r\n ctx.beginPath()\r\n ctx.moveTo(ix - 2.1, iy0)\r\n ctx.lineTo(ix + 2.1, iy0)\r\n ctx.moveTo(ix, iy0)\r\n ctx.lineTo(ix, iy1)\r\n ctx.moveTo(ix - 2.1, iy1)\r\n ctx.lineTo(ix + 2.1, iy1)\r\n ctx.stroke()\r\n\r\n const url = canvas.toDataURL('image/png')\r\n formatPainterCursorCss = `url(${url}) ${ix} ${iMid}, text`\r\n } catch (_) {\r\n formatPainterCursorCss = 'text'\r\n }\r\n return formatPainterCursorCss\r\n}\r\n\r\nexport function hideFormatPainterHoverbar(editor?: IDomEditor | null) {\r\n try {\r\n const hoverbar = editor ? DomEditor.getHoverbar(editor) : null\r\n if (hoverbar) hoverbar.hideAndClean()\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n if (typeof document === 'undefined') return\r\n document.querySelectorAll('.w-e-hover-bar').forEach(el => {\r\n el.classList.remove('w-e-bar-show')\r\n el.classList.add('w-e-bar-hidden')\r\n })\r\n}\r\n\r\nexport function setFormatPainterUiActive(on: boolean, editor?: IDomEditor | null) {\r\n if (typeof document === 'undefined') return\r\n document.documentElement.classList.toggle('w-e-format-painter-on', !!on)\r\n document.documentElement.classList.toggle('mdg-format-painter-on', !!on)\r\n const el = document.querySelector('.editor-content') as HTMLElement | null\r\n if (el) {\r\n el.classList.toggle('w-e-format-painter-on', !!on)\r\n el.classList.toggle('mdg-format-painter-on', !!on)\r\n if (on) {\r\n formatPainterCursorCss = ''\r\n const css = getFormatPainterCursorCss()\r\n el.style.setProperty('--w-e-format-painter-cursor', css)\r\n el.style.setProperty('--mdg-format-painter-cursor', css)\r\n document.documentElement.style.setProperty('--w-e-format-painter-cursor', css)\r\n document.documentElement.style.setProperty('--mdg-format-painter-cursor', css)\r\n hideFormatPainterHoverbar(editor)\r\n ;[0, 50, 220, 400].forEach(ms => {\r\n setTimeout(() => {\r\n if (formatPainterAttrs.isSelect) hideFormatPainterHoverbar(editor)\r\n }, ms)\r\n })\r\n } else {\r\n el.style.removeProperty('--w-e-format-painter-cursor')\r\n el.style.removeProperty('--mdg-format-painter-cursor')\r\n document.documentElement.style.removeProperty('--w-e-format-painter-cursor')\r\n document.documentElement.style.removeProperty('--mdg-format-painter-cursor')\r\n }\r\n } else if (!on) {\r\n document.documentElement.style.removeProperty('--w-e-format-painter-cursor')\r\n document.documentElement.style.removeProperty('--mdg-format-painter-cursor')\r\n }\r\n}\r\n\r\nexport function clearFormatPainterState(editor?: IDomEditor | null) {\r\n formatPainterAttrs.isSelect = false\r\n formatPainterAttrs.formatStyle = null\r\n formatPainterAttrs.formatBlockStyle = null\r\n formatPainterAttrs.sourceSelKey = ''\r\n setFormatPainterUiActive(false, editor)\r\n}\r\n\r\n// 供 yunkee 业务页 Escape / 切文档时清理(editor 包未 re-export)\r\ntry {\r\n if (typeof window !== 'undefined') {\r\n ;(window as any).__wEClearFormatPainter = clearFormatPainterState\r\n }\r\n} catch (_) {\r\n /* ignore */\r\n}\r\n","/**\r\n * @description 格式刷菜单\r\n */\r\n\r\nimport { Editor, Element, Node, Path, Transforms } from 'slate'\r\nimport { IButtonMenu, IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport {\r\n clearFormatPainterState,\r\n FORMAT_PAINTER_MARK_KEYS,\r\n FORMAT_PAINTER_SVG,\r\n formatPainterAttrs,\r\n hideFormatPainterHoverbar,\r\n setFormatPainterUiActive,\r\n} from '../state'\r\n\r\nfunction selectionKey(sel: any): string {\r\n if (!sel?.anchor?.path || !sel?.focus?.path) return ''\r\n return [\r\n sel.anchor.path.join('.'),\r\n sel.anchor.offset,\r\n sel.focus.path.join('.'),\r\n sel.focus.offset,\r\n ].join('|')\r\n}\r\n\r\nfunction getEditorNodeAtPath(editor: IDomEditor, path: Path): Node | null {\r\n try {\r\n return Node.get(editor, path)\r\n } catch (_) {\r\n return null\r\n }\r\n}\r\n\r\nfunction clearAllTextMarks(editor: IDomEditor) {\r\n if (!editor || editor.isDestroyed || !editor.selection) return\r\n try {\r\n Transforms.unsetNodes(editor, FORMAT_PAINTER_MARK_KEYS as any, {\r\n at: editor.selection,\r\n match: (n: any) => typeof n?.text === 'string',\r\n split: true,\r\n })\r\n } catch (_) {\r\n for (const key of FORMAT_PAINTER_MARK_KEYS) {\r\n try {\r\n editor.removeMark(key)\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass FormatPainterMenu implements IButtonMenu {\r\n readonly title = '格式刷'\r\n readonly tag = 'button'\r\n readonly iconSvg = FORMAT_PAINTER_SVG\r\n\r\n getValue(): string | boolean {\r\n return ''\r\n }\r\n\r\n isActive(): boolean {\r\n return !!formatPainterAttrs.isSelect\r\n }\r\n\r\n isDisabled(editor: IDomEditor): boolean {\r\n if (formatPainterAttrs.isSelect) return false\r\n if (editor.selection == null) return true\r\n try {\r\n const text =\r\n typeof editor.getSelectionText === 'function' ? editor.getSelectionText() : ''\r\n return !String(text || '').length\r\n } catch (_) {\r\n return true\r\n }\r\n }\r\n\r\n isSourceBlockType(type: string): boolean {\r\n return (\r\n type === 'blockquote' ||\r\n type === 'header1' ||\r\n type === 'header2' ||\r\n type === 'header3' ||\r\n type === 'header4' ||\r\n type === 'header5' ||\r\n type === 'header6' ||\r\n type === 'list-item' ||\r\n type === 'todo'\r\n )\r\n }\r\n\r\n isTargetBlockType(type: string): boolean {\r\n return type === 'paragraph' || this.isSourceBlockType(type)\r\n }\r\n\r\n getTopLevelBlockPaths(editor: IDomEditor, checkType: (t: string) => boolean): Path[] {\r\n const paths: Path[] = []\r\n try {\r\n const gen = Editor.nodes(editor, {\r\n at: editor.selection || undefined,\r\n match: (n: any) => !!n && typeof n === 'object' && 'type' in n,\r\n })\r\n for (const [node, path] of gen) {\r\n if (path?.length === 1 && checkType((node as Element).type as string)) {\r\n paths.push(path)\r\n }\r\n }\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n return paths\r\n }\r\n\r\n getSelectedBlockStyle(editor: IDomEditor): Record<string, any> | null {\r\n const paths = this.getTopLevelBlockPaths(editor, t => this.isSourceBlockType(t))\r\n const firstPath = paths[0]\r\n if (!firstPath) return null\r\n const node = getEditorNodeAtPath(editor, firstPath) as any\r\n if (!node || !this.isSourceBlockType(node.type)) return null\r\n if (node.type === 'list-item') {\r\n return { type: 'list-item', ordered: !!node.ordered }\r\n }\r\n return { type: node.type }\r\n }\r\n\r\n pickMarks(editor: IDomEditor): Record<string, any> | null {\r\n let marks: any = null\r\n try {\r\n marks = Editor.marks(editor)\r\n } catch (_) {\r\n marks = null\r\n }\r\n if (!marks || typeof marks !== 'object') return null\r\n const out: Record<string, any> = {}\r\n for (const key of FORMAT_PAINTER_MARK_KEYS) {\r\n if (marks[key] != null && marks[key] !== false) out[key] = marks[key]\r\n }\r\n return Object.keys(out).length ? out : null\r\n }\r\n\r\n unsetListAttrs(editor: IDomEditor, path: Path) {\r\n try {\r\n Transforms.unsetNodes(editor, ['ordered', 'level', 'start'] as any, { at: path })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n\r\n applyBlockStyle(editor: IDomEditor, blockStyle: Record<string, any>) {\r\n const blockPaths = this.getTopLevelBlockPaths(editor, t => this.isTargetBlockType(t))\r\n if (!blockPaths.length) return\r\n if (blockStyle.type === 'list-item') {\r\n blockPaths.forEach(path => {\r\n try {\r\n Transforms.setNodes(\r\n editor,\r\n { type: 'list-item', ordered: !!blockStyle.ordered, level: 0 } as any,\r\n { at: path }\r\n )\r\n Transforms.unsetNodes(editor, 'checked' as any, { at: path })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n return\r\n }\r\n if (blockStyle.type === 'todo') {\r\n blockPaths.forEach(path => {\r\n try {\r\n Transforms.setNodes(editor, { type: 'todo', checked: false } as any, { at: path })\r\n this.unsetListAttrs(editor, path)\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n return\r\n }\r\n blockPaths.forEach(path => {\r\n try {\r\n Transforms.setNodes(editor, { type: blockStyle.type } as any, { at: path })\r\n this.unsetListAttrs(editor, path)\r\n Transforms.unsetNodes(editor, 'checked' as any, { at: path })\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n })\r\n }\r\n\r\n applyCopiedFormat(\r\n editor: IDomEditor,\r\n opts: { allowPending?: boolean } = {}\r\n ): 'applied' | 'cancel' | 'pending' {\r\n const { allowPending = false } = opts\r\n if (!formatPainterAttrs.isSelect || !editor || editor.isDestroyed) return 'cancel'\r\n\r\n let text = ''\r\n try {\r\n text = typeof editor.getSelectionText === 'function' ? editor.getSelectionText() : ''\r\n } catch (_) {\r\n text = ''\r\n }\r\n text = String(text || '')\r\n\r\n const sel = editor.selection\r\n const selKey = selectionKey(sel)\r\n const sameAsSource = !!selKey && selKey === formatPainterAttrs.sourceSelKey\r\n\r\n if (!text.length || !sel || sameAsSource) {\r\n if (allowPending) return 'pending'\r\n clearFormatPainterState(editor)\r\n return 'cancel'\r\n }\r\n\r\n try {\r\n if (formatPainterAttrs.formatStyle) {\r\n clearAllTextMarks(editor)\r\n try {\r\n Transforms.setNodes(editor, formatPainterAttrs.formatStyle as any, {\r\n at: editor.selection || sel,\r\n match: (n: any) => typeof n?.text === 'string',\r\n split: true,\r\n })\r\n } catch (_) {\r\n for (const [key, value] of Object.entries(formatPainterAttrs.formatStyle)) {\r\n try {\r\n editor.addMark(key, value)\r\n } catch (_) {\r\n /* ignore */\r\n }\r\n }\r\n }\r\n }\r\n if (formatPainterAttrs.formatBlockStyle) {\r\n this.applyBlockStyle(editor, formatPainterAttrs.formatBlockStyle)\r\n }\r\n } catch (e) {\r\n console.warn('[wangeditor] formatPainter apply', e)\r\n } finally {\r\n clearFormatPainterState(editor)\r\n }\r\n return 'applied'\r\n }\r\n\r\n exec(editor: IDomEditor) {\r\n if (this.isDisabled(editor)) return\r\n\r\n if (formatPainterAttrs.isSelect) {\r\n clearFormatPainterState(editor)\r\n return\r\n }\r\n\r\n const formatStyle = this.pickMarks(editor)\r\n const formatBlockStyle = this.getSelectedBlockStyle(editor)\r\n if (!formatStyle && !formatBlockStyle) return\r\n\r\n formatPainterAttrs.formatStyle = formatStyle\r\n formatPainterAttrs.formatBlockStyle = formatBlockStyle\r\n formatPainterAttrs.sourceSelKey = selectionKey(editor.selection)\r\n formatPainterAttrs.isSelect = true\r\n setFormatPainterUiActive(true, editor)\r\n hideFormatPainterHoverbar(editor)\r\n }\r\n}\r\n\r\nexport default FormatPainterMenu\r\n","/**\r\n * @description format painter module\r\n */\r\n\r\nimport { IModuleConf } from '@mnykj/wangeditoroptimize-core'\r\nimport { formatPainterMenuConf } from './menu/index'\r\nimport withFormatPainter from './plugin'\r\n\r\nconst formatPainter: Partial<IModuleConf> = {\r\n menus: [formatPainterMenuConf],\r\n editorPlugin: withFormatPainter,\r\n}\r\n\r\nexport default formatPainter\r\n","/**\r\n * @description basic index\r\n * @author wangfupeng\r\n */\r\n\r\nimport './assets/index.less'\r\n\r\n// 配置多语言\r\nimport './locale/index'\r\n\r\nimport wangEditorParagraphModule from './modules/paragraph'\r\nimport wangEditorTextStyleModule from './modules/text-style'\r\nimport wangEditorHeaderModule from './modules/header'\r\nimport wangEditorColorModule from './modules/color'\r\nimport wangEditorLinkModule from './modules/link'\r\nimport wangEditorImageModule from './modules/image'\r\nimport wangEditorTodoModule from './modules/todo'\r\nimport wangEditorBlockQuoteModule from './modules/blockquote'\r\nimport wangEditorEmotionModule from './modules/emotion'\r\nimport wangEditorFontSizeAndFamilyModule from './modules/font-size-family'\r\nimport wangEditorIndentModule from './modules/indent'\r\nimport wangEditorJustifyModule from './modules/justify'\r\nimport wangEditorLineHeightModule from './modules/line-height'\r\nimport wangEditorUndoRedoModule from './modules/undo-redo'\r\nimport wangEditorDividerModule from './modules/divider'\r\nimport wangEditorCodeBlockModule from './modules/code-block'\r\nimport wangEditorFullScreenModule from './modules/full-screen'\r\nimport wangEditorCommonModule from './modules/common'\r\nimport wangEditorFormatPainterModule from './modules/format-painter'\r\n\r\nexport default [\r\n // text style\r\n wangEditorTextStyleModule,\r\n wangEditorColorModule,\r\n wangEditorFontSizeAndFamilyModule,\r\n wangEditorFormatPainterModule,\r\n\r\n // elem style\r\n wangEditorIndentModule,\r\n wangEditorJustifyModule,\r\n wangEditorLineHeightModule,\r\n\r\n // void node\r\n wangEditorImageModule,\r\n wangEditorDividerModule,\r\n\r\n // inline node\r\n wangEditorEmotionModule,\r\n wangEditorLinkModule,\r\n\r\n // block node —— 【注意】要放在 void-node 和 inline-node 后面!!!\r\n wangEditorCodeBlockModule,\r\n wangEditorBlockQuoteModule,\r\n wangEditorHeaderModule,\r\n wangEditorParagraphModule,\r\n wangEditorTodoModule,\r\n\r\n // command\r\n wangEditorUndoRedoModule,\r\n wangEditorFullScreenModule,\r\n wangEditorCommonModule,\r\n]\r\n\r\n// 输出 image 操作,供 updateImageModule 使用\r\nexport * from './modules/image/helper'\r\nexport { setLinkHoverHrefGetter } from './modules/link/menu/link-form-state'\r\n","/**\r\n * @description format painter menu entry\r\n */\r\n\r\nimport FormatPainterMenu from './FormatPainterMenu'\r\n\r\nexport const formatPainterMenuConf = {\r\n key: 'formatPainter',\r\n factory() {\r\n return new FormatPainterMenu()\r\n },\r\n}\r\n","/**\r\n * @description 格式刷:pointerup 时刷选区\r\n */\r\n\r\nimport { IDomEditor } from '@mnykj/wangeditoroptimize-core'\r\nimport FormatPainterMenu from './menu/FormatPainterMenu'\r\nimport { clearFormatPainterState, formatPainterAttrs } from './state'\r\n\r\nfunction withFormatPainter<T extends IDomEditor>(editor: T): T {\r\n if ((editor as any).__wFormatPainterPatched) return editor\r\n ;(editor as any).__wFormatPainterPatched = true\r\n\r\n const painter = new FormatPainterMenu()\r\n let pointerUpBound = false\r\n let applyTimer = 0\r\n let applyScheduled = false\r\n\r\n const unbindPointerUp = () => {\r\n if (!pointerUpBound) return\r\n pointerUpBound = false\r\n document.removeEventListener('pointerup', handlePointerUp, false)\r\n document.removeEventListener('mouseup', handlePointerUp, false)\r\n }\r\n\r\n const scheduleApply = () => {\r\n if (applyScheduled) return\r\n applyScheduled = true\r\n if (applyTimer) {\r\n clearTimeout(applyTimer)\r\n applyTimer = 0\r\n }\r\n let attempt = 0\r\n const run = () => {\r\n applyTimer = 0\r\n if (!formatPainterAttrs.isSelect || editor.isDestroyed) {\r\n applyScheduled = false\r\n return\r\n }\r\n try {\r\n const result = painter.applyCopiedFormat(editor, { allowPending: attempt < 8 })\r\n if (result === 'pending') {\r\n attempt += 1\r\n applyTimer = window.setTimeout(run, attempt < 3 ? 16 : 32)\r\n return\r\n }\r\n } catch (_) {\r\n clearFormatPainterState(editor)\r\n }\r\n applyScheduled = false\r\n }\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(run)\r\n })\r\n }\r\n\r\n const handlePointerUp = (e: Event) => {\r\n unbindPointerUp()\r\n if (!formatPainterAttrs.isSelect || editor.isDestroyed) return\r\n const t = (e as any)?.target\r\n if (\r\n t instanceof Element &&\r\n t.closest?.('button[data-menu-key=\"formatPainter\"]')\r\n ) {\r\n return\r\n }\r\n scheduleApply()\r\n }\r\n\r\n const bindPointerUp = () => {\r\n if (!formatPainterAttrs.isSelect || editor.isDestroyed) return\r\n if (pointerUpBound) return\r\n pointerUpBound = true\r\n document.addEventListener('pointerup', handlePointerUp, false)\r\n document.addEventListener('mouseup', handlePointerUp, false)\r\n }\r\n\r\n const onPointerDown = (e: Event) => {\r\n if (!formatPainterAttrs.isSelect || editor.isDestroyed) return\r\n const t = (e as any)?.target\r\n if (\r\n t instanceof Element &&\r\n t.closest?.('button[data-menu-key=\"formatPainter\"]')\r\n ) {\r\n return\r\n }\r\n bindPointerUp()\r\n }\r\n\r\n const onKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && formatPainterAttrs.isSelect) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n clearFormatPainterState(editor)\r\n }\r\n }\r\n\r\n document.addEventListener('pointerdown', onPointerDown, true)\r\n document.addEventListener('keydown', onKeyDown, true)\r\n\r\n editor.on('destroyed', () => {\r\n if (applyTimer) clearTimeout(applyTimer)\r\n unbindPointerUp()\r\n document.removeEventListener('pointerdown', onPointerDown, true)\r\n document.removeEventListener('keydown', onKeyDown, true)\r\n clearFormatPainterState(editor)\r\n })\r\n\r\n return editor\r\n}\r\n\r\nexport default withFormatPainter\r\n"],"names":["common","ok","delete","enter","enterAbove","cancelEnter","blockQuote","title","codeBlock","color","bgColor","default","clear","divider","emotion","fontSize","fontFamily","fullScreen","header","text","image","netImage","edit","viewLink","src","desc","link","indent","decrease","increase","justify","left","right","center","lineHeight","insert","url","unLink","view","textStyle","bold","code","italic","sub","sup","through","underline","undo","redo","todo","renderParagraphConf","type","renderElem","elemNode","children","editor","jsx","pToHtmlConf","elemToHtml","elem","childrenHtml","match","version","check","it","Math","globalThis","window","self","global","this","Function","exec","error","fails","Object","defineProperty","get","call","prototype","bind","apply","arguments","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","V","descriptor","enumerable","bitmap","value","configurable","writable","FunctionPrototype","callBind","fn","toString","uncurryThis","stringSlice","slice","split","classof","TypeError","undefined","IndexedObject","requireObjectCoercible","argument","isCallable","aFunction","namespace","method","length","isPrototypeOf","getBuiltIn","process","Deno","versions","v8","userAgent","getOwnPropertySymbols","symbol","Symbol","String","sham","V8_VERSION","NATIVE_SYMBOL","iterator","USE_SYMBOL_AS_UID","$Symbol","tryToString","P","func","aCallable","key","SHARED","setGlobal","module","store","push","mode","copyright","hasOwnProperty","hasOwn","toObject","id","postfix","random","WellKnownSymbolsStore","shared","symbolFor","createWellKnownSymbol","withoutSetter","uid","name","description","TO_PRIMITIVE","wellKnownSymbol","input","pref","isObject","isSymbol","result","exoticToPrim","getMethod","val","valueOf","ordinaryToPrimitive","toPrimitive","document","EXISTS","createElement","DESCRIPTORS","a","$getOwnPropertyDescriptor","O","toIndexedObject","toPropertyKey","IE8_DOM_DEFINE","createPropertyDescriptor","propertyIsEnumerableModule","f","$defineProperty","Attributes","anObject","object","definePropertyModule","functionToString","inspectSource","set","has","WeakMap","test","keys","OBJECT_ALREADY_INITIALIZED","NATIVE_WEAK_MAP","state","wmget","wmhas","wmset","metadata","facade","STATE","sharedKey","hiddenKeys","createNonEnumerableProperty","enforce","getterFor","TYPE","getDescriptor","PROPER","CONFIGURABLE","CONFIGURABLE_FUNCTION_NAME","require$$0","getInternalState","InternalStateModule","enforceInternalState","TEMPLATE","options","unsafe","simple","noTargetGet","replace","source","join","ceil","floor","number","max","min","index","integer","toIntegerOrInfinity","obj","toLength","createMethod","IS_INCLUDES","$this","el","fromIndex","lengthOfArrayLike","toAbsoluteIndex","includes","indexOf","names","i","enumBugKeys","concat","getOwnPropertyNames","internalObjectKeys","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","target","ownKeys","getOwnPropertyDescriptorModule","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","toLowerCase","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","forced","copyConstructorProperties","redefine","that","Array","isArray","TO_STRING_TAG","CORRECT_ARGUMENTS","classofRaw","TO_STRING_TAG_SUPPORT","tag","tryGet","callee","noop","empty","construct","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","called","SPECIES","originalArray","C","constructor","isConstructor","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","specificCreate","boundFunction","create","arraySpeciesCreate","forEach","map","filter","some","every","find","findIndex","filterReject","METHOD_NAME","array","foo","Boolean","$filter","HAS_SPECIES_SUPPORT","arrayMethodHasSpeciesSupport","proto","activeXDocument","ignoreCase","multiline","dotAll","unicode","sticky","$RegExp","RegExp","UNSUPPORTED_Y","re","lastIndex","MISSED_STICKY","BROKEN_CARET","defineProperties","Properties","props","objectKeys","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","domain","documentCreateElement","style","display","html","appendChild","contentWindow","open","F","re1","re2","flags","groups","nativeReplace","nativeExec","patchedExec","charAt","UPDATES_LAST_INDEX_WRONG","stickyHelpers","NPCG_INCLUDED","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","reCopy","group","str","raw","regexpFlags","charsAdded","strCopy","Reflect","RegExpPrototype","KEY","FORCED","SHAM","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","uncurriedNativeRegExpMethod","methods","nativeMethod","regexp","arg2","forceStringMethod","uncurriedNativeMethod","$exec","regexpExec","done","charCodeAt","CONVERT_TO_STRING","pos","first","second","S","position","size","codeAt","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","matched","captures","namedCaptures","tailPos","m","symbols","ch","capture","n","R","REPLACE","stringIndexOf","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","_","maybeCallNative","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","rx","res","functionalReplace","fullUnicode","results","regExpExec","advanceStringIndex","accumulatedResult","nextSourcePosition","j","replacerArgs","getSubstitution","UNSCOPABLES","ArrayPrototype","$find","FIND","SKIPS_HOLES","addToUnscopables","MATCH","isRegExp","defaultConstructor","aConstructor","propertyKey","start","end","k","fin","createProperty","MAX_UINT32","$push","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SPLIT","nativeSplit","internalSplit","separator","limit","lim","lastLength","output","lastLastIndex","separatorCopy","arraySlice","splitter","speciesConstructor","unicodeMatching","callRegExpExec","p","q","A","e","z","whitespace","whitespaces","ltrim","rtrim","trim","PROPER_FUNCTION_NAME","$trim","isPlainText","$","child","tagName","getOuterHTML","$elem","outerHTML","getTagName","getStyleValue","styleKey","styleArr","attr","styleItemStr","arr","css","append","prepend","addClass","removeClass","hasClass","on","off","focus","removeAttr","hide","show","parents","dataset","remove","width","height","deleteHandler","newEditor","_a","__read","Editor","nodes","nodeEntry","SlateElement","isElement","SlateNode","_b","SlateText","isText","Transforms","setNodes","renderElems","elemsToHtml","parseElemsHtml","selector","parseElemHtml","Text","isInline","editorPlugin","deleteBackward","deleteForward","unit","quot","attribute","p1","genStyledHtml","textNode","styledHtml","isMatch","$text","matches","forcedStringHTMLMethod","createHTML","italics","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","classList","DOMTokenListPrototype","$forEach","arrayMethodIsStrict","handlePrototype","CollectionPrototype","COLLECTION_NAME","DOMIterables","FAILS_ON_PRIMITIVES","nativeKeys","isMenuDisabled","mark","selection","DomEditor","getNodeType","isVoid","universal","removeMarks","removeMark","BaseMenu","curMarks","marks","getValue","marksNeedToRemove","addMark","BOLD_SVG","UNDER_LINE_SVG","ITALIC_SVG","THROUGH_SVG","CODE_SVG","PENCIL_SVG","EXTERNAL_SVG","FONT_COLOR_SVG","BG_COLOR_SVG","TRASH_SVG","QUOTE_SVG","FONT_SIZE_SVG","FONT_FAMILY_SVG","INDENT_LEFT_SVG","INDENT_RIGHT_SVG","JUSTIFY_LEFT_SVG","JUSTIFY_RIGHT_SVG","JUSTIFY_CENTER_SVG","JUSTIFY_JUSTIFY_SVG","SUP_SVG","SUB_SVG","ENTER_SVG","_this","t","__extends","ClearStyleMenu","nodeEntries","nodeEntries_1","__values","renderStyle","node","vnode","styleVnode","menus","factory","BoldMenu","UnderlineMenu","ItalicMenu","ThroughMenu","CodeMenu","SubMenu","SupMenu","styleToHtml","textHtml","innerHtml","parseStyleHtml","textElem","genRenderElem","level","Tag","renderHeader1Conf","renderHeader2Conf","renderHeader3Conf","renderHeader4Conf","renderHeader5Conf","TO_STRING","n$ToString","getFlags","regExpFlags","NOT_GENERIC","INCORRECT_NAME","$toString","rf","error1","error2","un$StartsWith","startsWith","CORRECT_IS_REGEXP_LOGIC","correctIsRegExpLogic","MDN_POLYFILL_BUG","getHeaderType","setHeaderType","searchString","notARegExp","search","HeaderSelectMenu","styleForRenderMenuList","curValue","opt","selected","HeaderButtonMenuBase","HeaderSelectMenuConf","Header1ButtonMenuConf","Header1ButtonMenu","Header2ButtonMenuConf","Header2ButtonMenu","Header3ButtonMenuConf","Header3ButtonMenu","Header4ButtonMenuConf","Header4ButtonMenu","Header5ButtonMenuConf","Header5ButtonMenu","genToHtmlFn","genParser","insertBreak","isSelectionAtLineEnd","insertNodes","$assign","assign","b","B","alphabet","chr","T","argumentsLength","addVnodeStyle","newStyle","preParseHtmlConf","preParseHtml","fontElem","$font","$content","$content_1","preventDefault","selectedColor","getMenuConfig","$block","$li","clearText","$clearLi","COLORS","backgroundColor","ColorMenu","config","colors","BgColorMenu","anchor","protocolAndDomainRE","everythingAfterProtocol","localhostDomainRE","nonLocalhostDomainRE","$includes","genRandomStr","prefix","nanoid","replaceSymbols","menuKey","checkLink","alert","parse","parseLinkUrl","getSelectedElems","genLinkNode","renderLinkConf","href","linkToHtmlConf","parseHtmlConf","UnLink","getSelectedNodeByType","isDisabled","unwrapNodes","checkNodeType","ViewLink","linkElem","getSelectedLinkElem","Error","Constructor","un$Slice","linkFormApplying","setLinkFormApplying","v","__wELinkFormApplying","syncApplyingFlag","hoverHrefGetter","setLinkFormModalOpen","container","querySelector","wasOpen","contains","add","dismissLinkFocusAfterEdit","ed","hideBar","getHoverbar","hideAndClean","isDestroyed","deselect","requestAnimationFrame","normalizeLinkUrl","s","iconSvg","rand","_textInputId","_urlInputId","LinkFormMenu","_isInsertDisabled","sel","offset","path","_root","textInput","urlInput","_savedSelection","select","restoreSelection","_restoreEditorSelection","form","_readFormAndValidate","_isCollapsedSelection","insertText","insertFragment","selectedText","deleteFragment","wrapNodes","collapse","edge","console","warn","hidePanelOrModal","findPath","_editLinkPath","entry","_resolveEditLinkPath","oldText","Node","at","_applyInsert","_applyEdit","_editor","Element","action","closest","getAttribute","_apply","HTMLInputElement","root","className","addEventListener","ev","_onRootClick","_onRootKeydown","JSON","stringify","innerHTML","setTimeout","ViewLinkOpenMenu","u","_hrefFromSelection","__wELinkHoverHref","getLinkHoverHref","insertData","normalizeNode","Range","isCollapsed","linkEntry","above","linkPath","isEnd","after","nextPath","Path","next","getData","isUrl","parsedUrl","linkNode","insertLink","removeNodes","RangeError","repeat","count","Infinity","un$ToFixed","toFixed","pow","x","acc","multiply","c","c2","divide","dataToString","genContainerId","findKey","renderResizeContainer","imageVnode","imageInfo","$body","containerId","originalX","originalWith","originalHeight","revers","$container","init","clientX","getContainerElem","$img","onMousemove","onMouseup","hoverbar","throttle","newWidth","newHeight","mousedown","$target","fractionDigits","thisNumberValue","fractDigits","sign","x2","log","renderImageConf","alt","_c","_d","_e","_f","isNodeSelected","imageStyle","renderContainer","imageToHtmlConf","styleStr","decodeURIComponent","checkImage","parseSrc","parseImageSrc","insertImageNode","parsedSrc","move","isInsertImageMenuDisabled","onInsertedImage","updateImageNode","selectedImageNode","nodeProps","imageNode","onUpdatedImage","genDomID","InsertImage","srcInputId","altInputId","hrefInputId","buttonId","genModalInputElems","srcContainerElem","inputSrcElem","$inputSrc","altContainerElem","inputAltElem","$inputAlt","hrefContainerElem","inputHrefElem","$inputHref","buttonContainerElem","genModalButtonElems","insertImage","DeleteImage","EditImage","getImageNode","updateImage","_g","_h","ViewImageLink","ImageWidthBaseClass","getSelectedNode","ImageEnterAbove","_value","emptyP","genEmptyParagraph","pinEditorScrollDuring","ImageCancelEnter","canRemoveEmptyLineAboveBlock","removeEmptyLineAboveTopLevelBlock","imageElem","ImageWidth30","ImageWidth50","ImageWidth75","ImageWidth100","renderTodoConf","disabled","checked","margin","contentEditable","marginRight","change","event","newProps","TodoMenu","isBlock","active","isActive","$input","selectedTodo","un$Join","ES3_STRINGS","STRICT_METHOD","makeBlockToolbarButton","opts","actionAttr","cls","h","attrs","class","hook","elm","postpatch","_o","stopPropagation","makeBlockToolbarSpacer","BQ_TOOLBAR_ICON_ENTER","BQ_TOOLBAR_ICON_CANCEL_ENTER","BQ_TOOLBAR_ICON_REMOVE","renderBlockQuoteConf","kids","canCancelEnter","toolbar","contenteditable","click","btn","resolveElemPath","livePath","replaceBlockWithEmptyLine","setBlockToParagraph","insertEmptyLineAboveAtPath","handleBlockquoteToolbarAction","quoteToHtmlConf","BlockquoteMenu","newType","variable","wrapConstructor","NativeConstructor","Wrapper","USE_NATIVE","VIRTUAL_PROTOTYPE","nativeProperty","resultProperty","PROTO","nativeSource","targetPrototype","wrap","real","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","arg","len","E","$getOwnPropertyNames","windowNames","getWindowNames","NAME","wrappedWellKnownSymbolModule","TAG","SET_METHOD","HIDDEN","setInternalState","ObjectPrototype","SymbolPrototype","QObject","$stringify","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","getOwnPropertyNamesExternal","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","USE_SETTER","findChild","setSymbolDescriptor","nativeObjectCreate","ObjectPrototypeDescriptor","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","setter","defineWellKnownSymbol","for","keyFor","sym","useSetter","useSimple","FORCED_JSON_STRINGIFY","space","args","$replacer","hint","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","getPrototypeOf","CORRECT_PROTOTYPE_GETTER","ITERATOR","BUGGY_SAFARI_ITERATORS","NEW_ITERATOR_PROTOTYPE","returnThis","setPrototypeOf","CORRECT_SETTER","FunctionName","IteratorsCore","KEYS","VALUES","ENTRIES","Iterable","IteratorConstructor","DEFAULT","IS_SET","ENUMERABLE_NEXT","setToStringTag","Iterators","createIteratorConstructor","CurrentIteratorPrototype","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","values","ARRAY_ITERATOR","iterated","kind","Arguments","Collection","parent","STRING_ITERATOR","point","WrappedWellKnownSymbolModule","_typeof","_Symbol","_Symbol$iterator","exports","aPossiblePrototype","__proto__","defineIterator","ArrayBuffer","buffer","isExtensible","$isExtensible","ARRAY_BUFFER_NON_EXTENSIBLE","preventExtensions","REQUIRED","METADATA","setMetadata","objectID","weakData","meta","enable","splice","getOwnPropertyNamesExternalModule","fastKey","getWeakData","onFreeze","FREEZING","innerResult","innerError","Result","stopped","ResultPrototype","iterable","unboundFunction","iterFn","step","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","stop","condition","iteratorClose","callFn","getIteratorMethod","usingIterator","iteratorMethod","getIterator","Prototype","SAFE_CLOSING","iteratorWithReturn","return","from","require$$1","internalStateGetterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","ADDER","anInstance","last","iterate","define","previous","getEntry","removed","redefineAll","prev","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","setSpecies","IS_WEAK","NativePrototype","exported","fixMethod","InternalMetadataModule","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","SKIP_CLOSING","ITERATION_SUPPORT","checkCorrectnessOfIteration","BUGGY_ZERO","$instance","dummy","NewTarget","NewTargetPrototype","inheritIfRequired","collection","collectionStrong","ArrayValues","ArrayIteratorMethods","$map","mergeSort","comparefn","middle","insertionSort","merge","element","llength","rlength","lindex","rindex","firefox","UA","webkit","un$Sort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","V8","FF","IE_OR_EDGE","WEBKIT","fromCharCode","itemsLength","items","arrayLength","internalSort","y","getSortCompare","QUOTEABLE","Set","isQuoteableBlockType","cloneInlineNode","leaf","cloned","getBlockInlineChildren","mergeBlocksIntoBlockquoteChildren","blocks","resolveBlocksForMerge","live","out","seen","__spreadArray","collectSelectedQuoteableTopBlocks","cached","__mdgchTrustedBlockPaths","cached_1","getEditorNodeAtPath","toggleBlockquoteMerged","allQuoted","parts","inlines","seg","inlines_1","splitInlinesByNewline","idx","withoutNormalizing","splitBlockquoteToParagraphs","firstIdx","bqNode","insertAt","__mdgchTrustedBlockPath","inBq","BlockquoteMergedMenu","elems","blockquote","quoteElem","quotePath","quoteEndLocation","Point","equals","files","normalized","EmotionMenu","emotionStr","emotions","FONT_SIZE_MAP_FOR_V4","face","FUNCTION_NAME_EXISTS","nameRE","FontSizeMenu","fontSizeList","name_1","FontFamilyMenu","fontFamilyList","family","fontSizeAndFamily","includesSize","item","includesFamily","paddingLeft","parseInt","DecreaseIndentMenu","matchNode","getMatchNode","IncreaseIndentMenu","DEFAULT_INDENT_VALUE","lastTextNode","getIndentValue","textIndent","elemHtml","indentNumber","JustifyLeftMenu","textAlign","JustifyRightMenu","JustifyCenterMenu","JustifyJustifyMenu","LineHeightMenu","lineHeightList","RedoMenu","UndoMenu","undoRedo","renderDividerConf","dividerToHtmlConf","InsertDividerMenu","topPath","topNode","isBlankParagraphNode","divIdx","atDiv","insertDividerSmart","findSelectedDividerPath","byType","anchorPath","RemoveDividerMenu","isLastNode","CODEABLE","findSelectedPrePath","parent_1","getParentNode","CodeBlockMenu","codeNode","preNode","getSelectCodeElem","language","canToggleCodeBlock","prePath","paragraphs","line","paragraphs_1","firstPath","uncodePreInPlace","texts","pre","liveNode","convertSelectionBlockToCodeBlock","codeBlockMenuConf","codeBlockAtCursorMenuConf","nativeMatch","matcher","matchStr","CODE_BLOCK_LANG_OPTIONS","preLangPanelState","anchorEl","onDoc","onScroll","onKey","closePreLangPanel","removeEventListener","parentNode","removeChild","handlePreToolbarAction","codePath","codePath_2","code_1","wordWrap","codePath_1","getPreToolbarState","lang","makePreLangSelect","currentLang","hit","label","o","codeBlockModule","handleShiftTab","lastLineBeforeSelection","codeText","anchorOffset","getLastTextLineBeforeSelection","spaces","fullText","rangeStart","rangeEnd","lineStarts","lineStart","lineEnd","ls","outdentCodeSelection","current","preElem","panel","setAttribute","textContent","opts_1","body","place","isConnected","rect","getBoundingClientRect","bottom","top","innerHeight","innerWidth","spaceBelow","spaceAbove","openAbove","avail","maxHeight","minWidth","round","pw","offsetWidth","ph","offsetHeight","openPreLangPanel","classNames","codeElem","$code","$xmp","FullScreen","isFullScreen","unFullScreen","EnterMenu","isExpanded","newPath","commonModule","TO_ENTRIES","$entries","FORMAT_PAINTER_MARK_KEYS","formatPainterAttrs","isSelect","formatStyle","formatBlockStyle","sourceSelKey","formatPainterCursorCss","hideFormatPainterHoverbar","querySelectorAll","setFormatPainterUiActive","documentElement","toggle","canvas","dpr","devicePixelRatio","ctx_1","getContext","scale","clearRect","fillStyle","strokeStyle","ix","iy0","iy1","brushH","by0_1","bx","fillRect","lineCap","lineWidth","bristleTop_1","beginPath","moveTo","lineTo","stroke","toDataURL","getFormatPainterCursorCss","setProperty","ms","removeProperty","clearFormatPainterState","__wEClearFormatPainter","selectionKey","FormatPainterMenu","getSelectionText","isSourceBlockType","checkType","paths","gen","gen_1","getTopLevelBlockPaths","ordered","FORMAT_PAINTER_MARK_KEYS_2","unsetNodes","blockStyle","blockPaths","isTargetBlockType","unsetListAttrs","allowPending","selKey","sameAsSource","FORMAT_PAINTER_MARK_KEYS_1","clearAllTextMarks","applyBlockStyle","pickMarks","getSelectedBlockStyle","wangEditorColorModule","wangEditorFontSizeAndFamilyModule","__wFormatPainterPatched","painter","pointerUpBound","applyTimer","applyScheduled","unbindPointerUp","handlePointerUp","clearTimeout","attempt","run","applyCopiedFormat","scheduleApply","onPointerDown","onKeyDown","wangEditorJustifyModule","wangEditorLineHeightModule","wangEditorDividerModule","wangEditorLinkModule","wangEditorBlockQuoteModule","wangEditorHeaderModule","wangEditorParagraphModule","wangEditorTodoModule","wangEditorFullScreenModule","wangEditorCommonModule"],"mappings":"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"}