5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-06-30 16:16:07 +00:00
panel/public/packs/js/application-fd20cd4c95f90c1a3ecd.js.map
2023-08-31 10:48:54 -03:00

1 line
4.4 MiB (Stored with Git LFS)
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/core-js/internals/export.js","webpack:///./node_modules/core-js/internals/fails.js","webpack:///./node_modules/core-js/internals/global.js","webpack:///./node_modules/core-js/internals/is-object.js","webpack:///./node_modules/core-js/internals/an-object.js","webpack:///./node_modules/core-js/internals/descriptors.js","webpack:///./node_modules/markdown-it/lib/common/utils.js","webpack:///./node_modules/core-js/internals/well-known-symbol.js","webpack:///./node_modules/core-js/internals/array-buffer-view-core.js","webpack:///./node_modules/core-js/internals/to-length.js","webpack:///./node_modules/core-js/internals/object-define-property.js","webpack:///./node_modules/core-js/internals/to-object.js","webpack:///./node_modules/core-js/internals/has.js","webpack:///./node_modules/core-js/internals/array-iteration.js","webpack:///./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///./node_modules/core-js/internals/redefine.js","webpack:///./node_modules/core-js/internals/require-object-coercible.js","webpack:///./node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///./node_modules/core-js/internals/array-method-uses-to-length.js","webpack:///./node_modules/core-js/internals/to-indexed-object.js","webpack:///./node_modules/core-js/internals/internal-state.js","webpack:///./node_modules/core-js/internals/define-well-known-symbol.js","webpack:///./node_modules/core-js/internals/create-html.js","webpack:///./node_modules/core-js/internals/string-html-forced.js","webpack:///./node_modules/core-js/internals/to-integer.js","webpack:///./node_modules/core-js/internals/a-function.js","webpack:///./node_modules/leaflet/dist/leaflet-src.js","webpack:///./node_modules/core-js/internals/to-primitive.js","webpack:///./node_modules/core-js/internals/get-built-in.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/core-js/internals/is-pure.js","webpack:///./node_modules/core-js/internals/set-to-string-tag.js","webpack:///./node_modules/promise-polyfill/src/index.js","webpack:///./node_modules/core-js/internals/object-create.js","webpack:///./node_modules/core-js/internals/array-method-is-strict.js","webpack:///./node_modules/core-js/internals/typed-array-constructor.js","webpack:///./node_modules/core-js/internals/create-property-descriptor.js","webpack:///./node_modules/core-js/internals/classof-raw.js","webpack:///./node_modules/core-js/internals/to-absolute-index.js","webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/core-js/internals/add-to-unscopables.js","webpack:///./node_modules/core-js/internals/an-instance.js","webpack:///./node_modules/core-js/internals/species-constructor.js","webpack:///./node_modules/@stimulus/core/dist/src/event_listener.js","webpack:///./node_modules/@stimulus/core/dist/src/dispatcher.js","webpack:///./node_modules/@stimulus/core/dist/src/action_descriptor.js","webpack:///./node_modules/@stimulus/core/dist/src/action.js","webpack:///./node_modules/@stimulus/core/dist/src/binding.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/element_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/attribute_observer.js","webpack:///./node_modules/@stimulus/multimap/dist/src/set_operations.js","webpack:///./node_modules/@stimulus/multimap/dist/src/multimap.js","webpack:///./node_modules/@stimulus/multimap/dist/src/indexed_multimap.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/token_list_observer.js","webpack:///./node_modules/@stimulus/mutation-observers/dist/src/value_list_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/binding_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/context.js","webpack:///./node_modules/@stimulus/core/dist/src/definition.js","webpack:///./node_modules/@stimulus/core/dist/src/module.js","webpack:///./node_modules/@stimulus/core/dist/src/data_map.js","webpack:///./node_modules/@stimulus/core/dist/src/selectors.js","webpack:///./node_modules/@stimulus/core/dist/src/target_set.js","webpack:///./node_modules/@stimulus/core/dist/src/scope.js","webpack:///./node_modules/@stimulus/core/dist/src/scope_observer.js","webpack:///./node_modules/@stimulus/core/dist/src/router.js","webpack:///./node_modules/@stimulus/core/dist/src/schema.js","webpack:///./node_modules/@stimulus/core/dist/src/application.js","webpack:///./node_modules/@stimulus/core/dist/src/target_properties.js","webpack:///./node_modules/@stimulus/core/dist/src/controller.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names.js","webpack:///./node_modules/core-js/internals/is-array.js","webpack:///./node_modules/core-js/internals/create-property.js","webpack:///./node_modules/core-js/internals/object-set-prototype-of.js","webpack:///./node_modules/core-js/internals/internal-metadata.js","webpack:///./node_modules/core-js/internals/engine-is-node.js","webpack:///./node_modules/core-js/internals/set-species.js","webpack:///./node_modules/core-js/internals/redefine-all.js","webpack:///./node_modules/core-js/internals/string-trim.js","webpack:///./node_modules/core-js/internals/indexed-object.js","webpack:///./node_modules/core-js/internals/uid.js","webpack:///./node_modules/core-js/internals/hidden-keys.js","webpack:///./node_modules/core-js/internals/array-includes.js","webpack:///./node_modules/core-js/internals/is-forced.js","webpack:///./node_modules/core-js/internals/object-keys.js","webpack:///./node_modules/core-js/internals/array-species-create.js","webpack:///./node_modules/core-js/internals/array-method-has-species-support.js","webpack:///./node_modules/core-js/internals/engine-v8-version.js","webpack:///./node_modules/core-js/internals/engine-user-agent.js","webpack:///./node_modules/core-js/internals/iterators.js","webpack:///./node_modules/core-js/internals/get-iterator-method.js","webpack:///./node_modules/core-js/internals/classof.js","webpack:///./node_modules/core-js/internals/freezing.js","webpack:///./node_modules/core-js/internals/iterate.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///./node_modules/core-js/internals/shared-key.js","webpack:///./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack:///./node_modules/core-js/modules/es.array.iterator.js","webpack:///./node_modules/core-js/internals/array-reduce.js","webpack:///./node_modules/core-js/internals/array-buffer.js","webpack:///./node_modules/core-js/internals/collection.js","webpack:///./node_modules/core-js/internals/inherit-if-required.js","webpack:///./node_modules/core-js/internals/math-expm1.js","webpack:///./node_modules/core-js/internals/whitespaces.js","webpack:///./node_modules/core-js/internals/object-prototype-accessors-forced.js","webpack:///./node_modules/core-js/internals/regexp-flags.js","webpack:///./node_modules/core-js/internals/regexp-exec.js","webpack:///./node_modules/core-js/internals/string-multibyte.js","webpack:///./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack:///./node_modules/core-js/internals/regexp-exec-abstract.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///./node_modules/core-js/internals/document-create-element.js","webpack:///./node_modules/core-js/internals/set-global.js","webpack:///./node_modules/core-js/internals/inspect-source.js","webpack:///./node_modules/core-js/internals/shared-store.js","webpack:///./node_modules/core-js/internals/shared.js","webpack:///./node_modules/core-js/internals/own-keys.js","webpack:///./node_modules/core-js/internals/enum-bug-keys.js","webpack:///./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///./node_modules/core-js/internals/native-symbol.js","webpack:///./node_modules/core-js/internals/object-define-properties.js","webpack:///./node_modules/core-js/internals/array-fill.js","webpack:///./node_modules/core-js/internals/is-array-iterator-method.js","webpack:///./node_modules/core-js/internals/to-string-tag-support.js","webpack:///./node_modules/core-js/internals/define-iterator.js","webpack:///./node_modules/core-js/internals/correct-prototype-getter.js","webpack:///./node_modules/core-js/internals/array-buffer-native.js","webpack:///./node_modules/core-js/internals/string-pad.js","webpack:///./node_modules/core-js/internals/string-repeat.js","webpack:///./node_modules/core-js/internals/math-sign.js","webpack:///./node_modules/core-js/internals/task.js","webpack:///./node_modules/core-js/internals/is-regexp.js","webpack:///./node_modules/core-js/internals/regexp-sticky-helpers.js","webpack:///./node_modules/core-js/internals/not-a-regexp.js","webpack:///./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack:///./node_modules/core-js/internals/advance-string-index.js","webpack:///./node_modules/core-js/internals/string-trim-forced.js","webpack:///./node_modules/core-js/internals/typed-array-constructors-require-wrappers.js","webpack:///./node_modules/uc.micro/categories/P/regex.js","webpack:///./node_modules/markdown-it/lib/ruler.js","webpack:///./node_modules/markdown-it/lib/token.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///./node_modules/core-js/internals/ie8-dom-define.js","webpack:///./node_modules/core-js/internals/native-weak-map.js","webpack:///./node_modules/core-js/internals/copy-constructor-properties.js","webpack:///./node_modules/core-js/internals/path.js","webpack:///./node_modules/core-js/internals/object-keys-internal.js","webpack:///./node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///./node_modules/core-js/internals/html.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack:///./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack:///./node_modules/core-js/internals/array-copy-within.js","webpack:///./node_modules/core-js/internals/flatten-into-array.js","webpack:///./node_modules/core-js/internals/array-for-each.js","webpack:///./node_modules/core-js/internals/array-from.js","webpack:///./node_modules/core-js/internals/iterator-close.js","webpack:///./node_modules/core-js/internals/create-iterator-constructor.js","webpack:///./node_modules/core-js/internals/iterators-core.js","webpack:///./node_modules/core-js/internals/a-possible-prototype.js","webpack:///./node_modules/core-js/internals/array-last-index-of.js","webpack:///./node_modules/core-js/internals/to-index.js","webpack:///./node_modules/core-js/internals/function-bind.js","webpack:///./node_modules/core-js/internals/collection-strong.js","webpack:///./node_modules/core-js/internals/math-log1p.js","webpack:///./node_modules/core-js/internals/is-integer.js","webpack:///./node_modules/core-js/internals/number-parse-float.js","webpack:///./node_modules/core-js/internals/number-parse-int.js","webpack:///./node_modules/core-js/internals/this-number-value.js","webpack:///./node_modules/core-js/internals/object-assign.js","webpack:///./node_modules/core-js/internals/object-to-array.js","webpack:///./node_modules/core-js/internals/same-value.js","webpack:///./node_modules/core-js/internals/native-promise-constructor.js","webpack:///./node_modules/core-js/internals/engine-is-ios.js","webpack:///./node_modules/core-js/internals/microtask.js","webpack:///./node_modules/core-js/internals/promise-resolve.js","webpack:///./node_modules/core-js/internals/new-promise-capability.js","webpack:///./node_modules/core-js/modules/es.regexp.exec.js","webpack:///./node_modules/core-js/modules/es.string.iterator.js","webpack:///./node_modules/core-js/internals/string-pad-webkit-bug.js","webpack:///./node_modules/core-js/internals/to-offset.js","webpack:///./node_modules/core-js/internals/typed-array-from.js","webpack:///./node_modules/core-js/internals/collection-weak.js","webpack:///./node_modules/core-js/internals/dom-iterables.js","webpack:///./node_modules/core-js/internals/native-url.js","webpack:///./node_modules/core-js/modules/web.url-search-params.js","webpack:///./node_modules/bintrees/lib/treebase.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/leaflet/dist/images/marker-icon-2x.png","webpack:///./node_modules/leaflet/dist/images/marker-icon.png","webpack:///./node_modules/leaflet/dist/images/marker-shadow.png","webpack:///./node_modules/markdown-it/lib/common/entities.js","webpack:///./node_modules/mdurl/index.js","webpack:///./node_modules/uc.micro/properties/Any/regex.js","webpack:///./node_modules/uc.micro/categories/Cc/regex.js","webpack:///./node_modules/uc.micro/categories/Z/regex.js","webpack:///./node_modules/markdown-it/lib/common/html_re.js","webpack:///./node_modules/markdown-it/lib/rules_inline/strikethrough.js","webpack:///./node_modules/markdown-it/lib/rules_inline/emphasis.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./node_modules/promise-polyfill/src/finally.js","webpack:///./node_modules/promise-polyfill/src/allSettled.js","webpack:///./node_modules/error-stack-parser/error-stack-parser.js","webpack:///./node_modules/cross-fetch/dist/browser-ponyfill.js","webpack:///./node_modules/markdown-it/index.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./node_modules/turbolinks/dist/turbolinks.js","webpack:///./node_modules/chartkick/dist/chartkick.js","webpack:///./node_modules/core-js/modules/es.symbol.js","webpack:///./node_modules/core-js/modules/es.symbol.description.js","webpack:///./node_modules/core-js/modules/es.symbol.async-iterator.js","webpack:///./node_modules/core-js/modules/es.symbol.has-instance.js","webpack:///./node_modules/core-js/modules/es.symbol.is-concat-spreadable.js","webpack:///./node_modules/core-js/modules/es.symbol.iterator.js","webpack:///./node_modules/core-js/modules/es.symbol.match.js","webpack:///./node_modules/core-js/modules/es.symbol.replace.js","webpack:///./node_modules/core-js/modules/es.symbol.search.js","webpack:///./node_modules/core-js/modules/es.symbol.species.js","webpack:///./node_modules/core-js/modules/es.symbol.split.js","webpack:///./node_modules/core-js/modules/es.symbol.to-primitive.js","webpack:///./node_modules/core-js/modules/es.symbol.to-string-tag.js","webpack:///./node_modules/core-js/modules/es.symbol.unscopables.js","webpack:///./node_modules/core-js/modules/es.array.concat.js","webpack:///./node_modules/core-js/modules/es.array.copy-within.js","webpack:///./node_modules/core-js/modules/es.array.every.js","webpack:///./node_modules/core-js/modules/es.array.fill.js","webpack:///./node_modules/core-js/modules/es.array.filter.js","webpack:///./node_modules/core-js/modules/es.array.find.js","webpack:///./node_modules/core-js/modules/es.array.find-index.js","webpack:///./node_modules/core-js/modules/es.array.flat.js","webpack:///./node_modules/core-js/modules/es.array.flat-map.js","webpack:///./node_modules/core-js/modules/es.array.for-each.js","webpack:///./node_modules/core-js/modules/es.array.from.js","webpack:///./node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack:///./node_modules/core-js/modules/es.array.includes.js","webpack:///./node_modules/core-js/modules/es.array.index-of.js","webpack:///./node_modules/core-js/modules/es.array.is-array.js","webpack:///./node_modules/core-js/modules/es.array.join.js","webpack:///./node_modules/core-js/modules/es.array.last-index-of.js","webpack:///./node_modules/core-js/modules/es.array.map.js","webpack:///./node_modules/core-js/modules/es.array.of.js","webpack:///./node_modules/core-js/modules/es.array.reduce.js","webpack:///./node_modules/core-js/modules/es.array.reduce-right.js","webpack:///./node_modules/core-js/modules/es.array.reverse.js","webpack:///./node_modules/core-js/modules/es.array.slice.js","webpack:///./node_modules/core-js/modules/es.array.some.js","webpack:///./node_modules/core-js/modules/es.array.sort.js","webpack:///./node_modules/core-js/modules/es.array.species.js","webpack:///./node_modules/core-js/modules/es.array.splice.js","webpack:///./node_modules/core-js/modules/es.array.unscopables.flat.js","webpack:///./node_modules/core-js/modules/es.array.unscopables.flat-map.js","webpack:///./node_modules/core-js/modules/es.array-buffer.constructor.js","webpack:///./node_modules/core-js/internals/ieee754.js","webpack:///./node_modules/core-js/modules/es.array-buffer.is-view.js","webpack:///./node_modules/core-js/modules/es.array-buffer.slice.js","webpack:///./node_modules/core-js/modules/es.data-view.js","webpack:///./node_modules/core-js/modules/es.date.now.js","webpack:///./node_modules/core-js/modules/es.date.to-iso-string.js","webpack:///./node_modules/core-js/internals/date-to-iso-string.js","webpack:///./node_modules/core-js/modules/es.date.to-json.js","webpack:///./node_modules/core-js/modules/es.date.to-primitive.js","webpack:///./node_modules/core-js/internals/date-to-primitive.js","webpack:///./node_modules/core-js/modules/es.date.to-string.js","webpack:///./node_modules/core-js/modules/es.function.bind.js","webpack:///./node_modules/core-js/modules/es.function.has-instance.js","webpack:///./node_modules/core-js/modules/es.function.name.js","webpack:///./node_modules/core-js/modules/es.json.to-string-tag.js","webpack:///./node_modules/core-js/modules/es.map.js","webpack:///./node_modules/core-js/modules/es.math.acosh.js","webpack:///./node_modules/core-js/modules/es.math.asinh.js","webpack:///./node_modules/core-js/modules/es.math.atanh.js","webpack:///./node_modules/core-js/modules/es.math.cbrt.js","webpack:///./node_modules/core-js/modules/es.math.clz32.js","webpack:///./node_modules/core-js/modules/es.math.cosh.js","webpack:///./node_modules/core-js/modules/es.math.expm1.js","webpack:///./node_modules/core-js/modules/es.math.fround.js","webpack:///./node_modules/core-js/internals/math-fround.js","webpack:///./node_modules/core-js/modules/es.math.hypot.js","webpack:///./node_modules/core-js/modules/es.math.imul.js","webpack:///./node_modules/core-js/modules/es.math.log10.js","webpack:///./node_modules/core-js/modules/es.math.log1p.js","webpack:///./node_modules/core-js/modules/es.math.log2.js","webpack:///./node_modules/core-js/modules/es.math.sign.js","webpack:///./node_modules/core-js/modules/es.math.sinh.js","webpack:///./node_modules/core-js/modules/es.math.tanh.js","webpack:///./node_modules/core-js/modules/es.math.to-string-tag.js","webpack:///./node_modules/core-js/modules/es.math.trunc.js","webpack:///./node_modules/core-js/modules/es.number.constructor.js","webpack:///./node_modules/core-js/modules/es.number.epsilon.js","webpack:///./node_modules/core-js/modules/es.number.is-finite.js","webpack:///./node_modules/core-js/internals/number-is-finite.js","webpack:///./node_modules/core-js/modules/es.number.is-integer.js","webpack:///./node_modules/core-js/modules/es.number.is-nan.js","webpack:///./node_modules/core-js/modules/es.number.is-safe-integer.js","webpack:///./node_modules/core-js/modules/es.number.max-safe-integer.js","webpack:///./node_modules/core-js/modules/es.number.min-safe-integer.js","webpack:///./node_modules/core-js/modules/es.number.parse-float.js","webpack:///./node_modules/core-js/modules/es.number.parse-int.js","webpack:///./node_modules/core-js/modules/es.number.to-fixed.js","webpack:///./node_modules/core-js/modules/es.number.to-precision.js","webpack:///./node_modules/core-js/modules/es.object.assign.js","webpack:///./node_modules/core-js/modules/es.object.create.js","webpack:///./node_modules/core-js/modules/es.object.define-getter.js","webpack:///./node_modules/core-js/modules/es.object.define-properties.js","webpack:///./node_modules/core-js/modules/es.object.define-property.js","webpack:///./node_modules/core-js/modules/es.object.define-setter.js","webpack:///./node_modules/core-js/modules/es.object.entries.js","webpack:///./node_modules/core-js/modules/es.object.freeze.js","webpack:///./node_modules/core-js/modules/es.object.from-entries.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-names.js","webpack:///./node_modules/core-js/modules/es.object.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es.object.is.js","webpack:///./node_modules/core-js/modules/es.object.is-extensible.js","webpack:///./node_modules/core-js/modules/es.object.is-frozen.js","webpack:///./node_modules/core-js/modules/es.object.is-sealed.js","webpack:///./node_modules/core-js/modules/es.object.keys.js","webpack:///./node_modules/core-js/modules/es.object.lookup-getter.js","webpack:///./node_modules/core-js/modules/es.object.lookup-setter.js","webpack:///./node_modules/core-js/modules/es.object.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es.object.seal.js","webpack:///./node_modules/core-js/modules/es.object.set-prototype-of.js","webpack:///./node_modules/core-js/modules/es.object.to-string.js","webpack:///./node_modules/core-js/internals/object-to-string.js","webpack:///./node_modules/core-js/modules/es.object.values.js","webpack:///./node_modules/core-js/modules/es.parse-float.js","webpack:///./node_modules/core-js/modules/es.parse-int.js","webpack:///./node_modules/core-js/modules/es.promise.js","webpack:///./node_modules/core-js/internals/engine-is-webos-webkit.js","webpack:///./node_modules/core-js/internals/host-report-errors.js","webpack:///./node_modules/core-js/internals/perform.js","webpack:///./node_modules/core-js/modules/es.promise.finally.js","webpack:///./node_modules/core-js/modules/es.reflect.apply.js","webpack:///./node_modules/core-js/modules/es.reflect.construct.js","webpack:///./node_modules/core-js/modules/es.reflect.define-property.js","webpack:///./node_modules/core-js/modules/es.reflect.delete-property.js","webpack:///./node_modules/core-js/modules/es.reflect.get.js","webpack:///./node_modules/core-js/modules/es.reflect.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es.reflect.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es.reflect.has.js","webpack:///./node_modules/core-js/modules/es.reflect.is-extensible.js","webpack:///./node_modules/core-js/modules/es.reflect.own-keys.js","webpack:///./node_modules/core-js/modules/es.reflect.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es.reflect.set.js","webpack:///./node_modules/core-js/modules/es.reflect.set-prototype-of.js","webpack:///./node_modules/core-js/modules/es.regexp.constructor.js","webpack:///./node_modules/core-js/modules/es.regexp.flags.js","webpack:///./node_modules/core-js/modules/es.regexp.to-string.js","webpack:///./node_modules/core-js/modules/es.set.js","webpack:///./node_modules/core-js/modules/es.string.code-point-at.js","webpack:///./node_modules/core-js/modules/es.string.ends-with.js","webpack:///./node_modules/core-js/modules/es.string.from-code-point.js","webpack:///./node_modules/core-js/modules/es.string.includes.js","webpack:///./node_modules/core-js/modules/es.string.match.js","webpack:///./node_modules/core-js/modules/es.string.pad-end.js","webpack:///./node_modules/core-js/modules/es.string.pad-start.js","webpack:///./node_modules/core-js/modules/es.string.raw.js","webpack:///./node_modules/core-js/modules/es.string.repeat.js","webpack:///./node_modules/core-js/modules/es.string.replace.js","webpack:///./node_modules/core-js/internals/get-substitution.js","webpack:///./node_modules/core-js/modules/es.string.search.js","webpack:///./node_modules/core-js/modules/es.string.split.js","webpack:///./node_modules/core-js/modules/es.string.starts-with.js","webpack:///./node_modules/core-js/modules/es.string.trim.js","webpack:///./node_modules/core-js/modules/es.string.trim-end.js","webpack:///./node_modules/core-js/modules/es.string.trim-start.js","webpack:///./node_modules/core-js/modules/es.string.anchor.js","webpack:///./node_modules/core-js/modules/es.string.big.js","webpack:///./node_modules/core-js/modules/es.string.blink.js","webpack:///./node_modules/core-js/modules/es.string.bold.js","webpack:///./node_modules/core-js/modules/es.string.fixed.js","webpack:///./node_modules/core-js/modules/es.string.fontcolor.js","webpack:///./node_modules/core-js/modules/es.string.fontsize.js","webpack:///./node_modules/core-js/modules/es.string.italics.js","webpack:///./node_modules/core-js/modules/es.string.link.js","webpack:///./node_modules/core-js/modules/es.string.small.js","webpack:///./node_modules/core-js/modules/es.string.strike.js","webpack:///./node_modules/core-js/modules/es.string.sub.js","webpack:///./node_modules/core-js/modules/es.string.sup.js","webpack:///./node_modules/core-js/modules/es.typed-array.float32-array.js","webpack:///./node_modules/core-js/internals/to-positive-integer.js","webpack:///./node_modules/core-js/modules/es.typed-array.float64-array.js","webpack:///./node_modules/core-js/modules/es.typed-array.int8-array.js","webpack:///./node_modules/core-js/modules/es.typed-array.int16-array.js","webpack:///./node_modules/core-js/modules/es.typed-array.int32-array.js","webpack:///./node_modules/core-js/modules/es.typed-array.uint8-array.js","webpack:///./node_modules/core-js/modules/es.typed-array.uint8-clamped-array.js","webpack:///./node_modules/core-js/modules/es.typed-array.uint16-array.js","webpack:///./node_modules/core-js/modules/es.typed-array.uint32-array.js","webpack:///./node_modules/core-js/modules/es.typed-array.copy-within.js","webpack:///./node_modules/core-js/modules/es.typed-array.every.js","webpack:///./node_modules/core-js/modules/es.typed-array.fill.js","webpack:///./node_modules/core-js/modules/es.typed-array.filter.js","webpack:///./node_modules/core-js/modules/es.typed-array.find.js","webpack:///./node_modules/core-js/modules/es.typed-array.find-index.js","webpack:///./node_modules/core-js/modules/es.typed-array.for-each.js","webpack:///./node_modules/core-js/modules/es.typed-array.from.js","webpack:///./node_modules/core-js/modules/es.typed-array.includes.js","webpack:///./node_modules/core-js/modules/es.typed-array.index-of.js","webpack:///./node_modules/core-js/modules/es.typed-array.iterator.js","webpack:///./node_modules/core-js/modules/es.typed-array.join.js","webpack:///./node_modules/core-js/modules/es.typed-array.last-index-of.js","webpack:///./node_modules/core-js/modules/es.typed-array.map.js","webpack:///./node_modules/core-js/modules/es.typed-array.of.js","webpack:///./node_modules/core-js/modules/es.typed-array.reduce.js","webpack:///./node_modules/core-js/modules/es.typed-array.reduce-right.js","webpack:///./node_modules/core-js/modules/es.typed-array.reverse.js","webpack:///./node_modules/core-js/modules/es.typed-array.set.js","webpack:///./node_modules/core-js/modules/es.typed-array.slice.js","webpack:///./node_modules/core-js/modules/es.typed-array.some.js","webpack:///./node_modules/core-js/modules/es.typed-array.sort.js","webpack:///./node_modules/core-js/modules/es.typed-array.subarray.js","webpack:///./node_modules/core-js/modules/es.typed-array.to-locale-string.js","webpack:///./node_modules/core-js/modules/es.typed-array.to-string.js","webpack:///./node_modules/core-js/modules/es.weak-map.js","webpack:///./node_modules/core-js/modules/es.weak-set.js","webpack:///./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack:///./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack:///./node_modules/core-js/modules/web.immediate.js","webpack:///./node_modules/core-js/modules/web.queue-microtask.js","webpack:///./node_modules/core-js/modules/web.timers.js","webpack:///./node_modules/core-js/modules/web.url.js","webpack:///./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack:///./node_modules/core-js/internals/get-iterator.js","webpack:///./node_modules/core-js/modules/web.url.to-json.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/stackframe/stackframe.js","webpack:///./node_modules/tdigest/tdigest.js","webpack:///./node_modules/bintrees/index.js","webpack:///./node_modules/bintrees/lib/rbtree.js","webpack:///./node_modules/bintrees/lib/bintree.js","webpack:///./app/javascript/controllers sync _controller\\.js$","webpack:///./app/javascript/controllers/geo_controller.js","webpack:///./app/javascript/controllers/non_geo_controller.js","webpack:///./app/javascript/controllers/reorder_controller.js","webpack:///./app/javascript/etc/external_links.js","webpack:///./app/javascript/etc/image_preview.js","webpack:///./app/javascript/etc/input-date.js","webpack:///./node_modules/markdown-it/lib/index.js","webpack:///./node_modules/mdurl/encode.js","webpack:///./node_modules/mdurl/decode.js","webpack:///./node_modules/mdurl/format.js","webpack:///./node_modules/mdurl/parse.js","webpack:///./node_modules/uc.micro/index.js","webpack:///./node_modules/uc.micro/categories/Cf/regex.js","webpack:///./node_modules/markdown-it/lib/helpers/index.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_label.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_destination.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_title.js","webpack:///./node_modules/markdown-it/lib/renderer.js","webpack:///./node_modules/markdown-it/lib/parser_core.js","webpack:///./node_modules/markdown-it/lib/rules_core/normalize.js","webpack:///./node_modules/markdown-it/lib/rules_core/block.js","webpack:///./node_modules/markdown-it/lib/rules_core/inline.js","webpack:///./node_modules/markdown-it/lib/rules_core/linkify.js","webpack:///./node_modules/markdown-it/lib/rules_core/replacements.js","webpack:///./node_modules/markdown-it/lib/rules_core/smartquotes.js","webpack:///./node_modules/markdown-it/lib/rules_core/state_core.js","webpack:///./node_modules/markdown-it/lib/parser_block.js","webpack:///./node_modules/markdown-it/lib/rules_block/table.js","webpack:///./node_modules/markdown-it/lib/rules_block/code.js","webpack:///./node_modules/markdown-it/lib/rules_block/fence.js","webpack:///./node_modules/markdown-it/lib/rules_block/blockquote.js","webpack:///./node_modules/markdown-it/lib/rules_block/hr.js","webpack:///./node_modules/markdown-it/lib/rules_block/list.js","webpack:///./node_modules/markdown-it/lib/rules_block/reference.js","webpack:///./node_modules/markdown-it/lib/rules_block/heading.js","webpack:///./node_modules/markdown-it/lib/rules_block/lheading.js","webpack:///./node_modules/markdown-it/lib/rules_block/html_block.js","webpack:///./node_modules/markdown-it/lib/common/html_blocks.js","webpack:///./node_modules/markdown-it/lib/rules_block/paragraph.js","webpack:///./node_modules/markdown-it/lib/rules_block/state_block.js","webpack:///./node_modules/markdown-it/lib/parser_inline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/text.js","webpack:///./node_modules/markdown-it/lib/rules_inline/newline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/escape.js","webpack:///./node_modules/markdown-it/lib/rules_inline/backticks.js","webpack:///./node_modules/markdown-it/lib/rules_inline/link.js","webpack:///./node_modules/markdown-it/lib/rules_inline/image.js","webpack:///./node_modules/markdown-it/lib/rules_inline/autolink.js","webpack:///./node_modules/markdown-it/lib/rules_inline/html_inline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/entity.js","webpack:///./node_modules/markdown-it/lib/rules_inline/balance_pairs.js","webpack:///./node_modules/markdown-it/lib/rules_inline/text_collapse.js","webpack:///./node_modules/markdown-it/lib/rules_inline/state_inline.js","webpack:///./node_modules/linkify-it/index.js","webpack:///./node_modules/linkify-it/lib/re.js","webpack:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js","webpack:///./node_modules/markdown-it/lib/presets/default.js","webpack:///./node_modules/markdown-it/lib/presets/zero.js","webpack:///./node_modules/markdown-it/lib/presets/commonmark.js","webpack:///./app/javascript/etc/timezone.js","webpack:///./app/javascript/etc/turbolinks-anchors.js","webpack:///./app/javascript/etc/validation.js","webpack:///./node_modules/@airbrake/browser/esm/jsonify_notice.js","webpack:///./node_modules/@airbrake/browser/esm/metrics.js","webpack:///./node_modules/@airbrake/browser/esm/scope.js","webpack:///./node_modules/@airbrake/browser/esm/processor/esp.js","webpack:///./node_modules/@airbrake/browser/esm/filter/angular_message.js","webpack:///./node_modules/@airbrake/browser/esm/filter/ignore_noise.js","webpack:///./node_modules/@airbrake/browser/esm/filter/uncaught_message.js","webpack:///./node_modules/@airbrake/browser/esm/http_req/api.js","webpack:///./node_modules/@airbrake/browser/esm/http_req/fetch.js","webpack:///./node_modules/@airbrake/browser/esm/http_req/node.js","webpack:///./node_modules/@airbrake/browser/esm/http_req/index.js","webpack:///./node_modules/@airbrake/browser/esm/tdshared.js","webpack:///./node_modules/@airbrake/browser/esm/queries.js","webpack:///./node_modules/@airbrake/browser/esm/queues.js","webpack:///./node_modules/@airbrake/browser/esm/routes.js","webpack:///./node_modules/@airbrake/browser/esm/base_notifier.js","webpack:///./node_modules/@airbrake/browser/esm/filter/debounce.js","webpack:///./node_modules/@airbrake/browser/esm/version.js","webpack:///./node_modules/@airbrake/browser/esm/filter/window.js","webpack:///./node_modules/@airbrake/browser/esm/instrumentation/console.js","webpack:///./node_modules/@airbrake/browser/esm/instrumentation/dom.js","webpack:///./node_modules/@airbrake/browser/esm/instrumentation/location.js","webpack:///./node_modules/@airbrake/browser/esm/notifier.js","webpack:///./node_modules/@airbrake/browser/esm/instrumentation/fetch.js","webpack:///./node_modules/@airbrake/browser/esm/instrumentation/xhr.js","webpack:///./app/javascript/controllers/index.js","webpack:///./node_modules/@stimulus/webpack-helpers/dist/index.js","webpack:///./app/javascript/editor/storage.ts","webpack:///./app/javascript/editor/utils.ts","webpack:///./app/javascript/editor/types/link.ts","webpack:///./app/javascript/editor/types/mark.ts","webpack:///./app/javascript/editor/types/marks.ts","webpack:///./app/javascript/editor/types/blocks.ts","webpack:///./app/javascript/editor/types/parentBlocks.ts","webpack:///./app/javascript/editor/types/multimedia.ts","webpack:///./app/javascript/editor/types.ts","webpack:///./app/javascript/editor/editor.ts","webpack:///./node_modules/input-tag/input-tag.mjs","webpack:///./node_modules/input-map/input-map.mjs","webpack:///./node_modules/orderedmap/index.es.js","webpack:///./app/javascript/etc/input-tag.js","webpack:///./node_modules/prosemirror-model/dist/index.es.js","webpack:///./node_modules/prosemirror-transform/dist/index.es.js","webpack:///./node_modules/prosemirror-state/dist/index.es.js","webpack:///./node_modules/prosemirror-view/dist/index.es.js","webpack:///./node_modules/prosemirror-markdown/dist/index.es.js","webpack:///./node_modules/w3c-keyname/index.es.js","webpack:///./node_modules/prosemirror-keymap/dist/index.es.js","webpack:///./node_modules/rope-sequence/dist/index.es.js","webpack:///./node_modules/prosemirror-history/dist/index.es.js","webpack:///./node_modules/prosemirror-commands/dist/index.es.js","webpack:///./node_modules/prosemirror-dropcursor/dist/index.es.js","webpack:///./node_modules/prosemirror-gapcursor/dist/index.es.js","webpack:///./node_modules/crelt/index.es.js","webpack:///./node_modules/prosemirror-menu/dist/index.es.js","webpack:///./node_modules/prosemirror-schema-list/dist/index.es.js","webpack:///./node_modules/prosemirror-inputrules/dist/index.es.js","webpack:///./node_modules/prosemirror-example-setup/dist/index.es.js","webpack:///./app/javascript/etc/prosemirror.js","webpack:///./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack:///./node_modules/chart.js/dist/chart.esm.js","webpack:///./node_modules/chart.js/auto/auto.esm.js","webpack:///./node_modules/date-fns/esm/_lib/requiredArgs/index.js","webpack:///./node_modules/date-fns/esm/toDate/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","webpack:///./node_modules/date-fns/esm/_lib/toInteger/index.js","webpack:///./node_modules/date-fns/esm/addMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/subMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/_lib/assign/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/longFormatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/_lib/protectedTokens/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCDay/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/parse/_lib/parsers/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISODay/index.js","webpack:///./node_modules/date-fns/esm/parse/index.js","webpack:///./node_modules/date-fns/esm/parseISO/index.js","webpack:///./node_modules/date-fns/esm/isDate/index.js","webpack:///./node_modules/date-fns/esm/isValid/index.js","webpack:///./node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/formatters/index.js","webpack:///./node_modules/date-fns/esm/format/index.js","webpack:///./node_modules/date-fns/esm/addHours/index.js","webpack:///./node_modules/date-fns/esm/addDays/index.js","webpack:///./node_modules/date-fns/esm/addMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/_lib/roundingMethods/index.js","webpack:///./node_modules/date-fns/esm/constants/index.js","webpack:///./node_modules/date-fns/esm/startOfDay/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarDays/index.js","webpack:///./node_modules/date-fns/esm/differenceInDays/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarMonths/index.js","webpack:///./node_modules/date-fns/esm/compareAsc/index.js","webpack:///./node_modules/date-fns/esm/endOfDay/index.js","webpack:///./node_modules/date-fns/esm/endOfMonth/index.js","webpack:///./node_modules/date-fns/esm/isLastDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/differenceInMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarYears/index.js","webpack:///./node_modules/date-fns/esm/startOfWeek/index.js","webpack:///./node_modules/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.esm.js","webpack:///./node_modules/date-fns/esm/addSeconds/index.js","webpack:///./node_modules/date-fns/esm/addMinutes/index.js","webpack:///./node_modules/date-fns/esm/addWeeks/index.js","webpack:///./node_modules/date-fns/esm/addQuarters/index.js","webpack:///./node_modules/date-fns/esm/addYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInSeconds/index.js","webpack:///./node_modules/date-fns/esm/differenceInMinutes/index.js","webpack:///./node_modules/date-fns/esm/differenceInHours/index.js","webpack:///./node_modules/date-fns/esm/differenceInWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInQuarters/index.js","webpack:///./node_modules/date-fns/esm/differenceInYears/index.js","webpack:///./node_modules/date-fns/esm/startOfSecond/index.js","webpack:///./node_modules/date-fns/esm/startOfMinute/index.js","webpack:///./node_modules/date-fns/esm/startOfHour/index.js","webpack:///./node_modules/date-fns/esm/startOfMonth/index.js","webpack:///./node_modules/date-fns/esm/startOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/startOfYear/index.js","webpack:///./node_modules/date-fns/esm/endOfSecond/index.js","webpack:///./node_modules/date-fns/esm/endOfMinute/index.js","webpack:///./node_modules/date-fns/esm/endOfHour/index.js","webpack:///./node_modules/date-fns/esm/endOfWeek/index.js","webpack:///./node_modules/date-fns/esm/endOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/endOfYear/index.js","webpack:///./node_modules/chartkick/chart.js/chart.esm.js","webpack:///./app/javascript/packs/application.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","global","getOwnPropertyDescriptor","f","createNonEnumerableProperty","redefine","setGlobal","copyConstructorProperties","isForced","options","source","target","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","forced","undefined","sham","exec","error","it","Math","check","globalThis","window","self","this","Function","isObject","TypeError","String","fails","_typeof","obj","iterator","constructor","_hasOwnProperty","has","isValidEntityCode","fromCodePoint","surrogate1","surrogate2","fromCharCode","UNESCAPE_MD_RE","UNESCAPE_ALL_RE","RegExp","DIGITAL_ENTITY_TEST_RE","entities","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","ch","REGEXP_ESCAPE_RE","UNICODE_PUNCT_RE","lib","mdurl","ucmicro","assign","sources","Array","slice","arguments","forEach","keys","isString","toString","_class","unescapeMd","str","indexOf","replace","unescapeAll","match","escaped","entity","code","charCodeAt","test","toLowerCase","parseInt","replaceEntityPattern","escapeHtml","arrayReplaceAt","src","pos","newElements","concat","isSpace","isWhiteSpace","isMdAsciiPunct","isPunctChar","escapeRE","normalizeReference","trim","toUpperCase","shared","uid","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","NAME","NATIVE_ARRAY_BUFFER","DESCRIPTORS","classof","getPrototypeOf","setPrototypeOf","wellKnownSymbol","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","ObjectPrototype","isPrototypeOf","TO_STRING_TAG","TYPED_ARRAY_TAG","NATIVE_ARRAY_BUFFER_VIEWS","opera","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","isTypedArray","klass","aTypedArray","aTypedArrayConstructor","C","ARRAY","TypedArrayConstructor","exportTypedArrayMethod","KEY","exportTypedArrayStaticMethod","isView","toInteger","min","argument","IE8_DOM_DEFINE","anObject","toPrimitive","nativeDefineProperty","O","P","Attributes","requireObjectCoercible","IndexedObject","toObject","toLength","arraySpeciesCreate","push","createMethod","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_OUT","NO_HOLES","$this","callbackfn","that","specificCreate","result","boundFunction","length","index","map","filter","some","every","find","findIndex","filterOut","propertyIsEnumerableModule","createPropertyDescriptor","toIndexedObject","nativeGetOwnPropertyDescriptor","inspectSource","InternalStateModule","getInternalState","enforceInternalState","enforce","TEMPLATE","split","state","unsafe","simple","join","definePropertyModule","cache","thrower","METHOD_NAME","method","ACCESSORS","argument0","argument1","set","NATIVE_WEAK_MAP","objectHas","sharedKey","hiddenKeys","WeakMap","store","wmget","wmhas","wmset","metadata","facade","STATE","getterFor","type","path","wrappedWellKnownSymbolModule","quot","string","tag","attribute","S","p1","ceil","floor","isNaN","factory","extend","dest","j","len","F","proto","fn","apply","args","lastId","stamp","_leaflet_id","throttle","time","context","lock","wrapperFn","later","setTimeout","wrapNum","x","range","includeMax","max","falseFn","formatNum","num","digits","pow","round","splitWords","setOptions","getParamString","existingUrl","uppercase","params","encodeURIComponent","templateRe","template","data","Error","isArray","array","el","emptyImageUrl","getPrefixed","lastTime","timeoutDefer","Date","timeToCall","requestFn","requestAnimationFrame","cancelFn","cancelAnimationFrame","id","clearTimeout","requestAnimFrame","immediate","cancelAnimFrame","Util","Class","props","NewClass","initialize","callInitHooks","parentProto","__super__","statics","includes","L","Mixin","Events","console","warn","stack","checkDeprecatedMixinEvents","_initHooks","_initHooksCalled","include","mergeOptions","addInitHook","init","on","types","_on","off","_off","_events","typeListeners","newListener","ctx","listeners","_firingCount","splice","fire","propagate","listens","event","sourceTarget","_propagateEvent","_eventParents","once","handler","addEventParent","removeEventParent","e","layer","propagatedFrom","addEventListener","removeEventListener","clearAllEventListeners","addOneTimeEventListener","fireEvent","hasEventListeners","Evented","Point","y","trunc","v","toPoint","Bounds","a","b","points","toBounds","LatLngBounds","corner1","corner2","latlngs","toLatLngBounds","LatLng","lat","lng","alt","toLatLng","lon","clone","add","point","_add","subtract","_subtract","divideBy","_divideBy","multiplyBy","_multiplyBy","scaleBy","unscaleBy","_round","_floor","_ceil","_trunc","distanceTo","sqrt","equals","contains","abs","getCenter","getBottomLeft","getTopRight","getTopLeft","getBottomRight","getSize","intersects","bounds","min2","max2","xIntersects","yIntersects","overlaps","xOverlaps","yOverlaps","isValid","sw2","ne2","sw","_southWest","ne","_northEast","pad","bufferRatio","heightBuffer","widthBuffer","getSouthWest","getNorthEast","getNorthWest","getNorth","getWest","getSouthEast","getSouth","getEast","latIntersects","lngIntersects","latOverlaps","lngOverlaps","toBBoxString","maxMargin","precision","other","Earth","distance","wrap","wrapLatLng","sizeInMeters","latAccuracy","lngAccuracy","cos","PI","CRS","latLngToPoint","latlng","zoom","projectedPoint","projection","project","scale","transformation","_transform","pointToLatLng","untransformedPoint","untransform","unproject","log","LN2","getProjectedBounds","infinite","transform","wrapLng","wrapLat","wrapLatLngBounds","center","newCenter","latShift","lngShift","R","latlng1","latlng2","rad","lat1","lat2","sinDLat","sin","sinDLon","atan2","earthRadius","SphericalMercator","MAX_LATITUDE","atan","exp","Transformation","_a","_b","_c","_d","toTransformation","EPSG3857","EPSG900913","svgCreate","document","createElementNS","pointsToPath","rings","closed","len2","svg","style$1","documentElement","style","ie","ielt9","edge","navigator","webkit","userAgentContains","android","android23","webkitVer","userAgent","androidStock","chrome","gecko","safari","phantom","opera12","win","platform","ie3d","webkit3d","WebKitCSSMatrix","gecko3d","any3d","L_DISABLE_3D","mobile","orientation","mobileWebkit","mobileWebkit3d","msPointer","PointerEvent","MSPointerEvent","pointer","touch","L_NO_TOUCH","DocumentTouch","mobileOpera","mobileGecko","retina","devicePixelRatio","screen","deviceXDPI","logicalXDPI","passiveEvents","supportsPassiveOption","opts","canvas","createElement","getContext","createSVGRect","vml","div","innerHTML","shape","firstChild","behavior","adj","Browser","POINTER_DOWN","POINTER_MOVE","POINTER_UP","POINTER_CANCEL","_pointers","_pointerDocListener","addPointerListener","onDown","MSPOINTER_TYPE_TOUCH","pointerType","preventDefault","_handlePointer","_globalPointerDown","_globalPointerMove","_globalPointerUp","_addPointerStart","onMove","MSPOINTER_TYPE_MOUSE","buttons","_addPointerMove","onUp","_addPointerEnd","pointerId","touches","changedTouches","disableTextSelection","enableTextSelection","_userSelect","_outlineElement","_outlineStyle","_touchstart","_touchend","_pre","TRANSFORM","testProp","TRANSITION","TRANSITION_END","getElementById","getStyle","currentStyle","defaultView","css","getComputedStyle","create$1","tagName","className","container","appendChild","_remove","parent","parentNode","removeChild","empty","toFront","lastChild","toBack","insertBefore","hasClass","classList","getClass","addClass","classes","setClass","removeClass","remove","baseVal","correspondingElement","_setOpacity","opacity","filterName","filters","item","Enabled","Opacity","_setOpacityIE","setTransform","offset","setPosition","_leaflet_pos","left","top","getPosition","userSelectProperty","disableImageDrag","enableImageDrag","preventOutline","element","tabIndex","restoreOutline","outline","getSizedParentNode","offsetWidth","offsetHeight","body","getScale","rect","getBoundingClientRect","width","height","boundingClientRect","DomUtil","setOpacity","addOne","eventsKey","removeOne","browserFiresNativeDblClick","mouseSubst","mouseenter","mouseleave","wheel","originalHandler","last","touch$$1","doubleTap","onTouchStart","isPrimary","now","delta","onTouchEnd","cancelBubble","prop","newTouch","button","passive","addDoubleTapListener","isExternalTarget","attachEvent","removePointerListener","touchstart","touchend","dblclick","removeDoubleTapListener","detachEvent","stopPropagation","originalEvent","_stopped","skipped","disableScrollPropagation","disableClickPropagation","fakeStop","returnValue","stop","getMousePosition","clientX","clientY","clientLeft","clientTop","wheelPxFactor","getWheelDelta","wheelDeltaY","deltaY","deltaMode","deltaX","deltaZ","wheelDelta","detail","skipEvents","events","related","relatedTarget","err","DomEvent","addListener","removeListener","PosAnimation","run","newPos","duration","easeLinearity","_el","_inProgress","_duration","_easeOutPower","_startPos","_offset","_startTime","_animate","_step","_complete","_animId","elapsed","_runFrame","_easeOut","progress","Map","crs","minZoom","maxZoom","layers","maxBounds","renderer","zoomAnimation","zoomAnimationThreshold","fadeAnimation","markerZoomAnimation","transform3DLimit","zoomSnap","zoomDelta","trackResize","_handlers","_layers","_zoomBoundLayers","_sizeChanged","_initContainer","_initLayout","_onResize","_initEvents","setMaxBounds","_zoom","_limitZoom","setView","reset","_zoomAnimated","_createAnimProxy","_proxy","_catchTransitionEnd","_addLayers","_limitCenter","_stop","_loaded","animate","pan","_tryAnimatedZoom","_tryAnimatedPan","_sizeTimer","_resetView","setZoom","zoomIn","zoomOut","setZoomAround","getZoomScale","viewHalf","centerOffset","latLngToContainerPoint","containerPointToLatLng","_getBoundsCenterZoom","getBounds","paddingTL","paddingTopLeft","padding","paddingBR","paddingBottomRight","getBoundsZoom","Infinity","paddingOffset","swPoint","nePoint","fitBounds","fitWorld","panTo","panBy","getZoom","_panAnim","_onPanTransitionStep","_onPanTransitionEnd","noMoveStart","_mapPane","_getMapPanePos","_rawPanBy","flyTo","targetCenter","targetZoom","from","to","size","startZoom","w0","w1","u1","rho","rho2","sq","sinh","cosh","r0","u","start","_moveStart","frame","easeOut","_flyToFrame","_move","getScaleZoom","w","_moveEnd","flyToBounds","_panInsideMaxBounds","setMinZoom","oldZoom","setMaxZoom","panInsideBounds","_enforcingBounds","panInside","pixelCenter","pixelPoint","pixelBounds","getPixelBounds","halfPixelBounds","paddedBounds","diff","invalidateSize","oldSize","_lastCenter","newSize","oldCenter","debounceMoveend","locate","_locateOptions","timeout","watch","_handleGeolocationError","message","onResponse","_handleGeolocationResponse","onError","_locationWatchId","geolocation","watchPosition","getCurrentPosition","stopLocate","clearWatch","coords","latitude","longitude","accuracy","timestamp","addHandler","HandlerClass","enable","_containerId","_container","_clearControlPos","_resizeRequest","_clearHandlers","_panes","_renderer","createPane","pane","_checkIfLoaded","_moved","layerPointToLatLng","_getCenterLayerPoint","getMinZoom","_layersMinZoom","getMaxZoom","_layersMaxZoom","inside","nw","se","boundsSize","snap","scalex","scaley","_size","clientWidth","clientHeight","topLeftPoint","_getTopLeftPoint","getPixelOrigin","_pixelOrigin","getPixelWorldBounds","getPane","getPanes","getContainer","toZoom","fromZoom","latLngToLayerPoint","containerPointToLayerPoint","layerPointToContainerPoint","layerPoint","mouseEventToContainerPoint","mouseEventToLayerPoint","mouseEventToLatLng","_onScroll","_fadeAnimated","position","_initPanes","_initControlPos","panes","_paneRenderers","markerPane","shadowPane","loading","zoomChanged","_getNewPixelOrigin","pinch","_getZoomSpan","remove$$1","_targets","onOff","_handleDOMEvent","_onMoveEnd","scrollTop","scrollLeft","_findEventTargets","targets","isHover","srcElement","dragging","_simulated","_draggableMoved","_fireDOMEvent","_mouseEvents","synth","isMarker","getLatLng","_radius","containerPoint","bubblingMouseEvents","enabled","moved","boxZoom","disable","whenReady","callback","_latLngToNewLayerPoint","topLeft","_latLngBoundsToNewLayerBounds","latLngBounds","_getCenterOffset","centerPoint","viewBounds","_getBoundsOffset","_limitOffset","newBounds","pxBounds","projectedMaxBounds","minOffset","maxOffset","_rebound","right","proxy","mapPane","_animatingZoom","_onZoomTransitionEnd","_animMoveEnd","_destroyAnimProxy","z","propertyName","_nothingToAnimate","getElementsByClassName","_animateZoom","startAnim","noUpdate","_animateToCenter","_animateToZoom","Control","_map","removeControl","addControl","addTo","onAdd","corner","_controlCorners","onRemove","_refocusOnMap","screenX","screenY","focus","control","corners","_controlContainer","createCorner","vSide","hSide","Layers","collapsed","autoZIndex","hideSingleBase","sortLayers","sortFunction","layerA","layerB","nameA","nameB","baseLayers","overlays","_layerControlInputs","_lastZIndex","_handlingClick","_addLayer","_update","_checkDisabledLayers","_onLayerChange","_expandIfNotCollapsed","addBaseLayer","addOverlay","removeLayer","_getLayer","expand","_section","acceptableHeight","offsetTop","collapse","setAttribute","section","link","_layersLink","href","title","_baseLayersList","_separator","_overlaysList","overlay","sort","setZIndex","baseLayersPresent","overlaysPresent","baseLayersCount","_addItem","display","_createRadioElement","checked","radioHtml","radioFragment","input","label","hasLayer","defaultChecked","layerId","_onInputClick","holder","inputs","addedLayers","removedLayers","addLayer","disabled","_expand","_collapse","Zoom","zoomInText","zoomInTitle","zoomOutText","zoomOutTitle","zoomName","_zoomInButton","_createButton","_zoomIn","_zoomOutButton","_zoomOut","_updateDisabled","_disabled","shiftKey","html","zoomControl","Scale","maxWidth","metric","imperial","_addScales","updateWhenIdle","_mScale","_iScale","maxMeters","_updateScales","_updateMetric","_updateImperial","meters","_getRoundNum","_updateScale","maxMiles","miles","feet","maxFeet","text","ratio","pow10","Attribution","prefix","_attributions","attributionControl","getAttribution","addAttribution","setPrefix","removeAttribution","attribs","prefixAndAttribs","attribution","Handler","_enabled","addHooks","removeHooks","_lastCode","START","END","mousedown","pointerdown","MSPointerDown","MOVE","Draggable","clickTolerance","dragStartTarget","preventOutline$$1","_element","_dragStartTarget","_preventOutline","_onDown","_dragging","finishDrag","which","_moving","first","sizedParent","_startPoint","_parentScale","_onMove","_onUp","_lastTarget","SVGElementInstance","correspondingUseElement","_newPos","_animRequest","_lastEvent","_updatePosition","simplify","tolerance","sqTolerance","markers","_simplifyDPStep","newPoints","_simplifyDP","reducedPoints","prev","_sqDist","_reducePoints","pointToSegmentDistance","p2","_sqClosestPointOnSegment","sqDist","maxSqDist","clipSegment","useLastCode","codeOut","newCode","codeA","_getBitCode","codeB","_getEdgeIntersection","dx","dy","dot","isFlat","_flat","LineUtil","closestPointOnSegment","clipPolygon","clippedPoints","k","edges","_code","PolyUtil","LonLat","Mercator","R_MINOR","tmp","con","ts","tan","phi","dphi","EPSG3395","EPSG4326","Simple","Layer","removeFrom","_mapToAdd","addInteractiveTarget","targetEl","removeInteractiveTarget","_layerAdd","getEvents","beforeAdd","eachLayer","_addZoomLimit","_updateZoomLevels","_removeZoomLimit","oldZoomSpan","LayerGroup","getLayerId","clearLayers","invoke","methodName","getLayer","getLayers","zIndex","FeatureGroup","setStyle","bringToFront","bringToBack","Icon","popupAnchor","tooltipAnchor","createIcon","oldIcon","_createIcon","createShadow","_getIconUrl","img","_createImg","_setIconStyles","sizeOption","anchor","shadowAnchor","iconAnchor","marginLeft","marginTop","IconDefault","iconUrl","iconRetinaUrl","shadowUrl","iconSize","shadowSize","imagePath","_detectIconPath","MarkerDrag","marker","_marker","icon","_icon","_draggable","dragstart","_onDragStart","predrag","_onPreDrag","drag","_onDrag","dragend","_onDragEnd","_adjustPan","speed","autoPanSpeed","autoPanPadding","iconPos","origin","panBounds","movement","_panRequest","_oldLatLng","closePopup","autoPan","shadow","_shadow","_latlng","oldLatLng","Marker","interactive","keyboard","zIndexOffset","riseOnHover","riseOffset","draggable","_initIcon","update","_removeIcon","_removeShadow","viewreset","setLatLng","setZIndexOffset","getIcon","setIcon","_popup","bindPopup","getElement","_setPos","classToAdd","addIcon","mouseover","_bringToFront","mouseout","_resetZIndex","newShadow","addShadow","_updateOpacity","_initInteraction","_zIndex","_updateZIndex","opt","_getPopupAnchor","_getTooltipAnchor","Path","stroke","color","weight","lineCap","lineJoin","dashArray","dashOffset","fill","fillColor","fillOpacity","fillRule","getRenderer","_initPath","_reset","_addPath","_removePath","redraw","_updatePath","_updateStyle","_updateBounds","_bringToBack","_path","_project","_clickTolerance","CircleMarker","radius","setRadius","getRadius","_point","r2","_radiusY","_pxBounds","_updateCircle","_empty","_bounds","_containsPoint","Circle","legacyOptions","_mRadius","half","latR","bottom","lngR","acos","Polyline","smoothFactor","noClip","_setLatLngs","getLatLngs","_latlngs","setLatLngs","isEmpty","closestLayerPoint","minDistance","minPoint","closest","jLen","_parts","halfDist","segDist","dist","_rings","addLatLng","_defaultShape","_convertLatLngs","flat","_projectLatlngs","_rawPxBounds","projectedBounds","ring","_clipPoints","segment","parts","_simplifyPoints","_updatePoly","part","Polygon","area","pop","clipped","GeoJSON","geojson","addData","feature","features","geometries","geometry","coordinates","geometryToLayer","asFeature","defaultOptions","resetStyle","onEachFeature","_setLayerStyle","pointToLayer","_coordsToLatLng","coordsToLatLng","_pointToLayer","coordsToLatLngs","properties","pointToLayerFn","markersInheritOptions","levelsDeep","latLngToCoords","latLngsToCoords","getFeature","newGeometry","PointToGeoJSON","toGeoJSON","geoJSON","multi","holes","toMultiPoint","isGeometryCollection","jsons","json","geoJson","ImageOverlay","crossOrigin","errorOverlayUrl","url","_url","_image","_initImage","styleOpts","setUrl","setBounds","zoomanim","wasElementSupplied","onselectstart","onmousemove","onload","onerror","_overlayOnError","image","errorUrl","VideoOverlay","autoplay","loop","keepAspectRatio","muted","vid","onloadeddata","sourceElements","getElementsByTagName","SVGOverlay","DivOverlay","_source","_removeTimeout","getContent","_content","setContent","content","visibility","_updateContent","_updateLayout","isOpen","_prepareOpen","node","_contentNode","hasChildNodes","_getAnchor","_containerBottom","_containerLeft","_containerWidth","Popup","minWidth","maxHeight","autoPanPaddingTopLeft","autoPanPaddingBottomRight","keepInView","closeButton","autoClose","closeOnEscapeKey","openOn","openPopup","popup","closeOnClick","closePopupOnClick","preclick","_close","moveend","wrapper","_wrapper","_tipContainer","_tip","_closeButton","_onCloseButtonClick","whiteSpace","scrolledClass","marginBottom","containerHeight","containerWidth","layerPos","containerPos","_popupHandlersAdded","click","_openPopup","keypress","_onKeyPress","move","_movePopup","unbindPopup","togglePopup","isPopupOpen","setPopupContent","getPopup","keyCode","Tooltip","direction","permanent","sticky","tooltip","closeTooltip","_setPosition","subX","subY","tooltipPoint","tooltipWidth","tooltipHeight","openTooltip","bindTooltip","_tooltip","_initTooltipInteractions","unbindTooltip","_tooltipHandlersAdded","_moveTooltip","_openTooltip","mousemove","toggleTooltip","isTooltipOpen","setTooltipContent","getTooltip","DivIcon","bgPos","Element","backgroundPosition","Default","GridLayer","tileSize","updateWhenZooming","updateInterval","maxNativeZoom","minNativeZoom","noWrap","keepBuffer","_levels","_tiles","_removeAllTiles","_tileZoom","_setAutoZIndex","isLoading","_loading","viewprereset","_invalidateAll","createTile","getTileSize","compare","children","edgeZIndex","isFinite","nextFrame","willPrune","tile","current","loaded","fade","active","_onOpaqueTile","_noPrune","_pruneTiles","_fadeFrame","_updateLevels","Number","_onUpdateLevel","_removeTilesAtZoom","_onRemoveLevel","level","_setZoomTransform","_onCreateLevel","_level","retain","_retainParent","_retainChildren","_removeTile","x2","y2","z2","coords2","_tileCoordsToKey","animating","_setView","_clampZoom","noPrune","tileZoom","tileZoomChanged","_abortLoading","_resetGrid","_setZoomTransforms","translate","_tileSize","_globalTileRange","_pxBoundsToTileRange","_wrapX","_wrapY","_getTiledPixelBounds","mapZoom","halfSize","tileRange","tileCenter","queue","margin","noPruneRange","_isValidTile","fragment","createDocumentFragment","_addTile","tileBounds","_tileCoordsToBounds","_keyToBounds","_keyToTileCoords","_tileCoordsToNwSe","nwPoint","sePoint","bp","_initTile","WebkitBackfaceVisibility","tilePos","_getTilePos","_wrapCoords","_tileReady","_noTilesToLoad","newCoords","TileLayer","subdomains","errorTileUrl","zoomOffset","tms","zoomReverse","detectRetina","_onTileRemove","noRedraw","done","_tileOnLoad","_tileOnError","getTileUrl","_getSubdomain","_getZoomForUrl","invertedY","getAttribute","tilePoint","complete","tileLayer","TileLayerWMS","defaultWmsParams","service","request","styles","format","transparent","version","wmsParams","realRetina","_crs","_wmsVersion","parseFloat","projectionKey","bbox","setParams","WMS","wms","Renderer","_updatePaths","_destroyContainer","_onZoom","zoomend","_onZoomEnd","_onAnimZoom","ev","_updateTransform","currentCenterPoint","_center","topLeftOffset","Canvas","_onViewPreReset","_postponeUpdatePaths","_draw","_onMouseMove","_onClick","_handleMouseOut","_ctx","_redrawRequest","_redrawBounds","_redraw","_updateDashArray","order","_order","_drawLast","next","_drawFirst","_requestRedraw","_extendRedrawBounds","dashValue","_dashArray","_clear","clearRect","save","restore","beginPath","clip","_drawing","closePath","_fillStroke","arc","globalAlpha","fillStyle","setLineDash","lineWidth","strokeStyle","clickedLayer","_fireEvent","moving","_handleMouseHover","_hoveredLayer","_mouseHoverThrottled","candidateHoveredLayer","canvas$1","vmlCreate","namespaces","vmlMixin","coordsize","_stroke","_fill","stroked","filled","dashStyle","endcap","joinstyle","_setPath","create$2","SVG","zoomstart","_onZoomStart","_rootGroup","_svgSize","removeAttribute","svg$1","_getPaneRenderer","_createRenderer","preferCanvas","Rectangle","_boundsToLatLngs","BoxZoom","_pane","overlayPane","_resetStateTimeout","_destroy","_onMouseDown","_resetState","_clearDeferredResetState","contextmenu","mouseup","_onMouseUp","keydown","_onKeyDown","_box","_finish","boxZoomBounds","doubleClickZoom","DoubleClickZoom","_onDoubleClick","inertia","inertiaDeceleration","inertiaMaxSpeed","worldCopyJump","maxBoundsViscosity","Drag","_onPreDragLimit","_onPreDragWrap","_positions","_times","_offsetLimit","_viscosity","_lastTime","_lastPos","_absPos","_prunePositions","shift","pxCenter","pxWorldCenter","_initialWorldOffset","_worldWidth","_viscousLimit","threshold","limit","worldWidth","halfWidth","newX1","newX2","newX","noInertia","ease","speedVector","limitedSpeed","limitedSpeedVector","decelerationDuration","keyboardPanDelta","Keyboard","keyCodes","down","up","_setPanDelta","_setZoomDelta","_onFocus","blur","_onBlur","_addHooks","_removeHooks","_focused","docEl","scrollTo","panDelta","_panKeys","codes","_zoomKeys","altKey","ctrlKey","metaKey","scrollWheelZoom","wheelDebounceTime","wheelPxPerZoomLevel","ScrollWheelZoom","_onWheelScroll","_delta","debounce","_lastMousePos","_timer","_performZoom","d2","d3","d4","tap","tapTolerance","Tap","_fireClick","_holdTimeout","_isTapValid","_simulateEvent","touchmove","simulatedEvent","createEvent","_simulatedClick","initMouseEvent","dispatchEvent","touchZoom","bounceAtZoomLimits","TouchZoom","_onTouchStart","_zooming","_centerPoint","_startLatLng","_pinchStartLatLng","_startDist","_startZoom","_onTouchMove","_onTouchEnd","moveFn","Projection","latLng","layerGroup","featureGroup","imageOverlay","videoOverlay","video","svgOverlay","divIcon","gridLayer","circleMarker","circle","polyline","polygon","rectangle","oldL","noConflict","PREFERRED_STRING","val","valueOf","aFunction","variable","namespace","CORRECT_PROTOTYPE_GETTER","IE_PROTO","TAG","configurable","setTimeoutFunc","Boolean","noop","Promise","_state","_handled","_value","_deferreds","doResolve","handle","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","reject","promise","resolve","newValue","then","finale","thisArg","_unhandledRejectionFn","reason","ex","prom","all","arr","remaining","res","allSettled","race","setImmediate","activeXDocument","defineProperties","enumBugKeys","documentCreateElement","EmptyConstructor","scriptTag","LT","NullProtoObject","domain","ActiveXObject","iframeDocument","iframe","write","close","temp","parentWindow","NullProtoObjectViaActiveX","contentWindow","open","Properties","$","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferViewCore","ArrayBufferModule","anInstance","toIndex","toOffset","getOwnPropertyNames","typedArrayFrom","setSpecies","getOwnPropertyDescriptorModule","inheritIfRequired","setInternalState","RangeError","ArrayBuffer","DataView","BYTES_PER_ELEMENT","WRONG_LENGTH","fromList","list","addGetter","isArrayBuffer","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","writable","CLAMPED","BYTES","CONSTRUCTOR_NAME","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructorPrototype","exported","addElement","view","byteOffset","setter","dummy","typedArrayOffset","$length","buffer","byteLength","$len","bitmap","integer","UNSCOPABLES","ArrayPrototype","Constructor","SPECIES","defaultConstructor","EventListener","eventTarget","eventName","unorderedBindings","Set","connect","disconnect","bindingConnected","binding","bindingDisconnected","handleEvent","extendedEvent","stopImmediatePropagation_1","stopImmediatePropagation","immediatePropagationStopped","extendEvent","_i","bindings","leftIndex","rightIndex","Dispatcher","application","eventListenerMaps","started","eventListeners","eventListener","values","reduce","fetchEventListenerForBinding","handleError","fetchEventListener","eventListenerMap","fetchEventListenerMapForEventTarget","createEventListener","descriptorPattern","parseEventTarget","eventTargetName","Action","defaultEventNames","getDefaultEventNameForElement","identifier","forToken","token","descriptorString","matches","eventNameSuffix","Binding","action","willBeInvokedByEvent","invokeWithEvent","controller","scope","containsElement","ElementObserver","delegate","_this","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","attributes","childList","subtree","refresh","takeRecords","matchElementsInTree","removeElement","mutations_1","mutation","processMutation","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","nodeType","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","hasAttribute","querySelectorAll","selector","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","fetch","del","prune","extendStatics","Multimap","valuesByKey","hasKey","hasValue","getValuesForKey","getKeysForValue","__extends","__proto__","__","_super","IndexedMultimap","keysByValue","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","refreshTokensForElement","unmatchedTokens","matchedTokens","tokensUnmatched","tokens","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","_","tokensAreEqual","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","schema","connectAction","disconnectAction","clear","Context","controllerConstructor","bindingObserver","dispatcher","parentElement","blessControllerConstructor","bless","extendWithReflect","Controller","_newTarget","Reflect","construct","Module","definition","blessDefinition","contextsByScope","connectedContexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","DataMap","getFormattedKey","_char","attributeValueContainsToken","TargetSet","targetName","targetNames","getSelectorForTargetNames","findElement","findAll","findAllElements","getSelectorForTargetName","targetDescriptor","targetAttribute","Scope","head","tail","filterElements","controllerSelector","controllerAttribute","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","contexts","loadDefinition","unloadIdentifier","connectModule","disconnectModule","getContextForElementAndIdentifier","defaultSchema","__awaiter","_arguments","generator","fulfilled","step","rejected","__generator","g","sent","trys","ops","verb","op","Application","router","readyState","register","load","rest","definitions","unload","identifiers","getControllerForElementAndIdentifier","defineTargetProperties","ancestors","getAncestorsForConstructor","getOwnTargetNamesForConstructor","getTargetNamesForConstructor","charAt","capitalize","internalObjectKeys","arg","propertyKey","aPossiblePrototype","CORRECT_SETTER","FREEZING","METADATA","isExtensible","setMetadata","objectID","weakData","meta","REQUIRED","fastKey","getWeakData","onFreeze","process","getBuiltIn","whitespace","ltrim","rtrim","end","propertyIsEnumerable","postfix","random","toAbsoluteIndex","IS_INCLUDES","fromIndex","replacement","detection","normalize","POLYFILL","NATIVE","originalArray","V8_VERSION","foo","versions","v8","Iterators","ITERATOR","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tryGet","callee","preventExtensions","isArrayIteratorMethod","getIteratorMethod","iteratorClose","Result","stopped","iterable","unboundFunction","iterFn","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","condition","callFn","nativePropertyIsEnumerable","NASHORN_BUG","1","V","SAFE_CLOSING","called","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","addToUnscopables","defineIterator","ARRAY_ITERATOR","iterated","kind","Arguments","IS_RIGHT","argumentsLength","memo","redefineAll","IEEE754","arrayFill","setToStringTag","ARRAY_BUFFER","DATA_VIEW","WRONG_INDEX","NativeArrayBuffer","$ArrayBuffer","$DataView","$DataViewPrototype","packIEEE754","pack","unpackIEEE754","unpack","packInt8","number","packInt16","packInt32","unpackInt32","packFloat32","packFloat64","count","isLittleEndian","intIndex","bytes","reverse","conversion","NaN","ArrayBufferPrototype","testView","nativeSetInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","InternalMetadataModule","iterate","checkCorrectnessOfIteration","common","IS_WEAK","ADDER","NativeConstructor","NativePrototype","fixMethod","nativeMethod","entries","getConstructor","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","setStrong","Wrapper","NewTarget","NewTargetPrototype","nativeExpm1","expm1","IS_PURE","__defineSetter__","ignoreCase","multiline","dotAll","unicode","re1","re2","regexpFlags","stickyHelpers","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","lastIndex","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","re","flags","charsAdded","strCopy","CONVERT_TO_STRING","second","codeAt","regexpExec","REPLACE_SUPPORTS_NAMED_GROUPS","groups","REPLACE_KEEPS_$0","REPLACE","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","methods","regexp","arg2","forceStringMethod","stringMethod","regexMethod","sparkMd5","createCommonjsModule","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","lo","hi","substring","md51_array","subarray","rhex","hex","toUtf8","unescape","utf8Str2ArrayBuffer","returnUInt8Array","buff","arrayBuffer2Utf8Str","concatenateArrayBuffers","hexToBinaryString","substr","SparkMD5","clamp","targetArray","sourceArray","begin","append","appendBinary","contents","_buff","_length","_hash","raw","getState","hash","setState","destroy","hashBinary","classCallCheck","createClass","protoProps","staticProps","fileSlice","File","mozSlice","webkitSlice","FileChecksum","file","chunkSize","chunkCount","chunkIndex","md5Buffer","fileReader","FileReader","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","btoa","readAsArrayBuffer","root","querySelector","eventInit","bubbles","cancelable","initEvent","toArray$1","BlobRecord","checksum","filename","content_type","byte_size","xhr","XMLHttpRequest","responseType","setRequestHeader","csrfToken","getMetaValue","requestDidLoad","requestDidError","send","JSON","stringify","blob","status","response","direct_upload","directUploadData","toJSON","_xhr","parse","BlobUpload","_blob$directUploadDat","headers","DirectUpload","notify","upload","_len","messages","_key","DirectUploadController","directUpload","dispatch","hiddenInput","insertAdjacentElement","dispatchError","signed_id","total","defaultPrevented","alert","_this2","uploadRequestDidProgress","DirectUploadsController","form","files","controllers","createDirectUploadControllers","startNextController","processingAttribute","submitButtonsByForm","didClick","didSubmitForm","didSubmitRemoteElement","handleFormSubmissionEvent","submitForm","ActiveStorage","EXISTS","functionToString","SHARED","copyright","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","getOwnPropertySymbols","objectKeys","endPos","createIteratorConstructor","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","returnThis","Iterable","IteratorConstructor","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","repeat","IS_END","maxLength","fillString","fillLen","stringFiller","stringLength","fillStr","intMaxLength","sign","defer","channel","port","IS_IOS","IS_NODE","location","clearImmediate","MessageChannel","Dispatch","counter","ONREADYSTATECHANGE","runner","listener","post","postMessage","protocol","host","nextTick","port2","port1","onmessage","importScripts","MATCH","isRegExp","RE","error1","error2","whitespaces","Ruler","__rules__","__cache__","__find__","__compile__","chains","rule","altName","chain","at","before","beforeName","ruleName","after","afterName","ignoreInvalid","idx","enableOnly","getRules","chainName","Token","nesting","attrs","markup","info","block","hidden","attrIndex","attrPush","attrData","attrSet","attrGet","attrJoin","webpackPolyfill","deprecate","paths","ownKeys","names","nativeGetOwnPropertyNames","windowNames","getWindowNames","copyWithin","inc","flattenIntoArray","original","sourceLen","depth","mapper","targetIndex","sourceIndex","mapFn","$forEach","arrayMethodIsStrict","arrayMethodUsesToLength","STRICT_METHOD","USES_TO_LENGTH","callWithSafeIterationClosing","createProperty","arrayLike","mapfn","mapping","iteratorMethod","returnMethod","PrototypeOfArrayIteratorPrototype","arrayIterator","NEW_ITERATOR_PROTOTYPE","nativeLastIndexOf","lastIndexOf","NEGATIVE_ZERO","searchElement","factories","argsLength","partArgs","internalStateGetterFor","define","previous","entry","getEntry","removed","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","log1p","$parseFloat","trimmedString","$parseInt","radix","nativeAssign","A","B","symbol","alphabet","chr","T","TO_ENTRIES","is","flush","toggle","macrotask","IS_WEBOS_WEBKIT","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","exit","enter","createTextNode","characterData","task","newPromiseCapability","promiseCapability","PromiseCapability","$$resolve","$$reject","STRING_ITERATOR","toPositiveInteger","ArrayIterationModule","$has","uncaughtFrozenStore","frozen","UncaughtFrozenStore","findUncaughtFrozen","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","URL","searchParams","pathname","URLSearchParams","username","USE_NATIVE_URL","hasOwn","getIterator","$fetch","Headers","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","plus","sequences","percentSequence","percentDecode","sequence","decodeURIComponent","deserialize","replacer","serialize","parseSearchParams","query","updateSearchParams","validateArgumentsLength","passed","required","URLSearchParamsIterator","URLSearchParamsConstructor","entryIterator","entryNext","updateURL","URLSearchParamsPrototype","getAll","found","entriesIndex","sliceIndex","TreeBase","Iterator","_tree","_ancestors","_cursor","_root","_comparator","get_child","findIter","iter","lowerBound","cur","cmp","upperBound","each","reach","_minNode","_maxNode","runtime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegateResult","maybeInvokeDelegate","ContinueSentinel","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","skipTempReset","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","encode","decode","open_tag","close_tag","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","postProcess","delimiters","startDelim","endDelim","loneMarkers","tokenize","silent","scanned","scanDelims","jump","can_open","can_close","curr","tokens_meta","isStrong","__webpack_amd_options__","StackFrame","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","line","sanitizedLine","locationParts","functionName","fileName","lineNumber","columnNumber","functionNameRegex","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","__self__","DOMException","support","Blob","viewClasses","isArrayBufferView","normalizeName","normalizeValue","iteratorFor","items","header","consumed","bodyUsed","fileReaderReady","reader","readBlobAsArrayBuffer","bufferClone","buf","Body","_initBody","_bodyInit","_bodyText","_bodyBlob","FormData","_bodyFormData","_bodyArrayBuffer","arrayBuffer","readAsText","chars","readArrayBufferAsText","formData","oldValue","Request","upcased","credentials","signal","referrer","Response","bodyInit","ok","statusText","redirectStatuses","redirect","aborted","abortXhr","abort","rawHeaders","getAllResponseHeaders","responseURL","responseText","ontimeout","onabort","withCredentials","onreadystatechange","polyfill","Rails","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","ref","cspNonce","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","getData","setData","csrfParam","CSRFProtection","refreshCSRFTokens","param","CustomEvent","evt","initCustomEvent","Event","stopEverything","eventType","AcceptHeaders","createXHR","prepareOptions","processResponse","xml","script","ajax","getResponseHeader","success","beforeSend","OPENED","dataType","accept","crossDomain","DONE","parser","DOMParser","parseFromString","isCrossDomain","originAnchor","urlAnchor","toArray","serializeElement","additionalParam","option","selected","formElements","allowAction","handleConfirm","confirm","answer","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","originalText","handleMethod","formContent","isRemote","handleRemote","enctype","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","jQuery","rails","ajaxPrefilter","originalOptions","_rails_loaded","Turbolinks","supported","history","pushState","visit","clearCache","setProgressBarDelay","copyObject","uuid","Location","absoluteURL","requestURL","getOrigin","getPath","getPathComponents","getLastPathComponent","getExtension","isHTML","isPrefixedBy","isEqualTo","toCacheKey","_t","HttpRequest","requestCanceled","requestTimedOut","requestFailed","requestLoaded","requestProgressed","NETWORK_FAILURE","TIMEOUT_FAILURE","notifyApplicationBeforeRequestStart","setProgress","requestStarted","cancel","lengthComputable","endRequest","requestCompletedWithResponse","failed","requestFailedWithStatusCode","notifyApplicationAfterRequestEnd","onprogress","requestFinished","ProgressBar","trickle","_t2","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","defaultCSS","show","visible","installStylesheetElement","installProgressElement","startTrickling","hide","hiding","fadeProgressElement","uninstallProgressElement","stopTrickling","setValue","trickleInterval","setInterval","clearInterval","textContent","BrowserAdapter","showProgressBar","_t3","progressBar","visitProposedToLocationWithAction","startVisitToLocationWithAction","visitStarted","issueRequest","changeHistory","loadCachedSnapshot","visitRequestStarted","hasCachedSnapshot","showProgressBarAfterDelay","visitRequestProgressed","visitRequestCompleted","loadResponse","visitRequestFailedWithStatusCode","reload","visitRequestFinished","hideProgressBar","visitCompleted","followRedirect","pageInvalidated","progressBarTimeout","progressBarDelay","_t4","History","onPageLoad","onPopState","shouldHandlePopState","turbolinks","restorationIdentifier","historyPoppedToLocationWithRestorationIdentifier","pageLoaded","pageIsLoaded","HeadDetails","outerHTML","tracked","fromHeadElement","childNodes","hasElementWithKey","getTrackedElementSignature","getScriptElementsNotInDetails","getElementsMatchingTypeNotInDetails","getStylesheetElementsNotInDetails","getProvisionalElements","findMetaElementByName","_e","Snapshot","headDetails","bodyElement","fromHTMLString","fromHTMLElement","cloneNode","getRootLocation","getSetting","getCacheControlValue","getElementForAnchor","getPermanentElements","getPermanentElementById","getPermanentElementsPresentInSnapshot","findFirstAutofocusableElement","hasAnchor","isPreviewable","isCacheable","isVisitable","render","renderView","viewWillRender","newBody","viewRendered","invalidateView","viewInvalidated","createScriptElement","SnapshotRenderer","currentSnapshot","newSnapshot","isPreview","currentHeadDetails","newHeadDetails","currentBody","shouldRender","mergeHead","replaceBody","focusFirstAutofocusableElement","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","relocateCurrentBodyPermanentElements","activateNewBodyScriptElements","assignNewBody","replacePlaceholderElementsWithClonedPermanentElements","trackedElementsAreIdentical","getNewHeadStylesheetElements","getNewHeadScriptElements","getCurrentHeadProvisionalElements","getNewHeadProvisionalElements","getCurrentBodyPermanentElements","permanentElement","getNewBodyScriptElements","_t5","replaceChild","_t6","ErrorRenderer","newHead","replaceHeadAndBody","activateBodyScriptElements","getScriptElements","View","htmlElement","getSnapshot","snapshot","markAsPreview","renderSnapshot","renderError","ScrollManager","onScroll","_t7","scrollToElement","scrollIntoView","scrollToPosition","updatePosition","pageXOffset","pageYOffset","scrollPositionChanged","SnapshotCache","snapshots","read","put","unshift","Visit","performScroll","_t8","adapter","timingMetrics","recordTimingMetric","cancelRender","fail","visitFailed","historyChanged","shouldIssueRequest","getCachedSnapshot","getCachedSnapshotForLocation","cacheSnapshot","visitRendered","redirectedToLocation","followedRedirect","replaceHistoryWithLocationAndRestorationIdentifier","scrolled","scrollToRestoredPosition","scrollToTop","scrollToAnchor","restorationData","scrollPosition","getTime","getTimingMetrics","snapshotCached","_t9","clickBubbled","clickCaptured","scrollManager","startHistory","stopHistory","applicationAllowsVisitingLocation","locationIsVisitable","getRestorationDataForIdentifier","startVisit","pushHistoryWithLocationAndRestorationIdentifier","shouldCacheSnapshot","notifyApplicationBeforeCachingSnapshot","lastRenderedLocation","getCurrentRestorationData","notifyApplicationBeforeRender","currentVisit","notifyApplicationAfterRender","notifyApplicationAfterPageLoad","clickEventIsSignificant","getVisitableLinkForNode","getVisitableLocationForLink","applicationAllowsFollowingLinkToLocation","getActionForLink","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","notifyApplicationAfterVisitingLocation","timing","createVisit","isContentEditable","nodeIsVisitable","currentScript","isFunction","isPlainObject","merge","obj1","obj2","DATE_PATTERN","toStr","toFloat","toDate","year","month","day","toArr","jsOptionsFunc","hideLegend","setTitle","setMin","setMax","setStacked","setXtitle","setYtitle","chart","chartOptions","series","singleSeriesFormat","legend","negativeValues","stacked","colors","xtitle","ytitle","library","sortByTime","sortByNumberSeries","sortByNumber","isMinute","getMilliseconds","getSeconds","isHour","getMinutes","isDay","getHours","isWeek","dayOfWeek","getDay","isMonth","getDate","isYear","getMonth","isDate","isNumber","byteSuffixes","formatValue","pre","axis","suffix","byteScale","suffixIdx","baseValue","toPrecision","zeros","toFixed","thousands","decimal","seriesOption","baseOptions","maintainAspectRatio","animation","plugins","displayColors","callbacks","font","interaction","defaultOptions$2","scales","ticks","maxTicksLimit","grid","drawOnChartArea","defaultColors","hideLegend$2","setTitle$2","setBarMin$1","setBarMax$1","setStacked$2","setXtitle$2","setYtitle$2","addOpacity","notnull","setFormatOptions$1","chartType","formatOptions","stepSize","dataset","formattedValue","dataPoint","dataLabel","parsed","valueLabel","jsOptions$2","createDataTable","datasets","labels","week","hour","minute","i$1","s$1","j$1","backgroundColor","rows","rows2","xtype","sortedLabels","i$2","s$2","d$1","j$2","j$3","borderColor","borderWidth","pointChart","pointBackgroundColor","pointHoverBackgroundColor","pointHitRadius","pointHoverBorderWidth","tension","pointRadius","pointHoverRadius","xmin","xmax","minTime","maxTime","value$1","timeDiff","unit","displayFormats","unitStepSize","tooltipFormat","defaultExport$2","renderLineChart","allZeros","drawChart","renderPieChart","donut","cutout","renderColumnChart","barOptions","indexAxis","maxLabelSize","getLabelForValue","setLabelSize","renderAreaChart","renderBarChart","renderScatterChart","showLine","renderBubbleChart","destroyed","defaultOptions$1","xAxis","fontSize","yAxis","credits","plotOptions","areaspline","useUTC","hideLegend$1","verticalAlign","layout","align","setTitle$1","jsOptions$1","stackedValue","stacking","setFormatOptions","formatter","pointFormatter","pointFormat","defaultExport$1","curve","pie","innerSize","categories","newSeries","renderTo","Chart","chartArea","fontName","pointSize","textStyle","alignment","curveType","hAxis","titleTextStyle","gridlines","baselineColor","viewWindow","vAxis","_hideLegend","setBarMin","setBarMax","isStacked","italic","jsOptions","defaultExport","formatSeriesData","keyType","keyFunc","detectXTypeWithFunction","func","processSeries","noDatetime","rawData","copy","copySeries","discrete","dataEmpty","detectXType","processSimple","perfectData","addEvent","elem","fn2","removeEvent","childOf","this$1","waitForLoaded","pieHole","visualization","DataTable","addColumn","addRows","areaOpacity","renderGeoChart","colorAxis","row","renderTimeline","lineHeight","clearChart","draw","runCallbacks","loadOptions","packages","config","__config","language","mapsApiKey","charts","LineChart","Timeline","GeoChart","columnType","pendingRequests","runningRequests","runNext","Zepto","requestComplete","ajaxCall","jqXHR","textStatus","errorThrown","adapters","setText","innerText","chartError","noPrefix","errorCatcher","__render","fetchDataSource","dataSource","showLoading","addAdapter","product","getAdapterType","renderChart","fnName","adapterName","Highcharts","google","__adapterObject","callAdapter","download","__downloadAttached","border","__enterEvent","toImage","__leaveEvent","addDownloadButton","elementId","Chartkick","startRefresh","getDataSource","getOptions","getChartObject","getAdapter","updateData","__updateOptions","refreshData","sep","intervalId","stopRefresh","background","tmpCanvas","tmpCtx","fillRect","drawImage","toDataURL","toBase64Image","updateRefresh","__processData","__chartName","PieChart","ColumnChart","BarChart","AreaChart","ScatterChart","BubbleChart","configure","setDefaultOptions","eachChart","chartId","destroyAll","use","nativeObjectCreate","getOwnPropertyNamesExternal","defineWellKnownSymbol","HIDDEN","TO_PRIMITIVE","$stringify","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","description","isSymbol","$defineProperty","$defineProperties","$getOwnPropertySymbols","$propertyIsEnumerable","$getOwnPropertyDescriptor","$getOwnPropertyNames","IS_OBJECT_PROTOTYPE","keyFor","sym","useSetter","useSimple","space","$replacer","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","desc","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","E","$every","$filter","HAS_SPECIES_SUPPORT","$find","FIND","SKIPS_HOLES","$findIndex","FIND_INDEX","depthArg","flatMap","$includes","$indexOf","nativeIndexOf","nativeJoin","ES3_STRINGS","separator","$map","of","$reduce","CHROME_VERSION","$reduceRight","reduceRight","nativeReverse","0","nativeSlice","fin","$some","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","comparefn","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","deleteCount","insertCount","actualDeleteCount","actualStart","arrayBufferModule","mantissaLength","exponent","mantissa","exponentLength","eMax","eBias","rt","nBits","speciesConstructor","nativeArrayBufferSlice","viewSource","viewTarget","toISOString","padStart","DatePrototype","nativeDateToISOString","date","getUTCFullYear","milliseconds","getUTCMilliseconds","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","pv","dateToPrimitive","hint","INVALID_DATE","TO_STRING","nativeDateToString","HAS_INSTANCE","FunctionPrototype","FunctionPrototypeToString","nameRE","collection","collectionStrong","nativeAcosh","acosh","MAX_VALUE","nativeAsinh","asinh","nativeAtanh","atanh","cbrt","LOG2E","clz32","nativeCosh","fround","EPSILON","EPSILON32","MAX32","MIN32","$abs","$sign","$hypot","hypot","value1","value2","sum","aLen","larg","nativeImul","imul","UINT16","xn","yn","xl","yl","LOG10E","log10","log2","tanh","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","toNumber","third","maxCode","NumberWrapper","globalIsFinite","isInteger","isSafeInteger","MIN_SAFE_INTEGER","thisNumberValue","nativeToFixed","acc","fractionDigits","fractDigits","multiply","c2","divide","dataToString","nativeToPrecision","__defineGetter__","$entries","nativeFreeze","freeze","fromEntries","FAILS_ON_PRIMITIVES","getOwnPropertyDescriptors","nativeGetPrototypeOf","nativeIsExtensible","nativeIsFrozen","isFrozen","nativeIsSealed","isSealed","nativeKeys","__lookupGetter__","__lookupSetter__","nativePreventExtensions","nativeSeal","seal","$values","parseFloatImplementation","parseIntImplementation","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","NativePromise","microtask","promiseResolve","hostReportErrors","newPromiseCapabilityModule","perform","PROMISE","getInternalPromiseState","PromiseConstructor","newGenericPromiseCapability","DISPATCH_EVENT","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","FakePromise","INCORRECT_ITERATION","isThenable","isReject","notified","reactions","exited","reaction","rejection","onHandleUnhandled","onUnhandled","isUnhandled","emit","unwrap","internalReject","internalResolve","executor","capability","$promiseResolve","alreadyCalled","real","onFinally","nativeApply","functionApply","thisArgument","argumentsList","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","deleteProperty","receiver","objectGetPrototypeOf","objectIsExtensible","objectPreventExtensions","existingDescriptor","ownDescriptor","objectSetPrototypeOf","getFlags","NativeRegExp","RegExpPrototype","CORRECT_NEW","RegExpWrapper","pattern","thisIsRegExp","patternIsRegExp","flagsAreUndefined","objectDefinePropertyModule","regExpFlags","nativeToString","NOT_GENERIC","INCORRECT_NAME","rf","codePointAt","notARegExp","correctIsRegExpLogic","nativeEndsWith","endsWith","CORRECT_IS_REGEXP_LOGIC","searchString","endPosition","search","nativeFromCodePoint","fixRegExpWellKnownSymbolLogic","advanceStringIndex","regExpExec","nativeMatch","maybeCallNative","matcher","rx","fullUnicode","matchStr","$padEnd","padEnd","$padStart","rawTemplate","literalSegments","getSubstitution","UNSAFE_SUBSTITUTE","searchValue","replaceValue","functionalReplace","results","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","replacerArgs","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","tailPos","symbols","capture","sameValue","SEARCH","nativeSearch","searcher","previousLastIndex","callRegExpExec","arrayPush","MAX_UINT32","SUPPORTS_Y","SPLIT","nativeSplit","internalSplit","lim","lastLength","output","lastLastIndex","separatorCopy","splitter","unicodeMatching","q","nativeStartsWith","startsWith","$trim","forcedStringTrimMethod","$trimEnd","trimEnd","trimRight","$trimStart","trimStart","trimLeft","createHTML","forcedStringHTMLMethod","big","blink","bold","fixed","fontcolor","fontsize","italics","small","strike","sub","sup","createTypedArrayConstructor","$copyWithin","$fill","predicate","ArrayIterators","arrayValues","arrayKeys","arrayEntries","nativeTypedArrayIterator","CORRECT_ITER_NAME","typedArrayValues","$join","$lastIndexOf","middle","$slice","$sort","beginIndex","$toLocaleString","toLocaleString","TO_LOCALE_STRING_BUG","Uint8ArrayPrototype","arrayToString","arrayJoin","IS_NOT_ARRAY_METHOD","InternalWeakMap","collectionWeak","enforceIternalState","IS_IE11","$WeakMap","WeakMapPrototype","nativeDelete","nativeHas","nativeGet","nativeSet","DOMIterables","COLLECTION_NAME","Collection","CollectionPrototype","ArrayIteratorMethods","ArrayValues","scheduler","boundArgs","EOF","arrayFrom","toASCII","URLSearchParamsModule","NativeURL","getInternalSearchParamsState","getInternalURLState","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseHost","codePoints","parseIPv6","isSpecial","parseIPv4","percentEncode","C0ControlPercentEncodeSet","partsLength","numbers","ipv4","numbersSeen","ipv4Piece","swaps","swap","address","pieceIndex","compress","char","serializeHost","ignore0","ipv6","maxIndex","currStart","currLength","findLongestZeroSequence","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","specialSchemes","ftp","http","https","ws","wss","scheme","includesCredentials","password","cannotHaveUsernamePasswordPort","cannotBeABaseURL","isWindowsDriveLetter","normalized","startsWithWindowsDriveLetter","shortenURLsPath","pathSize","isSingleDot","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","parseURL","stateOverride","base","bufferCodePoints","failure","seenAt","seenBracket","seenPasswordToken","codePoint","encodedCodePoints","URLConstructor","baseState","urlString","searchParamsState","serializeURL","getProtocol","getUsername","getPassword","getHost","hostname","getHostname","getPort","getPathname","getSearch","getSearchParams","getHash","URLPrototype","accessorDescriptor","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","stringFromCharCode","digitToBasic","digit","adapt","numPoints","firstTime","baseMinusTMin","currentValue","inputLength","extra","ucs2decode","bias","basicLength","handledCPCount","handledCPCountPlusOne","qMinusT","baseMinusT","encoded","Timeout","clearFn","_id","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","registerImmediate","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","runIfPresent","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","browser","env","argv","removeAllListeners","prependListener","prependOnceListener","cwd","chdir","dir","umask","_isNumber","_capitalize","_getter","booleanProps","numericProps","stringProps","arrayProps","objectProps","getArgs","setArgs","getEvalOrigin","evalOrigin","setEvalOrigin","getFileName","getLineNumber","getColumnNumber","getFunctionName","getIsEval","fromString","argsStartIndex","argsEndIndex","locationString","RBTree","TDigest","K","CX","centroids","compare_centroid_means","nreset","mean","compare_centroid_mean_cumns","mean_cumn","Digest","digest_ratio","digest_thresh","thresh","n_unique","last_cumulate","everything","_cumulate","summary","percentile","_digest","push_centroid","exact","cumn","find_nearest","_new_centroid","insert","_addweight","nearest","bound_mean","lower","p_rank","x_or_xlist","ps","_p_rank","bound","upper","bound_mean_cumn","p_or_plist","qs","_percentile","h","compressing","choices","check_continuous","BinTree","red","comparator","is_red","single_rotate","set_child","double_rotate","gp","ggp","dir2","sr","sibling","gpc","webpackContext","req","webpackContextResolve","require","latTarget","lngTarget","mapTarget","viewBox","_layer","site","_selected_rows","_codes","selected_rows","rowTargets","direction_sibling","sorted_rows","reorder","counterTarget","firstElementChild","rel","preview","setCustomValidity","validity","patternMismatch","utils","helpers","ParserCore","ParserBlock","ParserInline","LinkifyIt","punycode","zero","commonmark","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","RECODE_HOSTNAME_FOR","normalizeLink","er","normalizeLinkText","toUnicode","MarkdownIt","presetName","inline","core","linkify","presets","components","rules","ruler","rules2","ruler2","missed","plugin","State","parseInline","inlineMode","renderInline","encodeCache","keepEscaped","nextCode","defaultChars","getEncodeCache","componentChars","decodeCache","getDecodeCache","seq","b1","b2","b3","b4","slashes","auth","Url","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","slashesDenoteHost","lowerProto","hec","simplePath","atSign","hostEnd","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","qm","Any","Cc","Cf","Z","parseLinkLabel","parseLinkDestination","parseLinkTitle","disableNested","prevPos","labelEnd","posMax","oldPos","md","skipToken","default_rules","code_inline","slf","renderAttrs","code_block","fence","highlighted","tmpAttrs","tmpToken","langName","highlight","langPrefix","renderInlineAsText","renderToken","hardbreak","xhtmlOut","softbreak","breaks","html_block","html_inline","nextToken","needLf","_rules","Core","NEWLINES_RE","NULL_RE","tok","isLinkClose","currentToken","ln","lastPos","htmlLinkLevel","fullUrl","urlText","links","blockTokens","pretest","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","tm","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","blkIdx","typographer","QUOTE_TEST_RE","QUOTE_RE","replaceAt","process_inlines","thisLevel","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","canOpen","canClose","isSingle","openQuote","closeQuote","OUTER","single","quotes","StateCore","startLine","endLine","hasEmptyLines","maxNesting","skipEmptyLines","sCount","blkIndent","tight","outTokens","lineMax","getLine","bMarks","eMarks","escapedSplit","escapes","backTicked","lastBackTick","lineText","nextLine","columns","columnCount","aligns","tableLines","tbodyLines","tShift","getLines","mem","haveEndMarker","skipChars","skipSpaces","adjustTab","initial","lastLineEmpty","oldBMarks","oldBSCount","oldIndent","oldParentType","oldSCount","oldTShift","spaceAfterMarker","terminate","terminatorRules","wasOutdented","oldLineMax","bsCount","parentType","cnt","skipBulletListMarker","skipOrderedListMarker","contentStart","indent","indentAfterMarker","isOrdered","itemLines","listLines","listTokIdx","markerCharCode","markerValue","oldListIndent","oldTight","posAfterMarker","prevEmptyEnd","isTerminatingParagraph","listIndent","markTightParagraphs","_endLine","destEndPos","destEndLineNo","references","skipSpacesBack","skipCharsBack","block_names","HTML_SEQUENCES","StateBlock","indent_found","ddIndent","keepLastLF","lineIndent","lineStart","_rules2","pending","pushPending","isTerminatorChar","pmax","ESCAPED","matchStart","matchEnd","labelStart","parseReference","EMAIL_RE","AUTOLINK_RE","linkMatch","emailMatch","lc","isLetter","DIGITAL_RE","NAMED_RE","processDelimiters","closerIdx","openerIdx","closer","opener","minOpenerIdx","newMinOpenerIdx","isOddMatch","lastJump","openersBottom","StateInline","pendingLevel","_prev_delimiters","token_meta","canSplitWord","left_flanking","right_flanking","fuzzyLink","fuzzyEmail","fuzzyIP","defaultSchemas","validate","src_auth","src_host_port_strict","src_path","no_http","src_domain","src_domain_root","src_port","src_host_terminator","mailto","src_email_name","src_host_strict","tlds_default","compile","__opts__","tlds","__tlds__","untpl","tpl","src_tlds","onCompile","__tlds_replaced__","src_xn","email_fuzzy","tpl_email_fuzzy","link_fuzzy","tpl_link_fuzzy","link_no_ip_fuzzy","tpl_link_no_ip_fuzzy","host_fuzzy_test","tpl_host_fuzzy_test","aliases","schemaError","__compiled__","__schemas__","compiled","createValidator","alias","slist","schema_test","src_ZPCc","schema_search","__index__","__text_cache__","resetScanCache","Match","__last_index__","__schema__","createMatch","schemas","ml","me","tld_pos","testSchemaAt","keepOld","src_Any","src_Cc","src_Z","src_P","src_ZCc","src_pseudo_letter","src_ip4","src_host","tpl_host_fuzzy","tpl_host_no_ip_fuzzy","tpl_host_fuzzy_strict","tpl_host_port_fuzzy_strict","tpl_host_port_no_ip_fuzzy_strict","freeExports","freeModule","freeGlobal","regexPunycode","errors","mapDomain","ucs2encode","flag","out","basic","oldi","timeZoneOffset","getTimezoneOffset","zone","invalid_help","sending_help","aria","checkValidity","invalid","Truncator","maxStringLength","maxObjectLength","maxArrayLength","maxDepth","keysBlocklist","seen","truncate","truncateString","objectType","truncateArray","truncateObject","saved","__type","getAttr","dst","isBlocklisted","attr","keysBlocklist_1","Span","startTime","_dur","_metric","endTime","_incGroup","_pause","_paused","_resume","BaseMetric","_spans","_groups","isRecording","startSpan","span","endSpan","ms","NoopMetric","_name","_ms","__assign","_noopMetric","_context","_historyMaxLen","_history","setContext","pushHistory","_isDupState","_lastRecord","routeMetric","_routeMetric","setRouteMetric","queueMetric","_queueMetric","setQueueMetric","hasConsole","parseErr","espProcessor","backtrace","noStack","column","frames_2","fakeErr","frames_1","angularMessageFilter","notice","IGNORED_MESSAGES","ignoreNoiseFilter","uncaughtMessageFilter","unauthorized","ipRateLimited","rateLimitReset","resp","makeRequester","api","statusCode","_extendStatics","tdigest","hasTdigest","TDigestStat","sumsq","_td","tdigestCentroids","TDigestStatGroups","addGroups","totalMs","name_1","addGroup","td","means","counts","QueryInfo","route","QueriesStats","_m","_opt","projectId","projectKey","_requester","keyStr","_flush","queries","outJSON","environment","_resp","QueueMetric","QueuesStats","queues","RouteMetric","contentType","RoutesStats","routes","RoutesBreakdowns","_responseType","BaseNotifier","lastNoticeJSON","_filters","_performanceFilters","_scope","_onClose","keysBlacklist","_processor","addFilter","notifier","setActiveScope","addPerformanceFilter","performanceFilter","severity","session","_sendNotice","keys_1","keys_2","jsonifyNotice","reporter","_airbrake","client","airbrakeWrapper","fnArgs","wrappedArgs","_wrapArguments","_ignoreNextWindowError","props_1","inner","_args","Routes","_notifier","_routes","_breakdowns","httpMethod","Queues","_queues","windowFilter","rootDirectory","CONSOLE_METHODS","elemAttrs","instrumentDOM","getProp","maxLen","elemName","elemPath","makeEventHandler","classNameString","elemAttrs_1","lastLocation","getCurrentLocation","recordLocation","Notifier","offline","todo","_ignoreWindowError","_ignoreNextXHR","onOnline","onOffline","onUnhandledrejection","ignoreWindowError","instrumentation","_instrument","oldFetch","self_1","oldHandler_1","oldFn","onpopstate","_event","oldPushState","_title","instrumentLocation","_loop_1","newFn","CONSOLE_METHODS_1","instrumentConsole","recordReq","__state","oldOpen","_async","_user","_password","oldSend","_data","_ev","instrumentXHR","this_1","msg","unhandledRejection","windowError","getStorageKey","editor","keyEl","editorEl","forgetContent","storedKey","localStorage","removeItem","logicalName","identifierForContextKey","definitionForModuleAndIdentifier","definitionForModuleWithContextAndKey","blockNames","markNames","moveChildren","toRef","safeGetSelection","sel","getSelection","contentEl","anchorNode","focusNode","safeGetRangeAt","selection","getRangeAt","setAuxiliaryToolbar","bar","toolbar","auxiliary","parentEl","editorAuxiliaryActive","clearSelected","selectedEl","editorSelected","allowedChildren","handleEmpty","onClick","HTMLAnchorElement","urlEl","select","rgbToHex","rgb","HTMLElement","colorEl","textColorEl","makeMark","marks","deleted","underline","super","recursiveFilterSelection","child","containsNode","setupButtons","buttonEl","toolbarEl","commonAncestorContainer","existingMarks","debug","tagEl","extractContents","insertNode","selectNode","makeBlock","li","paragraph","blocks","h1","h2","h3","h4","h5","h6","unordered_list","ordered_list","blockquote","makeParentBlock","parentBlocks","textAlign","setAlt","multimediaInnerEl","innerEl","multimedia","altEl","getAlt","figureEl","contentEditable","placeholderEl","multimediaInner","descriptionEl","setupAuxiliaryToolbar","uploadEl","fileEl","editorLoading","uploadFile","controls","createElementWithFile","editorError","removeEl","br","getType","typeName","getValidParentInSelection","getValidChildren","TEXT_NODE","fixContent","HTMLImageElement","_type","intersectsNode","cleanContent","childType","validChildrenLength","routine","setItem","storeContent","htmlEl","getSel","setupEditor","execCommand","wordAlertEl","getItem","restoreContent","setupMarksButtons","replacementType","setupBlocksButtons","replacementEl","setupParentBlocksButtons","nextElementSibling","setupMultimediaButtons","setupLinkAuxiliaryToolbar","setupMultimediaAuxiliaryToolbar","setupMarkAuxiliaryToolbar","flash","_setPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","Proxy","_isNativeReflectConstruct","Super","_getPrototypeOf","_possibleConstructorReturn","_assertThisInitialized","ReferenceError","_classCallCheck","_defineProperties","minLen","arr2","_p","$$","_n","dirty","before_update","after_update","not_equal","on_mount","on_destroy","hydrate","intro","_e$$$","described","removeValue","group","input0_input_handler","addValue","added_value","_r","_n2","_t$values","_t$button","_t$legend","_t$described","_t$remove","$set","_default","_N","subClass","superClass","_inherits","N","$destroy","_arr","_s","_e2","J","_m2","_e3","_e4","_e5","_ref","_n3","_t$defaultValues","defaultValues","_ref3","OrderedMap","InputTag","InputMap","newKey","addToStart","addToEnd","addBefore","place","without","prepend","findDiffStart","childCount","childA","childB","sameMarkup","isText","nodeSize","findDiffEnd","posA","posB","iA","iB","same","minSize","Fragment","nodesBetween","nodeStart","descendants","textBetween","blockSeparator","leafText","separated","isLeaf","isBlock","withText","cut","cutByIndex","eq","maybeChild","otherPos","retIndex","curPos","toStringInner","fromJSON","nodeFromJSON","fromArray","joined","compareDeep","p$1","Mark","ReplaceError","addToSet","placed","excludes","rank","removeFromSet","isInSet","sameSet","setFrom","none","Slice","openStart","openEnd","removeRange","ref$1","indexTo","offsetTo","insertInto","canReplace","$from","$to","replaceOuter","$along","resolveNoCache","prepareSliceForReplace","replaceThreeWay","parentOffset","replaceTwoWay","checkJoin","main","compatibleContent","$before","$after","addNode","addRange","$start","$end","startIndex","endIndex","textOffset","nodeAfter","nodeBefore","validContent","insertAt","removeBetween","maxOpen","openIsolating","spec","isolating","n$1","ResolvedPos","prototypeAccessors$2","resolveDepth","indexAfter","dOff","posAtIndex","inclusive","marksAcross","isInline","sharedDepth","blockRange","pred","inlineContent","NodeRange","sameParent","rem","resolveCached","resolveCache","cached","resolveCachePos","resolveCacheSize","prototypeAccessors$1$1","emptyAttrs","isTextblock","isAtom","startPos","hasMarkup","defaultAttrs","includeParents","nodeAt","childAfter","childBefore","rangeHasMark","toDebugString","wrapMarks","contentMatchAt","contentMatch","matchFragment","one","two","validEnd","allowsMarks","canReplaceWith","matchType","canAppend","markFromJSON","TextNode","prototypeAccessors$1","ContentMatch","wrapCache","prototypeAccessors$4","defaultType","edgeCount","nodeTypes","stream","TokenStream","expr","parseExpr","nfa","labeled","explore","nullFrom","states","term","known","states$1","dfa","exprs","loop$1","next$1","next$2","work","dead","hasRequiredAttrs","checkForDeadEnds","frag","compatible","fillBefore","toEnd","finished","tp","createAndFill","findWrapping","computed","computeWrapping","via","scan","prototypeAccessors$1$2","parseExprSeq","eat","parseExprSubscript","type$1","resolveName","parseExprAtom","parseExprRange","parseNum","defaults","attrName","hasDefault","computeAttrs","built","given","initAttrs","Attribute","SyntaxError","NodeType","markSet","prototypeAccessors$5","atom","isRequired","createChecked","allowsMarkType","markType","allowedMarks","topType","topNode","prototypeAccessors$1$3","MarkType","excluded","contentExprCache","prop$1","contentExpr","markExpr","gatherMarks","prop$2","excl","topNodeType","wrappings","mark$1","text$1","tags","normalizeLists","dom","ParseContext","addAll","parseSlice","matchTag","namespaceURI","matchesContext","getAttrs","matchStyle","schemaRules","priority","parseDOM","rules$1","name$1","fromSchema","domParser","blockTags","article","aside","dd","dl","fieldset","figcaption","figure","footer","hgroup","hr","noscript","ol","table","tfoot","ul","ignoreTags","listTags","wsOptionsFor","preserveWhitespace","NodeContext","pendingMarks","solid","activeMarks","stashMarks","popFromStashMark","applyPending","nextType","markMayApply","topContext","topOptions","topMatch","findPositions","needsBlock","prototypeAccessors$6","currentPos","returned","addDOM","addTextNode","readStyles","parseStyles","addPendingMark","removePendingMark","nodeValue","domNodeBefore","previousSibling","nodeName","findInText","findInside","matchAfter","ruleID","prevItem","nextSibling","normalizeList","ruleFromNode","ignore","skip","closeParent","sync","oldNeedsBlock","leafFallback","addElementByRule","consuming","ownerDocument","continueAfter","startIn","contentDOM","contentElement","findAround","findAtPoint","findPlace","cx","enterInner","textblockFromContext","closeExtra","preserveWS","topOpen","compareDocumentPosition","textNode","useRoot","minDepth","$context","deflt","findSameMarkInSet","upto","stashMark","DOMSerializer","gatherToDOM","toDOM","serializeFragment","keep","rendered","spanning","markDOM","serializeMark","serializeNode","renderSpec","onContent","serializeNodeAndMarks","structure","xmlNS","space$1","setAttributeNS","innerContent","domSerializer","nodesFromSchema","marksFromSchema","factor16","recoverIndex","MapResult","recover","StepMap","ranges","inverted","recoverOffset","mapResult","assoc","oldIndex","newIndex","oldStart","newStart","invert","Mapping","maps","mirror","TransformError","appendMap","mirrors","setMirror","appendMapping","startSize","mirr","getMirror","appendMappingInverted","totalSize","inverse","corr","steps","docs","docChanged","mustOverride","maybeStep","addStep","getMap","stepsByID","_doc","_mapping","_other","stepType","jsonID","stepClass","StepResult","fromReplace","Step","ReplaceStep","contentBetween","slice$1","ReplaceAroundStep","gapFrom","gapTo","gap","inserted","canCut","liftTarget","innerRange","around","outer","findWrappingOutside","innerMatch","findWrappingInside","withAttrs","canSplit","typesAfter","$pos","innerType","index$1","baseType","canJoin","joinPoint","dropPoint","pass","insertPos","mapFragment","mapped","lift","gapStart","gapEnd","splitting","splitting$1","wrappers","setBlockType","mapFrom","canChangeType","clearIncompatible","startM","endM","setNodeMarkup","newNode","replaceWith","typeAfter","AddMarkStep","oldSlice","RemoveMarkStep","fitsTrivially","addMark","added","removing","adding","newSet","removeMark","toRemove","found$1","delSteps","allowed","fit","replaceStep","unplaced","frontier","dropFromFragment","addToFragment","contentAt","closeNodeStart","contentAfterFits","invalidMarks","closeFragment","newOpen","coveredDepths","findFittable","placeNodes","openMore","dropNode","moveInline","mustMoveInline","placedSize","sliceDepth","frontierDepth","inject","openAtEnd","closeFrontierNode","openFrontierNode","taken","openEndCount","findCloseLevel","dropInner","match$1","replaceRange","deleteRange","targetDepths","preferredTarget","defining","preferredTargetIndex","leftNodes","preferredDepth","openDepth","targetDepth","startSteps","replaceRangeWith","insertPoint","covered","classesById","$anchor","$head","SelectionRange","tr","lastNode","lastParent","selectionToInsertionEnd","findFrom","textOnly","findSelectionIn","near","atStart","atEnd","cls","selectionClass","getBookmark","between","Selection","TextSelection","$cursor","ensureMarks","TextBookmark","dPos","NodeSelection","NodeBookmark","isSelectable","selectable","AllSelection","setSelection","AllBookmark","startLen","_from","_to","_newFrom","newTo","Transform","Transaction","curSelection","curSelectionFor","storedMarks","updated","prototypeAccessors","selectionSet","storedMarksSet","isGeneric","scrolledIntoView","setStoredMarks","addStoredMark","removeStoredMark","setTime","replaceSelection","replaceSelectionWith","inheritMarks","deleteSelection","insertText","setMeta","getMeta","FieldDesc","baseFields","_marks","_old","Configuration","fields","pluginsByKey","EditorState","applyTransaction","filterTransaction","rootTr","transactions","trs","newState","applyInner","haveNew","appendTransaction","oldState","newInstance","field","applyListeners","$config","reconfigure","pluginFields","addApplyListener","removeApplyListener","bindProps","createKey","PluginKey","ie_edge","ie_upto10","ie_11up","mac","ie_version","documentMode","gecko_version","chrome_version","vendor","ios","maxTouchPoints","webkit_version","domIndex","reusedRange","textRange","createRange","setEnd","setStart","isEquivalentPosition","targetNode","targetOff","scanFor","atomElements","hasBlockDesc","pmViewDesc","selectionCollapsed","domSel","isCollapsed","rangeCount","keyEvent","windowRect","getSide","side","clientRect","scrollRectIntoView","startDOM","scrollThreshold","someProp","scrollMargin","atTop","bounding","moveX","moveY","scrollBy","startX","startY","dX","dY","scrollStack","restoreScrollStack","dTop","preventScrollSupported","findOffsetInNode","coordsClosest","dxClosest","rowBot","rowTop","childIndex","rects","getClientRects","singleRect","inRect","findOffsetInText","elementFromPoint","box","startI","posAtCoords","assign$1","caretPositionFromPoint","pos$1","offsetNode","caretRangeFromPoint","startContainer","startOffset","elt","targetKludge","box$1","outside","docView","nearestDesc","posBefore","posAfter","posFromDOM","posFromCaret","posFromElement","posAtStart","BIDI","coordsAtPos","domFromPos","supportEmptyRange","takeSide","flattenV","rectBefore","rectAfter","flattenH","before$1","after$1","target$1","withFlushedState","viewState","activeElement","updateState","maybeRTL","cachedState","cachedDir","cachedResult","endOfTextblock","boxes","endOfTextblockVertical","modify","oldRange","oldNode","oldOff","focusOffset","oldBidiLevel","caretBidiLevel","domAfterPos","removeAllRanges","endOfTextblockHorizontal","beforePosition","posAtEnd","contentLost","domAtom","matchesWidget","matchesMark","matchesNode","matchesHack","parseRule","stopEvent","posBeforeChild","localPosFromDOM","domBefore","domAfter","desc$1","search$1","onlyNodes","getDesc","nodeDOM","descAt","parseRange","fromOffset","childBase","emptyChildAt","force","anchorDOM","headDOM","brKludge","offset$1","anchorOffset","domSelExtended","ignoreMutation","markDirty","startInside","endInside","markParentsDirty","nothing","WidgetViewDesc","ViewDesc","widget","ignoreSelection","CompositionViewDesc","textDOM","mut","MarkViewDesc","custom","nodeViews","replaceNodes","NodeViewDesc","outerDeco","innerDeco","updateChildren","prototypeAccessors$3","descObj","applyOuterDeco","CustomNodeViewDesc","TextViewDesc","reparseInView","sameOuterDeco","composition","composing","localCompositionNode","updater","ViewTreeUpdater","deco","onWidget","onNode","locals","forChild","decoIndex","restNode","parentIndex","widgets","compareSide","child$1","cutAt","i$3","iterDeco","insideNode","syncToMarks","placeWidget","findNodeMatch","updateNextNode","addTextblockHacks","destroyRest","changed","protectLocalComposition","renderDescs","oldCSS","cssText","listStyle","iosHacks","nearbyTextNode","textPos","childStart","findTextInFragment","compositionNodes","updateInner","updateOuterDeco","needsWrap","oldDOM","patchOuterDeco","computeOuterDeco","deselectNode","docViewDesc","pmIsDeco","inParent","trackWrites","parentDOM","BRHackViewDesc","descs","written","childDOM","rm","OuterDecoLevel","noDeco","outerDOM","prevComputed","curComputed","curDOM","patchAttributes","prevList","curList","removeProperty","lockedNode","preMatch","preMatched","preMatchOffset","selectionFromDOM","inWidget","isOnEdge","selectionBetween","selectionToDOM","syncNodeSelection","editable","hasFocus","hasSelection","domObserver","disconnectSelection","cursorWrapper","selectCursorWrapper","resetEditableFrom","resetEditableTo","brokenSelectBetweenUneditable","temporarilyEditableNear","resetEditable","hideSelectionGuard","removeClassOnSelectionChange","setCurSelection","connectSelection","getPreMatch","destroyBetween","maxKeep","markDesc","nextDOM","setEditable","wasDraggable","lastSelectedViewDesc","clearNodeSelection","moveSelectionBlock","$side","selectHorizontally","mods","nodePos","nodeLen","isIgnorable","skipIgnoredNodesLeft","moveNode","moveOffset","isBlockNode","setSelFocus","skipIgnoredNodesRight","selectVertically","beyond","stopNativeHorizontalDelete","nextNode","switchEditable","captureKeyDown","getMods","safariDownArrowBug","readDOMChange","typeOver","lastSelectionTime","lastSelectionOrigin","newSel","tr$1","from_","to_","lastKeyCode","startDoc","editableContent","anchor$1","parseBetween","preferredPos","preferredSide","lastKeyCodeTime","change","endA","endB","findDiff","lastIOSEnter","sel$1","resolveSelection","domChangeCount","nextSel","inlineChange","old","$newStart","$newEnd","skipClosingAndOpening","$next","looksLikeJoin","suppressSelectionUpdates","markChange","$from1","chFrom","chTo","curMarks","prevMarks","isMarkChange","sel$2","parsedSel","fromEnd","mayOpen","serializeForClipboard","serializer","detachedDoc","wrapMap","parseFromClipboard","plainText","inCode","asText","metas","firstTag","readHTML","contextNode","sliceData","addContext","closeRange","closeSlice","lastWrap","inLast","addToSibling","closeRight","wrapped","withWrappers","normalizeSiblings","thead","tbody","caption","colgroup","col","th","_detachedDoc","implementation","createHTMLDocument","observeOptions","characterDataOldValue","attributeOldValue","useCharData","SelectionState","DOMObserver","handleDOMChange","flushingSoon","observer","flushSoon","currentSelection","onCharData","prevValue","onSelectionChange","suppressingSelectionUpdates","forceFlush","take","ignoreSelectionChange","result$1","registerMutation","brs","cssChecked","checkCSS","handlers","editHandlers","setSelectionOrigin","ensureListeners","currentHandlers","eventHandlers","runCustomHandler","eventCoords","runHandlerOnContext","propName","updateSelection","focused","handleSingleClick","selectedNode","selectAt","selectClickedNode","selectClickedLeaf","handleDoubleClick","handleTripleClick","defaultTripleClick","forceDOMFlush","endComposition","inOrNearComposition","lastIOSEnterFallbackTimeout","keyup","charCode","selectNodeModifier","flushed","lastClick","isNear","mouseDown","targetPos","allowDefault","mightDrag","targetDesc","addAttr","setUneditable","timeStamp","compositionEndedAt","touchdown","timeoutComposition","scheduleComposeEnd","delay","composingTimeout","clearComposition","forceUpdate","compositionstart","compositionupdate","markCursor","compositionend","brokenClipboardAPI","doPaste","singleNode","sliceSingleNode","clipboardData","clearData","selectNodeContents","captureCopy","paste","capturePaste","Dragging","dragCopyModifier","dataTransfer","dragover","dragenter","drop","eventPos","$mouse","isNode","beforeInsert","beforeinput","inputType","compareObjs","WidgetType","noSpec","oldOffset","Decoration","valid","InlineType","inclusiveStart","inclusiveEnd","DecorationSet","local","decorations","buildTree","findInner","childOff","mapInner","newLocal","oldChildren","oldEnd","newEnd","dSize","mustRebuild","fromLocal","toLocal","childOffset","childNode","gather","mapAndGatherRemainingDecorations","from$1","byPos","mapChildren","addInner","baseOffset","takeSpansForNode","moveSpans","withoutNulls","removeInner","span$1","dec","localSet","DecorationGroup","removeOverlap","localsInner","members","spans","hasNulls","localStart","working","insertAhead","viewDecorations","sorted","EditorView","_props","mount","mounted","getEditable","updateCursorWrapper","buildNodeViews","computeDocDeco","eventBelongsToView","initInput","pluginViews","updatePluginViews","contenteditable","handleDOMEvents","updateStateInner","setProps","reconfigured","updateSel","nA","nB","changedNodeViews","scroll","scrollToSelection","updateDoc","sel1","sel2","refDOM","refTop","newRefTop","oldScrollPos","overflowAnchor","innerHeight","localRect","storeScrollPos","forceSelUpdate","chromeKludge","destroyPluginViews","prevState","pluginView","setActive","stored","preventScroll","focusPreventScroll","domAtPos","posAtDOM","destroyInput","dispatchTransaction","horizontal_rule","heading","bullet_list","list_item","hard_break","em","strong","tokenHandlers","noCloseToken","withoutTrailingNewline","noOp","addText","merged","maybeMerge","openMark","closeMark","parseTokens","toks","openNode","closeNode","MarkdownParser","tokenizer","nodeType$1","listIsTight","defaultMarkdownParser","MarkdownSerializer","MarkdownSerializerState","renderContent","defaultMarkdownSerializer","wrapBlock","ensureNewLine","closeBlock","renderList","bullet","maxW","nStr","esc","quote","mixable","expelEnclosingWhitespace","isPlainURL","_mark","backticksFor","escape","delim","inTightList","tightLists","flushClose","atBlank","delimMin","firstDelim","startOfLine","trailing","leading","lead","inner$1","trail","noEsc","markString","isTight","prevTight","getEnclosingWhitespace","8","9","10","12","13","16","17","18","20","27","32","33","34","35","36","37","38","39","40","44","45","46","59","61","91","92","106","107","108","109","110","111","144","145","160","161","162","163","164","165","173","186","187","188","189","190","191","192","219","220","221","222","229","48","49","50","51","52","53","54","55","56","57","brokenModifierNames","normalizeKeyName","ctrl","mod","modifiers","keymap","handleKeyDown","keydownHandler","baseName","keyName","isChar","direct","fromCode","withShift","GOOD_LEAF_SIZE","RopeSequence","leafAppend","leafPrepend","appendInner","Append","sliceInner","getInner","forEachInner","forEachInvertedInner","Leaf","flatten","leftLen","Branch","eventCount","popEvent","preserveItems","remap","remapping","addAfter","addTransform","histOptions","newItems","oldItems","lastItem","cutPoint","overflow","DEPTH_OVERFLOW","mirrorPos","mirrorOffset","addMaps","rebased","rebasedTransform","rebasedCount","rebasedItems","newUntil","iRebased","newMaps","branch","emptyItemCount","newItem","HistoryState","undone","prevRanges","prevTime","rangesFor","mapRanges","histTransaction","redo","mustPreserveItems","historyKey","newHist","historyState","cachedPreserveItems","cachedPreserveItemsPlugins","historyPreserveItems","closeHistoryKey","newGroupDelay","hist","historyTr","appended","newGroup","adjacent","isAdjacentTo","undo","textblockAt","findCutBefore","findCutAfter","joinUp","nodeSel","joinDown","defaultBlockAt","exitCode","above","splitBlock","can","selectParentNode","deleteBarrier","$cut","conn","joinMaybeClear","canDelAfter","joinAt","selAfter","wrap$1","end$1","wrapIn","wrapping","applicable","toggleMark","markApplies","ref$2","$from$1","$to$1","spaceStart","spaceEnd","chainCommands","commands","backspace","pcBaseKeymap","macBaseKeymap","baseKeymap","os","dropCursor","editorView","DropCursorView","cursorPos","updateOverlay","setCursor","nodeRect","parentLeft","parentTop","offsetParent","rect$1","scheduleRemoval","dragleave","GapCursor","GapBookmark","closedBefore","closedAfter","override","allowGapCursor","mustMove","$cur","$cur$1","arrow","dirStr","$found","handleClick","drawGapCursor","crelt","hashPath","buildSVG","prefix$1","MenuItem","lastMenuEvent","markMenuEvent","isMenuEvent","Dropdown","renderDropdownItems","updates","combineUpdates","something","listeningOnClose","menuDOM","DropdownSubmenu","_listeningOnClose","icons","bulletList","orderedList","joinUpItem","liftItem","selectParentNodeItem","undoItem","redoItem","blockTypeItem","command","passedOptions","prefix$2","menu","spacer","widthForMaxHeight","floating","separators","localUpdates","localNodes","update$1","needSep","hasContent","renderGrouped","contentUpdate","agent","isIOS","updateFloat","potentialScrollers","getAllWrapping","scrollFunc","updateScrollCursor","minHeight","selRect","DOCUMENT_POSITION_FOLLOWING","selectionIsInverted","menuRect","scrollable","scrollHeight","findWrappingScrollable","scrollAncestor","editorRect","wrapInList","listType","doJoin","outerRange","$insert","joinBefore","splitDepth","splitPos","doWrapInList","liftListItem","itemType","endOfList","liftToOuterList","indexBefore","liftOutOfList","InputRule","cutOff","textBefore","undoInputRule","undoable","isInputRules","toUndo","emDash","ellipsis","smartQuotes","wrappingInputRule","joinPredicate","textblockTypeInputRule","openPrompt","mouseOutside","domFields","submitButton","cancelButton","innerWidth","submit","bad","reportInvalid","clean","getValues","offsetLeft","Field","validateType","TextField","placeholder","autocomplete","canInsert","cmdItem","cmd","markActive","markItem","wrapListItem","buildMenuItems","toggleStrong","toggleEm","toggleCode","toggleLink","insertImage","wrapBulletList","wrapOrderedList","wrapBlockQuote","wrapItem","makeParagraph","makeCodeBlock","insertHorizontalRule","insertMenu","typeMenu","makeHead1","makeHead2","makeHead3","makeHead4","makeHead5","makeHead6","inlineMenu","blockMenu","fullMenu","buildKeymap","mapKeys","grandParent","keepItem","nestedBefore","sinkListItem","buildInputRules","orderedListRule","bulletListRule","codeBlockRule","maxLevel","headingRule","handleTextInput","inputRules","exampleSetup","createSelectionBetween","_view","menuBar","floatingMenu","menuContent","mdc","textArea","allowArrayLike","normalCompletion","didErr","throttled","updateFn","updateArgs","ticking","_toLeftRightCenter","_alignStartEnd","isNullOrUndef","isNumberFinite","finiteOrDefault","defaultValue","valueOrDefault","toDimension","dimension","loopable","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","clone$1","klen","isValidKey","_merger","tval","sval","merger","mergeIf","_mergerIf","indexOfDotOrLength","resolveObjectKey","defined","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","niceNum","roundedRange","almostEquals","niceRange","fraction","epsilon","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","angle","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","atEdge","elasticIn","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","2","3","4","5","6","7","D","_hexString","isShort","p2b","n2b","b2n","n2p","RGB_RE","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb2hsl","calln","hsl2rgb","hue","hueParse","hwb2rgb","hsv2rgb","names$1","map$1","Y","X","W","U","Q","M","G","H","I","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","nameParse","nk","unpacked","tkeys","modHSL","fromObject","functionParse","rgbParse","Color","hexParse","_rgb","_valid","_hslString","w2","c1","deg","_rotate","index_esm","isPatternOrGradient","CanvasGradient","CanvasPattern","getHoverColor","saturate","darken","hexString","overrides","getScope$1","_set","Defaults","_descriptors","getDevicePixelRatio","family","hover","hoverBackgroundColor","hoverBorderColor","hoverColor","intersect","onHover","parsing","responsive","describe","targetScope","_Object$definePropert","scopeObject","targetScopeObject","privateName","_scriptable","_indexable","_fallback","_measureText","gc","longest","textWidth","measureText","_longestText","arrayOfThings","garbageCollect","jlen","thing","nestedThing","gcLen","_alignPixel","pixel","currentDevicePixelRatio","clearCanvas","resetTransform","drawPoint","xOffset","yOffset","cornerRadius","pointStyle","rotation","rotate","moveTo","lineTo","SQRT1_2","_isPointInArea","clipArea","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","strokeWidth","strokeColor","setRenderOpts","strokeText","fillText","decorateText","translation","textBaseline","strikethrough","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","_readValueToProps","_step2","objProps","_iterator2","toTRBL","toTRBLCorners","toPadding","toFont","fallback","toFontString","cacheable","_lookup","mid","_lookupByKey","_rlookupByKey","arrayEvents","unlistenArrayEvents","stub","_chartjs","_arrayUnique","_createResolver","scopes","_cache","prefixes","rootScopes","getTarget","_resolve","_keys","_cached","_resolveWithPrefixes","_scopes","getKeysFromAllScopes","_storage","_attachContext","subProxy","descriptorDefaults","_cacheable","_subProxy","_stack","descriptors","isScriptable","createSubResolver","_resolveScriptable","isIndexable","_step3","_iterator3","resolver","_resolveArray","needsSubResolver","_resolveWithContext","allKeys","scriptable","indexable","_proxy$_scriptable","_proxy$_indexable","_proxy$_allKeys","_allKeys","readKey","resolveFallback","getScope","addScopes","parentScopes","parentFallback","_step4","_iterator4","_rootScopes","allScopes","addScopesFromKey","_getTarget","subGetTarget","_step5","_iterator5","_step6","_iterator6","_step7","_iterator7","_step8","_iterator8","resolveKeysFromAllScopes","getPoint","getValueAxis","monotoneAdjust","deltaK","mK","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointsLen","pointAfter","monotoneCompute","pointBefore","valueAxis","iPixel","vPixel","capControlPoint","pt","_updateBezierControlPoints","controlPoints","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","spanGaps","cubicInterpolationMode","slopeDelta","splineCurveMonotone","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","positions","getPositionedStyle","getRelativePosition","borderBox","boxSizing","paddings","borders","_getCanvasPosition","offsetX","offsetY","shadowRoot","useOffsetPos","getCanvasPosition","round1","bbWidth","bbHeight","aspectRatio","margins","containerSize","containerStyle","containerBorder","containerPadding","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","getPropertyValue","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","formatNumber","locale","cacheKey","Intl","NumberFormat","getNumberFormat","getRtlAdapter","rtl","rectX","_x","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_x2","_itemWidth","overrideTextDirection","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","normalizeSegment","_boundSegment","startBound","endBound","_propertyFn2","_getSegment","_propertyFn","getSegment","subStart","shouldStart","shouldStop","_boundSegments","segments","splitByStyles","segmentOptions","_step9","baseStyle","readStyle","_iterator9","prevStyle","styleChanged","p0","p0DataIndex","p1DataIndex","_datasetIndex","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","enumerableOnly","_get","_superPropBase","animator","Animator","_request","_charts","_running","_lastDate","anims","numSteps","currentStep","_refresh","running","_active","_total","tick","_notify","_getAnims","_this$_getAnims$items","interpolators","factor","c0","mix","Animation","cfg","_fn","_easing","easing","_start","_loop","_target","_prop","_promises","remain","promises","rej","resolved","resize","animations","Animations","_chart","_properties","animatedProps","_iterator","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","wait","awaitAll","_animateOptions","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","_applyStack","dsIndex","otherValue","singleMode","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","_cachedMeta","_stacks","iScale","iAxis","indexScale","valueScale","getStackKey","_top","_bottom","getFirstScaleId","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","DatasetController","_cachedDataOpts","_parsing","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","_syncList","linkScales","_stacked","addElements","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vAxisID","xScale","getScaleForId","yScale","rScale","getDatasetMeta","scaleID","adata","convertObjectDataToArray","_len2","_key2","_dataCheck","datasetElementType","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","getLabels","singleScale","_parsed$i","_this$_parsing","_this$_parsing$xAxisK","xAxisKey","_this$_parsing$yAxisK","yAxisKey","parsedValue","canStack","otherScale","_getOtherScale","NEGATIVE_INFINITY","_getUserBounds","_scale$getUserBounds","getUserBounds","minDefined","maxDefined","otherMin","otherMax","_skip","updateRangeFromParsed","getParsed","_clip","defaultClip","getMaxOverflow","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","transition","datasetAnimationScopeKeys","sharedOptions","_animationsDisabled","_resolveAnimations","getSharedOptions","_setStyle","_ref2","arg1","numMeta","numData","_insertElements","_removeElements","updateElements","_args2","_sync","computeMinSampleSize","$bar","getAllParsedValues","getAllScaleValues","updateMinAndPrev","getPixelForValue","getPixelForTick","parseValue","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","setBorderSkipped","borderSkipped","_borderProps","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","_DatasetController","BarController","_this$_parsing2","_this$_parsing2$xAxis","_this$_parsing2$yAxis","iAxisKey","vAxisKey","bars","getBasePixel","isHorizontal","_getRuler","firstOpts","includeOptions","updateSharedOptions","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","updateElement","grouped","_getStacks","pixels","barThickness","_startPixel","_endPixel","stackCount","_getStackCount","categoryPercentage","barPercentage","_me$_cachedMeta","_me$options","minBarLength","actualBase","applyStack","getDataVisibility","barSign","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","_getStackIndex","_index_","_value_","beginAtZero","_DatasetController2","BubbleController","_super2","_this$_parsing3","_this$_parsing3$xAxis","_this$_parsing3$yAxis","_this$_cachedMeta","_me$_cachedMeta2","getPixelForDecimal","_DatasetController3","DoughnutController","_super3","innerRadius","outerRadius","circumference","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","_me$_getRotationExten","_getRotationExtents","_getRatioAndOffset","ratioX","ratioY","startAngle","endAngle","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_circumference","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","generateLabels","legendItem","toggleDataVisibility","tooltipItem","_DatasetController4","LineController","_super4","_meta$data","_dataset","animationsDisabled","_getStartAndCountOfVi","pointCount","_iScale$getUserBounds","getStartAndCountOfVisiblePoints","_scaleRanges","newRanges","ymin","ymax","scaleRangesChanged","_decimated","animated","_me$_cachedMeta3","maxGapLength","directUpdate","prevParsed","nullData","lastPoint","updateControlPoints","_DatasetController5","PolarAreaController","_super5","_updateRadius","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","_this3","angleLines","circular","pointLabels","PieController","_DoughnutController","_super6","RadarController","_DatasetController6","_super7","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","_LineController","_super8","_abstract","DateAdapter","_format","amount","weekday","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","optimizedEvaluateItems","getSortedVisibleDatasetMetas","_metasets$i2","_binarySearch","getIntersectItems","useFinalPosition","_minPadding","inRange","getNearestItems","distanceMetric","useX","useY","getDistanceMetricForAxis","getCenterPoint","getAxisItems","rangeMethod","intersectsItem","_metasets$i","evaluateAllVisibleItems","Interaction","modes","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","stackWeight","buildStacks","vBoxMaxWidth","hBoxMaxHeight","fullSize","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","getMargins","marginForPositions","fitBoxes","refit","refitBoxes","_updateDims","setBoxDims","placeBoxes","userPadding","_height","_width","layoutItem","minPadding","layoutBoxes","_box$options","_box$options$stackWei","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","handleMaxPadding","BasePlatform","BasicPlatform","_BasePlatform","_super9","EVENT_TYPES","pointerenter","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","createAttachObserver","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","unlistenDevicePixelRatioChanges","createProxyAndListen","_getRelativePosition$","fromNativeEvent","_BasePlatform2","DomPlatform","_super10","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","_this$getProps","getProps","_final","defaultRoutes","formatters","numeric","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","autoSkip","tickOpts","ticksLimit","tickLength","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","majorIndices","major","getMajorIndices","numMajorIndices","newTicks","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","grace","drawBorder","drawTicks","tickWidth","tickColor","minRotation","maxRotation","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","minor","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","_Element","_super11","_this4","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","_me$getUserBounds","getMinMax","xLabels","yLabels","beforeUpdate","minmax","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","beforeFit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","maxLabelDiagonal","numTicks","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","_me$options2","titleOpts","gridOpts","titleHeight","_me$_getLabelSizes","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","_me$options3","_me$options3$ticks","isRotated","labelsBelowTicks","offsetRight","_this$options","generateTickLabels","_computeLabelSizes","tickFont","fontString","nestedLabel","caches","widths","heights","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","getBaseValue","createTickContext","optionTicks","rot","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","positionAxisID","_positionAxisID2","_value2","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","lineCount","tickAndPadding","hTickAndPadding","_getXAxisLabelAlignment","_getYAxisLabelAlignment","_ret","_positionAxisID3","_value3","halfCount","backdrop","labelPadding","_me$options4","_me$options5","_me$options5$ticks","_computeGridLineItems","drawLine","lineDashOffset","lastLineWidth","_computeLabelArea","_computeLabelItems","_this$options2","_titleArgs","titleX","titleY","_positionAxisID","titleArgs","drawBackground","drawGrid","drawTitle","drawLabels","tz","gz","axisID","TypedRegistry","parentScope","isIChartComponent","itemDefaults","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","Registry","_typedRegistries","_each","_len3","_key3","_len4","_key4","_len5","_key5","_len6","_key6","_len7","_key7","_len8","_key8","_len9","_key9","_len10","_key10","typedRegistry","reg","_getRegistryForType","isForType","_exec","itemReg","registry","component","camelMethod","PluginService","_init","hook","_createDescriptors","_oldCache","_notifyStateChanges","getPlugin","_i2","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","Config","_config","initConfig","_scopeCache","_resolverCache","datasetType","additionalOptionScopes","mainScope","resetCache","keyLists","_cachedScopes","_getResolver","getResolver","subPrefixes","needContext","subResolver","_getResolver2","resolverCache","_descriptors2","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","animationOptions","onComplete","onAnimationProgress","onProgress","getCanvas","instances","getChart","userConfig","_this5","initialCanvas","existingChart","chartOptionScopes","OffscreenCanvas","_detectPlatform","acquireContext","_options","_aspectRatio","_metasets","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","listen","_initialize","_this$options3","bindEvents","_resizeBeforeDraw","_resize","getMaximumSize","newRatio","onResize","axisOptions","scaleOpts","isRadial","dposition","dtype","scaleType","hasUpdated","_destroyDatasetMeta","newControllers","_removeUnreferencedMetasets","updateIndex","ControllerClass","getController","_defaults$datasets$ty","_updateMetasets","_resetElements","animsDisabled","ensureScalesHaveIDs","buildOrUpdateScales","setsEqual","unbindEvents","invalidate","buildOrUpdateControllers","buildOrUpdateElements","_updateDatasets","_eventHandler","noArea","_me$_layers","_idx","_updateDataset","_me$_resizeBeforeDraw","_drawDatasets","_drawDataset","useClip","setDatasetVisibility","_updateVisibility","releaseContext","_this$canvas","bindUserEvents","bindResponsiveEvents","detached","isAttached","activeElements","lastActive","_ref4","_updateHoverStyles","replay","hoverOptions","deactivated","activated","updateHoverStyle","_this6","eventFilter","_handleEvent","_me$_active","lastEvent","getElementsAtEventForMode","clipArc","pixelMargin","angleMargin","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","alpha","avNogSpacingRadius","angleOffset","_parseBorderRadius$","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","_pCenter","_pCenter2","p8","_pCenter3","fullCircles","drawFullCircleBorders","unregister","_Element2","ArcElement","_super12","_this7","chartX","chartY","_getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","getAngleFromPoint","_this$getProps2","rAdjust","_this$getProps3","_this$options4","halfAngle","halfRadius","radiusOffset","drawArc","pathVars","_params$start","paramsStart","_params$end","paramsEnd","segmentStart","segmentEnd","_pathVars","lineMethod","stepped","getLineMethod","_ref5","_ref5$move","fastPathSegment","prevX","lastY","_pathVars2","_ref6","_ref6$move","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","strokePathWithCache","_step10","segmentMethod","_iterator10","strokePathDirect","_Element3","LineElement","_super13","_this8","_points","_segments","_pointsUpdated","_findStartAndEnd","findStartAndEnd","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","_segments$i","interpolated","_step11","_iterator11","inRange$1","hitRadius","_Element4","PointElement","_super14","_this9","mouseX","mouseY","_this$getProps4","_this$getProps5","hoverRadius","getBarBounds","_bar$getProps","skipOrLimit","boundingRects","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","_inRange","skipX","skipY","addNormalRectPath","inflateRect","refRect","_Element5","BarElement","_super15","_this10","_boundingRects","addRectPath","inflateAmount","_this$getProps6","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","_getStartAndCountOfVi2","_iScale$getUserBounds2","getStartAndCountOfVisiblePointsSimplified","decimated","samples","maxAreaPoint","maxArea","nextA","bucketWidth","sampledIndex","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","_data$a","pointAx","pointAy","lttbDecimation","minIndex","xMin","intermediateIndex1","intermediateIndex2","minMaxDecimation","decodeFill","fillOption","parseFillOption","simpleArc","computeBoundary","computeCircularBoundary","_source$scale","computeLinearBoundary","findSegmentEnd","buildStackLine","sourcePoints","linesBelow","below","isLineAndNotInHideAnimation","getLinesBelow","createBoundaryLine","addPointsBelow","sourcePoint","postponed","_findPoint","findPoint","interpolate","pointValue","linePoints","firstValue","lastValue","boundary","_ref7","_ref7$x","_ref7$y","_ref8","pointsFromSegments","resolveTarget","visited","clipY","_getEdge","clipBounds","_scale$chart$chartAre","_ref9","interpolatedLineTo","interpolatedPoint","_step15","_step12","tpoints","_iterator12","_step13","_iterator13","_step14","tgt","subBounds","_iterator14","fillSource","_iterator15","_ref11","_src$style","_src$style$background","notShape","lineLoop","pathSegment","targetLoop","drawfill","getLineByIndex","lineOpts","_ref12","_ref12$above","_ref12$below","doFill","plugin_filler","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","_labelOpts$boxHeight","boxHeight","_labelOpts$boxWidth","boxWidth","usePointStyle","itemHeight","_Element6","Legend","_super16","_this11","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_getBoxSize","_fitRows","_fitCols","hitboxes","totalHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","_me$options6","rtlHelper","_step16","_iterator16","hitbox","_step17","_iterator17","_hitbox","cursor","defaultColor","fontColor","halfFontSize","_getBoxSize2","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","onLeave","isListened","hoveredItem","_getLegendItemAt","sameItem","plugin_legend","adjustHitBoxes","afterEvent","ci","_chart$legend$options","_Element7","Title","_super17","_this12","_padding","textSize","fontOpts","_me$_drawArgs","_drawArgs","plugin_title","titleBlock","createTitle","plugin_subtitle","positioners","average","tooltipPosition","eventPosition","nearestElement","pushOrConcat","toPush","splitNewlines","getTooltipSize","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","beforeBody","afterBody","titleSpacing","titleMarginBottom","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","_chart$chartArea","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","paddingAndSize","radiusAndPadding","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","_Element8","_super18","_this13","_eventPosition","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","beforeTitle","afterTitle","bodyItems","scoped","beforeLabel","afterLabel","beforeFooter","afterFooter","_controller$getLabelA","getLabelAndValue","itemSort","labelColor","labelPointStyle","labelTextColor","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","textColor","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","bodyColor","_drawColorBox","footerAlign","footerColor","tooltipSize","drawCaret","quadraticCurveTo","animX","animY","_updateAnimationTarget","hasTooltipContent","drawBody","drawFooter","_ref13","positionChanged","_positionChanged","plugin_tooltip","afterInit","afterDraw","labelCount","Decimation","Filler","SubTitle","findOrAddLabel","addIfString","_Scale","CategoryScale","_super19","_this14","_startValue","_valueRange","_me$getUserBounds2","_me$getMinMax","getDecimalForPixel","generateTicks$1","generationOptions","dataRange","niceMin","niceMax","numSpaces","rounded","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","decimalPlaces","relativeLabelSize","_ref14","_Scale2","LinearScaleBase","_super20","_this15","_endValue","_me$getUserBounds3","minSign","maxSign","computeTickLimit","getTickLimit","_maxDigits","_LinearScaleBase","LinearScale","_super21","_me$getMinMax2","handleTickRangeOptions","isMajor","tickVal","_Scale3","LogarithmicScale","_super22","_this16","_zero","_me$getMinMax3","_me$getUserBounds4","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","fitWithPointLabels","furthestLimits","furthestAngles","valueCount","getPointLabelContext","getPointPosition","drawingArea","plFont","_pointLabels","hLimits","vLimits","_setReductions","_pointLabelItems","tickBackdropHeight","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","buildPointLabelItems","pathRadiusLine","_LinearScaleBase2","RadialLinearScale","_super23","_this17","_me$getMinMax4","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","scalingFactor","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","_this$_pointLabelItem","_me$options7","_scale$_pointLabelIte","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","millisecond","quarter","UNITS","sorter","_parse","_adapter","_scale$_parseOpts","_parseOpts","isoWeekday","startOf","determineUnitForAutoTicks","minUnit","capacity","interval","addTick","timestamps","_lookup2","ticksFromTimestamps","majorUnit","setMajorTicks","_Scale4","TimeScale","_super24","_this18","_unit","_majorUnit","_offsets","_normalized","formats","_me$getUserBounds5","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","getDecimalForValue","hasWeekday","getDataTimestamps","datetime","minorFormat","majorFormat","_tickFormatFunction","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","prevSource","nextSource","prevTarget","nextTarget","_lookupByKey2","_table$lo","_table$hi","_lookupByKey3","_table$lo2","_table$hi2","TimeSeriesScale","_TimeScale","_super25","_this19","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables","requiredArgs","argStr","formatDistanceLocale","lessThanXSeconds","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","tokenValue","addSuffix","comparison","buildFormatLongFn","defaultWidth","formatLong","full","medium","dateTime","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","buildLocalizeFn","dirtyIndex","dirtyOptions","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","argumentCallback","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchResult","matchedString","parsePatterns","defaultParseWidth","findKey","valueCallback","formatDistance","formatRelative","_baseDate","localize","ordinalNumber","dirtyNumber","rem100","era","narrow","abbreviated","wide","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","parsePattern","any","weekStartsOn","firstWeekContainsDate","addMilliseconds","dirtyDate","dirtyAmount","subMilliseconds","dirtyObject","dateLongFormatter","timeLongFormatter","dateTimeFormat","datePattern","timePattern","getTimezoneOffsetInMilliseconds","utcDate","UTC","getFullYear","setUTCFullYear","protectedDayOfYearTokens","protectedWeekYearTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","throwProtectedError","startOfUTCWeek","localeWeekStartsOn","defaultWeekStartsOn","getUTCDay","setUTCDate","setUTCHours","getUTCWeekYear","localeFirstWeekContainsDate","defaultFirstWeekContainsDate","firstWeekOfNextYear","startOfNextYear","firstWeekOfThisYear","startOfThisYear","setUTCDay","dirtyDay","currentDay","remainder","dayIndex","startOfUTCISOWeek","getUTCISOWeekYear","fourthOfJanuaryOfNextYear","fourthOfJanuaryOfThisYear","startOfUTCISOWeekYear","fourthOfJanuary","MILLISECONDS_IN_WEEK","getUTCISOWeek","startOfUTCWeekYear","firstWeek","getUTCWeek","numericPatterns","timezonePatterns","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","enumValue","normalizeTwoDigitYear","twoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","isLeapYearIndex","incompatibleTokens","isTwoDigitYear","normalizedTwoDigitYear","_match","_flags","firstWeekOfYear","setUTCMonth","dirtyWeek","setUTCWeek","dirtyISOWeek","isoWeek","setUTCISOWeek","subPriority","isLeapYear","wholeWeekDays","setUTCISODay","isPM","hours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","timestampIsSet","_token","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","notWhitespaceRegExp","unescapedLatinCharacterRegExp","dateToSystemTimezone","convertedDate","setFullYear","setHours","cleanEscapedString","patterns","dateTimeDelimiter","timeZoneDelimiter","timezone","dateRegex","timeRegex","timezoneRegex","splitDateString","dateString","timeString","dateStrings","parseYear","additionalDigits","regex","century","restDateString","parseDate","isWeekDate","dayOfYear","parseDateUnit","_year","validateWeekDate","isoWeekYear","fourthOfJanuaryDay","dayOfISOWeekYear","daysInMonths","validateDate","validateDayOfYearDate","parseTime","parseTimeUnit","minutes","seconds","validateTime","parseTimezone","timezoneString","_hours","validateTimezone","addLeadingZeros","targetLength","signedYear","dayPeriodEnumValue","numberOfDigits","MILLISECONDS_IN_DAY","dayPeriodEnum","formatTimezoneShort","dirtyDelimiter","absOffset","delimiter","formatTimezoneWithOptionalMinutes","formatTimezone","lightFormatters","signedWeekYear","weekYear","startOfYearTimestamp","difference","getUTCDayOfYear","localDayOfWeek","isoDayOfWeek","_localize","timezoneOffset","_originalDate","originalDate","addDays","setDate","addMonths","dayOfMonth","endOfDesiredMonth","setMonth","daysInMonth","differenceInMilliseconds","dateLeft","dateRight","roundingMap","getRoundingMethod","millisecondsInHour","startOfDay","differenceInCalendarDays","dirtyDateLeft","dirtyDateRight","startOfDayLeft","startOfDayRight","timestampLeft","timestampRight","compareLocalAsc","differenceInDays","isLastDayNotFull","differenceInCalendarMonths","yearDiff","monthDiff","compareAsc","endOfDay","endOfMonth","isLastDayOfMonth","differenceInMonths","isLastMonthNotFull","differenceInCalendarYears","startOfWeek","FORMATS","fmt","dirtyDateString","dirtyFormatString","dirtyReferenceDate","formatString","subFnOptions","setters","firstCharacter","longFormatter","usedTokens","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","incompatibleToken","usedToken","fullToken","uniquePrioritySetters","setterArray","parseYearResult","parseISO","dirtyFormatStr","formatStr","formatterOptions","addSeconds","addMinutes","addHours","addWeeks","addQuarters","addYears","roundingMethod","differenceInSeconds","differenceInMinutes","differenceInHours","differenceInWeeks","differenceInQuarters","isLastYearNotFull","differenceInYears","setMilliseconds","startOfSecond","setSeconds","startOfMinute","setMinutes","startOfHour","startOfMonth","currentMonth","startOfQuarter","cleanDate","startOfYear","endOfSecond","endOfMinute","endOfHour","endOfWeek","endOfQuarter","endOfYear","airbrake","AIRBRAKE_PROJECT_ID","AIRBRAKE_PROJECT_KEY","PANEL_URL","originalError"],"mappings":"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","file":"js/application-fd20cd4c95f90c1a3ecd.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 479);\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*/\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","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\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 no-undef\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func\n (function () { return this; })() || Function('return this')();\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","// Utilities\n//\n'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _class(obj) {\n return Object.prototype.toString.call(obj);\n}\n\nfunction isString(obj) {\n return _class(obj) === '[object String]';\n}\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n} // Merge objects\n//\n\n\nfunction assign(obj\n/*from1, from2, from3, ...*/\n) {\n var sources = Array.prototype.slice.call(arguments, 1);\n sources.forEach(function (source) {\n if (!source) {\n return;\n }\n\n if (_typeof(source) !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n return obj;\n} // Remove element from array and put another array at those position.\n// Useful for some operations with tokens\n\n\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) {\n return false;\n } // never used\n\n\n if (c >= 0xFDD0 && c <= 0xFDEF) {\n return false;\n }\n\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) {\n return false;\n } // control codes\n\n\n if (c >= 0x00 && c <= 0x08) {\n return false;\n }\n\n if (c === 0x0B) {\n return false;\n }\n\n if (c >= 0x0E && c <= 0x1F) {\n return false;\n }\n\n if (c >= 0x7F && c <= 0x9F) {\n return false;\n } // out of range\n\n\n if (c > 0x10FFFF) {\n return false;\n }\n\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n return String.fromCharCode(surrogate1, surrogate2);\n }\n\n return String.fromCharCode(c);\n}\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23\n /* # */\n && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) {\n return str;\n }\n\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) {\n return str;\n }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) {\n return escaped;\n }\n\n return replaceEntityPattern(match, entity);\n });\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n\n return str;\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n\n return false;\n} // Zs (unicode class) || [\\t\\f\\v\\r\\n]\n\n\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) {\n return true;\n }\n\n switch (code) {\n case 0x09: // \\t\n\n case 0x0A: // \\n\n\n case 0x0B: // \\v\n\n case 0x0C: // \\f\n\n case 0x0D: // \\r\n\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n\n return false;\n} ////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\n\n\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex'); // Currently without astral characters support.\n\n\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n} // Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\n\n\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21\n /* ! */\n :\n case 0x22\n /* \" */\n :\n case 0x23\n /* # */\n :\n case 0x24\n /* $ */\n :\n case 0x25\n /* % */\n :\n case 0x26\n /* & */\n :\n case 0x27\n /* ' */\n :\n case 0x28\n /* ( */\n :\n case 0x29\n /* ) */\n :\n case 0x2A\n /* * */\n :\n case 0x2B\n /* + */\n :\n case 0x2C\n /* , */\n :\n case 0x2D\n /* - */\n :\n case 0x2E\n /* . */\n :\n case 0x2F\n /* / */\n :\n case 0x3A\n /* : */\n :\n case 0x3B\n /* ; */\n :\n case 0x3C\n /* < */\n :\n case 0x3D\n /* = */\n :\n case 0x3E\n /* > */\n :\n case 0x3F\n /* ? */\n :\n case 0x40\n /* @ */\n :\n case 0x5B\n /* [ */\n :\n case 0x5C\n /* \\ */\n :\n case 0x5D\n /* ] */\n :\n case 0x5E\n /* ^ */\n :\n case 0x5F\n /* _ */\n :\n case 0x60\n /* ` */\n :\n case 0x7B\n /* { */\n :\n case 0x7C\n /* | */\n :\n case 0x7D\n /* } */\n :\n case 0x7E\n /* ~ */\n :\n return true;\n\n default:\n return false;\n }\n} // Hepler to unify [reference labels].\n//\n\n\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' '); // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n\n if ('ẞ'.toLowerCase() === 'Ṿ') {\n str = str.replace(/ẞ/g, 'ß');\n } // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // İ, ϴ, ẞ, Ω, , Å - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n // and .toUpperCase() doesn't change ϴ (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n\n\n return str.toLowerCase().toUpperCase();\n} ////////////////////////////////////////////////////////////////////////////////\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\n\n\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint; // exports.replaceEntities = replaceEntities;\n\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\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 createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name)) {\n if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar isPrototypeOf = ObjectPrototype.isPrototypeOf;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME;\n\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return klass === 'DataView'\n || has(TypedArrayConstructorsList, klass)\n || has(BigIntArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return has(TypedArrayConstructorsList, klass)\n || has(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n if (isTypedArray(it)) return it;\n throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n if (setPrototypeOf) {\n if (isPrototypeOf.call(TypedArray, C)) return C;\n } else for (var ARRAY in TypedArrayConstructorsList) if (has(TypedArrayConstructorsList, NAME)) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (C === TypedArrayConstructor || isPrototypeOf.call(TypedArrayConstructor, C))) {\n return C;\n }\n } throw TypeError('Target is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && has(TypedArrayConstructor.prototype, KEY)) {\n delete TypedArrayConstructor.prototype[KEY];\n }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n redefine(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && has(TypedArrayConstructor, KEY)) {\n delete TypedArrayConstructor[KEY];\n }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8Array[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n redefine(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n if (!global[NAME]) NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || typeof TypedArray != 'function' || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow\n TypedArray = function TypedArray() {\n throw TypeError('Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !has(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQIRED = true;\n defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n } });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n","var toInteger = require('../internals/to-integer');\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(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(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 requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` 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_OUT = 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, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? 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.call(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push.call(target, value); // filterOut\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.filterOut` method\n // https://github.com/tc39/proposal-array-filtering\n filterOut: createMethod(7)\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\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 state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\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 typeof this == 'function' && getInternalState(this).source || inspectSource(this);\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","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 DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\n\nvar defineProperty = Object.defineProperty;\nvar cache = {};\n\nvar thrower = function (it) { throw it; };\n\nmodule.exports = function (METHOD_NAME, options) {\n if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];\n if (!options) options = {};\n var method = [][METHOD_NAME];\n var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;\n var argument0 = has(options, 0) ? options[0] : thrower;\n var argument1 = has(options, 1) ? options[1] : undefined;\n\n return cache[METHOD_NAME] = !!method && !fails(function () {\n if (ACCESSORS && !DESCRIPTORS) return true;\n var O = { length: -1 };\n\n if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });\n else O[1] = 1;\n\n method.call(O, argument0, argument1);\n });\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 NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\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) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(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 path = require('../internals/path');\nvar has = require('../internals/has');\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 (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar quot = /\"/g;\n\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n var S = String(requireObjectCoercible(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(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","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* @preserve\n * Leaflet 1.7.1, a JS library for interactive maps. http://leafletjs.com\n * (c) 2010-2019 Vladimir Agafonkin, (c) 2010-2011 CloudMade\n */\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : factory(global.L = {});\n})(this, function (exports) {\n 'use strict';\n\n var version = \"1.7.1\";\n /*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\n // @function extend(dest: Object, src?: Object): Object\n // Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\n\n function extend(dest) {\n var i, j, len, src;\n\n for (j = 1, len = arguments.length; j < len; j++) {\n src = arguments[j];\n\n for (i in src) {\n dest[i] = src[i];\n }\n }\n\n return dest;\n } // @function create(proto: Object, properties?: Object): Object\n // Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\n\n\n var create = Object.create || function () {\n function F() {}\n\n return function (proto) {\n F.prototype = proto;\n return new F();\n };\n }(); // @function bind(fn: Function, …): Function\n // Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\n // Has a `L.bind()` shortcut.\n\n\n function bind(fn, obj) {\n var slice = Array.prototype.slice;\n\n if (fn.bind) {\n return fn.bind.apply(fn, slice.call(arguments, 1));\n }\n\n var args = slice.call(arguments, 2);\n return function () {\n return fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\n };\n } // @property lastId: Number\n // Last unique ID used by [`stamp()`](#util-stamp)\n\n\n var lastId = 0; // @function stamp(obj: Object): Number\n // Returns the unique ID of an object, assigning it one if it doesn't have it.\n\n function stamp(obj) {\n /*eslint-disable */\n obj._leaflet_id = obj._leaflet_id || ++lastId;\n return obj._leaflet_id;\n /* eslint-enable */\n } // @function throttle(fn: Function, time: Number, context: Object): Function\n // Returns a function which executes function `fn` with the given scope `context`\n // (so that the `this` keyword refers to `context` inside `fn`'s code). The function\n // `fn` will be called no more than one time per given amount of `time`. The arguments\n // received by the bound function will be any arguments passed when binding the\n // function, followed by any arguments passed when invoking the bound function.\n // Has an `L.throttle` shortcut.\n\n\n function throttle(fn, time, context) {\n var lock, args, wrapperFn, later;\n\n later = function later() {\n // reset lock and call if queued\n lock = false;\n\n if (args) {\n wrapperFn.apply(context, args);\n args = false;\n }\n };\n\n wrapperFn = function wrapperFn() {\n if (lock) {\n // called too soon, queue to call later\n args = arguments;\n } else {\n // call and lock until later\n fn.apply(context, arguments);\n setTimeout(later, time);\n lock = true;\n }\n };\n\n return wrapperFn;\n } // @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\n // Returns the number `num` modulo `range` in such a way so it lies within\n // `range[0]` and `range[1]`. The returned value will be always smaller than\n // `range[1]` unless `includeMax` is set to `true`.\n\n\n function wrapNum(x, range, includeMax) {\n var max = range[1],\n min = range[0],\n d = max - min;\n return x === max && includeMax ? x : ((x - min) % d + d) % d + min;\n } // @function falseFn(): Function\n // Returns a function which always returns `false`.\n\n\n function falseFn() {\n return false;\n } // @function formatNum(num: Number, digits?: Number): Number\n // Returns the number `num` rounded to `digits` decimals, or to 6 decimals by default.\n\n\n function formatNum(num, digits) {\n var pow = Math.pow(10, digits === undefined ? 6 : digits);\n return Math.round(num * pow) / pow;\n } // @function trim(str: String): String\n // Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\n\n\n function trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n } // @function splitWords(str: String): String[]\n // Trims and splits the string on whitespace and returns the array of parts.\n\n\n function splitWords(str) {\n return trim(str).split(/\\s+/);\n } // @function setOptions(obj: Object, options: Object): Object\n // Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\n\n\n function setOptions(obj, options) {\n if (!Object.prototype.hasOwnProperty.call(obj, 'options')) {\n obj.options = obj.options ? create(obj.options) : {};\n }\n\n for (var i in options) {\n obj.options[i] = options[i];\n }\n\n return obj.options;\n } // @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\n // Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\n // translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\n // be appended at the end. If `uppercase` is `true`, the parameter names will\n // be uppercased (e.g. `'?A=foo&B=bar'`)\n\n\n function getParamString(obj, existingUrl, uppercase) {\n var params = [];\n\n for (var i in obj) {\n params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\n }\n\n return (!existingUrl || existingUrl.indexOf('?') === -1 ? '?' : '&') + params.join('&');\n }\n\n var templateRe = /\\{ *([\\w_-]+) *\\}/g; // @function template(str: String, data: Object): String\n // Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\n // and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\n // `('Hello foo, bar')`. You can also specify functions instead of strings for\n // data values — they will be evaluated passing `data` as an argument.\n\n function template(str, data) {\n return str.replace(templateRe, function (str, key) {\n var value = data[key];\n\n if (value === undefined) {\n throw new Error('No value provided for variable ' + str);\n } else if (typeof value === 'function') {\n value = value(data);\n }\n\n return value;\n });\n } // @function isArray(obj): Boolean\n // Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\n\n\n var isArray = Array.isArray || function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n }; // @function indexOf(array: Array, el: Object): Number\n // Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\n\n\n function indexOf(array, el) {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === el) {\n return i;\n }\n }\n\n return -1;\n } // @property emptyImageUrl: String\n // Data URI string containing a base64-encoded empty GIF image.\n // Used as a hack to free memory from unused images on WebKit-powered\n // mobile devices (by setting image `src` to this string).\n\n\n var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='; // inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n\n function getPrefixed(name) {\n return window['webkit' + name] || window['moz' + name] || window['ms' + name];\n }\n\n var lastTime = 0; // fallback for IE 7-8\n\n function timeoutDefer(fn) {\n var time = +new Date(),\n timeToCall = Math.max(0, 16 - (time - lastTime));\n lastTime = time + timeToCall;\n return window.setTimeout(fn, timeToCall);\n }\n\n var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\n\n var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') || getPrefixed('CancelRequestAnimationFrame') || function (id) {\n window.clearTimeout(id);\n }; // @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\n // Schedules `fn` to be executed when the browser repaints. `fn` is bound to\n // `context` if given. When `immediate` is set, `fn` is called immediately if\n // the browser doesn't have native support for\n // [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\n // otherwise it's delayed. Returns a request ID that can be used to cancel the request.\n\n\n function requestAnimFrame(fn, context, immediate) {\n if (immediate && requestFn === timeoutDefer) {\n fn.call(context);\n } else {\n return requestFn.call(window, bind(fn, context));\n }\n } // @function cancelAnimFrame(id: Number): undefined\n // Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\n\n\n function cancelAnimFrame(id) {\n if (id) {\n cancelFn.call(window, id);\n }\n }\n\n var Util = {\n extend: extend,\n create: create,\n bind: bind,\n lastId: lastId,\n stamp: stamp,\n throttle: throttle,\n wrapNum: wrapNum,\n falseFn: falseFn,\n formatNum: formatNum,\n trim: trim,\n splitWords: splitWords,\n setOptions: setOptions,\n getParamString: getParamString,\n template: template,\n isArray: isArray,\n indexOf: indexOf,\n emptyImageUrl: emptyImageUrl,\n requestFn: requestFn,\n cancelFn: cancelFn,\n requestAnimFrame: requestAnimFrame,\n cancelAnimFrame: cancelAnimFrame\n }; // @class Class\n // @aka L.Class\n // @section\n // @uninheritable\n // Thanks to John Resig and Dean Edwards for inspiration!\n\n function Class() {}\n\n Class.extend = function (props) {\n // @function extend(props: Object): Function\n // [Extends the current class](#class-inheritance) given the properties to be included.\n // Returns a Javascript function that is a class constructor (to be called with `new`).\n var NewClass = function NewClass() {\n // call the constructor\n if (this.initialize) {\n this.initialize.apply(this, arguments);\n } // call all constructor hooks\n\n\n this.callInitHooks();\n };\n\n var parentProto = NewClass.__super__ = this.prototype;\n var proto = create(parentProto);\n proto.constructor = NewClass;\n NewClass.prototype = proto; // inherit parent's statics\n\n for (var i in this) {\n if (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {\n NewClass[i] = this[i];\n }\n } // mix static properties into the class\n\n\n if (props.statics) {\n extend(NewClass, props.statics);\n delete props.statics;\n } // mix includes into the prototype\n\n\n if (props.includes) {\n checkDeprecatedMixinEvents(props.includes);\n extend.apply(null, [proto].concat(props.includes));\n delete props.includes;\n } // merge options\n\n\n if (proto.options) {\n props.options = extend(create(proto.options), props.options);\n } // mix given properties into the prototype\n\n\n extend(proto, props);\n proto._initHooks = []; // add method for calling all hooks\n\n proto.callInitHooks = function () {\n if (this._initHooksCalled) {\n return;\n }\n\n if (parentProto.callInitHooks) {\n parentProto.callInitHooks.call(this);\n }\n\n this._initHooksCalled = true;\n\n for (var i = 0, len = proto._initHooks.length; i < len; i++) {\n proto._initHooks[i].call(this);\n }\n };\n\n return NewClass;\n }; // @function include(properties: Object): this\n // [Includes a mixin](#class-includes) into the current class.\n\n\n Class.include = function (props) {\n extend(this.prototype, props);\n return this;\n }; // @function mergeOptions(options: Object): this\n // [Merges `options`](#class-options) into the defaults of the class.\n\n\n Class.mergeOptions = function (options) {\n extend(this.prototype.options, options);\n return this;\n }; // @function addInitHook(fn: Function): this\n // Adds a [constructor hook](#class-constructor-hooks) to the class.\n\n\n Class.addInitHook = function (fn) {\n // (Function) || (String, args...)\n var args = Array.prototype.slice.call(arguments, 1);\n var init = typeof fn === 'function' ? fn : function () {\n this[fn].apply(this, args);\n };\n this.prototype._initHooks = this.prototype._initHooks || [];\n\n this.prototype._initHooks.push(init);\n\n return this;\n };\n\n function checkDeprecatedMixinEvents(includes) {\n if (typeof L === 'undefined' || !L || !L.Mixin) {\n return;\n }\n\n includes = isArray(includes) ? includes : [includes];\n\n for (var i = 0; i < includes.length; i++) {\n if (includes[i] === L.Mixin.Events) {\n console.warn('Deprecated include of L.Mixin.Events: ' + 'this property will be removed in future releases, ' + 'please inherit from L.Evented instead.', new Error().stack);\n }\n }\n }\n /*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\n\n\n var Events = {\n /* @method on(type: String, fn: Function, context?: Object): this\r\n * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n *\r\n * @alternative\r\n * @method on(eventMap: Object): this\r\n * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n */\n on: function on(types, fn, context) {\n // types can be a map of types/handlers\n if (_typeof(types) === 'object') {\n for (var type in types) {\n // we don't process space-separated events here for performance;\n // it's a hot path since Layer uses the on(obj) syntax\n this._on(type, types[type], fn);\n }\n } else {\n // types can be a string of space-separated words\n types = splitWords(types);\n\n for (var i = 0, len = types.length; i < len; i++) {\n this._on(types[i], fn, context);\n }\n }\n\n return this;\n },\n\n /* @method off(type: String, fn?: Function, context?: Object): this\r\n * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n *\r\n * @alternative\r\n * @method off(eventMap: Object): this\r\n * Removes a set of type/listener pairs.\r\n *\r\n * @alternative\r\n * @method off: this\r\n * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n */\n off: function off(types, fn, context) {\n if (!types) {\n // clear all listeners if called without arguments\n delete this._events;\n } else if (_typeof(types) === 'object') {\n for (var type in types) {\n this._off(type, types[type], fn);\n }\n } else {\n types = splitWords(types);\n\n for (var i = 0, len = types.length; i < len; i++) {\n this._off(types[i], fn, context);\n }\n }\n\n return this;\n },\n // attach listener (without syntactic sugar now)\n _on: function _on(type, fn, context) {\n this._events = this._events || {};\n /* get/init listeners for type */\n\n var typeListeners = this._events[type];\n\n if (!typeListeners) {\n typeListeners = [];\n this._events[type] = typeListeners;\n }\n\n if (context === this) {\n // Less memory footprint.\n context = undefined;\n }\n\n var newListener = {\n fn: fn,\n ctx: context\n },\n listeners = typeListeners; // check if fn already there\n\n for (var i = 0, len = listeners.length; i < len; i++) {\n if (listeners[i].fn === fn && listeners[i].ctx === context) {\n return;\n }\n }\n\n listeners.push(newListener);\n },\n _off: function _off(type, fn, context) {\n var listeners, i, len;\n\n if (!this._events) {\n return;\n }\n\n listeners = this._events[type];\n\n if (!listeners) {\n return;\n }\n\n if (!fn) {\n // Set all removed listeners to noop so they are not called if remove happens in fire\n for (i = 0, len = listeners.length; i < len; i++) {\n listeners[i].fn = falseFn;\n } // clear all listeners for a type if function isn't specified\n\n\n delete this._events[type];\n return;\n }\n\n if (context === this) {\n context = undefined;\n }\n\n if (listeners) {\n // find fn and remove it\n for (i = 0, len = listeners.length; i < len; i++) {\n var l = listeners[i];\n\n if (l.ctx !== context) {\n continue;\n }\n\n if (l.fn === fn) {\n // set the removed listener to noop so that's not called if remove happens in fire\n l.fn = falseFn;\n\n if (this._firingCount) {\n /* copy array in case events are being fired */\n this._events[type] = listeners = listeners.slice();\n }\n\n listeners.splice(i, 1);\n return;\n }\n }\n }\n },\n // @method fire(type: String, data?: Object, propagate?: Boolean): this\n // Fires an event of the specified type. You can optionally provide an data\n // object — the first argument of the listener function will contain its\n // properties. The event can optionally be propagated to event parents.\n fire: function fire(type, data, propagate) {\n if (!this.listens(type, propagate)) {\n return this;\n }\n\n var event = extend({}, data, {\n type: type,\n target: this,\n sourceTarget: data && data.sourceTarget || this\n });\n\n if (this._events) {\n var listeners = this._events[type];\n\n if (listeners) {\n this._firingCount = this._firingCount + 1 || 1;\n\n for (var i = 0, len = listeners.length; i < len; i++) {\n var l = listeners[i];\n l.fn.call(l.ctx || this, event);\n }\n\n this._firingCount--;\n }\n }\n\n if (propagate) {\n // propagate the event to parents (set with addEventParent)\n this._propagateEvent(event);\n }\n\n return this;\n },\n // @method listens(type: String): Boolean\n // Returns `true` if a particular event type has any listeners attached to it.\n listens: function listens(type, propagate) {\n var listeners = this._events && this._events[type];\n\n if (listeners && listeners.length) {\n return true;\n }\n\n if (propagate) {\n // also check parents for listeners if event propagates\n for (var id in this._eventParents) {\n if (this._eventParents[id].listens(type, propagate)) {\n return true;\n }\n }\n }\n\n return false;\n },\n // @method once(…): this\n // Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\n once: function once(types, fn, context) {\n if (_typeof(types) === 'object') {\n for (var type in types) {\n this.once(type, types[type], fn);\n }\n\n return this;\n }\n\n var handler = bind(function () {\n this.off(types, fn, context).off(types, handler, context);\n }, this); // add a listener that's executed once and removed after that\n\n return this.on(types, fn, context).on(types, handler, context);\n },\n // @method addEventParent(obj: Evented): this\n // Adds an event parent - an `Evented` that will receive propagated events\n addEventParent: function addEventParent(obj) {\n this._eventParents = this._eventParents || {};\n this._eventParents[stamp(obj)] = obj;\n return this;\n },\n // @method removeEventParent(obj: Evented): this\n // Removes an event parent, so it will stop receiving propagated events\n removeEventParent: function removeEventParent(obj) {\n if (this._eventParents) {\n delete this._eventParents[stamp(obj)];\n }\n\n return this;\n },\n _propagateEvent: function _propagateEvent(e) {\n for (var id in this._eventParents) {\n this._eventParents[id].fire(e.type, extend({\n layer: e.target,\n propagatedFrom: e.target\n }, e), true);\n }\n }\n }; // aliases; we should ditch those eventually\n // @method addEventListener(…): this\n // Alias to [`on(…)`](#evented-on)\n\n Events.addEventListener = Events.on; // @method removeEventListener(…): this\n // Alias to [`off(…)`](#evented-off)\n // @method clearAllEventListeners(…): this\n // Alias to [`off()`](#evented-off)\n\n Events.removeEventListener = Events.clearAllEventListeners = Events.off; // @method addOneTimeEventListener(…): this\n // Alias to [`once(…)`](#evented-once)\n\n Events.addOneTimeEventListener = Events.once; // @method fireEvent(…): this\n // Alias to [`fire(…)`](#evented-fire)\n\n Events.fireEvent = Events.fire; // @method hasEventListeners(…): Boolean\n // Alias to [`listens(…)`](#evented-listens)\n\n Events.hasEventListeners = Events.listens;\n var Evented = Class.extend(Events);\n /*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\n\n function Point(x, y, round) {\n // @property x: Number; The `x` coordinate of the point\n this.x = round ? Math.round(x) : x; // @property y: Number; The `y` coordinate of the point\n\n this.y = round ? Math.round(y) : y;\n }\n\n var trunc = Math.trunc || function (v) {\n return v > 0 ? Math.floor(v) : Math.ceil(v);\n };\n\n Point.prototype = {\n // @method clone(): Point\n // Returns a copy of the current point.\n clone: function clone() {\n return new Point(this.x, this.y);\n },\n // @method add(otherPoint: Point): Point\n // Returns the result of addition of the current and the given points.\n add: function add(point) {\n // non-destructive, returns a new point\n return this.clone()._add(toPoint(point));\n },\n _add: function _add(point) {\n // destructive, used directly for performance in situations where it's safe to modify existing point\n this.x += point.x;\n this.y += point.y;\n return this;\n },\n // @method subtract(otherPoint: Point): Point\n // Returns the result of subtraction of the given point from the current.\n subtract: function subtract(point) {\n return this.clone()._subtract(toPoint(point));\n },\n _subtract: function _subtract(point) {\n this.x -= point.x;\n this.y -= point.y;\n return this;\n },\n // @method divideBy(num: Number): Point\n // Returns the result of division of the current point by the given number.\n divideBy: function divideBy(num) {\n return this.clone()._divideBy(num);\n },\n _divideBy: function _divideBy(num) {\n this.x /= num;\n this.y /= num;\n return this;\n },\n // @method multiplyBy(num: Number): Point\n // Returns the result of multiplication of the current point by the given number.\n multiplyBy: function multiplyBy(num) {\n return this.clone()._multiplyBy(num);\n },\n _multiplyBy: function _multiplyBy(num) {\n this.x *= num;\n this.y *= num;\n return this;\n },\n // @method scaleBy(scale: Point): Point\n // Multiply each coordinate of the current point by each coordinate of\n // `scale`. In linear algebra terms, multiply the point by the\n // [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\n // defined by `scale`.\n scaleBy: function scaleBy(point) {\n return new Point(this.x * point.x, this.y * point.y);\n },\n // @method unscaleBy(scale: Point): Point\n // Inverse of `scaleBy`. Divide each coordinate of the current point by\n // each coordinate of `scale`.\n unscaleBy: function unscaleBy(point) {\n return new Point(this.x / point.x, this.y / point.y);\n },\n // @method round(): Point\n // Returns a copy of the current point with rounded coordinates.\n round: function round() {\n return this.clone()._round();\n },\n _round: function _round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n },\n // @method floor(): Point\n // Returns a copy of the current point with floored coordinates (rounded down).\n floor: function floor() {\n return this.clone()._floor();\n },\n _floor: function _floor() {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n return this;\n },\n // @method ceil(): Point\n // Returns a copy of the current point with ceiled coordinates (rounded up).\n ceil: function ceil() {\n return this.clone()._ceil();\n },\n _ceil: function _ceil() {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n return this;\n },\n // @method trunc(): Point\n // Returns a copy of the current point with truncated coordinates (rounded towards zero).\n trunc: function trunc() {\n return this.clone()._trunc();\n },\n _trunc: function _trunc() {\n this.x = trunc(this.x);\n this.y = trunc(this.y);\n return this;\n },\n // @method distanceTo(otherPoint: Point): Number\n // Returns the cartesian distance between the current and the given points.\n distanceTo: function distanceTo(point) {\n point = toPoint(point);\n var x = point.x - this.x,\n y = point.y - this.y;\n return Math.sqrt(x * x + y * y);\n },\n // @method equals(otherPoint: Point): Boolean\n // Returns `true` if the given point has the same coordinates.\n equals: function equals(point) {\n point = toPoint(point);\n return point.x === this.x && point.y === this.y;\n },\n // @method contains(otherPoint: Point): Boolean\n // Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\n contains: function contains(point) {\n point = toPoint(point);\n return Math.abs(point.x) <= Math.abs(this.x) && Math.abs(point.y) <= Math.abs(this.y);\n },\n // @method toString(): String\n // Returns a string representation of the point for debugging purposes.\n toString: function toString() {\n return 'Point(' + formatNum(this.x) + ', ' + formatNum(this.y) + ')';\n }\n }; // @factory L.point(x: Number, y: Number, round?: Boolean)\n // Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\n // @alternative\n // @factory L.point(coords: Number[])\n // Expects an array of the form `[x, y]` instead.\n // @alternative\n // @factory L.point(coords: Object)\n // Expects a plain object of the form `{x: Number, y: Number}` instead.\n\n function toPoint(x, y, round) {\n if (x instanceof Point) {\n return x;\n }\n\n if (isArray(x)) {\n return new Point(x[0], x[1]);\n }\n\n if (x === undefined || x === null) {\n return x;\n }\n\n if (_typeof(x) === 'object' && 'x' in x && 'y' in x) {\n return new Point(x.x, x.y);\n }\n\n return new Point(x, y, round);\n }\n /*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\n\n\n function Bounds(a, b) {\n if (!a) {\n return;\n }\n\n var points = b ? [a, b] : a;\n\n for (var i = 0, len = points.length; i < len; i++) {\n this.extend(points[i]);\n }\n }\n\n Bounds.prototype = {\n // @method extend(point: Point): this\n // Extends the bounds to contain the given point.\n extend: function extend(point) {\n // (Point)\n point = toPoint(point); // @property min: Point\n // The top left corner of the rectangle.\n // @property max: Point\n // The bottom right corner of the rectangle.\n\n if (!this.min && !this.max) {\n this.min = point.clone();\n this.max = point.clone();\n } else {\n this.min.x = Math.min(point.x, this.min.x);\n this.max.x = Math.max(point.x, this.max.x);\n this.min.y = Math.min(point.y, this.min.y);\n this.max.y = Math.max(point.y, this.max.y);\n }\n\n return this;\n },\n // @method getCenter(round?: Boolean): Point\n // Returns the center point of the bounds.\n getCenter: function getCenter(round) {\n return new Point((this.min.x + this.max.x) / 2, (this.min.y + this.max.y) / 2, round);\n },\n // @method getBottomLeft(): Point\n // Returns the bottom-left point of the bounds.\n getBottomLeft: function getBottomLeft() {\n return new Point(this.min.x, this.max.y);\n },\n // @method getTopRight(): Point\n // Returns the top-right point of the bounds.\n getTopRight: function getTopRight() {\n // -> Point\n return new Point(this.max.x, this.min.y);\n },\n // @method getTopLeft(): Point\n // Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\n getTopLeft: function getTopLeft() {\n return this.min; // left, top\n },\n // @method getBottomRight(): Point\n // Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\n getBottomRight: function getBottomRight() {\n return this.max; // right, bottom\n },\n // @method getSize(): Point\n // Returns the size of the given bounds\n getSize: function getSize() {\n return this.max.subtract(this.min);\n },\n // @method contains(otherBounds: Bounds): Boolean\n // Returns `true` if the rectangle contains the given one.\n // @alternative\n // @method contains(point: Point): Boolean\n // Returns `true` if the rectangle contains the given point.\n contains: function contains(obj) {\n var min, max;\n\n if (typeof obj[0] === 'number' || obj instanceof Point) {\n obj = toPoint(obj);\n } else {\n obj = toBounds(obj);\n }\n\n if (obj instanceof Bounds) {\n min = obj.min;\n max = obj.max;\n } else {\n min = max = obj;\n }\n\n return min.x >= this.min.x && max.x <= this.max.x && min.y >= this.min.y && max.y <= this.max.y;\n },\n // @method intersects(otherBounds: Bounds): Boolean\n // Returns `true` if the rectangle intersects the given bounds. Two bounds\n // intersect if they have at least one point in common.\n intersects: function intersects(bounds) {\n // (Bounds) -> Boolean\n bounds = toBounds(bounds);\n var min = this.min,\n max = this.max,\n min2 = bounds.min,\n max2 = bounds.max,\n xIntersects = max2.x >= min.x && min2.x <= max.x,\n yIntersects = max2.y >= min.y && min2.y <= max.y;\n return xIntersects && yIntersects;\n },\n // @method overlaps(otherBounds: Bounds): Boolean\n // Returns `true` if the rectangle overlaps the given bounds. Two bounds\n // overlap if their intersection is an area.\n overlaps: function overlaps(bounds) {\n // (Bounds) -> Boolean\n bounds = toBounds(bounds);\n var min = this.min,\n max = this.max,\n min2 = bounds.min,\n max2 = bounds.max,\n xOverlaps = max2.x > min.x && min2.x < max.x,\n yOverlaps = max2.y > min.y && min2.y < max.y;\n return xOverlaps && yOverlaps;\n },\n isValid: function isValid() {\n return !!(this.min && this.max);\n }\n }; // @factory L.bounds(corner1: Point, corner2: Point)\n // Creates a Bounds object from two corners coordinate pairs.\n // @alternative\n // @factory L.bounds(points: Point[])\n // Creates a Bounds object from the given array of points.\n\n function toBounds(a, b) {\n if (!a || a instanceof Bounds) {\n return a;\n }\n\n return new Bounds(a, b);\n }\n /*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\n\n\n function LatLngBounds(corner1, corner2) {\n // (LatLng, LatLng) or (LatLng[])\n if (!corner1) {\n return;\n }\n\n var latlngs = corner2 ? [corner1, corner2] : corner1;\n\n for (var i = 0, len = latlngs.length; i < len; i++) {\n this.extend(latlngs[i]);\n }\n }\n\n LatLngBounds.prototype = {\n // @method extend(latlng: LatLng): this\n // Extend the bounds to contain the given point\n // @alternative\n // @method extend(otherBounds: LatLngBounds): this\n // Extend the bounds to contain the given bounds\n extend: function extend(obj) {\n var sw = this._southWest,\n ne = this._northEast,\n sw2,\n ne2;\n\n if (obj instanceof LatLng) {\n sw2 = obj;\n ne2 = obj;\n } else if (obj instanceof LatLngBounds) {\n sw2 = obj._southWest;\n ne2 = obj._northEast;\n\n if (!sw2 || !ne2) {\n return this;\n }\n } else {\n return obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\n }\n\n if (!sw && !ne) {\n this._southWest = new LatLng(sw2.lat, sw2.lng);\n this._northEast = new LatLng(ne2.lat, ne2.lng);\n } else {\n sw.lat = Math.min(sw2.lat, sw.lat);\n sw.lng = Math.min(sw2.lng, sw.lng);\n ne.lat = Math.max(ne2.lat, ne.lat);\n ne.lng = Math.max(ne2.lng, ne.lng);\n }\n\n return this;\n },\n // @method pad(bufferRatio: Number): LatLngBounds\n // Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\n // For example, a ratio of 0.5 extends the bounds by 50% in each direction.\n // Negative values will retract the bounds.\n pad: function pad(bufferRatio) {\n var sw = this._southWest,\n ne = this._northEast,\n heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\n widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\n return new LatLngBounds(new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer), new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\n },\n // @method getCenter(): LatLng\n // Returns the center point of the bounds.\n getCenter: function getCenter() {\n return new LatLng((this._southWest.lat + this._northEast.lat) / 2, (this._southWest.lng + this._northEast.lng) / 2);\n },\n // @method getSouthWest(): LatLng\n // Returns the south-west point of the bounds.\n getSouthWest: function getSouthWest() {\n return this._southWest;\n },\n // @method getNorthEast(): LatLng\n // Returns the north-east point of the bounds.\n getNorthEast: function getNorthEast() {\n return this._northEast;\n },\n // @method getNorthWest(): LatLng\n // Returns the north-west point of the bounds.\n getNorthWest: function getNorthWest() {\n return new LatLng(this.getNorth(), this.getWest());\n },\n // @method getSouthEast(): LatLng\n // Returns the south-east point of the bounds.\n getSouthEast: function getSouthEast() {\n return new LatLng(this.getSouth(), this.getEast());\n },\n // @method getWest(): Number\n // Returns the west longitude of the bounds\n getWest: function getWest() {\n return this._southWest.lng;\n },\n // @method getSouth(): Number\n // Returns the south latitude of the bounds\n getSouth: function getSouth() {\n return this._southWest.lat;\n },\n // @method getEast(): Number\n // Returns the east longitude of the bounds\n getEast: function getEast() {\n return this._northEast.lng;\n },\n // @method getNorth(): Number\n // Returns the north latitude of the bounds\n getNorth: function getNorth() {\n return this._northEast.lat;\n },\n // @method contains(otherBounds: LatLngBounds): Boolean\n // Returns `true` if the rectangle contains the given one.\n // @alternative\n // @method contains (latlng: LatLng): Boolean\n // Returns `true` if the rectangle contains the given point.\n contains: function contains(obj) {\n // (LatLngBounds) or (LatLng) -> Boolean\n if (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\n obj = toLatLng(obj);\n } else {\n obj = toLatLngBounds(obj);\n }\n\n var sw = this._southWest,\n ne = this._northEast,\n sw2,\n ne2;\n\n if (obj instanceof LatLngBounds) {\n sw2 = obj.getSouthWest();\n ne2 = obj.getNorthEast();\n } else {\n sw2 = ne2 = obj;\n }\n\n return sw2.lat >= sw.lat && ne2.lat <= ne.lat && sw2.lng >= sw.lng && ne2.lng <= ne.lng;\n },\n // @method intersects(otherBounds: LatLngBounds): Boolean\n // Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\n intersects: function intersects(bounds) {\n bounds = toLatLngBounds(bounds);\n var sw = this._southWest,\n ne = this._northEast,\n sw2 = bounds.getSouthWest(),\n ne2 = bounds.getNorthEast(),\n latIntersects = ne2.lat >= sw.lat && sw2.lat <= ne.lat,\n lngIntersects = ne2.lng >= sw.lng && sw2.lng <= ne.lng;\n return latIntersects && lngIntersects;\n },\n // @method overlaps(otherBounds: LatLngBounds): Boolean\n // Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\n overlaps: function overlaps(bounds) {\n bounds = toLatLngBounds(bounds);\n var sw = this._southWest,\n ne = this._northEast,\n sw2 = bounds.getSouthWest(),\n ne2 = bounds.getNorthEast(),\n latOverlaps = ne2.lat > sw.lat && sw2.lat < ne.lat,\n lngOverlaps = ne2.lng > sw.lng && sw2.lng < ne.lng;\n return latOverlaps && lngOverlaps;\n },\n // @method toBBoxString(): String\n // Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\n toBBoxString: function toBBoxString() {\n return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\n },\n // @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\n // Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\n equals: function equals(bounds, maxMargin) {\n if (!bounds) {\n return false;\n }\n\n bounds = toLatLngBounds(bounds);\n return this._southWest.equals(bounds.getSouthWest(), maxMargin) && this._northEast.equals(bounds.getNorthEast(), maxMargin);\n },\n // @method isValid(): Boolean\n // Returns `true` if the bounds are properly initialized.\n isValid: function isValid() {\n return !!(this._southWest && this._northEast);\n }\n }; // TODO International date line?\n // @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\n // Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\n // @alternative\n // @factory L.latLngBounds(latlngs: LatLng[])\n // Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\n\n function toLatLngBounds(a, b) {\n if (a instanceof LatLngBounds) {\n return a;\n }\n\n return new LatLngBounds(a, b);\n }\n /* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\n\n\n function LatLng(lat, lng, alt) {\n if (isNaN(lat) || isNaN(lng)) {\n throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\n } // @property lat: Number\n // Latitude in degrees\n\n\n this.lat = +lat; // @property lng: Number\n // Longitude in degrees\n\n this.lng = +lng; // @property alt: Number\n // Altitude in meters (optional)\n\n if (alt !== undefined) {\n this.alt = +alt;\n }\n }\n\n LatLng.prototype = {\n // @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\n // Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\n equals: function equals(obj, maxMargin) {\n if (!obj) {\n return false;\n }\n\n obj = toLatLng(obj);\n var margin = Math.max(Math.abs(this.lat - obj.lat), Math.abs(this.lng - obj.lng));\n return margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\n },\n // @method toString(): String\n // Returns a string representation of the point (for debugging purposes).\n toString: function toString(precision) {\n return 'LatLng(' + formatNum(this.lat, precision) + ', ' + formatNum(this.lng, precision) + ')';\n },\n // @method distanceTo(otherLatLng: LatLng): Number\n // Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\n distanceTo: function distanceTo(other) {\n return Earth.distance(this, toLatLng(other));\n },\n // @method wrap(): LatLng\n // Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\n wrap: function wrap() {\n return Earth.wrapLatLng(this);\n },\n // @method toBounds(sizeInMeters: Number): LatLngBounds\n // Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\n toBounds: function toBounds(sizeInMeters) {\n var latAccuracy = 180 * sizeInMeters / 40075017,\n lngAccuracy = latAccuracy / Math.cos(Math.PI / 180 * this.lat);\n return toLatLngBounds([this.lat - latAccuracy, this.lng - lngAccuracy], [this.lat + latAccuracy, this.lng + lngAccuracy]);\n },\n clone: function clone() {\n return new LatLng(this.lat, this.lng, this.alt);\n }\n }; // @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\n // Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\n // @alternative\n // @factory L.latLng(coords: Array): LatLng\n // Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\n // @alternative\n // @factory L.latLng(coords: Object): LatLng\n // Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\n\n function toLatLng(a, b, c) {\n if (a instanceof LatLng) {\n return a;\n }\n\n if (isArray(a) && _typeof(a[0]) !== 'object') {\n if (a.length === 3) {\n return new LatLng(a[0], a[1], a[2]);\n }\n\n if (a.length === 2) {\n return new LatLng(a[0], a[1]);\n }\n\n return null;\n }\n\n if (a === undefined || a === null) {\n return a;\n }\n\n if (_typeof(a) === 'object' && 'lat' in a) {\n return new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\n }\n\n if (b === undefined) {\n return null;\n }\n\n return new LatLng(a, b, c);\n }\n /*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](http://en.wikipedia.org/wiki/Coordinate_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leaflet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\n\n\n var CRS = {\n // @method latLngToPoint(latlng: LatLng, zoom: Number): Point\n // Projects geographical coordinates into pixel coordinates for a given zoom.\n latLngToPoint: function latLngToPoint(latlng, zoom) {\n var projectedPoint = this.projection.project(latlng),\n scale = this.scale(zoom);\n return this.transformation._transform(projectedPoint, scale);\n },\n // @method pointToLatLng(point: Point, zoom: Number): LatLng\n // The inverse of `latLngToPoint`. Projects pixel coordinates on a given\n // zoom into geographical coordinates.\n pointToLatLng: function pointToLatLng(point, zoom) {\n var scale = this.scale(zoom),\n untransformedPoint = this.transformation.untransform(point, scale);\n return this.projection.unproject(untransformedPoint);\n },\n // @method project(latlng: LatLng): Point\n // Projects geographical coordinates into coordinates in units accepted for\n // this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\n project: function project(latlng) {\n return this.projection.project(latlng);\n },\n // @method unproject(point: Point): LatLng\n // Given a projected coordinate returns the corresponding LatLng.\n // The inverse of `project`.\n unproject: function unproject(point) {\n return this.projection.unproject(point);\n },\n // @method scale(zoom: Number): Number\n // Returns the scale used when transforming projected coordinates into\n // pixel coordinates for a particular zoom. For example, it returns\n // `256 * 2^zoom` for Mercator-based CRS.\n scale: function scale(zoom) {\n return 256 * Math.pow(2, zoom);\n },\n // @method zoom(scale: Number): Number\n // Inverse of `scale()`, returns the zoom level corresponding to a scale\n // factor of `scale`.\n zoom: function zoom(scale) {\n return Math.log(scale / 256) / Math.LN2;\n },\n // @method getProjectedBounds(zoom: Number): Bounds\n // Returns the projection's bounds scaled and transformed for the provided `zoom`.\n getProjectedBounds: function getProjectedBounds(zoom) {\n if (this.infinite) {\n return null;\n }\n\n var b = this.projection.bounds,\n s = this.scale(zoom),\n min = this.transformation.transform(b.min, s),\n max = this.transformation.transform(b.max, s);\n return new Bounds(min, max);\n },\n // @method distance(latlng1: LatLng, latlng2: LatLng): Number\n // Returns the distance between two geographical coordinates.\n // @property code: String\n // Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\n //\n // @property wrapLng: Number[]\n // An array of two numbers defining whether the longitude (horizontal) coordinate\n // axis wraps around a given range and how. Defaults to `[-180, 180]` in most\n // geographical CRSs. If `undefined`, the longitude axis does not wrap around.\n //\n // @property wrapLat: Number[]\n // Like `wrapLng`, but for the latitude (vertical) axis.\n // wrapLng: [min, max],\n // wrapLat: [min, max],\n // @property infinite: Boolean\n // If true, the coordinate space will be unbounded (infinite in both axes)\n infinite: false,\n // @method wrapLatLng(latlng: LatLng): LatLng\n // Returns a `LatLng` where lat and lng has been wrapped according to the\n // CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\n wrapLatLng: function wrapLatLng(latlng) {\n var lng = this.wrapLng ? wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\n lat = this.wrapLat ? wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\n alt = latlng.alt;\n return new LatLng(lat, lng, alt);\n },\n // @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\n // Returns a `LatLngBounds` with the same size as the given one, ensuring\n // that its center is within the CRS's bounds.\n // Only accepts actual `L.LatLngBounds` instances, not arrays.\n wrapLatLngBounds: function wrapLatLngBounds(bounds) {\n var center = bounds.getCenter(),\n newCenter = this.wrapLatLng(center),\n latShift = center.lat - newCenter.lat,\n lngShift = center.lng - newCenter.lng;\n\n if (latShift === 0 && lngShift === 0) {\n return bounds;\n }\n\n var sw = bounds.getSouthWest(),\n ne = bounds.getNorthEast(),\n newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\n newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\n return new LatLngBounds(newSw, newNe);\n }\n };\n /*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\n var Earth = extend({}, CRS, {\n wrapLng: [-180, 180],\n // Mean Earth Radius, as recommended for use by\n // the International Union of Geodesy and Geophysics,\n // see http://rosettacode.org/wiki/Haversine_formula\n R: 6371000,\n // distance between two geographical points using spherical law of cosines approximation\n distance: function distance(latlng1, latlng2) {\n var rad = Math.PI / 180,\n lat1 = latlng1.lat * rad,\n lat2 = latlng2.lat * rad,\n sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n return this.R * c;\n }\n });\n /*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection — the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\n\n var earthRadius = 6378137;\n var SphericalMercator = {\n R: earthRadius,\n MAX_LATITUDE: 85.0511287798,\n project: function project(latlng) {\n var d = Math.PI / 180,\n max = this.MAX_LATITUDE,\n lat = Math.max(Math.min(max, latlng.lat), -max),\n sin = Math.sin(lat * d);\n return new Point(this.R * latlng.lng * d, this.R * Math.log((1 + sin) / (1 - sin)) / 2);\n },\n unproject: function unproject(point) {\n var d = 180 / Math.PI;\n return new LatLng((2 * Math.atan(Math.exp(point.y / this.R)) - Math.PI / 2) * d, point.x * d / this.R);\n },\n bounds: function () {\n var d = earthRadius * Math.PI;\n return new Bounds([-d, -d], [d, d]);\n }()\n };\n /*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), // L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); // L.point(1, 2)\r\n * ```\r\n */\n // factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\n // Creates a `Transformation` object with the given coefficients.\n\n function Transformation(a, b, c, d) {\n if (isArray(a)) {\n // use array properties\n this._a = a[0];\n this._b = a[1];\n this._c = a[2];\n this._d = a[3];\n return;\n }\n\n this._a = a;\n this._b = b;\n this._c = c;\n this._d = d;\n }\n\n Transformation.prototype = {\n // @method transform(point: Point, scale?: Number): Point\n // Returns a transformed point, optionally multiplied by the given scale.\n // Only accepts actual `L.Point` instances, not arrays.\n transform: function transform(point, scale) {\n // (Point, Number) -> Point\n return this._transform(point.clone(), scale);\n },\n // destructive transform (faster)\n _transform: function _transform(point, scale) {\n scale = scale || 1;\n point.x = scale * (this._a * point.x + this._b);\n point.y = scale * (this._c * point.y + this._d);\n return point;\n },\n // @method untransform(point: Point, scale?: Number): Point\n // Returns the reverse transformation of the given point, optionally divided\n // by the given scale. Only accepts actual `L.Point` instances, not arrays.\n untransform: function untransform(point, scale) {\n scale = scale || 1;\n return new Point((point.x / scale - this._b) / this._a, (point.y / scale - this._d) / this._c);\n }\n }; // factory L.transformation(a: Number, b: Number, c: Number, d: Number)\n // @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\n // Instantiates a Transformation object with the given coefficients.\n // @alternative\n // @factory L.transformation(coefficients: Array): Transformation\n // Expects an coefficients array of the form\n // `[a: Number, b: Number, c: Number, d: Number]`.\n\n function toTransformation(a, b, c, d) {\n return new Transformation(a, b, c, d);\n }\n /*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\n\n\n var EPSG3857 = extend({}, Earth, {\n code: 'EPSG:3857',\n projection: SphericalMercator,\n transformation: function () {\n var scale = 0.5 / (Math.PI * SphericalMercator.R);\n return toTransformation(scale, 0.5, -scale, 0.5);\n }()\n });\n var EPSG900913 = extend({}, EPSG3857, {\n code: 'EPSG:900913'\n }); // @namespace SVG; @section\n // There are several static functions which can be called without instantiating L.SVG:\n // @function create(name: String): SVGElement\n // Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n // corresponding to the class name passed. For example, using 'line' will return\n // an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\n\n function svgCreate(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n } // @function pointsToPath(rings: Point[], closed: Boolean): String\n // Generates a SVG path string for multiple rings, with each ring turning\n // into \"M..L..L..\" instructions\n\n\n function pointsToPath(rings, closed) {\n var str = '',\n i,\n j,\n len,\n len2,\n points,\n p;\n\n for (i = 0, len = rings.length; i < len; i++) {\n points = rings[i];\n\n for (j = 0, len2 = points.length; j < len2; j++) {\n p = points[j];\n str += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n } // closes the ring for polygons; \"x\" is VML syntax\n\n\n str += closed ? svg ? 'z' : 'x' : '';\n } // SVG complains about empty path strings\n\n\n return str || 'M0 0';\n }\n /*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n * alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\n\n\n var style$1 = document.documentElement.style; // @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\n\n var ie = ('ActiveXObject' in window); // @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\n\n var ielt9 = ie && !document.addEventListener; // @property edge: Boolean; `true` for the Edge web browser.\n\n var edge = 'msLaunchUri' in navigator && !('documentMode' in document); // @property webkit: Boolean;\n // `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\n\n var webkit = userAgentContains('webkit'); // @property android: Boolean\n // `true` for any browser running on an Android platform.\n\n var android = userAgentContains('android'); // @property android23: Boolean; `true` for browsers running on Android 2 or Android 3.\n\n var android23 = userAgentContains('android 2') || userAgentContains('android 3');\n /* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\n\n var webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\n // @property androidStock: Boolean; `true` for the Android stock browser (i.e. not Chrome)\n\n var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window); // @property opera: Boolean; `true` for the Opera browser\n\n var opera = !!window.opera; // @property chrome: Boolean; `true` for the Chrome browser.\n\n var chrome = !edge && userAgentContains('chrome'); // @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\n\n var gecko = userAgentContains('gecko') && !webkit && !opera && !ie; // @property safari: Boolean; `true` for the Safari browser.\n\n var safari = !chrome && userAgentContains('safari');\n var phantom = userAgentContains('phantom'); // @property opera12: Boolean\n // `true` for the Opera browser supporting CSS transforms (version 12 or later).\n\n var opera12 = ('OTransition' in style$1); // @property win: Boolean; `true` when the browser is running in a Windows platform\n\n var win = navigator.platform.indexOf('Win') === 0; // @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\n\n var ie3d = ie && 'transition' in style$1; // @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\n\n var webkit3d = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() && !android23; // @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\n\n var gecko3d = ('MozPerspective' in style$1); // @property any3d: Boolean\n // `true` for all browsers supporting CSS transforms.\n\n var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom; // @property mobile: Boolean; `true` for all browsers running in a mobile device.\n\n var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile'); // @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\n\n var mobileWebkit = mobile && webkit; // @property mobileWebkit3d: Boolean\n // `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\n\n var mobileWebkit3d = mobile && webkit3d; // @property msPointer: Boolean\n // `true` for browsers implementing the Microsoft touch events model (notably IE10).\n\n var msPointer = !window.PointerEvent && window.MSPointerEvent; // @property pointer: Boolean\n // `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\n\n var pointer = !!(window.PointerEvent || msPointer); // @property touch: Boolean\n // `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\n // This does not necessarily mean that the browser is running in a computer with\n // a touchscreen, it only means that the browser is capable of understanding\n // touch events.\n\n var touch = !window.L_NO_TOUCH && (pointer || 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch); // @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\n\n var mobileOpera = mobile && opera; // @property mobileGecko: Boolean\n // `true` for gecko-based browsers running in a mobile device.\n\n var mobileGecko = mobile && gecko; // @property retina: Boolean\n // `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\n\n var retina = (window.devicePixelRatio || window.screen.deviceXDPI / window.screen.logicalXDPI) > 1; // @property passiveEvents: Boolean\n // `true` for browsers that support passive events.\n\n var passiveEvents = function () {\n var supportsPassiveOption = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n // eslint-disable-line getter-return\n supportsPassiveOption = true;\n }\n });\n window.addEventListener('testPassiveEventSupport', falseFn, opts);\n window.removeEventListener('testPassiveEventSupport', falseFn, opts);\n } catch (e) {// Errors can safely be ignored since this is only a browser support test.\n }\n\n return supportsPassiveOption;\n }(); // @property canvas: Boolean\n // `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\n\n\n var canvas = function () {\n return !!document.createElement('canvas').getContext;\n }(); // @property svg: Boolean\n // `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\n\n\n var svg = !!(document.createElementNS && svgCreate('svg').createSVGRect); // @property vml: Boolean\n // `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\n\n var vml = !svg && function () {\n try {\n var div = document.createElement('div');\n div.innerHTML = '<v:shape adj=\"1\"/>';\n var shape = div.firstChild;\n shape.style.behavior = 'url(#default#VML)';\n return shape && _typeof(shape.adj) === 'object';\n } catch (e) {\n return false;\n }\n }();\n\n function userAgentContains(str) {\n return navigator.userAgent.toLowerCase().indexOf(str) >= 0;\n }\n\n var Browser = {\n ie: ie,\n ielt9: ielt9,\n edge: edge,\n webkit: webkit,\n android: android,\n android23: android23,\n androidStock: androidStock,\n opera: opera,\n chrome: chrome,\n gecko: gecko,\n safari: safari,\n phantom: phantom,\n opera12: opera12,\n win: win,\n ie3d: ie3d,\n webkit3d: webkit3d,\n gecko3d: gecko3d,\n any3d: any3d,\n mobile: mobile,\n mobileWebkit: mobileWebkit,\n mobileWebkit3d: mobileWebkit3d,\n msPointer: msPointer,\n pointer: pointer,\n touch: touch,\n mobileOpera: mobileOpera,\n mobileGecko: mobileGecko,\n retina: retina,\n passiveEvents: passiveEvents,\n canvas: canvas,\n svg: svg,\n vml: vml\n };\n /*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\n var POINTER_DOWN = msPointer ? 'MSPointerDown' : 'pointerdown';\n var POINTER_MOVE = msPointer ? 'MSPointerMove' : 'pointermove';\n var POINTER_UP = msPointer ? 'MSPointerUp' : 'pointerup';\n var POINTER_CANCEL = msPointer ? 'MSPointerCancel' : 'pointercancel';\n var _pointers = {};\n var _pointerDocListener = false; // Provides a touch events wrapper for (ms)pointer events.\n // ref http://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\n function addPointerListener(obj, type, handler, id) {\n if (type === 'touchstart') {\n _addPointerStart(obj, handler, id);\n } else if (type === 'touchmove') {\n _addPointerMove(obj, handler, id);\n } else if (type === 'touchend') {\n _addPointerEnd(obj, handler, id);\n }\n\n return this;\n }\n\n function removePointerListener(obj, type, id) {\n var handler = obj['_leaflet_' + type + id];\n\n if (type === 'touchstart') {\n obj.removeEventListener(POINTER_DOWN, handler, false);\n } else if (type === 'touchmove') {\n obj.removeEventListener(POINTER_MOVE, handler, false);\n } else if (type === 'touchend') {\n obj.removeEventListener(POINTER_UP, handler, false);\n obj.removeEventListener(POINTER_CANCEL, handler, false);\n }\n\n return this;\n }\n\n function _addPointerStart(obj, handler, id) {\n var onDown = bind(function (e) {\n // IE10 specific: MsTouch needs preventDefault. See #2000\n if (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {\n preventDefault(e);\n }\n\n _handlePointer(e, handler);\n });\n obj['_leaflet_touchstart' + id] = onDown;\n obj.addEventListener(POINTER_DOWN, onDown, false); // need to keep track of what pointers and how many are active to provide e.touches emulation\n\n if (!_pointerDocListener) {\n // we listen document as any drags that end by moving the touch off the screen get fired there\n document.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n document.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n document.addEventListener(POINTER_UP, _globalPointerUp, true);\n document.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n _pointerDocListener = true;\n }\n }\n\n function _globalPointerDown(e) {\n _pointers[e.pointerId] = e;\n }\n\n function _globalPointerMove(e) {\n if (_pointers[e.pointerId]) {\n _pointers[e.pointerId] = e;\n }\n }\n\n function _globalPointerUp(e) {\n delete _pointers[e.pointerId];\n }\n\n function _handlePointer(e, handler) {\n e.touches = [];\n\n for (var i in _pointers) {\n e.touches.push(_pointers[i]);\n }\n\n e.changedTouches = [e];\n handler(e);\n }\n\n function _addPointerMove(obj, handler, id) {\n var onMove = function onMove(e) {\n // don't fire touch moves when mouse isn't down\n if (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse') && e.buttons === 0) {\n return;\n }\n\n _handlePointer(e, handler);\n };\n\n obj['_leaflet_touchmove' + id] = onMove;\n obj.addEventListener(POINTER_MOVE, onMove, false);\n }\n\n function _addPointerEnd(obj, handler, id) {\n var onUp = function onUp(e) {\n _handlePointer(e, handler);\n };\n\n obj['_leaflet_touchend' + id] = onUp;\n obj.addEventListener(POINTER_UP, onUp, false);\n obj.addEventListener(POINTER_CANCEL, onUp, false);\n }\n /*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n */\n\n\n var _touchstart = msPointer ? 'MSPointerDown' : pointer ? 'pointerdown' : 'touchstart';\n\n var _touchend = msPointer ? 'MSPointerUp' : pointer ? 'pointerup' : 'touchend';\n\n var _pre = '_leaflet_'; // inspired by Zepto touch code by Thomas Fuchs\n\n function addDoubleTapListener(obj, handler, id) {\n var last,\n touch$$1,\n doubleTap = false,\n delay = 250;\n\n function onTouchStart(e) {\n if (pointer) {\n if (!e.isPrimary) {\n return;\n }\n\n if (e.pointerType === 'mouse') {\n return;\n } // mouse fires native dblclick\n\n } else if (e.touches.length > 1) {\n return;\n }\n\n var now = Date.now(),\n delta = now - (last || now);\n touch$$1 = e.touches ? e.touches[0] : e;\n doubleTap = delta > 0 && delta <= delay;\n last = now;\n }\n\n function onTouchEnd(e) {\n if (doubleTap && !touch$$1.cancelBubble) {\n if (pointer) {\n if (e.pointerType === 'mouse') {\n return;\n } // work around .type being readonly with MSPointer* events\n\n\n var newTouch = {},\n prop,\n i;\n\n for (i in touch$$1) {\n prop = touch$$1[i];\n newTouch[i] = prop && prop.bind ? prop.bind(touch$$1) : prop;\n }\n\n touch$$1 = newTouch;\n }\n\n touch$$1.type = 'dblclick';\n touch$$1.button = 0;\n handler(touch$$1);\n last = null;\n }\n }\n\n obj[_pre + _touchstart + id] = onTouchStart;\n obj[_pre + _touchend + id] = onTouchEnd;\n obj[_pre + 'dblclick' + id] = handler;\n obj.addEventListener(_touchstart, onTouchStart, passiveEvents ? {\n passive: false\n } : false);\n obj.addEventListener(_touchend, onTouchEnd, passiveEvents ? {\n passive: false\n } : false); // On some platforms (notably, chrome<55 on win10 + touchscreen + mouse),\n // the browser doesn't fire touchend/pointerup events but does fire\n // native dblclicks. See #4127.\n // Edge 14 also fires native dblclicks, but only for pointerType mouse, see #5180.\n\n obj.addEventListener('dblclick', handler, false);\n return this;\n }\n\n function removeDoubleTapListener(obj, id) {\n var touchstart = obj[_pre + _touchstart + id],\n touchend = obj[_pre + _touchend + id],\n dblclick = obj[_pre + 'dblclick' + id];\n obj.removeEventListener(_touchstart, touchstart, passiveEvents ? {\n passive: false\n } : false);\n obj.removeEventListener(_touchend, touchend, passiveEvents ? {\n passive: false\n } : false);\n obj.removeEventListener('dblclick', dblclick, false);\n return this;\n }\n /*\r\n * @namespace DomUtil\r\n *\r\n * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)\r\n * tree, used by Leaflet internally.\r\n *\r\n * Most functions expecting or returning a `HTMLElement` also work for\r\n * SVG elements. The only difference is that classes refer to CSS classes\r\n * in HTML and SVG classes in SVG.\r\n */\n // @property TRANSFORM: String\n // Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).\n\n\n var TRANSFORM = testProp(['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']); // webkitTransition comes first because some browser versions that drop vendor prefix don't do\n // the same for the transitionend event, in particular the Android 4.1 stock browser\n // @property TRANSITION: String\n // Vendor-prefixed transition style name.\n\n var TRANSITION = testProp(['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']); // @property TRANSITION_END: String\n // Vendor-prefixed transitionend event name.\n\n var TRANSITION_END = TRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend'; // @function get(id: String|HTMLElement): HTMLElement\n // Returns an element given its DOM id, or returns the element itself\n // if it was passed directly.\n\n function get(id) {\n return typeof id === 'string' ? document.getElementById(id) : id;\n } // @function getStyle(el: HTMLElement, styleAttrib: String): String\n // Returns the value for a certain style attribute on an element,\n // including computed values or values set through CSS.\n\n\n function getStyle(el, style) {\n var value = el.style[style] || el.currentStyle && el.currentStyle[style];\n\n if ((!value || value === 'auto') && document.defaultView) {\n var css = document.defaultView.getComputedStyle(el, null);\n value = css ? css[style] : null;\n }\n\n return value === 'auto' ? null : value;\n } // @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement\n // Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.\n\n\n function create$1(tagName, className, container) {\n var el = document.createElement(tagName);\n el.className = className || '';\n\n if (container) {\n container.appendChild(el);\n }\n\n return el;\n } // @function remove(el: HTMLElement)\n // Removes `el` from its parent element\n\n\n function _remove(el) {\n var parent = el.parentNode;\n\n if (parent) {\n parent.removeChild(el);\n }\n } // @function empty(el: HTMLElement)\n // Removes all of `el`'s children elements from `el`\n\n\n function empty(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n } // @function toFront(el: HTMLElement)\n // Makes `el` the last child of its parent, so it renders in front of the other children.\n\n\n function toFront(el) {\n var parent = el.parentNode;\n\n if (parent && parent.lastChild !== el) {\n parent.appendChild(el);\n }\n } // @function toBack(el: HTMLElement)\n // Makes `el` the first child of its parent, so it renders behind the other children.\n\n\n function toBack(el) {\n var parent = el.parentNode;\n\n if (parent && parent.firstChild !== el) {\n parent.insertBefore(el, parent.firstChild);\n }\n } // @function hasClass(el: HTMLElement, name: String): Boolean\n // Returns `true` if the element's class attribute contains `name`.\n\n\n function hasClass(el, name) {\n if (el.classList !== undefined) {\n return el.classList.contains(name);\n }\n\n var className = getClass(el);\n return className.length > 0 && new RegExp('(^|\\\\s)' + name + '(\\\\s|$)').test(className);\n } // @function addClass(el: HTMLElement, name: String)\n // Adds `name` to the element's class attribute.\n\n\n function addClass(el, name) {\n if (el.classList !== undefined) {\n var classes = splitWords(name);\n\n for (var i = 0, len = classes.length; i < len; i++) {\n el.classList.add(classes[i]);\n }\n } else if (!hasClass(el, name)) {\n var className = getClass(el);\n setClass(el, (className ? className + ' ' : '') + name);\n }\n } // @function removeClass(el: HTMLElement, name: String)\n // Removes `name` from the element's class attribute.\n\n\n function removeClass(el, name) {\n if (el.classList !== undefined) {\n el.classList.remove(name);\n } else {\n setClass(el, trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));\n }\n } // @function setClass(el: HTMLElement, name: String)\n // Sets the element's class.\n\n\n function setClass(el, name) {\n if (el.className.baseVal === undefined) {\n el.className = name;\n } else {\n // in case of SVG element\n el.className.baseVal = name;\n }\n } // @function getClass(el: HTMLElement): String\n // Returns the element's class.\n\n\n function getClass(el) {\n // Check if the element is an SVGElementInstance and use the correspondingElement instead\n // (Required for linked SVG elements in IE11.)\n if (el.correspondingElement) {\n el = el.correspondingElement;\n }\n\n return el.className.baseVal === undefined ? el.className : el.className.baseVal;\n } // @function setOpacity(el: HTMLElement, opacity: Number)\n // Set the opacity of an element (including old IE support).\n // `opacity` must be a number from `0` to `1`.\n\n\n function _setOpacity(el, value) {\n if ('opacity' in el.style) {\n el.style.opacity = value;\n } else if ('filter' in el.style) {\n _setOpacityIE(el, value);\n }\n }\n\n function _setOpacityIE(el, value) {\n var filter = false,\n filterName = 'DXImageTransform.Microsoft.Alpha'; // filters collection throws an error if we try to retrieve a filter that doesn't exist\n\n try {\n filter = el.filters.item(filterName);\n } catch (e) {\n // don't set opacity to 1 if we haven't already set an opacity,\n // it isn't needed and breaks transparent pngs.\n if (value === 1) {\n return;\n }\n }\n\n value = Math.round(value * 100);\n\n if (filter) {\n filter.Enabled = value !== 100;\n filter.Opacity = value;\n } else {\n el.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';\n }\n } // @function testProp(props: String[]): String|false\n // Goes through the array of style names and returns the first name\n // that is a valid style name for an element. If no such name is found,\n // it returns false. Useful for vendor-prefixed styles like `transform`.\n\n\n function testProp(props) {\n var style = document.documentElement.style;\n\n for (var i = 0; i < props.length; i++) {\n if (props[i] in style) {\n return props[i];\n }\n }\n\n return false;\n } // @function setTransform(el: HTMLElement, offset: Point, scale?: Number)\n // Resets the 3D CSS transform of `el` so it is translated by `offset` pixels\n // and optionally scaled by `scale`. Does not have an effect if the\n // browser doesn't support 3D CSS transforms.\n\n\n function setTransform(el, offset, scale) {\n var pos = offset || new Point(0, 0);\n el.style[TRANSFORM] = (ie3d ? 'translate(' + pos.x + 'px,' + pos.y + 'px)' : 'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') + (scale ? ' scale(' + scale + ')' : '');\n } // @function setPosition(el: HTMLElement, position: Point)\n // Sets the position of `el` to coordinates specified by `position`,\n // using CSS translate or top/left positioning depending on the browser\n // (used by Leaflet internally to position its layers).\n\n\n function setPosition(el, point) {\n /*eslint-disable */\n el._leaflet_pos = point;\n /* eslint-enable */\n\n if (any3d) {\n setTransform(el, point);\n } else {\n el.style.left = point.x + 'px';\n el.style.top = point.y + 'px';\n }\n } // @function getPosition(el: HTMLElement): Point\n // Returns the coordinates of an element previously positioned with setPosition.\n\n\n function getPosition(el) {\n // this method is only used for elements previously positioned using setPosition,\n // so it's safe to cache the position for performance\n return el._leaflet_pos || new Point(0, 0);\n } // @function disableTextSelection()\n // Prevents the user from generating `selectstart` DOM events, usually generated\n // when the user drags the mouse through a page with text. Used internally\n // by Leaflet to override the behaviour of any click-and-drag interaction on\n // the map. Affects drag interactions on the whole document.\n // @function enableTextSelection()\n // Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).\n\n\n var disableTextSelection;\n var enableTextSelection;\n\n var _userSelect;\n\n if ('onselectstart' in document) {\n disableTextSelection = function disableTextSelection() {\n on(window, 'selectstart', preventDefault);\n };\n\n enableTextSelection = function enableTextSelection() {\n off(window, 'selectstart', preventDefault);\n };\n } else {\n var userSelectProperty = testProp(['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);\n\n disableTextSelection = function disableTextSelection() {\n if (userSelectProperty) {\n var style = document.documentElement.style;\n _userSelect = style[userSelectProperty];\n style[userSelectProperty] = 'none';\n }\n };\n\n enableTextSelection = function enableTextSelection() {\n if (userSelectProperty) {\n document.documentElement.style[userSelectProperty] = _userSelect;\n _userSelect = undefined;\n }\n };\n } // @function disableImageDrag()\n // As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but\n // for `dragstart` DOM events, usually generated when the user drags an image.\n\n\n function disableImageDrag() {\n on(window, 'dragstart', preventDefault);\n } // @function enableImageDrag()\n // Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).\n\n\n function enableImageDrag() {\n off(window, 'dragstart', preventDefault);\n }\n\n var _outlineElement, _outlineStyle; // @function preventOutline(el: HTMLElement)\n // Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)\n // of the element `el` invisible. Used internally by Leaflet to prevent\n // focusable elements from displaying an outline when the user performs a\n // drag interaction on them.\n\n\n function preventOutline(element) {\n while (element.tabIndex === -1) {\n element = element.parentNode;\n }\n\n if (!element.style) {\n return;\n }\n\n restoreOutline();\n _outlineElement = element;\n _outlineStyle = element.style.outline;\n element.style.outline = 'none';\n on(window, 'keydown', restoreOutline);\n } // @function restoreOutline()\n // Cancels the effects of a previous [`L.DomUtil.preventOutline`]().\n\n\n function restoreOutline() {\n if (!_outlineElement) {\n return;\n }\n\n _outlineElement.style.outline = _outlineStyle;\n _outlineElement = undefined;\n _outlineStyle = undefined;\n off(window, 'keydown', restoreOutline);\n } // @function getSizedParentNode(el: HTMLElement): HTMLElement\n // Finds the closest parent node which size (width and height) is not null.\n\n\n function getSizedParentNode(element) {\n do {\n element = element.parentNode;\n } while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);\n\n return element;\n } // @function getScale(el: HTMLElement): Object\n // Computes the CSS scale currently applied on the element.\n // Returns an object with `x` and `y` members as horizontal and vertical scales respectively,\n // and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\n\n\n function getScale(element) {\n var rect = element.getBoundingClientRect(); // Read-only in old browsers.\n\n return {\n x: rect.width / element.offsetWidth || 1,\n y: rect.height / element.offsetHeight || 1,\n boundingClientRect: rect\n };\n }\n\n var DomUtil = {\n TRANSFORM: TRANSFORM,\n TRANSITION: TRANSITION,\n TRANSITION_END: TRANSITION_END,\n get: get,\n getStyle: getStyle,\n create: create$1,\n remove: _remove,\n empty: empty,\n toFront: toFront,\n toBack: toBack,\n hasClass: hasClass,\n addClass: addClass,\n removeClass: removeClass,\n setClass: setClass,\n getClass: getClass,\n setOpacity: _setOpacity,\n testProp: testProp,\n setTransform: setTransform,\n setPosition: setPosition,\n getPosition: getPosition,\n disableTextSelection: disableTextSelection,\n enableTextSelection: enableTextSelection,\n disableImageDrag: disableImageDrag,\n enableImageDrag: enableImageDrag,\n preventOutline: preventOutline,\n restoreOutline: restoreOutline,\n getSizedParentNode: getSizedParentNode,\n getScale: getScale\n };\n /*\r\n * @namespace DomEvent\r\n * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.\r\n */\n // Inspired by John Resig, Dean Edwards and YUI addEvent implementations.\n // @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this\n // Adds a listener function (`fn`) to a particular DOM event type of the\n // element `el`. You can optionally specify the context of the listener\n // (object the `this` keyword will point to). You can also pass several\n // space-separated types (e.g. `'click dblclick'`).\n // @alternative\n // @function on(el: HTMLElement, eventMap: Object, context?: Object): this\n // Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\n\n function on(obj, types, fn, context) {\n if (_typeof(types) === 'object') {\n for (var type in types) {\n addOne(obj, type, types[type], fn);\n }\n } else {\n types = splitWords(types);\n\n for (var i = 0, len = types.length; i < len; i++) {\n addOne(obj, types[i], fn, context);\n }\n }\n\n return this;\n }\n\n var eventsKey = '_leaflet_events'; // @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this\n // Removes a previously added listener function.\n // Note that if you passed a custom context to on, you must pass the same\n // context to `off` in order to remove the listener.\n // @alternative\n // @function off(el: HTMLElement, eventMap: Object, context?: Object): this\n // Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\n\n function off(obj, types, fn, context) {\n if (_typeof(types) === 'object') {\n for (var type in types) {\n removeOne(obj, type, types[type], fn);\n }\n } else if (types) {\n types = splitWords(types);\n\n for (var i = 0, len = types.length; i < len; i++) {\n removeOne(obj, types[i], fn, context);\n }\n } else {\n for (var j in obj[eventsKey]) {\n removeOne(obj, j, obj[eventsKey][j]);\n }\n\n delete obj[eventsKey];\n }\n\n return this;\n }\n\n function browserFiresNativeDblClick() {\n // See https://github.com/w3c/pointerevents/issues/171\n if (pointer) {\n return !(edge || safari);\n }\n }\n\n var mouseSubst = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout',\n wheel: !('onwheel' in window) && 'mousewheel'\n };\n\n function addOne(obj, type, fn, context) {\n var id = type + stamp(fn) + (context ? '_' + stamp(context) : '');\n\n if (obj[eventsKey] && obj[eventsKey][id]) {\n return this;\n }\n\n var handler = function handler(e) {\n return fn.call(context || obj, e || window.event);\n };\n\n var originalHandler = handler;\n\n if (pointer && type.indexOf('touch') === 0) {\n // Needs DomEvent.Pointer.js\n addPointerListener(obj, type, handler, id);\n } else if (touch && type === 'dblclick' && !browserFiresNativeDblClick()) {\n addDoubleTapListener(obj, handler, id);\n } else if ('addEventListener' in obj) {\n if (type === 'touchstart' || type === 'touchmove' || type === 'wheel' || type === 'mousewheel') {\n obj.addEventListener(mouseSubst[type] || type, handler, passiveEvents ? {\n passive: false\n } : false);\n } else if (type === 'mouseenter' || type === 'mouseleave') {\n handler = function handler(e) {\n e = e || window.event;\n\n if (isExternalTarget(obj, e)) {\n originalHandler(e);\n }\n };\n\n obj.addEventListener(mouseSubst[type], handler, false);\n } else {\n obj.addEventListener(type, originalHandler, false);\n }\n } else if ('attachEvent' in obj) {\n obj.attachEvent('on' + type, handler);\n }\n\n obj[eventsKey] = obj[eventsKey] || {};\n obj[eventsKey][id] = handler;\n }\n\n function removeOne(obj, type, fn, context) {\n var id = type + stamp(fn) + (context ? '_' + stamp(context) : ''),\n handler = obj[eventsKey] && obj[eventsKey][id];\n\n if (!handler) {\n return this;\n }\n\n if (pointer && type.indexOf('touch') === 0) {\n removePointerListener(obj, type, id);\n } else if (touch && type === 'dblclick' && !browserFiresNativeDblClick()) {\n removeDoubleTapListener(obj, id);\n } else if ('removeEventListener' in obj) {\n obj.removeEventListener(mouseSubst[type] || type, handler, false);\n } else if ('detachEvent' in obj) {\n obj.detachEvent('on' + type, handler);\n }\n\n obj[eventsKey][id] = null;\n } // @function stopPropagation(ev: DOMEvent): this\n // Stop the given event from propagation to parent elements. Used inside the listener functions:\n // ```js\n // L.DomEvent.on(div, 'click', function (ev) {\n // \tL.DomEvent.stopPropagation(ev);\n // });\n // ```\n\n\n function stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n } else if (e.originalEvent) {\n // In case of Leaflet event.\n e.originalEvent._stopped = true;\n } else {\n e.cancelBubble = true;\n }\n\n skipped(e);\n return this;\n } // @function disableScrollPropagation(el: HTMLElement): this\n // Adds `stopPropagation` to the element's `'wheel'` events (plus browser variants).\n\n\n function disableScrollPropagation(el) {\n addOne(el, 'wheel', stopPropagation);\n return this;\n } // @function disableClickPropagation(el: HTMLElement): this\n // Adds `stopPropagation` to the element's `'click'`, `'doubleclick'`,\n // `'mousedown'` and `'touchstart'` events (plus browser variants).\n\n\n function disableClickPropagation(el) {\n on(el, 'mousedown touchstart dblclick', stopPropagation);\n addOne(el, 'click', fakeStop);\n return this;\n } // @function preventDefault(ev: DOMEvent): this\n // Prevents the default action of the DOM Event `ev` from happening (such as\n // following a link in the href of the a element, or doing a POST request\n // with page reload when a `<form>` is submitted).\n // Use it inside listener functions.\n\n\n function preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n\n return this;\n } // @function stop(ev: DOMEvent): this\n // Does `stopPropagation` and `preventDefault` at the same time.\n\n\n function stop(e) {\n preventDefault(e);\n stopPropagation(e);\n return this;\n } // @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point\n // Gets normalized mouse position from a DOM event relative to the\n // `container` (border excluded) or to the whole page if not specified.\n\n\n function getMousePosition(e, container) {\n if (!container) {\n return new Point(e.clientX, e.clientY);\n }\n\n var scale = getScale(container),\n offset = scale.boundingClientRect; // left and top values are in page scale (like the event clientX/Y)\n\n return new Point( // offset.left/top values are in page scale (like clientX/Y),\n // whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).\n (e.clientX - offset.left) / scale.x - container.clientLeft, (e.clientY - offset.top) / scale.y - container.clientTop);\n } // Chrome on Win scrolls double the pixels as in other platforms (see #4538),\n // and Firefox scrolls device pixels, not CSS pixels\n\n\n var wheelPxFactor = win && chrome ? 2 * window.devicePixelRatio : gecko ? window.devicePixelRatio : 1; // @function getWheelDelta(ev: DOMEvent): Number\n // Gets normalized wheel delta from a wheel DOM event, in vertical\n // pixels scrolled (negative if scrolling down).\n // Events from pointing devices without precise scrolling are mapped to\n // a best guess of 60 pixels.\n\n function getWheelDelta(e) {\n return edge ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta\n e.deltaY && e.deltaMode === 0 ? -e.deltaY / wheelPxFactor : // Pixels\n e.deltaY && e.deltaMode === 1 ? -e.deltaY * 20 : // Lines\n e.deltaY && e.deltaMode === 2 ? -e.deltaY * 60 : // Pages\n e.deltaX || e.deltaZ ? 0 : // Skip horizontal/depth wheel events\n e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels\n e.detail && Math.abs(e.detail) < 32765 ? -e.detail * 20 : // Legacy Moz lines\n e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages\n 0;\n }\n\n var skipEvents = {};\n\n function fakeStop(e) {\n // fakes stopPropagation by setting a special event flag, checked/reset with skipped(e)\n skipEvents[e.type] = true;\n }\n\n function skipped(e) {\n var events = skipEvents[e.type]; // reset when checking, as it's only used in map container and propagates outside of the map\n\n skipEvents[e.type] = false;\n return events;\n } // check if element really left/entered the event target (for mouseenter/mouseleave)\n\n\n function isExternalTarget(el, e) {\n var related = e.relatedTarget;\n\n if (!related) {\n return true;\n }\n\n try {\n while (related && related !== el) {\n related = related.parentNode;\n }\n } catch (err) {\n return false;\n }\n\n return related !== el;\n }\n\n var DomEvent = {\n on: on,\n off: off,\n stopPropagation: stopPropagation,\n disableScrollPropagation: disableScrollPropagation,\n disableClickPropagation: disableClickPropagation,\n preventDefault: preventDefault,\n stop: stop,\n getMousePosition: getMousePosition,\n getWheelDelta: getWheelDelta,\n fakeStop: fakeStop,\n skipped: skipped,\n isExternalTarget: isExternalTarget,\n addListener: on,\n removeListener: off\n };\n /*\n * @class PosAnimation\n * @aka L.PosAnimation\n * @inherits Evented\n * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.\n *\n * @example\n * ```js\n * var fx = new L.PosAnimation();\n * fx.run(el, [300, 500], 0.5);\n * ```\n *\n * @constructor L.PosAnimation()\n * Creates a `PosAnimation` object.\n *\n */\n\n var PosAnimation = Evented.extend({\n // @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)\n // Run an animation of a given element to a new position, optionally setting\n // duration in seconds (`0.25` by default) and easing linearity factor (3rd\n // argument of the [cubic bezier curve](http://cubic-bezier.com/#0,0,.5,1),\n // `0.5` by default).\n run: function run(el, newPos, duration, easeLinearity) {\n this.stop();\n this._el = el;\n this._inProgress = true;\n this._duration = duration || 0.25;\n this._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);\n this._startPos = getPosition(el);\n this._offset = newPos.subtract(this._startPos);\n this._startTime = +new Date(); // @event start: Event\n // Fired when the animation starts\n\n this.fire('start');\n\n this._animate();\n },\n // @method stop()\n // Stops the animation (if currently running).\n stop: function stop() {\n if (!this._inProgress) {\n return;\n }\n\n this._step(true);\n\n this._complete();\n },\n _animate: function _animate() {\n // animation loop\n this._animId = requestAnimFrame(this._animate, this);\n\n this._step();\n },\n _step: function _step(round) {\n var elapsed = +new Date() - this._startTime,\n duration = this._duration * 1000;\n\n if (elapsed < duration) {\n this._runFrame(this._easeOut(elapsed / duration), round);\n } else {\n this._runFrame(1);\n\n this._complete();\n }\n },\n _runFrame: function _runFrame(progress, round) {\n var pos = this._startPos.add(this._offset.multiplyBy(progress));\n\n if (round) {\n pos._round();\n }\n\n setPosition(this._el, pos); // @event step: Event\n // Fired continuously during the animation.\n\n this.fire('step');\n },\n _complete: function _complete() {\n cancelAnimFrame(this._animId);\n this._inProgress = false; // @event end: Event\n // Fired when the animation ends.\n\n this.fire('end');\n },\n _easeOut: function _easeOut(t) {\n return 1 - Math.pow(1 - t, this._easeOutPower);\n }\n });\n /*\r\n * @class Map\r\n * @aka L.Map\r\n * @inherits Evented\r\n *\r\n * The central class of the API — it is used to create a map on a page and manipulate it.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * // initialize the map on the \"map\" div with a given center and zoom\r\n * var map = L.map('map', {\r\n * \tcenter: [51.505, -0.09],\r\n * \tzoom: 13\r\n * });\r\n * ```\r\n *\r\n */\n\n var Map = Evented.extend({\n options: {\n // @section Map State Options\n // @option crs: CRS = L.CRS.EPSG3857\n // The [Coordinate Reference System](#crs) to use. Don't change this if you're not\n // sure what it means.\n crs: EPSG3857,\n // @option center: LatLng = undefined\n // Initial geographic center of the map\n center: undefined,\n // @option zoom: Number = undefined\n // Initial map zoom level\n zoom: undefined,\n // @option minZoom: Number = *\n // Minimum zoom level of the map.\n // If not specified and at least one `GridLayer` or `TileLayer` is in the map,\n // the lowest of their `minZoom` options will be used instead.\n minZoom: undefined,\n // @option maxZoom: Number = *\n // Maximum zoom level of the map.\n // If not specified and at least one `GridLayer` or `TileLayer` is in the map,\n // the highest of their `maxZoom` options will be used instead.\n maxZoom: undefined,\n // @option layers: Layer[] = []\n // Array of layers that will be added to the map initially\n layers: [],\n // @option maxBounds: LatLngBounds = null\n // When this option is set, the map restricts the view to the given\n // geographical bounds, bouncing the user back if the user tries to pan\n // outside the view. To set the restriction dynamically, use\n // [`setMaxBounds`](#map-setmaxbounds) method.\n maxBounds: undefined,\n // @option renderer: Renderer = *\n // The default method for drawing vector layers on the map. `L.SVG`\n // or `L.Canvas` by default depending on browser support.\n renderer: undefined,\n // @section Animation Options\n // @option zoomAnimation: Boolean = true\n // Whether the map zoom animation is enabled. By default it's enabled\n // in all browsers that support CSS3 Transitions except Android.\n zoomAnimation: true,\n // @option zoomAnimationThreshold: Number = 4\n // Won't animate zoom if the zoom difference exceeds this value.\n zoomAnimationThreshold: 4,\n // @option fadeAnimation: Boolean = true\n // Whether the tile fade animation is enabled. By default it's enabled\n // in all browsers that support CSS3 Transitions except Android.\n fadeAnimation: true,\n // @option markerZoomAnimation: Boolean = true\n // Whether markers animate their zoom with the zoom animation, if disabled\n // they will disappear for the length of the animation. By default it's\n // enabled in all browsers that support CSS3 Transitions except Android.\n markerZoomAnimation: true,\n // @option transform3DLimit: Number = 2^23\n // Defines the maximum size of a CSS translation transform. The default\n // value should not be changed unless a web browser positions layers in\n // the wrong place after doing a large `panBy`.\n transform3DLimit: 8388608,\n // Precision limit of a 32-bit float\n // @section Interaction Options\n // @option zoomSnap: Number = 1\n // Forces the map's zoom level to always be a multiple of this, particularly\n // right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.\n // By default, the zoom level snaps to the nearest integer; lower values\n // (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`\n // means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.\n zoomSnap: 1,\n // @option zoomDelta: Number = 1\n // Controls how much the map's zoom level will change after a\n // [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`\n // or `-` on the keyboard, or using the [zoom controls](#control-zoom).\n // Values smaller than `1` (e.g. `0.5`) allow for greater granularity.\n zoomDelta: 1,\n // @option trackResize: Boolean = true\n // Whether the map automatically handles browser window resize to update itself.\n trackResize: true\n },\n initialize: function initialize(id, options) {\n // (HTMLElement or String, Object)\n options = setOptions(this, options); // Make sure to assign internal flags at the beginning,\n // to avoid inconsistent state in some edge cases.\n\n this._handlers = [];\n this._layers = {};\n this._zoomBoundLayers = {};\n this._sizeChanged = true;\n\n this._initContainer(id);\n\n this._initLayout(); // hack for https://github.com/Leaflet/Leaflet/issues/1980\n\n\n this._onResize = bind(this._onResize, this);\n\n this._initEvents();\n\n if (options.maxBounds) {\n this.setMaxBounds(options.maxBounds);\n }\n\n if (options.zoom !== undefined) {\n this._zoom = this._limitZoom(options.zoom);\n }\n\n if (options.center && options.zoom !== undefined) {\n this.setView(toLatLng(options.center), options.zoom, {\n reset: true\n });\n }\n\n this.callInitHooks(); // don't animate on browsers without hardware-accelerated transitions or old Android/Opera\n\n this._zoomAnimated = TRANSITION && any3d && !mobileOpera && this.options.zoomAnimation; // zoom transitions run with the same duration for all layers, so if one of transitionend events\n // happens after starting zoom animation (propagating to the map pane), we know that it ended globally\n\n if (this._zoomAnimated) {\n this._createAnimProxy();\n\n on(this._proxy, TRANSITION_END, this._catchTransitionEnd, this);\n }\n\n this._addLayers(this.options.layers);\n },\n // @section Methods for modifying map state\n // @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this\n // Sets the view of the map (geographical center and zoom) with the given\n // animation options.\n setView: function setView(center, zoom, options) {\n zoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);\n center = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);\n options = options || {};\n\n this._stop();\n\n if (this._loaded && !options.reset && options !== true) {\n if (options.animate !== undefined) {\n options.zoom = extend({\n animate: options.animate\n }, options.zoom);\n options.pan = extend({\n animate: options.animate,\n duration: options.duration\n }, options.pan);\n } // try animating pan or zoom\n\n\n var moved = this._zoom !== zoom ? this._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) : this._tryAnimatedPan(center, options.pan);\n\n if (moved) {\n // prevent resize handler call, the view will refresh after animation anyway\n clearTimeout(this._sizeTimer);\n return this;\n }\n } // animation didn't start, just reset the map view\n\n\n this._resetView(center, zoom);\n\n return this;\n },\n // @method setZoom(zoom: Number, options?: Zoom/pan options): this\n // Sets the zoom of the map.\n setZoom: function setZoom(zoom, options) {\n if (!this._loaded) {\n this._zoom = zoom;\n return this;\n }\n\n return this.setView(this.getCenter(), zoom, {\n zoom: options\n });\n },\n // @method zoomIn(delta?: Number, options?: Zoom options): this\n // Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\n zoomIn: function zoomIn(delta, options) {\n delta = delta || (any3d ? this.options.zoomDelta : 1);\n return this.setZoom(this._zoom + delta, options);\n },\n // @method zoomOut(delta?: Number, options?: Zoom options): this\n // Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\n zoomOut: function zoomOut(delta, options) {\n delta = delta || (any3d ? this.options.zoomDelta : 1);\n return this.setZoom(this._zoom - delta, options);\n },\n // @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this\n // Zooms the map while keeping a specified geographical point on the map\n // stationary (e.g. used internally for scroll zoom and double-click zoom).\n // @alternative\n // @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this\n // Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.\n setZoomAround: function setZoomAround(latlng, zoom, options) {\n var scale = this.getZoomScale(zoom),\n viewHalf = this.getSize().divideBy(2),\n containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),\n centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\n newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));\n return this.setView(newCenter, zoom, {\n zoom: options\n });\n },\n _getBoundsCenterZoom: function _getBoundsCenterZoom(bounds, options) {\n options = options || {};\n bounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\n var paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\n paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\n zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\n zoom = typeof options.maxZoom === 'number' ? Math.min(options.maxZoom, zoom) : zoom;\n\n if (zoom === Infinity) {\n return {\n center: bounds.getCenter(),\n zoom: zoom\n };\n }\n\n var paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),\n swPoint = this.project(bounds.getSouthWest(), zoom),\n nePoint = this.project(bounds.getNorthEast(), zoom),\n center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);\n return {\n center: center,\n zoom: zoom\n };\n },\n // @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this\n // Sets a map view that contains the given geographical bounds with the\n // maximum zoom level possible.\n fitBounds: function fitBounds(bounds, options) {\n bounds = toLatLngBounds(bounds);\n\n if (!bounds.isValid()) {\n throw new Error('Bounds are not valid.');\n }\n\n var target = this._getBoundsCenterZoom(bounds, options);\n\n return this.setView(target.center, target.zoom, options);\n },\n // @method fitWorld(options?: fitBounds options): this\n // Sets a map view that mostly contains the whole world with the maximum\n // zoom level possible.\n fitWorld: function fitWorld(options) {\n return this.fitBounds([[-90, -180], [90, 180]], options);\n },\n // @method panTo(latlng: LatLng, options?: Pan options): this\n // Pans the map to a given center.\n panTo: function panTo(center, options) {\n // (LatLng)\n return this.setView(center, this._zoom, {\n pan: options\n });\n },\n // @method panBy(offset: Point, options?: Pan options): this\n // Pans the map by a given number of pixels (animated).\n panBy: function panBy(offset, options) {\n offset = toPoint(offset).round();\n options = options || {};\n\n if (!offset.x && !offset.y) {\n return this.fire('moveend');\n } // If we pan too far, Chrome gets issues with tiles\n // and makes them disappear or appear in the wrong place (slightly offset) #2602\n\n\n if (options.animate !== true && !this.getSize().contains(offset)) {\n this._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());\n\n return this;\n }\n\n if (!this._panAnim) {\n this._panAnim = new PosAnimation();\n\n this._panAnim.on({\n 'step': this._onPanTransitionStep,\n 'end': this._onPanTransitionEnd\n }, this);\n } // don't fire movestart if animating inertia\n\n\n if (!options.noMoveStart) {\n this.fire('movestart');\n } // animate pan unless animate: false specified\n\n\n if (options.animate !== false) {\n addClass(this._mapPane, 'leaflet-pan-anim');\n\n var newPos = this._getMapPanePos().subtract(offset).round();\n\n this._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);\n } else {\n this._rawPanBy(offset);\n\n this.fire('move').fire('moveend');\n }\n\n return this;\n },\n // @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this\n // Sets the view of the map (geographical center and zoom) performing a smooth\n // pan-zoom animation.\n flyTo: function flyTo(targetCenter, targetZoom, options) {\n options = options || {};\n\n if (options.animate === false || !any3d) {\n return this.setView(targetCenter, targetZoom, options);\n }\n\n this._stop();\n\n var from = this.project(this.getCenter()),\n to = this.project(targetCenter),\n size = this.getSize(),\n startZoom = this._zoom;\n targetCenter = toLatLng(targetCenter);\n targetZoom = targetZoom === undefined ? startZoom : targetZoom;\n var w0 = Math.max(size.x, size.y),\n w1 = w0 * this.getZoomScale(startZoom, targetZoom),\n u1 = to.distanceTo(from) || 1,\n rho = 1.42,\n rho2 = rho * rho;\n\n function r(i) {\n var s1 = i ? -1 : 1,\n s2 = i ? w1 : w0,\n t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,\n b1 = 2 * s2 * rho2 * u1,\n b = t1 / b1,\n sq = Math.sqrt(b * b + 1) - b; // workaround for floating point precision bug when sq = 0, log = -Infinite,\n // thus triggering an infinite loop in flyTo\n\n var log = sq < 0.000000001 ? -18 : Math.log(sq);\n return log;\n }\n\n function sinh(n) {\n return (Math.exp(n) - Math.exp(-n)) / 2;\n }\n\n function cosh(n) {\n return (Math.exp(n) + Math.exp(-n)) / 2;\n }\n\n function tanh(n) {\n return sinh(n) / cosh(n);\n }\n\n var r0 = r(0);\n\n function w(s) {\n return w0 * (cosh(r0) / cosh(r0 + rho * s));\n }\n\n function u(s) {\n return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2;\n }\n\n function easeOut(t) {\n return 1 - Math.pow(1 - t, 1.5);\n }\n\n var start = Date.now(),\n S = (r(1) - r0) / rho,\n duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;\n\n function frame() {\n var t = (Date.now() - start) / duration,\n s = easeOut(t) * S;\n\n if (t <= 1) {\n this._flyToFrame = requestAnimFrame(frame, this);\n\n this._move(this.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom), this.getScaleZoom(w0 / w(s), startZoom), {\n flyTo: true\n });\n } else {\n this._move(targetCenter, targetZoom)._moveEnd(true);\n }\n }\n\n this._moveStart(true, options.noMoveStart);\n\n frame.call(this);\n return this;\n },\n // @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\n // Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\n // but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\n flyToBounds: function flyToBounds(bounds, options) {\n var target = this._getBoundsCenterZoom(bounds, options);\n\n return this.flyTo(target.center, target.zoom, options);\n },\n // @method setMaxBounds(bounds: LatLngBounds): this\n // Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).\n setMaxBounds: function setMaxBounds(bounds) {\n bounds = toLatLngBounds(bounds);\n\n if (!bounds.isValid()) {\n this.options.maxBounds = null;\n return this.off('moveend', this._panInsideMaxBounds);\n } else if (this.options.maxBounds) {\n this.off('moveend', this._panInsideMaxBounds);\n }\n\n this.options.maxBounds = bounds;\n\n if (this._loaded) {\n this._panInsideMaxBounds();\n }\n\n return this.on('moveend', this._panInsideMaxBounds);\n },\n // @method setMinZoom(zoom: Number): this\n // Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).\n setMinZoom: function setMinZoom(zoom) {\n var oldZoom = this.options.minZoom;\n this.options.minZoom = zoom;\n\n if (this._loaded && oldZoom !== zoom) {\n this.fire('zoomlevelschange');\n\n if (this.getZoom() < this.options.minZoom) {\n return this.setZoom(zoom);\n }\n }\n\n return this;\n },\n // @method setMaxZoom(zoom: Number): this\n // Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).\n setMaxZoom: function setMaxZoom(zoom) {\n var oldZoom = this.options.maxZoom;\n this.options.maxZoom = zoom;\n\n if (this._loaded && oldZoom !== zoom) {\n this.fire('zoomlevelschange');\n\n if (this.getZoom() > this.options.maxZoom) {\n return this.setZoom(zoom);\n }\n }\n\n return this;\n },\n // @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this\n // Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.\n panInsideBounds: function panInsideBounds(bounds, options) {\n this._enforcingBounds = true;\n\n var center = this.getCenter(),\n newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));\n\n if (!center.equals(newCenter)) {\n this.panTo(newCenter, options);\n }\n\n this._enforcingBounds = false;\n return this;\n },\n // @method panInside(latlng: LatLng, options?: options): this\n // Pans the map the minimum amount to make the `latlng` visible. Use\n // `padding`, `paddingTopLeft` and `paddingTopRight` options to fit\n // the display to more restricted bounds, like [`fitBounds`](#map-fitbounds).\n // If `latlng` is already within the (optionally padded) display bounds,\n // the map will not be panned.\n panInside: function panInside(latlng, options) {\n options = options || {};\n var paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\n paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\n center = this.getCenter(),\n pixelCenter = this.project(center),\n pixelPoint = this.project(latlng),\n pixelBounds = this.getPixelBounds(),\n halfPixelBounds = pixelBounds.getSize().divideBy(2),\n paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]);\n\n if (!paddedBounds.contains(pixelPoint)) {\n this._enforcingBounds = true;\n var diff = pixelCenter.subtract(pixelPoint),\n newCenter = toPoint(pixelPoint.x + diff.x, pixelPoint.y + diff.y);\n\n if (pixelPoint.x < paddedBounds.min.x || pixelPoint.x > paddedBounds.max.x) {\n newCenter.x = pixelCenter.x - diff.x;\n\n if (diff.x > 0) {\n newCenter.x += halfPixelBounds.x - paddingTL.x;\n } else {\n newCenter.x -= halfPixelBounds.x - paddingBR.x;\n }\n }\n\n if (pixelPoint.y < paddedBounds.min.y || pixelPoint.y > paddedBounds.max.y) {\n newCenter.y = pixelCenter.y - diff.y;\n\n if (diff.y > 0) {\n newCenter.y += halfPixelBounds.y - paddingTL.y;\n } else {\n newCenter.y -= halfPixelBounds.y - paddingBR.y;\n }\n }\n\n this.panTo(this.unproject(newCenter), options);\n this._enforcingBounds = false;\n }\n\n return this;\n },\n // @method invalidateSize(options: Zoom/pan options): this\n // Checks if the map container size changed and updates the map if so —\n // call it after you've changed the map size dynamically, also animating\n // pan by default. If `options.pan` is `false`, panning will not occur.\n // If `options.debounceMoveend` is `true`, it will delay `moveend` event so\n // that it doesn't happen often even if the method is called many\n // times in a row.\n // @alternative\n // @method invalidateSize(animate: Boolean): this\n // Checks if the map container size changed and updates the map if so —\n // call it after you've changed the map size dynamically, also animating\n // pan by default.\n invalidateSize: function invalidateSize(options) {\n if (!this._loaded) {\n return this;\n }\n\n options = extend({\n animate: false,\n pan: true\n }, options === true ? {\n animate: true\n } : options);\n var oldSize = this.getSize();\n this._sizeChanged = true;\n this._lastCenter = null;\n var newSize = this.getSize(),\n oldCenter = oldSize.divideBy(2).round(),\n newCenter = newSize.divideBy(2).round(),\n offset = oldCenter.subtract(newCenter);\n\n if (!offset.x && !offset.y) {\n return this;\n }\n\n if (options.animate && options.pan) {\n this.panBy(offset);\n } else {\n if (options.pan) {\n this._rawPanBy(offset);\n }\n\n this.fire('move');\n\n if (options.debounceMoveend) {\n clearTimeout(this._sizeTimer);\n this._sizeTimer = setTimeout(bind(this.fire, this, 'moveend'), 200);\n } else {\n this.fire('moveend');\n }\n } // @section Map state change events\n // @event resize: ResizeEvent\n // Fired when the map is resized.\n\n\n return this.fire('resize', {\n oldSize: oldSize,\n newSize: newSize\n });\n },\n // @section Methods for modifying map state\n // @method stop(): this\n // Stops the currently running `panTo` or `flyTo` animation, if any.\n stop: function stop() {\n this.setZoom(this._limitZoom(this._zoom));\n\n if (!this.options.zoomSnap) {\n this.fire('viewreset');\n }\n\n return this._stop();\n },\n // @section Geolocation methods\n // @method locate(options?: Locate options): this\n // Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)\n // event with location data on success or a [`locationerror`](#map-locationerror) event on failure,\n // and optionally sets the map view to the user's location with respect to\n // detection accuracy (or to the world view if geolocation failed).\n // Note that, if your page doesn't use HTTPS, this method will fail in\n // modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))\n // See `Locate options` for more details.\n locate: function locate(options) {\n options = this._locateOptions = extend({\n timeout: 10000,\n watch: false // setView: false\n // maxZoom: <Number>\n // maximumAge: 0\n // enableHighAccuracy: false\n\n }, options);\n\n if (!('geolocation' in navigator)) {\n this._handleGeolocationError({\n code: 0,\n message: 'Geolocation not supported.'\n });\n\n return this;\n }\n\n var onResponse = bind(this._handleGeolocationResponse, this),\n onError = bind(this._handleGeolocationError, this);\n\n if (options.watch) {\n this._locationWatchId = navigator.geolocation.watchPosition(onResponse, onError, options);\n } else {\n navigator.geolocation.getCurrentPosition(onResponse, onError, options);\n }\n\n return this;\n },\n // @method stopLocate(): this\n // Stops watching location previously initiated by `map.locate({watch: true})`\n // and aborts resetting the map view if map.locate was called with\n // `{setView: true}`.\n stopLocate: function stopLocate() {\n if (navigator.geolocation && navigator.geolocation.clearWatch) {\n navigator.geolocation.clearWatch(this._locationWatchId);\n }\n\n if (this._locateOptions) {\n this._locateOptions.setView = false;\n }\n\n return this;\n },\n _handleGeolocationError: function _handleGeolocationError(error) {\n var c = error.code,\n message = error.message || (c === 1 ? 'permission denied' : c === 2 ? 'position unavailable' : 'timeout');\n\n if (this._locateOptions.setView && !this._loaded) {\n this.fitWorld();\n } // @section Location events\n // @event locationerror: ErrorEvent\n // Fired when geolocation (using the [`locate`](#map-locate) method) failed.\n\n\n this.fire('locationerror', {\n code: c,\n message: 'Geolocation error: ' + message + '.'\n });\n },\n _handleGeolocationResponse: function _handleGeolocationResponse(pos) {\n var lat = pos.coords.latitude,\n lng = pos.coords.longitude,\n latlng = new LatLng(lat, lng),\n bounds = latlng.toBounds(pos.coords.accuracy * 2),\n options = this._locateOptions;\n\n if (options.setView) {\n var zoom = this.getBoundsZoom(bounds);\n this.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\n }\n\n var data = {\n latlng: latlng,\n bounds: bounds,\n timestamp: pos.timestamp\n };\n\n for (var i in pos.coords) {\n if (typeof pos.coords[i] === 'number') {\n data[i] = pos.coords[i];\n }\n } // @event locationfound: LocationEvent\n // Fired when geolocation (using the [`locate`](#map-locate) method)\n // went successfully.\n\n\n this.fire('locationfound', data);\n },\n // TODO Appropriate docs section?\n // @section Other Methods\n // @method addHandler(name: String, HandlerClass: Function): this\n // Adds a new `Handler` to the map, given its name and constructor function.\n addHandler: function addHandler(name, HandlerClass) {\n if (!HandlerClass) {\n return this;\n }\n\n var handler = this[name] = new HandlerClass(this);\n\n this._handlers.push(handler);\n\n if (this.options[name]) {\n handler.enable();\n }\n\n return this;\n },\n // @method remove(): this\n // Destroys the map and clears all related event listeners.\n remove: function remove() {\n this._initEvents(true);\n\n this.off('moveend', this._panInsideMaxBounds);\n\n if (this._containerId !== this._container._leaflet_id) {\n throw new Error('Map container is being reused by another instance');\n }\n\n try {\n // throws error in IE6-8\n delete this._container._leaflet_id;\n delete this._containerId;\n } catch (e) {\n /*eslint-disable */\n this._container._leaflet_id = undefined;\n /* eslint-enable */\n\n this._containerId = undefined;\n }\n\n if (this._locationWatchId !== undefined) {\n this.stopLocate();\n }\n\n this._stop();\n\n _remove(this._mapPane);\n\n if (this._clearControlPos) {\n this._clearControlPos();\n }\n\n if (this._resizeRequest) {\n cancelAnimFrame(this._resizeRequest);\n this._resizeRequest = null;\n }\n\n this._clearHandlers();\n\n if (this._loaded) {\n // @section Map state change events\n // @event unload: Event\n // Fired when the map is destroyed with [remove](#map-remove) method.\n this.fire('unload');\n }\n\n var i;\n\n for (i in this._layers) {\n this._layers[i].remove();\n }\n\n for (i in this._panes) {\n _remove(this._panes[i]);\n }\n\n this._layers = [];\n this._panes = [];\n delete this._mapPane;\n delete this._renderer;\n return this;\n },\n // @section Other Methods\n // @method createPane(name: String, container?: HTMLElement): HTMLElement\n // Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,\n // then returns it. The pane is created as a child of `container`, or\n // as a child of the main map pane if not set.\n createPane: function createPane(name, container) {\n var className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),\n pane = create$1('div', className, container || this._mapPane);\n\n if (name) {\n this._panes[name] = pane;\n }\n\n return pane;\n },\n // @section Methods for Getting Map State\n // @method getCenter(): LatLng\n // Returns the geographical center of the map view\n getCenter: function getCenter() {\n this._checkIfLoaded();\n\n if (this._lastCenter && !this._moved()) {\n return this._lastCenter;\n }\n\n return this.layerPointToLatLng(this._getCenterLayerPoint());\n },\n // @method getZoom(): Number\n // Returns the current zoom level of the map view\n getZoom: function getZoom() {\n return this._zoom;\n },\n // @method getBounds(): LatLngBounds\n // Returns the geographical bounds visible in the current map view\n getBounds: function getBounds() {\n var bounds = this.getPixelBounds(),\n sw = this.unproject(bounds.getBottomLeft()),\n ne = this.unproject(bounds.getTopRight());\n return new LatLngBounds(sw, ne);\n },\n // @method getMinZoom(): Number\n // Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.\n getMinZoom: function getMinZoom() {\n return this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;\n },\n // @method getMaxZoom(): Number\n // Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).\n getMaxZoom: function getMaxZoom() {\n return this.options.maxZoom === undefined ? this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom : this.options.maxZoom;\n },\n // @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number\n // Returns the maximum zoom level on which the given bounds fit to the map\n // view in its entirety. If `inside` (optional) is set to `true`, the method\n // instead returns the minimum zoom level on which the map view fits into\n // the given bounds in its entirety.\n getBoundsZoom: function getBoundsZoom(bounds, inside, padding) {\n // (LatLngBounds[, Boolean, Point]) -> Number\n bounds = toLatLngBounds(bounds);\n padding = toPoint(padding || [0, 0]);\n var zoom = this.getZoom() || 0,\n min = this.getMinZoom(),\n max = this.getMaxZoom(),\n nw = bounds.getNorthWest(),\n se = bounds.getSouthEast(),\n size = this.getSize().subtract(padding),\n boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\n snap = any3d ? this.options.zoomSnap : 1,\n scalex = size.x / boundsSize.x,\n scaley = size.y / boundsSize.y,\n scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\n zoom = this.getScaleZoom(scale, zoom);\n\n if (snap) {\n zoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\n\n zoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\n }\n\n return Math.max(min, Math.min(max, zoom));\n },\n // @method getSize(): Point\n // Returns the current size of the map container (in pixels).\n getSize: function getSize() {\n if (!this._size || this._sizeChanged) {\n this._size = new Point(this._container.clientWidth || 0, this._container.clientHeight || 0);\n this._sizeChanged = false;\n }\n\n return this._size.clone();\n },\n // @method getPixelBounds(): Bounds\n // Returns the bounds of the current map view in projected pixel\n // coordinates (sometimes useful in layer and overlay implementations).\n getPixelBounds: function getPixelBounds(center, zoom) {\n var topLeftPoint = this._getTopLeftPoint(center, zoom);\n\n return new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\n },\n // TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to\n // the map pane? \"left point of the map layer\" can be confusing, specially\n // since there can be negative offsets.\n // @method getPixelOrigin(): Point\n // Returns the projected pixel coordinates of the top left point of\n // the map layer (useful in custom layer and overlay implementations).\n getPixelOrigin: function getPixelOrigin() {\n this._checkIfLoaded();\n\n return this._pixelOrigin;\n },\n // @method getPixelWorldBounds(zoom?: Number): Bounds\n // Returns the world's bounds in pixel coordinates for zoom level `zoom`.\n // If `zoom` is omitted, the map's current zoom level is used.\n getPixelWorldBounds: function getPixelWorldBounds(zoom) {\n return this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);\n },\n // @section Other Methods\n // @method getPane(pane: String|HTMLElement): HTMLElement\n // Returns a [map pane](#map-pane), given its name or its HTML element (its identity).\n getPane: function getPane(pane) {\n return typeof pane === 'string' ? this._panes[pane] : pane;\n },\n // @method getPanes(): Object\n // Returns a plain object containing the names of all [panes](#map-pane) as keys and\n // the panes as values.\n getPanes: function getPanes() {\n return this._panes;\n },\n // @method getContainer: HTMLElement\n // Returns the HTML element that contains the map.\n getContainer: function getContainer() {\n return this._container;\n },\n // @section Conversion Methods\n // @method getZoomScale(toZoom: Number, fromZoom: Number): Number\n // Returns the scale factor to be applied to a map transition from zoom level\n // `fromZoom` to `toZoom`. Used internally to help with zoom animations.\n getZoomScale: function getZoomScale(toZoom, fromZoom) {\n // TODO replace with universal implementation after refactoring projections\n var crs = this.options.crs;\n fromZoom = fromZoom === undefined ? this._zoom : fromZoom;\n return crs.scale(toZoom) / crs.scale(fromZoom);\n },\n // @method getScaleZoom(scale: Number, fromZoom: Number): Number\n // Returns the zoom level that the map would end up at, if it is at `fromZoom`\n // level and everything is scaled by a factor of `scale`. Inverse of\n // [`getZoomScale`](#map-getZoomScale).\n getScaleZoom: function getScaleZoom(scale, fromZoom) {\n var crs = this.options.crs;\n fromZoom = fromZoom === undefined ? this._zoom : fromZoom;\n var zoom = crs.zoom(scale * crs.scale(fromZoom));\n return isNaN(zoom) ? Infinity : zoom;\n },\n // @method project(latlng: LatLng, zoom: Number): Point\n // Projects a geographical coordinate `LatLng` according to the projection\n // of the map's CRS, then scales it according to `zoom` and the CRS's\n // `Transformation`. The result is pixel coordinate relative to\n // the CRS origin.\n project: function project(latlng, zoom) {\n zoom = zoom === undefined ? this._zoom : zoom;\n return this.options.crs.latLngToPoint(toLatLng(latlng), zoom);\n },\n // @method unproject(point: Point, zoom: Number): LatLng\n // Inverse of [`project`](#map-project).\n unproject: function unproject(point, zoom) {\n zoom = zoom === undefined ? this._zoom : zoom;\n return this.options.crs.pointToLatLng(toPoint(point), zoom);\n },\n // @method layerPointToLatLng(point: Point): LatLng\n // Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\n // returns the corresponding geographical coordinate (for the current zoom level).\n layerPointToLatLng: function layerPointToLatLng(point) {\n var projectedPoint = toPoint(point).add(this.getPixelOrigin());\n return this.unproject(projectedPoint);\n },\n // @method latLngToLayerPoint(latlng: LatLng): Point\n // Given a geographical coordinate, returns the corresponding pixel coordinate\n // relative to the [origin pixel](#map-getpixelorigin).\n latLngToLayerPoint: function latLngToLayerPoint(latlng) {\n var projectedPoint = this.project(toLatLng(latlng))._round();\n\n return projectedPoint._subtract(this.getPixelOrigin());\n },\n // @method wrapLatLng(latlng: LatLng): LatLng\n // Returns a `LatLng` where `lat` and `lng` has been wrapped according to the\n // map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the\n // CRS's bounds.\n // By default this means longitude is wrapped around the dateline so its\n // value is between -180 and +180 degrees.\n wrapLatLng: function wrapLatLng(latlng) {\n return this.options.crs.wrapLatLng(toLatLng(latlng));\n },\n // @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\n // Returns a `LatLngBounds` with the same size as the given one, ensuring that\n // its center is within the CRS's bounds.\n // By default this means the center longitude is wrapped around the dateline so its\n // value is between -180 and +180 degrees, and the majority of the bounds\n // overlaps the CRS's bounds.\n wrapLatLngBounds: function wrapLatLngBounds(latlng) {\n return this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));\n },\n // @method distance(latlng1: LatLng, latlng2: LatLng): Number\n // Returns the distance between two geographical coordinates according to\n // the map's CRS. By default this measures distance in meters.\n distance: function distance(latlng1, latlng2) {\n return this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));\n },\n // @method containerPointToLayerPoint(point: Point): Point\n // Given a pixel coordinate relative to the map container, returns the corresponding\n // pixel coordinate relative to the [origin pixel](#map-getpixelorigin).\n containerPointToLayerPoint: function containerPointToLayerPoint(point) {\n // (Point)\n return toPoint(point).subtract(this._getMapPanePos());\n },\n // @method layerPointToContainerPoint(point: Point): Point\n // Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\n // returns the corresponding pixel coordinate relative to the map container.\n layerPointToContainerPoint: function layerPointToContainerPoint(point) {\n // (Point)\n return toPoint(point).add(this._getMapPanePos());\n },\n // @method containerPointToLatLng(point: Point): LatLng\n // Given a pixel coordinate relative to the map container, returns\n // the corresponding geographical coordinate (for the current zoom level).\n containerPointToLatLng: function containerPointToLatLng(point) {\n var layerPoint = this.containerPointToLayerPoint(toPoint(point));\n return this.layerPointToLatLng(layerPoint);\n },\n // @method latLngToContainerPoint(latlng: LatLng): Point\n // Given a geographical coordinate, returns the corresponding pixel coordinate\n // relative to the map container.\n latLngToContainerPoint: function latLngToContainerPoint(latlng) {\n return this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\n },\n // @method mouseEventToContainerPoint(ev: MouseEvent): Point\n // Given a MouseEvent object, returns the pixel coordinate relative to the\n // map container where the event took place.\n mouseEventToContainerPoint: function mouseEventToContainerPoint(e) {\n return getMousePosition(e, this._container);\n },\n // @method mouseEventToLayerPoint(ev: MouseEvent): Point\n // Given a MouseEvent object, returns the pixel coordinate relative to\n // the [origin pixel](#map-getpixelorigin) where the event took place.\n mouseEventToLayerPoint: function mouseEventToLayerPoint(e) {\n return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\n },\n // @method mouseEventToLatLng(ev: MouseEvent): LatLng\n // Given a MouseEvent object, returns geographical coordinate where the\n // event took place.\n mouseEventToLatLng: function mouseEventToLatLng(e) {\n // (MouseEvent)\n return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\n },\n // map initialization methods\n _initContainer: function _initContainer(id) {\n var container = this._container = get(id);\n\n if (!container) {\n throw new Error('Map container not found.');\n } else if (container._leaflet_id) {\n throw new Error('Map container is already initialized.');\n }\n\n on(container, 'scroll', this._onScroll, this);\n this._containerId = stamp(container);\n },\n _initLayout: function _initLayout() {\n var container = this._container;\n this._fadeAnimated = this.options.fadeAnimation && any3d;\n addClass(container, 'leaflet-container' + (touch ? ' leaflet-touch' : '') + (retina ? ' leaflet-retina' : '') + (ielt9 ? ' leaflet-oldie' : '') + (safari ? ' leaflet-safari' : '') + (this._fadeAnimated ? ' leaflet-fade-anim' : ''));\n var position = getStyle(container, 'position');\n\n if (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {\n container.style.position = 'relative';\n }\n\n this._initPanes();\n\n if (this._initControlPos) {\n this._initControlPos();\n }\n },\n _initPanes: function _initPanes() {\n var panes = this._panes = {};\n this._paneRenderers = {}; // @section\n //\n // Panes are DOM elements used to control the ordering of layers on the map. You\n // can access panes with [`map.getPane`](#map-getpane) or\n // [`map.getPanes`](#map-getpanes) methods. New panes can be created with the\n // [`map.createPane`](#map-createpane) method.\n //\n // Every map has the following default panes that differ only in zIndex.\n //\n // @pane mapPane: HTMLElement = 'auto'\n // Pane that contains all other map panes\n\n this._mapPane = this.createPane('mapPane', this._container);\n setPosition(this._mapPane, new Point(0, 0)); // @pane tilePane: HTMLElement = 200\n // Pane for `GridLayer`s and `TileLayer`s\n\n this.createPane('tilePane'); // @pane overlayPane: HTMLElement = 400\n // Pane for overlay shadows (e.g. `Marker` shadows)\n\n this.createPane('shadowPane'); // @pane shadowPane: HTMLElement = 500\n // Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s\n\n this.createPane('overlayPane'); // @pane markerPane: HTMLElement = 600\n // Pane for `Icon`s of `Marker`s\n\n this.createPane('markerPane'); // @pane tooltipPane: HTMLElement = 650\n // Pane for `Tooltip`s.\n\n this.createPane('tooltipPane'); // @pane popupPane: HTMLElement = 700\n // Pane for `Popup`s.\n\n this.createPane('popupPane');\n\n if (!this.options.markerZoomAnimation) {\n addClass(panes.markerPane, 'leaflet-zoom-hide');\n addClass(panes.shadowPane, 'leaflet-zoom-hide');\n }\n },\n // private methods that modify map state\n // @section Map state change events\n _resetView: function _resetView(center, zoom) {\n setPosition(this._mapPane, new Point(0, 0));\n var loading = !this._loaded;\n this._loaded = true;\n zoom = this._limitZoom(zoom);\n this.fire('viewprereset');\n var zoomChanged = this._zoom !== zoom;\n\n this._moveStart(zoomChanged, false)._move(center, zoom)._moveEnd(zoomChanged); // @event viewreset: Event\n // Fired when the map needs to redraw its content (this usually happens\n // on map zoom or load). Very useful for creating custom overlays.\n\n\n this.fire('viewreset'); // @event load: Event\n // Fired when the map is initialized (when its center and zoom are set\n // for the first time).\n\n if (loading) {\n this.fire('load');\n }\n },\n _moveStart: function _moveStart(zoomChanged, noMoveStart) {\n // @event zoomstart: Event\n // Fired when the map zoom is about to change (e.g. before zoom animation).\n // @event movestart: Event\n // Fired when the view of the map starts changing (e.g. user starts dragging the map).\n if (zoomChanged) {\n this.fire('zoomstart');\n }\n\n if (!noMoveStart) {\n this.fire('movestart');\n }\n\n return this;\n },\n _move: function _move(center, zoom, data) {\n if (zoom === undefined) {\n zoom = this._zoom;\n }\n\n var zoomChanged = this._zoom !== zoom;\n this._zoom = zoom;\n this._lastCenter = center;\n this._pixelOrigin = this._getNewPixelOrigin(center); // @event zoom: Event\n // Fired repeatedly during any change in zoom level, including zoom\n // and fly animations.\n\n if (zoomChanged || data && data.pinch) {\n // Always fire 'zoom' if pinching because #3530\n this.fire('zoom', data);\n } // @event move: Event\n // Fired repeatedly during any movement of the map, including pan and\n // fly animations.\n\n\n return this.fire('move', data);\n },\n _moveEnd: function _moveEnd(zoomChanged) {\n // @event zoomend: Event\n // Fired when the map has changed, after any animations.\n if (zoomChanged) {\n this.fire('zoomend');\n } // @event moveend: Event\n // Fired when the center of the map stops changing (e.g. user stopped\n // dragging the map).\n\n\n return this.fire('moveend');\n },\n _stop: function _stop() {\n cancelAnimFrame(this._flyToFrame);\n\n if (this._panAnim) {\n this._panAnim.stop();\n }\n\n return this;\n },\n _rawPanBy: function _rawPanBy(offset) {\n setPosition(this._mapPane, this._getMapPanePos().subtract(offset));\n },\n _getZoomSpan: function _getZoomSpan() {\n return this.getMaxZoom() - this.getMinZoom();\n },\n _panInsideMaxBounds: function _panInsideMaxBounds() {\n if (!this._enforcingBounds) {\n this.panInsideBounds(this.options.maxBounds);\n }\n },\n _checkIfLoaded: function _checkIfLoaded() {\n if (!this._loaded) {\n throw new Error('Set map center and zoom first.');\n }\n },\n // DOM event handling\n // @section Interaction events\n _initEvents: function _initEvents(remove$$1) {\n this._targets = {};\n this._targets[stamp(this._container)] = this;\n var onOff = remove$$1 ? off : on; // @event click: MouseEvent\n // Fired when the user clicks (or taps) the map.\n // @event dblclick: MouseEvent\n // Fired when the user double-clicks (or double-taps) the map.\n // @event mousedown: MouseEvent\n // Fired when the user pushes the mouse button on the map.\n // @event mouseup: MouseEvent\n // Fired when the user releases the mouse button on the map.\n // @event mouseover: MouseEvent\n // Fired when the mouse enters the map.\n // @event mouseout: MouseEvent\n // Fired when the mouse leaves the map.\n // @event mousemove: MouseEvent\n // Fired while the mouse moves over the map.\n // @event contextmenu: MouseEvent\n // Fired when the user pushes the right mouse button on the map, prevents\n // default browser context menu from showing if there are listeners on\n // this event. Also fired on mobile when the user holds a single touch\n // for a second (also called long press).\n // @event keypress: KeyboardEvent\n // Fired when the user presses a key from the keyboard that produces a character value while the map is focused.\n // @event keydown: KeyboardEvent\n // Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,\n // the `keydown` event is fired for keys that produce a character value and for keys\n // that do not produce a character value.\n // @event keyup: KeyboardEvent\n // Fired when the user releases a key from the keyboard while the map is focused.\n\n onOff(this._container, 'click dblclick mousedown mouseup ' + 'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);\n\n if (this.options.trackResize) {\n onOff(window, 'resize', this._onResize, this);\n }\n\n if (any3d && this.options.transform3DLimit) {\n (remove$$1 ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);\n }\n },\n _onResize: function _onResize() {\n cancelAnimFrame(this._resizeRequest);\n this._resizeRequest = requestAnimFrame(function () {\n this.invalidateSize({\n debounceMoveend: true\n });\n }, this);\n },\n _onScroll: function _onScroll() {\n this._container.scrollTop = 0;\n this._container.scrollLeft = 0;\n },\n _onMoveEnd: function _onMoveEnd() {\n var pos = this._getMapPanePos();\n\n if (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have\n // a pixel offset on very high values, see: http://jsfiddle.net/dg6r5hhb/\n this._resetView(this.getCenter(), this.getZoom());\n }\n },\n _findEventTargets: function _findEventTargets(e, type) {\n var targets = [],\n target,\n isHover = type === 'mouseout' || type === 'mouseover',\n src = e.target || e.srcElement,\n dragging = false;\n\n while (src) {\n target = this._targets[stamp(src)];\n\n if (target && (type === 'click' || type === 'preclick') && !e._simulated && this._draggableMoved(target)) {\n // Prevent firing click after you just dragged an object.\n dragging = true;\n break;\n }\n\n if (target && target.listens(type, true)) {\n if (isHover && !isExternalTarget(src, e)) {\n break;\n }\n\n targets.push(target);\n\n if (isHover) {\n break;\n }\n }\n\n if (src === this._container) {\n break;\n }\n\n src = src.parentNode;\n }\n\n if (!targets.length && !dragging && !isHover && isExternalTarget(src, e)) {\n targets = [this];\n }\n\n return targets;\n },\n _handleDOMEvent: function _handleDOMEvent(e) {\n if (!this._loaded || skipped(e)) {\n return;\n }\n\n var type = e.type;\n\n if (type === 'mousedown' || type === 'keypress' || type === 'keyup' || type === 'keydown') {\n // prevents outline when clicking on keyboard-focusable element\n preventOutline(e.target || e.srcElement);\n }\n\n this._fireDOMEvent(e, type);\n },\n _mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],\n _fireDOMEvent: function _fireDOMEvent(e, type, targets) {\n if (e.type === 'click') {\n // Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).\n // @event preclick: MouseEvent\n // Fired before mouse click on the map (sometimes useful when you\n // want something to happen on click before any existing click\n // handlers start running).\n var synth = extend({}, e);\n synth.type = 'preclick';\n\n this._fireDOMEvent(synth, synth.type, targets);\n }\n\n if (e._stopped) {\n return;\n } // Find the layer the event is propagating from and its parents.\n\n\n targets = (targets || []).concat(this._findEventTargets(e, type));\n\n if (!targets.length) {\n return;\n }\n\n var target = targets[0];\n\n if (type === 'contextmenu' && target.listens(type, true)) {\n preventDefault(e);\n }\n\n var data = {\n originalEvent: e\n };\n\n if (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {\n var isMarker = target.getLatLng && (!target._radius || target._radius <= 10);\n data.containerPoint = isMarker ? this.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);\n data.layerPoint = this.containerPointToLayerPoint(data.containerPoint);\n data.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);\n }\n\n for (var i = 0; i < targets.length; i++) {\n targets[i].fire(type, data, true);\n\n if (data.originalEvent._stopped || targets[i].options.bubblingMouseEvents === false && indexOf(this._mouseEvents, type) !== -1) {\n return;\n }\n }\n },\n _draggableMoved: function _draggableMoved(obj) {\n obj = obj.dragging && obj.dragging.enabled() ? obj : this;\n return obj.dragging && obj.dragging.moved() || this.boxZoom && this.boxZoom.moved();\n },\n _clearHandlers: function _clearHandlers() {\n for (var i = 0, len = this._handlers.length; i < len; i++) {\n this._handlers[i].disable();\n }\n },\n // @section Other Methods\n // @method whenReady(fn: Function, context?: Object): this\n // Runs the given function `fn` when the map gets initialized with\n // a view (center and zoom) and at least one layer, or immediately\n // if it's already initialized, optionally passing a function context.\n whenReady: function whenReady(callback, context) {\n if (this._loaded) {\n callback.call(context || this, {\n target: this\n });\n } else {\n this.on('load', callback, context);\n }\n\n return this;\n },\n // private methods for getting map state\n _getMapPanePos: function _getMapPanePos() {\n return getPosition(this._mapPane) || new Point(0, 0);\n },\n _moved: function _moved() {\n var pos = this._getMapPanePos();\n\n return pos && !pos.equals([0, 0]);\n },\n _getTopLeftPoint: function _getTopLeftPoint(center, zoom) {\n var pixelOrigin = center && zoom !== undefined ? this._getNewPixelOrigin(center, zoom) : this.getPixelOrigin();\n return pixelOrigin.subtract(this._getMapPanePos());\n },\n _getNewPixelOrigin: function _getNewPixelOrigin(center, zoom) {\n var viewHalf = this.getSize()._divideBy(2);\n\n return this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();\n },\n _latLngToNewLayerPoint: function _latLngToNewLayerPoint(latlng, zoom, center) {\n var topLeft = this._getNewPixelOrigin(center, zoom);\n\n return this.project(latlng, zoom)._subtract(topLeft);\n },\n _latLngBoundsToNewLayerBounds: function _latLngBoundsToNewLayerBounds(latLngBounds, zoom, center) {\n var topLeft = this._getNewPixelOrigin(center, zoom);\n\n return toBounds([this.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft), this.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft), this.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft), this.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)]);\n },\n // layer point of the current center\n _getCenterLayerPoint: function _getCenterLayerPoint() {\n return this.containerPointToLayerPoint(this.getSize()._divideBy(2));\n },\n // offset of the specified place to the current center in pixels\n _getCenterOffset: function _getCenterOffset(latlng) {\n return this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());\n },\n // adjust center for view to get inside bounds\n _limitCenter: function _limitCenter(center, zoom, bounds) {\n if (!bounds) {\n return center;\n }\n\n var centerPoint = this.project(center, zoom),\n viewHalf = this.getSize().divideBy(2),\n viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\n offset = this._getBoundsOffset(viewBounds, bounds, zoom); // If offset is less than a pixel, ignore.\n // This prevents unstable projections from getting into\n // an infinite loop of tiny offsets.\n\n\n if (offset.round().equals([0, 0])) {\n return center;\n }\n\n return this.unproject(centerPoint.add(offset), zoom);\n },\n // adjust offset for view to get inside bounds\n _limitOffset: function _limitOffset(offset, bounds) {\n if (!bounds) {\n return offset;\n }\n\n var viewBounds = this.getPixelBounds(),\n newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));\n return offset.add(this._getBoundsOffset(newBounds, bounds));\n },\n // returns offset needed for pxBounds to get inside maxBounds at a specified zoom\n _getBoundsOffset: function _getBoundsOffset(pxBounds, maxBounds, zoom) {\n var projectedMaxBounds = toBounds(this.project(maxBounds.getNorthEast(), zoom), this.project(maxBounds.getSouthWest(), zoom)),\n minOffset = projectedMaxBounds.min.subtract(pxBounds.min),\n maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),\n dx = this._rebound(minOffset.x, -maxOffset.x),\n dy = this._rebound(minOffset.y, -maxOffset.y);\n\n return new Point(dx, dy);\n },\n _rebound: function _rebound(left, right) {\n return left + right > 0 ? Math.round(left - right) / 2 : Math.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));\n },\n _limitZoom: function _limitZoom(zoom) {\n var min = this.getMinZoom(),\n max = this.getMaxZoom(),\n snap = any3d ? this.options.zoomSnap : 1;\n\n if (snap) {\n zoom = Math.round(zoom / snap) * snap;\n }\n\n return Math.max(min, Math.min(max, zoom));\n },\n _onPanTransitionStep: function _onPanTransitionStep() {\n this.fire('move');\n },\n _onPanTransitionEnd: function _onPanTransitionEnd() {\n removeClass(this._mapPane, 'leaflet-pan-anim');\n this.fire('moveend');\n },\n _tryAnimatedPan: function _tryAnimatedPan(center, options) {\n // difference between the new and current centers in pixels\n var offset = this._getCenterOffset(center)._trunc(); // don't animate too far unless animate: true specified in options\n\n\n if ((options && options.animate) !== true && !this.getSize().contains(offset)) {\n return false;\n }\n\n this.panBy(offset, options);\n return true;\n },\n _createAnimProxy: function _createAnimProxy() {\n var proxy = this._proxy = create$1('div', 'leaflet-proxy leaflet-zoom-animated');\n\n this._panes.mapPane.appendChild(proxy);\n\n this.on('zoomanim', function (e) {\n var prop = TRANSFORM,\n transform = this._proxy.style[prop];\n setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1)); // workaround for case when transform is the same and so transitionend event is not fired\n\n if (transform === this._proxy.style[prop] && this._animatingZoom) {\n this._onZoomTransitionEnd();\n }\n }, this);\n this.on('load moveend', this._animMoveEnd, this);\n\n this._on('unload', this._destroyAnimProxy, this);\n },\n _destroyAnimProxy: function _destroyAnimProxy() {\n _remove(this._proxy);\n\n this.off('load moveend', this._animMoveEnd, this);\n delete this._proxy;\n },\n _animMoveEnd: function _animMoveEnd() {\n var c = this.getCenter(),\n z = this.getZoom();\n setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));\n },\n _catchTransitionEnd: function _catchTransitionEnd(e) {\n if (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {\n this._onZoomTransitionEnd();\n }\n },\n _nothingToAnimate: function _nothingToAnimate() {\n return !this._container.getElementsByClassName('leaflet-zoom-animated').length;\n },\n _tryAnimatedZoom: function _tryAnimatedZoom(center, zoom, options) {\n if (this._animatingZoom) {\n return true;\n }\n\n options = options || {}; // don't animate if disabled, not supported or zoom difference is too large\n\n if (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() || Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) {\n return false;\n } // offset is the pixel coords of the zoom origin relative to the current center\n\n\n var scale = this.getZoomScale(zoom),\n offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale); // don't animate if the zoom origin isn't within one screen from the current center, unless forced\n\n\n if (options.animate !== true && !this.getSize().contains(offset)) {\n return false;\n }\n\n requestAnimFrame(function () {\n this._moveStart(true, false)._animateZoom(center, zoom, true);\n }, this);\n return true;\n },\n _animateZoom: function _animateZoom(center, zoom, startAnim, noUpdate) {\n if (!this._mapPane) {\n return;\n }\n\n if (startAnim) {\n this._animatingZoom = true; // remember what center/zoom to set after animation\n\n this._animateToCenter = center;\n this._animateToZoom = zoom;\n addClass(this._mapPane, 'leaflet-zoom-anim');\n } // @section Other Events\n // @event zoomanim: ZoomAnimEvent\n // Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.\n\n\n this.fire('zoomanim', {\n center: center,\n zoom: zoom,\n noUpdate: noUpdate\n }); // Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693\n\n setTimeout(bind(this._onZoomTransitionEnd, this), 250);\n },\n _onZoomTransitionEnd: function _onZoomTransitionEnd() {\n if (!this._animatingZoom) {\n return;\n }\n\n if (this._mapPane) {\n removeClass(this._mapPane, 'leaflet-zoom-anim');\n }\n\n this._animatingZoom = false;\n\n this._move(this._animateToCenter, this._animateToZoom); // This anim frame should prevent an obscure iOS webkit tile loading race condition.\n\n\n requestAnimFrame(function () {\n this._moveEnd(true);\n }, this);\n }\n }); // @section\n // @factory L.map(id: String, options?: Map options)\n // Instantiates a map object given the DOM ID of a `<div>` element\n // and optionally an object literal with `Map options`.\n //\n // @alternative\n // @factory L.map(el: HTMLElement, options?: Map options)\n // Instantiates a map object given an instance of a `<div>` HTML element\n // and optionally an object literal with `Map options`.\n\n function createMap(id, options) {\n return new Map(id, options);\n }\n /*\r\n * @class Control\r\n * @aka L.Control\r\n * @inherits Class\r\n *\r\n * L.Control is a base class for implementing map controls. Handles positioning.\r\n * All other controls extend from this class.\r\n */\n\n\n var Control = Class.extend({\n // @section\n // @aka Control options\n options: {\n // @option position: String = 'topright'\n // The position of the control (one of the map corners). Possible values are `'topleft'`,\n // `'topright'`, `'bottomleft'` or `'bottomright'`\n position: 'topright'\n },\n initialize: function initialize(options) {\n setOptions(this, options);\n },\n\n /* @section\r\n * Classes extending L.Control will inherit the following methods:\r\n *\r\n * @method getPosition: string\r\n * Returns the position of the control.\r\n */\n getPosition: function getPosition() {\n return this.options.position;\n },\n // @method setPosition(position: string): this\n // Sets the position of the control.\n setPosition: function setPosition(position) {\n var map = this._map;\n\n if (map) {\n map.removeControl(this);\n }\n\n this.options.position = position;\n\n if (map) {\n map.addControl(this);\n }\n\n return this;\n },\n // @method getContainer: HTMLElement\n // Returns the HTMLElement that contains the control.\n getContainer: function getContainer() {\n return this._container;\n },\n // @method addTo(map: Map): this\n // Adds the control to the given map.\n addTo: function addTo(map) {\n this.remove();\n this._map = map;\n var container = this._container = this.onAdd(map),\n pos = this.getPosition(),\n corner = map._controlCorners[pos];\n addClass(container, 'leaflet-control');\n\n if (pos.indexOf('bottom') !== -1) {\n corner.insertBefore(container, corner.firstChild);\n } else {\n corner.appendChild(container);\n }\n\n this._map.on('unload', this.remove, this);\n\n return this;\n },\n // @method remove: this\n // Removes the control from the map it is currently active on.\n remove: function remove() {\n if (!this._map) {\n return this;\n }\n\n _remove(this._container);\n\n if (this.onRemove) {\n this.onRemove(this._map);\n }\n\n this._map.off('unload', this.remove, this);\n\n this._map = null;\n return this;\n },\n _refocusOnMap: function _refocusOnMap(e) {\n // if map exists and event is not a keyboard event\n if (this._map && e && e.screenX > 0 && e.screenY > 0) {\n this._map.getContainer().focus();\n }\n }\n });\n\n var control = function control(options) {\n return new Control(options);\n };\n /* @section Extension methods\r\n * @uninheritable\r\n *\r\n * Every control should extend from `L.Control` and (re-)implement the following methods.\r\n *\r\n * @method onAdd(map: Map): HTMLElement\r\n * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).\r\n *\r\n * @method onRemove(map: Map)\r\n * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).\r\n */\n\n /* @namespace Map\r\n * @section Methods for Layers and Controls\r\n */\n\n\n Map.include({\n // @method addControl(control: Control): this\n // Adds the given control to the map\n addControl: function addControl(control) {\n control.addTo(this);\n return this;\n },\n // @method removeControl(control: Control): this\n // Removes the given control from the map\n removeControl: function removeControl(control) {\n control.remove();\n return this;\n },\n _initControlPos: function _initControlPos() {\n var corners = this._controlCorners = {},\n l = 'leaflet-',\n container = this._controlContainer = create$1('div', l + 'control-container', this._container);\n\n function createCorner(vSide, hSide) {\n var className = l + vSide + ' ' + l + hSide;\n corners[vSide + hSide] = create$1('div', className, container);\n }\n\n createCorner('top', 'left');\n createCorner('top', 'right');\n createCorner('bottom', 'left');\n createCorner('bottom', 'right');\n },\n _clearControlPos: function _clearControlPos() {\n for (var i in this._controlCorners) {\n _remove(this._controlCorners[i]);\n }\n\n _remove(this._controlContainer);\n\n delete this._controlCorners;\n delete this._controlContainer;\n }\n });\n /*\r\n * @class Control.Layers\r\n * @aka L.Control.Layers\r\n * @inherits Control\r\n *\r\n * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](http://leafletjs.com/examples/layers-control/)). Extends `Control`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var baseLayers = {\r\n * \t\"Mapbox\": mapbox,\r\n * \t\"OpenStreetMap\": osm\r\n * };\r\n *\r\n * var overlays = {\r\n * \t\"Marker\": marker,\r\n * \t\"Roads\": roadsLayer\r\n * };\r\n *\r\n * L.control.layers(baseLayers, overlays).addTo(map);\r\n * ```\r\n *\r\n * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:\r\n *\r\n * ```js\r\n * {\r\n * \"<someName1>\": layer1,\r\n * \"<someName2>\": layer2\r\n * }\r\n * ```\r\n *\r\n * The layer names can contain HTML, which allows you to add additional styling to the items:\r\n *\r\n * ```js\r\n * {\"<img src='my-layer-icon' /> <span class='my-layer-item'>My Layer</span>\": myLayer}\r\n * ```\r\n */\n\n var Layers = Control.extend({\n // @section\n // @aka Control.Layers options\n options: {\n // @option collapsed: Boolean = true\n // If `true`, the control will be collapsed into an icon and expanded on mouse hover or touch.\n collapsed: true,\n position: 'topright',\n // @option autoZIndex: Boolean = true\n // If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.\n autoZIndex: true,\n // @option hideSingleBase: Boolean = false\n // If `true`, the base layers in the control will be hidden when there is only one.\n hideSingleBase: false,\n // @option sortLayers: Boolean = false\n // Whether to sort the layers. When `false`, layers will keep the order\n // in which they were added to the control.\n sortLayers: false,\n // @option sortFunction: Function = *\n // A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)\n // that will be used for sorting the layers, when `sortLayers` is `true`.\n // The function receives both the `L.Layer` instances and their names, as in\n // `sortFunction(layerA, layerB, nameA, nameB)`.\n // By default, it sorts layers alphabetically by their name.\n sortFunction: function sortFunction(layerA, layerB, nameA, nameB) {\n return nameA < nameB ? -1 : nameB < nameA ? 1 : 0;\n }\n },\n initialize: function initialize(baseLayers, overlays, options) {\n setOptions(this, options);\n this._layerControlInputs = [];\n this._layers = [];\n this._lastZIndex = 0;\n this._handlingClick = false;\n\n for (var i in baseLayers) {\n this._addLayer(baseLayers[i], i);\n }\n\n for (i in overlays) {\n this._addLayer(overlays[i], i, true);\n }\n },\n onAdd: function onAdd(map) {\n this._initLayout();\n\n this._update();\n\n this._map = map;\n map.on('zoomend', this._checkDisabledLayers, this);\n\n for (var i = 0; i < this._layers.length; i++) {\n this._layers[i].layer.on('add remove', this._onLayerChange, this);\n }\n\n return this._container;\n },\n addTo: function addTo(map) {\n Control.prototype.addTo.call(this, map); // Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.\n\n return this._expandIfNotCollapsed();\n },\n onRemove: function onRemove() {\n this._map.off('zoomend', this._checkDisabledLayers, this);\n\n for (var i = 0; i < this._layers.length; i++) {\n this._layers[i].layer.off('add remove', this._onLayerChange, this);\n }\n },\n // @method addBaseLayer(layer: Layer, name: String): this\n // Adds a base layer (radio button entry) with the given name to the control.\n addBaseLayer: function addBaseLayer(layer, name) {\n this._addLayer(layer, name);\n\n return this._map ? this._update() : this;\n },\n // @method addOverlay(layer: Layer, name: String): this\n // Adds an overlay (checkbox entry) with the given name to the control.\n addOverlay: function addOverlay(layer, name) {\n this._addLayer(layer, name, true);\n\n return this._map ? this._update() : this;\n },\n // @method removeLayer(layer: Layer): this\n // Remove the given layer from the control.\n removeLayer: function removeLayer(layer) {\n layer.off('add remove', this._onLayerChange, this);\n\n var obj = this._getLayer(stamp(layer));\n\n if (obj) {\n this._layers.splice(this._layers.indexOf(obj), 1);\n }\n\n return this._map ? this._update() : this;\n },\n // @method expand(): this\n // Expand the control container if collapsed.\n expand: function expand() {\n addClass(this._container, 'leaflet-control-layers-expanded');\n this._section.style.height = null;\n var acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);\n\n if (acceptableHeight < this._section.clientHeight) {\n addClass(this._section, 'leaflet-control-layers-scrollbar');\n this._section.style.height = acceptableHeight + 'px';\n } else {\n removeClass(this._section, 'leaflet-control-layers-scrollbar');\n }\n\n this._checkDisabledLayers();\n\n return this;\n },\n // @method collapse(): this\n // Collapse the control container if expanded.\n collapse: function collapse() {\n removeClass(this._container, 'leaflet-control-layers-expanded');\n return this;\n },\n _initLayout: function _initLayout() {\n var className = 'leaflet-control-layers',\n container = this._container = create$1('div', className),\n collapsed = this.options.collapsed; // makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released\n\n container.setAttribute('aria-haspopup', true);\n disableClickPropagation(container);\n disableScrollPropagation(container);\n var section = this._section = create$1('section', className + '-list');\n\n if (collapsed) {\n this._map.on('click', this.collapse, this);\n\n if (!android) {\n on(container, {\n mouseenter: this.expand,\n mouseleave: this.collapse\n }, this);\n }\n }\n\n var link = this._layersLink = create$1('a', className + '-toggle', container);\n link.href = '#';\n link.title = 'Layers';\n\n if (touch) {\n on(link, 'click', stop);\n on(link, 'click', this.expand, this);\n } else {\n on(link, 'focus', this.expand, this);\n }\n\n if (!collapsed) {\n this.expand();\n }\n\n this._baseLayersList = create$1('div', className + '-base', section);\n this._separator = create$1('div', className + '-separator', section);\n this._overlaysList = create$1('div', className + '-overlays', section);\n container.appendChild(section);\n },\n _getLayer: function _getLayer(id) {\n for (var i = 0; i < this._layers.length; i++) {\n if (this._layers[i] && stamp(this._layers[i].layer) === id) {\n return this._layers[i];\n }\n }\n },\n _addLayer: function _addLayer(layer, name, overlay) {\n if (this._map) {\n layer.on('add remove', this._onLayerChange, this);\n }\n\n this._layers.push({\n layer: layer,\n name: name,\n overlay: overlay\n });\n\n if (this.options.sortLayers) {\n this._layers.sort(bind(function (a, b) {\n return this.options.sortFunction(a.layer, b.layer, a.name, b.name);\n }, this));\n }\n\n if (this.options.autoZIndex && layer.setZIndex) {\n this._lastZIndex++;\n layer.setZIndex(this._lastZIndex);\n }\n\n this._expandIfNotCollapsed();\n },\n _update: function _update() {\n if (!this._container) {\n return this;\n }\n\n empty(this._baseLayersList);\n empty(this._overlaysList);\n this._layerControlInputs = [];\n var baseLayersPresent,\n overlaysPresent,\n i,\n obj,\n baseLayersCount = 0;\n\n for (i = 0; i < this._layers.length; i++) {\n obj = this._layers[i];\n\n this._addItem(obj);\n\n overlaysPresent = overlaysPresent || obj.overlay;\n baseLayersPresent = baseLayersPresent || !obj.overlay;\n baseLayersCount += !obj.overlay ? 1 : 0;\n } // Hide base layers section if there's only one layer.\n\n\n if (this.options.hideSingleBase) {\n baseLayersPresent = baseLayersPresent && baseLayersCount > 1;\n this._baseLayersList.style.display = baseLayersPresent ? '' : 'none';\n }\n\n this._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';\n return this;\n },\n _onLayerChange: function _onLayerChange(e) {\n if (!this._handlingClick) {\n this._update();\n }\n\n var obj = this._getLayer(stamp(e.target)); // @namespace Map\n // @section Layer events\n // @event baselayerchange: LayersControlEvent\n // Fired when the base layer is changed through the [layers control](#control-layers).\n // @event overlayadd: LayersControlEvent\n // Fired when an overlay is selected through the [layers control](#control-layers).\n // @event overlayremove: LayersControlEvent\n // Fired when an overlay is deselected through the [layers control](#control-layers).\n // @namespace Control.Layers\n\n\n var type = obj.overlay ? e.type === 'add' ? 'overlayadd' : 'overlayremove' : e.type === 'add' ? 'baselayerchange' : null;\n\n if (type) {\n this._map.fire(type, obj);\n }\n },\n // IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe)\n _createRadioElement: function _createRadioElement(name, checked) {\n var radioHtml = '<input type=\"radio\" class=\"leaflet-control-layers-selector\" name=\"' + name + '\"' + (checked ? ' checked=\"checked\"' : '') + '/>';\n var radioFragment = document.createElement('div');\n radioFragment.innerHTML = radioHtml;\n return radioFragment.firstChild;\n },\n _addItem: function _addItem(obj) {\n var label = document.createElement('label'),\n checked = this._map.hasLayer(obj.layer),\n input;\n\n if (obj.overlay) {\n input = document.createElement('input');\n input.type = 'checkbox';\n input.className = 'leaflet-control-layers-selector';\n input.defaultChecked = checked;\n } else {\n input = this._createRadioElement('leaflet-base-layers_' + stamp(this), checked);\n }\n\n this._layerControlInputs.push(input);\n\n input.layerId = stamp(obj.layer);\n on(input, 'click', this._onInputClick, this);\n var name = document.createElement('span');\n name.innerHTML = ' ' + obj.name; // Helps from preventing layer control flicker when checkboxes are disabled\n // https://github.com/Leaflet/Leaflet/issues/2771\n\n var holder = document.createElement('div');\n label.appendChild(holder);\n holder.appendChild(input);\n holder.appendChild(name);\n var container = obj.overlay ? this._overlaysList : this._baseLayersList;\n container.appendChild(label);\n\n this._checkDisabledLayers();\n\n return label;\n },\n _onInputClick: function _onInputClick() {\n var inputs = this._layerControlInputs,\n input,\n layer;\n var addedLayers = [],\n removedLayers = [];\n this._handlingClick = true;\n\n for (var i = inputs.length - 1; i >= 0; i--) {\n input = inputs[i];\n layer = this._getLayer(input.layerId).layer;\n\n if (input.checked) {\n addedLayers.push(layer);\n } else if (!input.checked) {\n removedLayers.push(layer);\n }\n } // Bugfix issue 2318: Should remove all old layers before readding new ones\n\n\n for (i = 0; i < removedLayers.length; i++) {\n if (this._map.hasLayer(removedLayers[i])) {\n this._map.removeLayer(removedLayers[i]);\n }\n }\n\n for (i = 0; i < addedLayers.length; i++) {\n if (!this._map.hasLayer(addedLayers[i])) {\n this._map.addLayer(addedLayers[i]);\n }\n }\n\n this._handlingClick = false;\n\n this._refocusOnMap();\n },\n _checkDisabledLayers: function _checkDisabledLayers() {\n var inputs = this._layerControlInputs,\n input,\n layer,\n zoom = this._map.getZoom();\n\n for (var i = inputs.length - 1; i >= 0; i--) {\n input = inputs[i];\n layer = this._getLayer(input.layerId).layer;\n input.disabled = layer.options.minZoom !== undefined && zoom < layer.options.minZoom || layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom;\n }\n },\n _expandIfNotCollapsed: function _expandIfNotCollapsed() {\n if (this._map && !this.options.collapsed) {\n this.expand();\n }\n\n return this;\n },\n _expand: function _expand() {\n // Backward compatibility, remove me in 1.1.\n return this.expand();\n },\n _collapse: function _collapse() {\n // Backward compatibility, remove me in 1.1.\n return this.collapse();\n }\n }); // @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)\n // Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.\n\n var layers = function layers(baseLayers, overlays, options) {\n return new Layers(baseLayers, overlays, options);\n };\n /*\r\n * @class Control.Zoom\r\n * @aka L.Control.Zoom\r\n * @inherits Control\r\n *\r\n * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.\r\n */\n\n\n var Zoom = Control.extend({\n // @section\n // @aka Control.Zoom options\n options: {\n position: 'topleft',\n // @option zoomInText: String = '+'\n // The text set on the 'zoom in' button.\n zoomInText: '+',\n // @option zoomInTitle: String = 'Zoom in'\n // The title set on the 'zoom in' button.\n zoomInTitle: 'Zoom in',\n // @option zoomOutText: String = '&#x2212;'\n // The text set on the 'zoom out' button.\n zoomOutText: '&#x2212;',\n // @option zoomOutTitle: String = 'Zoom out'\n // The title set on the 'zoom out' button.\n zoomOutTitle: 'Zoom out'\n },\n onAdd: function onAdd(map) {\n var zoomName = 'leaflet-control-zoom',\n container = create$1('div', zoomName + ' leaflet-bar'),\n options = this.options;\n this._zoomInButton = this._createButton(options.zoomInText, options.zoomInTitle, zoomName + '-in', container, this._zoomIn);\n this._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle, zoomName + '-out', container, this._zoomOut);\n\n this._updateDisabled();\n\n map.on('zoomend zoomlevelschange', this._updateDisabled, this);\n return container;\n },\n onRemove: function onRemove(map) {\n map.off('zoomend zoomlevelschange', this._updateDisabled, this);\n },\n disable: function disable() {\n this._disabled = true;\n\n this._updateDisabled();\n\n return this;\n },\n enable: function enable() {\n this._disabled = false;\n\n this._updateDisabled();\n\n return this;\n },\n _zoomIn: function _zoomIn(e) {\n if (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {\n this._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\n }\n },\n _zoomOut: function _zoomOut(e) {\n if (!this._disabled && this._map._zoom > this._map.getMinZoom()) {\n this._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\n }\n },\n _createButton: function _createButton(html, title, className, container, fn) {\n var link = create$1('a', className, container);\n link.innerHTML = html;\n link.href = '#';\n link.title = title;\n /*\r\n * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\r\n */\n\n link.setAttribute('role', 'button');\n link.setAttribute('aria-label', title);\n disableClickPropagation(link);\n on(link, 'click', stop);\n on(link, 'click', fn, this);\n on(link, 'click', this._refocusOnMap, this);\n return link;\n },\n _updateDisabled: function _updateDisabled() {\n var map = this._map,\n className = 'leaflet-disabled';\n removeClass(this._zoomInButton, className);\n removeClass(this._zoomOutButton, className);\n\n if (this._disabled || map._zoom === map.getMinZoom()) {\n addClass(this._zoomOutButton, className);\n }\n\n if (this._disabled || map._zoom === map.getMaxZoom()) {\n addClass(this._zoomInButton, className);\n }\n }\n }); // @namespace Map\n // @section Control options\n // @option zoomControl: Boolean = true\n // Whether a [zoom control](#control-zoom) is added to the map by default.\n\n Map.mergeOptions({\n zoomControl: true\n });\n Map.addInitHook(function () {\n if (this.options.zoomControl) {\n // @section Controls\n // @property zoomControl: Control.Zoom\n // The default zoom control (only available if the\n // [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).\n this.zoomControl = new Zoom();\n this.addControl(this.zoomControl);\n }\n }); // @namespace Control.Zoom\n // @factory L.control.zoom(options: Control.Zoom options)\n // Creates a zoom control\n\n var zoom = function zoom(options) {\n return new Zoom(options);\n };\n /*\n * @class Control.Scale\n * @aka L.Control.Scale\n * @inherits Control\n *\n * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.\n *\n * @example\n *\n * ```js\n * L.control.scale().addTo(map);\n * ```\n */\n\n\n var Scale = Control.extend({\n // @section\n // @aka Control.Scale options\n options: {\n position: 'bottomleft',\n // @option maxWidth: Number = 100\n // Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).\n maxWidth: 100,\n // @option metric: Boolean = True\n // Whether to show the metric scale line (m/km).\n metric: true,\n // @option imperial: Boolean = True\n // Whether to show the imperial scale line (mi/ft).\n imperial: true // @option updateWhenIdle: Boolean = false\n // If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).\n\n },\n onAdd: function onAdd(map) {\n var className = 'leaflet-control-scale',\n container = create$1('div', className),\n options = this.options;\n\n this._addScales(options, className + '-line', container);\n\n map.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n map.whenReady(this._update, this);\n return container;\n },\n onRemove: function onRemove(map) {\n map.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n },\n _addScales: function _addScales(options, className, container) {\n if (options.metric) {\n this._mScale = create$1('div', className, container);\n }\n\n if (options.imperial) {\n this._iScale = create$1('div', className, container);\n }\n },\n _update: function _update() {\n var map = this._map,\n y = map.getSize().y / 2;\n var maxMeters = map.distance(map.containerPointToLatLng([0, y]), map.containerPointToLatLng([this.options.maxWidth, y]));\n\n this._updateScales(maxMeters);\n },\n _updateScales: function _updateScales(maxMeters) {\n if (this.options.metric && maxMeters) {\n this._updateMetric(maxMeters);\n }\n\n if (this.options.imperial && maxMeters) {\n this._updateImperial(maxMeters);\n }\n },\n _updateMetric: function _updateMetric(maxMeters) {\n var meters = this._getRoundNum(maxMeters),\n label = meters < 1000 ? meters + ' m' : meters / 1000 + ' km';\n\n this._updateScale(this._mScale, label, meters / maxMeters);\n },\n _updateImperial: function _updateImperial(maxMeters) {\n var maxFeet = maxMeters * 3.2808399,\n maxMiles,\n miles,\n feet;\n\n if (maxFeet > 5280) {\n maxMiles = maxFeet / 5280;\n miles = this._getRoundNum(maxMiles);\n\n this._updateScale(this._iScale, miles + ' mi', miles / maxMiles);\n } else {\n feet = this._getRoundNum(maxFeet);\n\n this._updateScale(this._iScale, feet + ' ft', feet / maxFeet);\n }\n },\n _updateScale: function _updateScale(scale, text, ratio) {\n scale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';\n scale.innerHTML = text;\n },\n _getRoundNum: function _getRoundNum(num) {\n var pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),\n d = num / pow10;\n d = d >= 10 ? 10 : d >= 5 ? 5 : d >= 3 ? 3 : d >= 2 ? 2 : 1;\n return pow10 * d;\n }\n }); // @factory L.control.scale(options?: Control.Scale options)\n // Creates an scale control with the given options.\n\n var scale = function scale(options) {\n return new Scale(options);\n };\n /*\r\n * @class Control.Attribution\r\n * @aka L.Control.Attribution\r\n * @inherits Control\r\n *\r\n * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.\r\n */\n\n\n var Attribution = Control.extend({\n // @section\n // @aka Control.Attribution options\n options: {\n position: 'bottomright',\n // @option prefix: String = 'Leaflet'\n // The HTML text shown before the attributions. Pass `false` to disable.\n prefix: '<a href=\"https://leafletjs.com\" title=\"A JS library for interactive maps\">Leaflet</a>'\n },\n initialize: function initialize(options) {\n setOptions(this, options);\n this._attributions = {};\n },\n onAdd: function onAdd(map) {\n map.attributionControl = this;\n this._container = create$1('div', 'leaflet-control-attribution');\n disableClickPropagation(this._container); // TODO ugly, refactor\n\n for (var i in map._layers) {\n if (map._layers[i].getAttribution) {\n this.addAttribution(map._layers[i].getAttribution());\n }\n }\n\n this._update();\n\n return this._container;\n },\n // @method setPrefix(prefix: String): this\n // Sets the text before the attributions.\n setPrefix: function setPrefix(prefix) {\n this.options.prefix = prefix;\n\n this._update();\n\n return this;\n },\n // @method addAttribution(text: String): this\n // Adds an attribution text (e.g. `'Vector data &copy; Mapbox'`).\n addAttribution: function addAttribution(text) {\n if (!text) {\n return this;\n }\n\n if (!this._attributions[text]) {\n this._attributions[text] = 0;\n }\n\n this._attributions[text]++;\n\n this._update();\n\n return this;\n },\n // @method removeAttribution(text: String): this\n // Removes an attribution text.\n removeAttribution: function removeAttribution(text) {\n if (!text) {\n return this;\n }\n\n if (this._attributions[text]) {\n this._attributions[text]--;\n\n this._update();\n }\n\n return this;\n },\n _update: function _update() {\n if (!this._map) {\n return;\n }\n\n var attribs = [];\n\n for (var i in this._attributions) {\n if (this._attributions[i]) {\n attribs.push(i);\n }\n }\n\n var prefixAndAttribs = [];\n\n if (this.options.prefix) {\n prefixAndAttribs.push(this.options.prefix);\n }\n\n if (attribs.length) {\n prefixAndAttribs.push(attribs.join(', '));\n }\n\n this._container.innerHTML = prefixAndAttribs.join(' | ');\n }\n }); // @namespace Map\n // @section Control options\n // @option attributionControl: Boolean = true\n // Whether a [attribution control](#control-attribution) is added to the map by default.\n\n Map.mergeOptions({\n attributionControl: true\n });\n Map.addInitHook(function () {\n if (this.options.attributionControl) {\n new Attribution().addTo(this);\n }\n }); // @namespace Control.Attribution\n // @factory L.control.attribution(options: Control.Attribution options)\n // Creates an attribution control.\n\n var attribution = function attribution(options) {\n return new Attribution(options);\n };\n\n Control.Layers = Layers;\n Control.Zoom = Zoom;\n Control.Scale = Scale;\n Control.Attribution = Attribution;\n control.layers = layers;\n control.zoom = zoom;\n control.scale = scale;\n control.attribution = attribution;\n /*\n \tL.Handler is a base class for handler classes that are used internally to inject\n \tinteraction features like dragging to classes like Map and Marker.\n */\n // @class Handler\n // @aka L.Handler\n // Abstract class for map interaction handlers\n\n var Handler = Class.extend({\n initialize: function initialize(map) {\n this._map = map;\n },\n // @method enable(): this\n // Enables the handler\n enable: function enable() {\n if (this._enabled) {\n return this;\n }\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n // @method disable(): this\n // Disables the handler\n disable: function disable() {\n if (!this._enabled) {\n return this;\n }\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n // @method enabled(): Boolean\n // Returns `true` if the handler is enabled\n enabled: function enabled() {\n return !!this._enabled;\n } // @section Extension methods\n // Classes inheriting from `Handler` must implement the two following methods:\n // @method addHooks()\n // Called when the handler is enabled, should add event hooks.\n // @method removeHooks()\n // Called when the handler is disabled, should remove the event hooks added previously.\n\n }); // @section There is static function which can be called without instantiating L.Handler:\n // @function addTo(map: Map, name: String): this\n // Adds a new Handler to the given map with the given name.\n\n Handler.addTo = function (map, name) {\n map.addHandler(name, this);\n return this;\n };\n\n var Mixin = {\n Events: Events\n };\n /*\r\n * @class Draggable\r\n * @aka L.Draggable\r\n * @inherits Evented\r\n *\r\n * A class for making DOM elements draggable (including touch support).\r\n * Used internally for map and marker dragging. Only works for elements\r\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\r\n *\r\n * @example\r\n * ```js\r\n * var draggable = new L.Draggable(elementToDrag);\r\n * draggable.enable();\r\n * ```\r\n */\n\n var START = touch ? 'touchstart mousedown' : 'mousedown';\n var END = {\n mousedown: 'mouseup',\n touchstart: 'touchend',\n pointerdown: 'touchend',\n MSPointerDown: 'touchend'\n };\n var MOVE = {\n mousedown: 'mousemove',\n touchstart: 'touchmove',\n pointerdown: 'touchmove',\n MSPointerDown: 'touchmove'\n };\n var Draggable = Evented.extend({\n options: {\n // @section\n // @aka Draggable options\n // @option clickTolerance: Number = 3\n // The max number of pixels a user can shift the mouse pointer during a click\n // for it to be considered a valid click (as opposed to a mouse drag).\n clickTolerance: 3\n },\n // @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)\n // Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).\n initialize: function initialize(element, dragStartTarget, preventOutline$$1, options) {\n setOptions(this, options);\n this._element = element;\n this._dragStartTarget = dragStartTarget || element;\n this._preventOutline = preventOutline$$1;\n },\n // @method enable()\n // Enables the dragging ability\n enable: function enable() {\n if (this._enabled) {\n return;\n }\n\n on(this._dragStartTarget, START, this._onDown, this);\n this._enabled = true;\n },\n // @method disable()\n // Disables the dragging ability\n disable: function disable() {\n if (!this._enabled) {\n return;\n } // If we're currently dragging this draggable,\n // disabling it counts as first ending the drag.\n\n\n if (Draggable._dragging === this) {\n this.finishDrag();\n }\n\n off(this._dragStartTarget, START, this._onDown, this);\n this._enabled = false;\n this._moved = false;\n },\n _onDown: function _onDown(e) {\n // Ignore simulated events, since we handle both touch and\n // mouse explicitly; otherwise we risk getting duplicates of\n // touch events, see #4315.\n // Also ignore the event if disabled; this happens in IE11\n // under some circumstances, see #3666.\n if (e._simulated || !this._enabled) {\n return;\n }\n\n this._moved = false;\n\n if (hasClass(this._element, 'leaflet-zoom-anim')) {\n return;\n }\n\n if (Draggable._dragging || e.shiftKey || e.which !== 1 && e.button !== 1 && !e.touches) {\n return;\n }\n\n Draggable._dragging = this; // Prevent dragging multiple objects at once.\n\n if (this._preventOutline) {\n preventOutline(this._element);\n }\n\n disableImageDrag();\n disableTextSelection();\n\n if (this._moving) {\n return;\n } // @event down: Event\n // Fired when a drag is about to start.\n\n\n this.fire('down');\n var first = e.touches ? e.touches[0] : e,\n sizedParent = getSizedParentNode(this._element);\n this._startPoint = new Point(first.clientX, first.clientY); // Cache the scale, so that we can continuously compensate for it during drag (_onMove).\n\n this._parentScale = getScale(sizedParent);\n on(document, MOVE[e.type], this._onMove, this);\n on(document, END[e.type], this._onUp, this);\n },\n _onMove: function _onMove(e) {\n // Ignore simulated events, since we handle both touch and\n // mouse explicitly; otherwise we risk getting duplicates of\n // touch events, see #4315.\n // Also ignore the event if disabled; this happens in IE11\n // under some circumstances, see #3666.\n if (e._simulated || !this._enabled) {\n return;\n }\n\n if (e.touches && e.touches.length > 1) {\n this._moved = true;\n return;\n }\n\n var first = e.touches && e.touches.length === 1 ? e.touches[0] : e,\n offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);\n\n if (!offset.x && !offset.y) {\n return;\n }\n\n if (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) {\n return;\n } // We assume that the parent container's position, border and scale do not change for the duration of the drag.\n // Therefore there is no need to account for the position and border (they are eliminated by the subtraction)\n // and we can use the cached value for the scale.\n\n\n offset.x /= this._parentScale.x;\n offset.y /= this._parentScale.y;\n preventDefault(e);\n\n if (!this._moved) {\n // @event dragstart: Event\n // Fired when a drag starts\n this.fire('dragstart');\n this._moved = true;\n this._startPos = getPosition(this._element).subtract(offset);\n addClass(document.body, 'leaflet-dragging');\n this._lastTarget = e.target || e.srcElement; // IE and Edge do not give the <use> element, so fetch it\n // if necessary\n\n if (window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance) {\n this._lastTarget = this._lastTarget.correspondingUseElement;\n }\n\n addClass(this._lastTarget, 'leaflet-drag-target');\n }\n\n this._newPos = this._startPos.add(offset);\n this._moving = true;\n cancelAnimFrame(this._animRequest);\n this._lastEvent = e;\n this._animRequest = requestAnimFrame(this._updatePosition, this, true);\n },\n _updatePosition: function _updatePosition() {\n var e = {\n originalEvent: this._lastEvent\n }; // @event predrag: Event\n // Fired continuously during dragging *before* each corresponding\n // update of the element's position.\n\n this.fire('predrag', e);\n setPosition(this._element, this._newPos); // @event drag: Event\n // Fired continuously during dragging.\n\n this.fire('drag', e);\n },\n _onUp: function _onUp(e) {\n // Ignore simulated events, since we handle both touch and\n // mouse explicitly; otherwise we risk getting duplicates of\n // touch events, see #4315.\n // Also ignore the event if disabled; this happens in IE11\n // under some circumstances, see #3666.\n if (e._simulated || !this._enabled) {\n return;\n }\n\n this.finishDrag();\n },\n finishDrag: function finishDrag() {\n removeClass(document.body, 'leaflet-dragging');\n\n if (this._lastTarget) {\n removeClass(this._lastTarget, 'leaflet-drag-target');\n this._lastTarget = null;\n }\n\n for (var i in MOVE) {\n off(document, MOVE[i], this._onMove, this);\n off(document, END[i], this._onUp, this);\n }\n\n enableImageDrag();\n enableTextSelection();\n\n if (this._moved && this._moving) {\n // ensure drag is not fired after dragend\n cancelAnimFrame(this._animRequest); // @event dragend: DragEndEvent\n // Fired when the drag ends.\n\n this.fire('dragend', {\n distance: this._newPos.distanceTo(this._startPos)\n });\n }\n\n this._moving = false;\n Draggable._dragging = false;\n }\n });\n /*\r\n * @namespace LineUtil\r\n *\r\n * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.\r\n */\n // Simplify polyline with vertex reduction and Douglas-Peucker simplification.\n // Improves rendering performance dramatically by lessening the number of points to draw.\n // @function simplify(points: Point[], tolerance: Number): Point[]\n // Dramatically reduces the number of points in a polyline while retaining\n // its shape and returns a new array of simplified points, using the\n // [Douglas-Peucker algorithm](http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm).\n // Used for a huge performance boost when processing/displaying Leaflet polylines for\n // each zoom level and also reducing visual noise. tolerance affects the amount of\n // simplification (lesser value means higher quality but slower and with more points).\n // Also released as a separated micro-library [Simplify.js](http://mourner.github.com/simplify-js/).\n\n function simplify(points, tolerance) {\n if (!tolerance || !points.length) {\n return points.slice();\n }\n\n var sqTolerance = tolerance * tolerance; // stage 1: vertex reduction\n\n points = _reducePoints(points, sqTolerance); // stage 2: Douglas-Peucker simplification\n\n points = _simplifyDP(points, sqTolerance);\n return points;\n } // @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number\n // Returns the distance between point `p` and segment `p1` to `p2`.\n\n\n function pointToSegmentDistance(p, p1, p2) {\n return Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));\n } // @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number\n // Returns the closest point from a point `p` on a segment `p1` to `p2`.\n\n\n function closestPointOnSegment(p, p1, p2) {\n return _sqClosestPointOnSegment(p, p1, p2);\n } // Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm\n\n\n function _simplifyDP(points, sqTolerance) {\n var len = points.length,\n ArrayConstructor = (typeof Uint8Array === \"undefined\" ? \"undefined\" : _typeof(Uint8Array)) !== undefined + '' ? Uint8Array : Array,\n markers = new ArrayConstructor(len);\n markers[0] = markers[len - 1] = 1;\n\n _simplifyDPStep(points, markers, sqTolerance, 0, len - 1);\n\n var i,\n newPoints = [];\n\n for (i = 0; i < len; i++) {\n if (markers[i]) {\n newPoints.push(points[i]);\n }\n }\n\n return newPoints;\n }\n\n function _simplifyDPStep(points, markers, sqTolerance, first, last) {\n var maxSqDist = 0,\n index,\n i,\n sqDist;\n\n for (i = first + 1; i <= last - 1; i++) {\n sqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);\n\n if (sqDist > maxSqDist) {\n index = i;\n maxSqDist = sqDist;\n }\n }\n\n if (maxSqDist > sqTolerance) {\n markers[index] = 1;\n\n _simplifyDPStep(points, markers, sqTolerance, first, index);\n\n _simplifyDPStep(points, markers, sqTolerance, index, last);\n }\n } // reduce points that are too close to each other to a single point\n\n\n function _reducePoints(points, sqTolerance) {\n var reducedPoints = [points[0]];\n\n for (var i = 1, prev = 0, len = points.length; i < len; i++) {\n if (_sqDist(points[i], points[prev]) > sqTolerance) {\n reducedPoints.push(points[i]);\n prev = i;\n }\n }\n\n if (prev < len - 1) {\n reducedPoints.push(points[len - 1]);\n }\n\n return reducedPoints;\n }\n\n var _lastCode; // @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean\n // Clips the segment a to b by rectangular bounds with the\n // [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)\n // (modifying the segment points directly!). Used by Leaflet to only show polyline\n // points that are on the screen or near, increasing performance.\n\n\n function clipSegment(a, b, bounds, useLastCode, round) {\n var codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),\n codeB = _getBitCode(b, bounds),\n codeOut,\n p,\n newCode; // save 2nd code to avoid calculating it on the next segment\n\n\n _lastCode = codeB;\n\n while (true) {\n // if a,b is inside the clip window (trivial accept)\n if (!(codeA | codeB)) {\n return [a, b];\n } // if a,b is outside the clip window (trivial reject)\n\n\n if (codeA & codeB) {\n return false;\n } // other cases\n\n\n codeOut = codeA || codeB;\n p = _getEdgeIntersection(a, b, codeOut, bounds, round);\n newCode = _getBitCode(p, bounds);\n\n if (codeOut === codeA) {\n a = p;\n codeA = newCode;\n } else {\n b = p;\n codeB = newCode;\n }\n }\n }\n\n function _getEdgeIntersection(a, b, code, bounds, round) {\n var dx = b.x - a.x,\n dy = b.y - a.y,\n min = bounds.min,\n max = bounds.max,\n x,\n y;\n\n if (code & 8) {\n // top\n x = a.x + dx * (max.y - a.y) / dy;\n y = max.y;\n } else if (code & 4) {\n // bottom\n x = a.x + dx * (min.y - a.y) / dy;\n y = min.y;\n } else if (code & 2) {\n // right\n x = max.x;\n y = a.y + dy * (max.x - a.x) / dx;\n } else if (code & 1) {\n // left\n x = min.x;\n y = a.y + dy * (min.x - a.x) / dx;\n }\n\n return new Point(x, y, round);\n }\n\n function _getBitCode(p, bounds) {\n var code = 0;\n\n if (p.x < bounds.min.x) {\n // left\n code |= 1;\n } else if (p.x > bounds.max.x) {\n // right\n code |= 2;\n }\n\n if (p.y < bounds.min.y) {\n // bottom\n code |= 4;\n } else if (p.y > bounds.max.y) {\n // top\n code |= 8;\n }\n\n return code;\n } // square distance (to avoid unnecessary Math.sqrt calls)\n\n\n function _sqDist(p1, p2) {\n var dx = p2.x - p1.x,\n dy = p2.y - p1.y;\n return dx * dx + dy * dy;\n } // return closest point on segment or distance to that point\n\n\n function _sqClosestPointOnSegment(p, p1, p2, sqDist) {\n var x = p1.x,\n y = p1.y,\n dx = p2.x - x,\n dy = p2.y - y,\n dot = dx * dx + dy * dy,\n t;\n\n if (dot > 0) {\n t = ((p.x - x) * dx + (p.y - y) * dy) / dot;\n\n if (t > 1) {\n x = p2.x;\n y = p2.y;\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p.x - x;\n dy = p.y - y;\n return sqDist ? dx * dx + dy * dy : new Point(x, y);\n } // @function isFlat(latlngs: LatLng[]): Boolean\n // Returns true if `latlngs` is a flat array, false is nested.\n\n\n function isFlat(latlngs) {\n return !isArray(latlngs[0]) || _typeof(latlngs[0][0]) !== 'object' && typeof latlngs[0][0] !== 'undefined';\n }\n\n function _flat(latlngs) {\n console.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');\n return isFlat(latlngs);\n }\n\n var LineUtil = {\n simplify: simplify,\n pointToSegmentDistance: pointToSegmentDistance,\n closestPointOnSegment: closestPointOnSegment,\n clipSegment: clipSegment,\n _getEdgeIntersection: _getEdgeIntersection,\n _getBitCode: _getBitCode,\n _sqClosestPointOnSegment: _sqClosestPointOnSegment,\n isFlat: isFlat,\n _flat: _flat\n };\n /*\r\n * @namespace PolyUtil\r\n * Various utility functions for polygon geometries.\r\n */\n\n /* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]\r\n * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).\r\n * Used by Leaflet to only show polygon points that are on the screen or near, increasing\r\n * performance. Note that polygon points needs different algorithm for clipping\r\n * than polyline, so there's a separate method for it.\r\n */\n\n function clipPolygon(points, bounds, round) {\n var clippedPoints,\n edges = [1, 4, 2, 8],\n i,\n j,\n k,\n a,\n b,\n len,\n edge,\n p;\n\n for (i = 0, len = points.length; i < len; i++) {\n points[i]._code = _getBitCode(points[i], bounds);\n } // for each edge (left, bottom, right, top)\n\n\n for (k = 0; k < 4; k++) {\n edge = edges[k];\n clippedPoints = [];\n\n for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {\n a = points[i];\n b = points[j]; // if a is inside the clip window\n\n if (!(a._code & edge)) {\n // if b is outside the clip window (a->b goes out of screen)\n if (b._code & edge) {\n p = _getEdgeIntersection(b, a, edge, bounds, round);\n p._code = _getBitCode(p, bounds);\n clippedPoints.push(p);\n }\n\n clippedPoints.push(a); // else if b is inside the clip window (a->b enters the screen)\n } else if (!(b._code & edge)) {\n p = _getEdgeIntersection(b, a, edge, bounds, round);\n p._code = _getBitCode(p, bounds);\n clippedPoints.push(p);\n }\n }\n\n points = clippedPoints;\n }\n\n return points;\n }\n\n var PolyUtil = {\n clipPolygon: clipPolygon\n };\n /*\r\n * @namespace Projection\r\n * @section\r\n * Leaflet comes with a set of already defined Projections out of the box:\r\n *\r\n * @projection L.Projection.LonLat\r\n *\r\n * Equirectangular, or Plate Carree projection — the most simple projection,\r\n * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as\r\n * latitude. Also suitable for flat worlds, e.g. game maps. Used by the\r\n * `EPSG:4326` and `Simple` CRS.\r\n */\n\n var LonLat = {\n project: function project(latlng) {\n return new Point(latlng.lng, latlng.lat);\n },\n unproject: function unproject(point) {\n return new LatLng(point.y, point.x);\n },\n bounds: new Bounds([-180, -90], [180, 90])\n };\n /*\r\n * @namespace Projection\r\n * @projection L.Projection.Mercator\r\n *\r\n * Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.\r\n */\n\n var Mercator = {\n R: 6378137,\n R_MINOR: 6356752.314245179,\n bounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\n project: function project(latlng) {\n var d = Math.PI / 180,\n r = this.R,\n y = latlng.lat * d,\n tmp = this.R_MINOR / r,\n e = Math.sqrt(1 - tmp * tmp),\n con = e * Math.sin(y);\n var ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);\n y = -r * Math.log(Math.max(ts, 1E-10));\n return new Point(latlng.lng * d * r, y);\n },\n unproject: function unproject(point) {\n var d = 180 / Math.PI,\n r = this.R,\n tmp = this.R_MINOR / r,\n e = Math.sqrt(1 - tmp * tmp),\n ts = Math.exp(-point.y / r),\n phi = Math.PI / 2 - 2 * Math.atan(ts);\n\n for (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {\n con = e * Math.sin(phi);\n con = Math.pow((1 - con) / (1 + con), e / 2);\n dphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;\n phi += dphi;\n }\n\n return new LatLng(phi * d, point.x * d / r);\n }\n };\n /*\n * @class Projection\n * An object with methods for projecting geographical coordinates of the world onto\n * a flat surface (and back). See [Map projection](http://en.wikipedia.org/wiki/Map_projection).\n * @property bounds: Bounds\n * The bounds (specified in CRS units) where the projection is valid\n * @method project(latlng: LatLng): Point\n * Projects geographical coordinates into a 2D point.\n * Only accepts actual `L.LatLng` instances, not arrays.\n * @method unproject(point: Point): LatLng\n * The inverse of `project`. Projects a 2D point into a geographical location.\n * Only accepts actual `L.Point` instances, not arrays.\n * Note that the projection instances do not inherit from Leaflet's `Class` object,\n * and can't be instantiated. Also, new classes can't inherit from them,\n * and methods can't be added to them with the `include` function.\n */\n\n var index = {\n LonLat: LonLat,\n Mercator: Mercator,\n SphericalMercator: SphericalMercator\n };\n /*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3395\r\n *\r\n * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.\r\n */\n\n var EPSG3395 = extend({}, Earth, {\n code: 'EPSG:3395',\n projection: Mercator,\n transformation: function () {\n var scale = 0.5 / (Math.PI * Mercator.R);\n return toTransformation(scale, 0.5, -scale, 0.5);\n }()\n });\n /*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG4326\r\n *\r\n * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.\r\n *\r\n * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),\r\n * which is a breaking change from 0.7.x behaviour. If you are using a `TileLayer`\r\n * with this CRS, ensure that there are two 256x256 pixel tiles covering the\r\n * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),\r\n * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.\r\n */\n\n var EPSG4326 = extend({}, Earth, {\n code: 'EPSG:4326',\n projection: LonLat,\n transformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)\n });\n /*\n * @namespace CRS\n * @crs L.CRS.Simple\n *\n * A simple CRS that maps longitude and latitude into `x` and `y` directly.\n * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`\n * axis should still be inverted (going from bottom to top). `distance()` returns\n * simple euclidean distance.\n */\n\n var Simple = extend({}, CRS, {\n projection: LonLat,\n transformation: toTransformation(1, 0, -1, 0),\n scale: function scale(zoom) {\n return Math.pow(2, zoom);\n },\n zoom: function zoom(scale) {\n return Math.log(scale) / Math.LN2;\n },\n distance: function distance(latlng1, latlng2) {\n var dx = latlng2.lng - latlng1.lng,\n dy = latlng2.lat - latlng1.lat;\n return Math.sqrt(dx * dx + dy * dy);\n },\n infinite: true\n });\n CRS.Earth = Earth;\n CRS.EPSG3395 = EPSG3395;\n CRS.EPSG3857 = EPSG3857;\n CRS.EPSG900913 = EPSG900913;\n CRS.EPSG4326 = EPSG4326;\n CRS.Simple = Simple;\n /*\n * @class Layer\n * @inherits Evented\n * @aka L.Layer\n * @aka ILayer\n *\n * A set of methods from the Layer base class that all Leaflet layers use.\n * Inherits all methods, options and events from `L.Evented`.\n *\n * @example\n *\n * ```js\n * var layer = L.marker(latlng).addTo(map);\n * layer.addTo(map);\n * layer.remove();\n * ```\n *\n * @event add: Event\n * Fired after the layer is added to a map\n *\n * @event remove: Event\n * Fired after the layer is removed from a map\n */\n\n var Layer = Evented.extend({\n // Classes extending `L.Layer` will inherit the following options:\n options: {\n // @option pane: String = 'overlayPane'\n // By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.\n pane: 'overlayPane',\n // @option attribution: String = null\n // String to be shown in the attribution control, e.g. \"© OpenStreetMap contributors\". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.\n attribution: null,\n bubblingMouseEvents: true\n },\n\n /* @section\n * Classes extending `L.Layer` will inherit the following methods:\n *\n * @method addTo(map: Map|LayerGroup): this\n * Adds the layer to the given map or layer group.\n */\n addTo: function addTo(map) {\n map.addLayer(this);\n return this;\n },\n // @method remove: this\n // Removes the layer from the map it is currently active on.\n remove: function remove() {\n return this.removeFrom(this._map || this._mapToAdd);\n },\n // @method removeFrom(map: Map): this\n // Removes the layer from the given map\n //\n // @alternative\n // @method removeFrom(group: LayerGroup): this\n // Removes the layer from the given `LayerGroup`\n removeFrom: function removeFrom(obj) {\n if (obj) {\n obj.removeLayer(this);\n }\n\n return this;\n },\n // @method getPane(name? : String): HTMLElement\n // Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.\n getPane: function getPane(name) {\n return this._map.getPane(name ? this.options[name] || name : this.options.pane);\n },\n addInteractiveTarget: function addInteractiveTarget(targetEl) {\n this._map._targets[stamp(targetEl)] = this;\n return this;\n },\n removeInteractiveTarget: function removeInteractiveTarget(targetEl) {\n delete this._map._targets[stamp(targetEl)];\n return this;\n },\n // @method getAttribution: String\n // Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).\n getAttribution: function getAttribution() {\n return this.options.attribution;\n },\n _layerAdd: function _layerAdd(e) {\n var map = e.target; // check in case layer gets added and then removed before the map is ready\n\n if (!map.hasLayer(this)) {\n return;\n }\n\n this._map = map;\n this._zoomAnimated = map._zoomAnimated;\n\n if (this.getEvents) {\n var events = this.getEvents();\n map.on(events, this);\n this.once('remove', function () {\n map.off(events, this);\n }, this);\n }\n\n this.onAdd(map);\n\n if (this.getAttribution && map.attributionControl) {\n map.attributionControl.addAttribution(this.getAttribution());\n }\n\n this.fire('add');\n map.fire('layeradd', {\n layer: this\n });\n }\n });\n /* @section Extension methods\n * @uninheritable\n *\n * Every layer should extend from `L.Layer` and (re-)implement the following methods.\n *\n * @method onAdd(map: Map): this\n * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).\n *\n * @method onRemove(map: Map): this\n * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).\n *\n * @method getEvents(): Object\n * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.\n *\n * @method getAttribution(): String\n * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.\n *\n * @method beforeAdd(map: Map): this\n * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.\n */\n\n /* @namespace Map\n * @section Layer events\n *\n * @event layeradd: LayerEvent\n * Fired when a new layer is added to the map.\n *\n * @event layerremove: LayerEvent\n * Fired when some layer is removed from the map\n *\n * @section Methods for Layers and Controls\n */\n\n Map.include({\n // @method addLayer(layer: Layer): this\n // Adds the given layer to the map\n addLayer: function addLayer(layer) {\n if (!layer._layerAdd) {\n throw new Error('The provided object is not a Layer.');\n }\n\n var id = stamp(layer);\n\n if (this._layers[id]) {\n return this;\n }\n\n this._layers[id] = layer;\n layer._mapToAdd = this;\n\n if (layer.beforeAdd) {\n layer.beforeAdd(this);\n }\n\n this.whenReady(layer._layerAdd, layer);\n return this;\n },\n // @method removeLayer(layer: Layer): this\n // Removes the given layer from the map.\n removeLayer: function removeLayer(layer) {\n var id = stamp(layer);\n\n if (!this._layers[id]) {\n return this;\n }\n\n if (this._loaded) {\n layer.onRemove(this);\n }\n\n if (layer.getAttribution && this.attributionControl) {\n this.attributionControl.removeAttribution(layer.getAttribution());\n }\n\n delete this._layers[id];\n\n if (this._loaded) {\n this.fire('layerremove', {\n layer: layer\n });\n layer.fire('remove');\n }\n\n layer._map = layer._mapToAdd = null;\n return this;\n },\n // @method hasLayer(layer: Layer): Boolean\n // Returns `true` if the given layer is currently added to the map\n hasLayer: function hasLayer(layer) {\n return !!layer && stamp(layer) in this._layers;\n },\n\n /* @method eachLayer(fn: Function, context?: Object): this\n * Iterates over the layers of the map, optionally specifying context of the iterator function.\n * ```\n * map.eachLayer(function(layer){\n * layer.bindPopup('Hello');\n * });\n * ```\n */\n eachLayer: function eachLayer(method, context) {\n for (var i in this._layers) {\n method.call(context, this._layers[i]);\n }\n\n return this;\n },\n _addLayers: function _addLayers(layers) {\n layers = layers ? isArray(layers) ? layers : [layers] : [];\n\n for (var i = 0, len = layers.length; i < len; i++) {\n this.addLayer(layers[i]);\n }\n },\n _addZoomLimit: function _addZoomLimit(layer) {\n if (isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {\n this._zoomBoundLayers[stamp(layer)] = layer;\n\n this._updateZoomLevels();\n }\n },\n _removeZoomLimit: function _removeZoomLimit(layer) {\n var id = stamp(layer);\n\n if (this._zoomBoundLayers[id]) {\n delete this._zoomBoundLayers[id];\n\n this._updateZoomLevels();\n }\n },\n _updateZoomLevels: function _updateZoomLevels() {\n var minZoom = Infinity,\n maxZoom = -Infinity,\n oldZoomSpan = this._getZoomSpan();\n\n for (var i in this._zoomBoundLayers) {\n var options = this._zoomBoundLayers[i].options;\n minZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);\n maxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);\n }\n\n this._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;\n this._layersMinZoom = minZoom === Infinity ? undefined : minZoom; // @section Map state change events\n // @event zoomlevelschange: Event\n // Fired when the number of zoomlevels on the map is changed due\n // to adding or removing a layer.\n\n if (oldZoomSpan !== this._getZoomSpan()) {\n this.fire('zoomlevelschange');\n }\n\n if (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {\n this.setZoom(this._layersMaxZoom);\n }\n\n if (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {\n this.setZoom(this._layersMinZoom);\n }\n }\n });\n /*\r\n * @class LayerGroup\r\n * @aka L.LayerGroup\r\n * @inherits Layer\r\n *\r\n * Used to group several layers and handle them as one. If you add it to the map,\r\n * any layers added or removed from the group will be added/removed on the map as\r\n * well. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.layerGroup([marker1, marker2])\r\n * \t.addLayer(polyline)\r\n * \t.addTo(map);\r\n * ```\r\n */\n\n var LayerGroup = Layer.extend({\n initialize: function initialize(layers, options) {\n setOptions(this, options);\n this._layers = {};\n var i, len;\n\n if (layers) {\n for (i = 0, len = layers.length; i < len; i++) {\n this.addLayer(layers[i]);\n }\n }\n },\n // @method addLayer(layer: Layer): this\n // Adds the given layer to the group.\n addLayer: function addLayer(layer) {\n var id = this.getLayerId(layer);\n this._layers[id] = layer;\n\n if (this._map) {\n this._map.addLayer(layer);\n }\n\n return this;\n },\n // @method removeLayer(layer: Layer): this\n // Removes the given layer from the group.\n // @alternative\n // @method removeLayer(id: Number): this\n // Removes the layer with the given internal ID from the group.\n removeLayer: function removeLayer(layer) {\n var id = layer in this._layers ? layer : this.getLayerId(layer);\n\n if (this._map && this._layers[id]) {\n this._map.removeLayer(this._layers[id]);\n }\n\n delete this._layers[id];\n return this;\n },\n // @method hasLayer(layer: Layer): Boolean\n // Returns `true` if the given layer is currently added to the group.\n // @alternative\n // @method hasLayer(id: Number): Boolean\n // Returns `true` if the given internal ID is currently added to the group.\n hasLayer: function hasLayer(layer) {\n if (!layer) {\n return false;\n }\n\n var layerId = typeof layer === 'number' ? layer : this.getLayerId(layer);\n return layerId in this._layers;\n },\n // @method clearLayers(): this\n // Removes all the layers from the group.\n clearLayers: function clearLayers() {\n return this.eachLayer(this.removeLayer, this);\n },\n // @method invoke(methodName: String, …): this\n // Calls `methodName` on every layer contained in this group, passing any\n // additional parameters. Has no effect if the layers contained do not\n // implement `methodName`.\n invoke: function invoke(methodName) {\n var args = Array.prototype.slice.call(arguments, 1),\n i,\n layer;\n\n for (i in this._layers) {\n layer = this._layers[i];\n\n if (layer[methodName]) {\n layer[methodName].apply(layer, args);\n }\n }\n\n return this;\n },\n onAdd: function onAdd(map) {\n this.eachLayer(map.addLayer, map);\n },\n onRemove: function onRemove(map) {\n this.eachLayer(map.removeLayer, map);\n },\n // @method eachLayer(fn: Function, context?: Object): this\n // Iterates over the layers of the group, optionally specifying context of the iterator function.\n // ```js\n // group.eachLayer(function (layer) {\n // \tlayer.bindPopup('Hello');\n // });\n // ```\n eachLayer: function eachLayer(method, context) {\n for (var i in this._layers) {\n method.call(context, this._layers[i]);\n }\n\n return this;\n },\n // @method getLayer(id: Number): Layer\n // Returns the layer with the given internal ID.\n getLayer: function getLayer(id) {\n return this._layers[id];\n },\n // @method getLayers(): Layer[]\n // Returns an array of all the layers added to the group.\n getLayers: function getLayers() {\n var layers = [];\n this.eachLayer(layers.push, layers);\n return layers;\n },\n // @method setZIndex(zIndex: Number): this\n // Calls `setZIndex` on every layer contained in this group, passing the z-index.\n setZIndex: function setZIndex(zIndex) {\n return this.invoke('setZIndex', zIndex);\n },\n // @method getLayerId(layer: Layer): Number\n // Returns the internal ID for a layer\n getLayerId: function getLayerId(layer) {\n return stamp(layer);\n }\n }); // @factory L.layerGroup(layers?: Layer[], options?: Object)\n // Create a layer group, optionally given an initial set of layers and an `options` object.\n\n var layerGroup = function layerGroup(layers, options) {\n return new LayerGroup(layers, options);\n };\n /*\r\n * @class FeatureGroup\r\n * @aka L.FeatureGroup\r\n * @inherits LayerGroup\r\n *\r\n * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:\r\n * * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))\r\n * * Events are propagated to the `FeatureGroup`, so if the group has an event\r\n * handler, it will handle events from any of the layers. This includes mouse events\r\n * and custom events.\r\n * * Has `layeradd` and `layerremove` events\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.featureGroup([marker1, marker2, polyline])\r\n * \t.bindPopup('Hello world!')\r\n * \t.on('click', function() { alert('Clicked on a member of the group!'); })\r\n * \t.addTo(map);\r\n * ```\r\n */\n\n\n var FeatureGroup = LayerGroup.extend({\n addLayer: function addLayer(layer) {\n if (this.hasLayer(layer)) {\n return this;\n }\n\n layer.addEventParent(this);\n LayerGroup.prototype.addLayer.call(this, layer); // @event layeradd: LayerEvent\n // Fired when a layer is added to this `FeatureGroup`\n\n return this.fire('layeradd', {\n layer: layer\n });\n },\n removeLayer: function removeLayer(layer) {\n if (!this.hasLayer(layer)) {\n return this;\n }\n\n if (layer in this._layers) {\n layer = this._layers[layer];\n }\n\n layer.removeEventParent(this);\n LayerGroup.prototype.removeLayer.call(this, layer); // @event layerremove: LayerEvent\n // Fired when a layer is removed from this `FeatureGroup`\n\n return this.fire('layerremove', {\n layer: layer\n });\n },\n // @method setStyle(style: Path options): this\n // Sets the given path options to each layer of the group that has a `setStyle` method.\n setStyle: function setStyle(style) {\n return this.invoke('setStyle', style);\n },\n // @method bringToFront(): this\n // Brings the layer group to the top of all other layers\n bringToFront: function bringToFront() {\n return this.invoke('bringToFront');\n },\n // @method bringToBack(): this\n // Brings the layer group to the back of all other layers\n bringToBack: function bringToBack() {\n return this.invoke('bringToBack');\n },\n // @method getBounds(): LatLngBounds\n // Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).\n getBounds: function getBounds() {\n var bounds = new LatLngBounds();\n\n for (var id in this._layers) {\n var layer = this._layers[id];\n bounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());\n }\n\n return bounds;\n }\n }); // @factory L.featureGroup(layers?: Layer[], options?: Object)\n // Create a feature group, optionally given an initial set of layers and an `options` object.\n\n var featureGroup = function featureGroup(layers, options) {\n return new FeatureGroup(layers, options);\n };\n /*\r\n * @class Icon\r\n * @aka L.Icon\r\n *\r\n * Represents an icon to provide when creating a marker.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var myIcon = L.icon({\r\n * iconUrl: 'my-icon.png',\r\n * iconRetinaUrl: 'my-icon@2x.png',\r\n * iconSize: [38, 95],\r\n * iconAnchor: [22, 94],\r\n * popupAnchor: [-3, -76],\r\n * shadowUrl: 'my-icon-shadow.png',\r\n * shadowRetinaUrl: 'my-icon-shadow@2x.png',\r\n * shadowSize: [68, 95],\r\n * shadowAnchor: [22, 94]\r\n * });\r\n *\r\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\r\n * ```\r\n *\r\n * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.\r\n *\r\n */\n\n\n var Icon = Class.extend({\n /* @section\r\n * @aka Icon options\r\n *\r\n * @option iconUrl: String = null\r\n * **(required)** The URL to the icon image (absolute or relative to your script path).\r\n *\r\n * @option iconRetinaUrl: String = null\r\n * The URL to a retina sized version of the icon image (absolute or relative to your\r\n * script path). Used for Retina screen devices.\r\n *\r\n * @option iconSize: Point = null\r\n * Size of the icon image in pixels.\r\n *\r\n * @option iconAnchor: Point = null\r\n * The coordinates of the \"tip\" of the icon (relative to its top left corner). The icon\r\n * will be aligned so that this point is at the marker's geographical location. Centered\r\n * by default if size is specified, also can be set in CSS with negative margins.\r\n *\r\n * @option popupAnchor: Point = [0, 0]\r\n * The coordinates of the point from which popups will \"open\", relative to the icon anchor.\r\n *\r\n * @option tooltipAnchor: Point = [0, 0]\r\n * The coordinates of the point from which tooltips will \"open\", relative to the icon anchor.\r\n *\r\n * @option shadowUrl: String = null\r\n * The URL to the icon shadow image. If not specified, no shadow image will be created.\r\n *\r\n * @option shadowRetinaUrl: String = null\r\n *\r\n * @option shadowSize: Point = null\r\n * Size of the shadow image in pixels.\r\n *\r\n * @option shadowAnchor: Point = null\r\n * The coordinates of the \"tip\" of the shadow (relative to its top left corner) (the same\r\n * as iconAnchor if not specified).\r\n *\r\n * @option className: String = ''\r\n * A custom class name to assign to both icon and shadow images. Empty by default.\r\n */\n options: {\n popupAnchor: [0, 0],\n tooltipAnchor: [0, 0]\n },\n initialize: function initialize(options) {\n setOptions(this, options);\n },\n // @method createIcon(oldIcon?: HTMLElement): HTMLElement\n // Called internally when the icon has to be shown, returns a `<img>` HTML element\n // styled according to the options.\n createIcon: function createIcon(oldIcon) {\n return this._createIcon('icon', oldIcon);\n },\n // @method createShadow(oldIcon?: HTMLElement): HTMLElement\n // As `createIcon`, but for the shadow beneath it.\n createShadow: function createShadow(oldIcon) {\n return this._createIcon('shadow', oldIcon);\n },\n _createIcon: function _createIcon(name, oldIcon) {\n var src = this._getIconUrl(name);\n\n if (!src) {\n if (name === 'icon') {\n throw new Error('iconUrl not set in Icon options (see the docs).');\n }\n\n return null;\n }\n\n var img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);\n\n this._setIconStyles(img, name);\n\n return img;\n },\n _setIconStyles: function _setIconStyles(img, name) {\n var options = this.options;\n var sizeOption = options[name + 'Size'];\n\n if (typeof sizeOption === 'number') {\n sizeOption = [sizeOption, sizeOption];\n }\n\n var size = toPoint(sizeOption),\n anchor = toPoint(name === 'shadow' && options.shadowAnchor || options.iconAnchor || size && size.divideBy(2, true));\n img.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\n\n if (anchor) {\n img.style.marginLeft = -anchor.x + 'px';\n img.style.marginTop = -anchor.y + 'px';\n }\n\n if (size) {\n img.style.width = size.x + 'px';\n img.style.height = size.y + 'px';\n }\n },\n _createImg: function _createImg(src, el) {\n el = el || document.createElement('img');\n el.src = src;\n return el;\n },\n _getIconUrl: function _getIconUrl(name) {\n return retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];\n }\n }); // @factory L.icon(options: Icon options)\n // Creates an icon instance with the given options.\n\n function icon(options) {\n return new Icon(options);\n }\n /*\n * @miniclass Icon.Default (Icon)\n * @aka L.Icon.Default\n * @section\n *\n * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when\n * no icon is specified. Points to the blue marker image distributed with Leaflet\n * releases.\n *\n * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`\n * (which is a set of `Icon options`).\n *\n * If you want to _completely_ replace the default icon, override the\n * `L.Marker.prototype.options.icon` with your own icon instead.\n */\n\n\n var IconDefault = Icon.extend({\n options: {\n iconUrl: 'marker-icon.png',\n iconRetinaUrl: 'marker-icon-2x.png',\n shadowUrl: 'marker-shadow.png',\n iconSize: [25, 41],\n iconAnchor: [12, 41],\n popupAnchor: [1, -34],\n tooltipAnchor: [16, -28],\n shadowSize: [41, 41]\n },\n _getIconUrl: function _getIconUrl(name) {\n if (!IconDefault.imagePath) {\n // Deprecated, backwards-compatibility only\n IconDefault.imagePath = this._detectIconPath();\n } // @option imagePath: String\n // `Icon.Default` will try to auto-detect the location of the\n // blue icon images. If you are placing these images in a non-standard\n // way, set this option to point to the right path.\n\n\n return (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);\n },\n _detectIconPath: function _detectIconPath() {\n var el = create$1('div', 'leaflet-default-icon-path', document.body);\n var path = getStyle(el, 'background-image') || getStyle(el, 'backgroundImage'); // IE8\n\n document.body.removeChild(el);\n\n if (path === null || path.indexOf('url') !== 0) {\n path = '';\n } else {\n path = path.replace(/^url\\([\"']?/, '').replace(/marker-icon\\.png[\"']?\\)$/, '');\n }\n\n return path;\n }\n });\n /*\n * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.\n */\n\n /* @namespace Marker\n * @section Interaction handlers\n *\n * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:\n *\n * ```js\n * marker.dragging.disable();\n * ```\n *\n * @property dragging: Handler\n * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).\n */\n\n var MarkerDrag = Handler.extend({\n initialize: function initialize(marker) {\n this._marker = marker;\n },\n addHooks: function addHooks() {\n var icon = this._marker._icon;\n\n if (!this._draggable) {\n this._draggable = new Draggable(icon, icon, true);\n }\n\n this._draggable.on({\n dragstart: this._onDragStart,\n predrag: this._onPreDrag,\n drag: this._onDrag,\n dragend: this._onDragEnd\n }, this).enable();\n\n addClass(icon, 'leaflet-marker-draggable');\n },\n removeHooks: function removeHooks() {\n this._draggable.off({\n dragstart: this._onDragStart,\n predrag: this._onPreDrag,\n drag: this._onDrag,\n dragend: this._onDragEnd\n }, this).disable();\n\n if (this._marker._icon) {\n removeClass(this._marker._icon, 'leaflet-marker-draggable');\n }\n },\n moved: function moved() {\n return this._draggable && this._draggable._moved;\n },\n _adjustPan: function _adjustPan(e) {\n var marker = this._marker,\n map = marker._map,\n speed = this._marker.options.autoPanSpeed,\n padding = this._marker.options.autoPanPadding,\n iconPos = getPosition(marker._icon),\n bounds = map.getPixelBounds(),\n origin = map.getPixelOrigin();\n var panBounds = toBounds(bounds.min._subtract(origin).add(padding), bounds.max._subtract(origin).subtract(padding));\n\n if (!panBounds.contains(iconPos)) {\n // Compute incremental movement\n var movement = toPoint((Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) - (Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x), (Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) - (Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)).multiplyBy(speed);\n map.panBy(movement, {\n animate: false\n });\n\n this._draggable._newPos._add(movement);\n\n this._draggable._startPos._add(movement);\n\n setPosition(marker._icon, this._draggable._newPos);\n\n this._onDrag(e);\n\n this._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n }\n },\n _onDragStart: function _onDragStart() {\n // @section Dragging events\n // @event dragstart: Event\n // Fired when the user starts dragging the marker.\n // @event movestart: Event\n // Fired when the marker starts moving (because of dragging).\n this._oldLatLng = this._marker.getLatLng(); // When using ES6 imports it could not be set when `Popup` was not imported as well\n\n this._marker.closePopup && this._marker.closePopup();\n\n this._marker.fire('movestart').fire('dragstart');\n },\n _onPreDrag: function _onPreDrag(e) {\n if (this._marker.options.autoPan) {\n cancelAnimFrame(this._panRequest);\n this._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n }\n },\n _onDrag: function _onDrag(e) {\n var marker = this._marker,\n shadow = marker._shadow,\n iconPos = getPosition(marker._icon),\n latlng = marker._map.layerPointToLatLng(iconPos); // update shadow position\n\n\n if (shadow) {\n setPosition(shadow, iconPos);\n }\n\n marker._latlng = latlng;\n e.latlng = latlng;\n e.oldLatLng = this._oldLatLng; // @event drag: Event\n // Fired repeatedly while the user drags the marker.\n\n marker.fire('move', e).fire('drag', e);\n },\n _onDragEnd: function _onDragEnd(e) {\n // @event dragend: DragEndEvent\n // Fired when the user stops dragging the marker.\n cancelAnimFrame(this._panRequest); // @event moveend: Event\n // Fired when the marker stops moving (because of dragging).\n\n delete this._oldLatLng;\n\n this._marker.fire('moveend').fire('dragend', e);\n }\n });\n /*\r\n * @class Marker\r\n * @inherits Interactive layer\r\n * @aka L.Marker\r\n * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.marker([50.5, 30.5]).addTo(map);\r\n * ```\r\n */\n\n var Marker = Layer.extend({\n // @section\n // @aka Marker options\n options: {\n // @option icon: Icon = *\n // Icon instance to use for rendering the marker.\n // See [Icon documentation](#L.Icon) for details on how to customize the marker icon.\n // If not specified, a common instance of `L.Icon.Default` is used.\n icon: new IconDefault(),\n // Option inherited from \"Interactive layer\" abstract class\n interactive: true,\n // @option keyboard: Boolean = true\n // Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.\n keyboard: true,\n // @option title: String = ''\n // Text for the browser tooltip that appear on marker hover (no tooltip by default).\n title: '',\n // @option alt: String = ''\n // Text for the `alt` attribute of the icon image (useful for accessibility).\n alt: '',\n // @option zIndexOffset: Number = 0\n // By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).\n zIndexOffset: 0,\n // @option opacity: Number = 1.0\n // The opacity of the marker.\n opacity: 1,\n // @option riseOnHover: Boolean = false\n // If `true`, the marker will get on top of others when you hover the mouse over it.\n riseOnHover: false,\n // @option riseOffset: Number = 250\n // The z-index offset used for the `riseOnHover` feature.\n riseOffset: 250,\n // @option pane: String = 'markerPane'\n // `Map pane` where the markers icon will be added.\n pane: 'markerPane',\n // @option shadowPane: String = 'shadowPane'\n // `Map pane` where the markers shadow will be added.\n shadowPane: 'shadowPane',\n // @option bubblingMouseEvents: Boolean = false\n // When `true`, a mouse event on this marker will trigger the same event on the map\n // (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\n bubblingMouseEvents: false,\n // @section Draggable marker options\n // @option draggable: Boolean = false\n // Whether the marker is draggable with mouse/touch or not.\n draggable: false,\n // @option autoPan: Boolean = false\n // Whether to pan the map when dragging this marker near its edge or not.\n autoPan: false,\n // @option autoPanPadding: Point = Point(50, 50)\n // Distance (in pixels to the left/right and to the top/bottom) of the\n // map edge to start panning the map.\n autoPanPadding: [50, 50],\n // @option autoPanSpeed: Number = 10\n // Number of pixels the map should pan by.\n autoPanSpeed: 10\n },\n\n /* @section\r\n *\r\n * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:\r\n */\n initialize: function initialize(latlng, options) {\n setOptions(this, options);\n this._latlng = toLatLng(latlng);\n },\n onAdd: function onAdd(map) {\n this._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;\n\n if (this._zoomAnimated) {\n map.on('zoomanim', this._animateZoom, this);\n }\n\n this._initIcon();\n\n this.update();\n },\n onRemove: function onRemove(map) {\n if (this.dragging && this.dragging.enabled()) {\n this.options.draggable = true;\n this.dragging.removeHooks();\n }\n\n delete this.dragging;\n\n if (this._zoomAnimated) {\n map.off('zoomanim', this._animateZoom, this);\n }\n\n this._removeIcon();\n\n this._removeShadow();\n },\n getEvents: function getEvents() {\n return {\n zoom: this.update,\n viewreset: this.update\n };\n },\n // @method getLatLng: LatLng\n // Returns the current geographical position of the marker.\n getLatLng: function getLatLng() {\n return this._latlng;\n },\n // @method setLatLng(latlng: LatLng): this\n // Changes the marker position to the given point.\n setLatLng: function setLatLng(latlng) {\n var oldLatLng = this._latlng;\n this._latlng = toLatLng(latlng);\n this.update(); // @event move: Event\n // Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\n\n return this.fire('move', {\n oldLatLng: oldLatLng,\n latlng: this._latlng\n });\n },\n // @method setZIndexOffset(offset: Number): this\n // Changes the [zIndex offset](#marker-zindexoffset) of the marker.\n setZIndexOffset: function setZIndexOffset(offset) {\n this.options.zIndexOffset = offset;\n return this.update();\n },\n // @method getIcon: Icon\n // Returns the current icon used by the marker\n getIcon: function getIcon() {\n return this.options.icon;\n },\n // @method setIcon(icon: Icon): this\n // Changes the marker icon.\n setIcon: function setIcon(icon) {\n this.options.icon = icon;\n\n if (this._map) {\n this._initIcon();\n\n this.update();\n }\n\n if (this._popup) {\n this.bindPopup(this._popup, this._popup.options);\n }\n\n return this;\n },\n getElement: function getElement() {\n return this._icon;\n },\n update: function update() {\n if (this._icon && this._map) {\n var pos = this._map.latLngToLayerPoint(this._latlng).round();\n\n this._setPos(pos);\n }\n\n return this;\n },\n _initIcon: function _initIcon() {\n var options = this.options,\n classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\n var icon = options.icon.createIcon(this._icon),\n addIcon = false; // if we're not reusing the icon, remove the old one and init new one\n\n if (icon !== this._icon) {\n if (this._icon) {\n this._removeIcon();\n }\n\n addIcon = true;\n\n if (options.title) {\n icon.title = options.title;\n }\n\n if (icon.tagName === 'IMG') {\n icon.alt = options.alt || '';\n }\n }\n\n addClass(icon, classToAdd);\n\n if (options.keyboard) {\n icon.tabIndex = '0';\n }\n\n this._icon = icon;\n\n if (options.riseOnHover) {\n this.on({\n mouseover: this._bringToFront,\n mouseout: this._resetZIndex\n });\n }\n\n var newShadow = options.icon.createShadow(this._shadow),\n addShadow = false;\n\n if (newShadow !== this._shadow) {\n this._removeShadow();\n\n addShadow = true;\n }\n\n if (newShadow) {\n addClass(newShadow, classToAdd);\n newShadow.alt = '';\n }\n\n this._shadow = newShadow;\n\n if (options.opacity < 1) {\n this._updateOpacity();\n }\n\n if (addIcon) {\n this.getPane().appendChild(this._icon);\n }\n\n this._initInteraction();\n\n if (newShadow && addShadow) {\n this.getPane(options.shadowPane).appendChild(this._shadow);\n }\n },\n _removeIcon: function _removeIcon() {\n if (this.options.riseOnHover) {\n this.off({\n mouseover: this._bringToFront,\n mouseout: this._resetZIndex\n });\n }\n\n _remove(this._icon);\n\n this.removeInteractiveTarget(this._icon);\n this._icon = null;\n },\n _removeShadow: function _removeShadow() {\n if (this._shadow) {\n _remove(this._shadow);\n }\n\n this._shadow = null;\n },\n _setPos: function _setPos(pos) {\n if (this._icon) {\n setPosition(this._icon, pos);\n }\n\n if (this._shadow) {\n setPosition(this._shadow, pos);\n }\n\n this._zIndex = pos.y + this.options.zIndexOffset;\n\n this._resetZIndex();\n },\n _updateZIndex: function _updateZIndex(offset) {\n if (this._icon) {\n this._icon.style.zIndex = this._zIndex + offset;\n }\n },\n _animateZoom: function _animateZoom(opt) {\n var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();\n\n this._setPos(pos);\n },\n _initInteraction: function _initInteraction() {\n if (!this.options.interactive) {\n return;\n }\n\n addClass(this._icon, 'leaflet-interactive');\n this.addInteractiveTarget(this._icon);\n\n if (MarkerDrag) {\n var draggable = this.options.draggable;\n\n if (this.dragging) {\n draggable = this.dragging.enabled();\n this.dragging.disable();\n }\n\n this.dragging = new MarkerDrag(this);\n\n if (draggable) {\n this.dragging.enable();\n }\n }\n },\n // @method setOpacity(opacity: Number): this\n // Changes the opacity of the marker.\n setOpacity: function setOpacity(opacity) {\n this.options.opacity = opacity;\n\n if (this._map) {\n this._updateOpacity();\n }\n\n return this;\n },\n _updateOpacity: function _updateOpacity() {\n var opacity = this.options.opacity;\n\n if (this._icon) {\n _setOpacity(this._icon, opacity);\n }\n\n if (this._shadow) {\n _setOpacity(this._shadow, opacity);\n }\n },\n _bringToFront: function _bringToFront() {\n this._updateZIndex(this.options.riseOffset);\n },\n _resetZIndex: function _resetZIndex() {\n this._updateZIndex(0);\n },\n _getPopupAnchor: function _getPopupAnchor() {\n return this.options.icon.options.popupAnchor;\n },\n _getTooltipAnchor: function _getTooltipAnchor() {\n return this.options.icon.options.tooltipAnchor;\n }\n }); // factory L.marker(latlng: LatLng, options? : Marker options)\n // @factory L.marker(latlng: LatLng, options? : Marker options)\n // Instantiates a Marker object given a geographical point and optionally an options object.\n\n function marker(latlng, options) {\n return new Marker(latlng, options);\n }\n /*\n * @class Path\n * @aka L.Path\n * @inherits Interactive layer\n *\n * An abstract class that contains options and constants shared between vector\n * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.\n */\n\n\n var Path = Layer.extend({\n // @section\n // @aka Path options\n options: {\n // @option stroke: Boolean = true\n // Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.\n stroke: true,\n // @option color: String = '#3388ff'\n // Stroke color\n color: '#3388ff',\n // @option weight: Number = 3\n // Stroke width in pixels\n weight: 3,\n // @option opacity: Number = 1.0\n // Stroke opacity\n opacity: 1,\n // @option lineCap: String= 'round'\n // A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.\n lineCap: 'round',\n // @option lineJoin: String = 'round'\n // A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.\n lineJoin: 'round',\n // @option dashArray: String = null\n // A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n dashArray: null,\n // @option dashOffset: String = null\n // A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n dashOffset: null,\n // @option fill: Boolean = depends\n // Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.\n fill: false,\n // @option fillColor: String = *\n // Fill color. Defaults to the value of the [`color`](#path-color) option\n fillColor: null,\n // @option fillOpacity: Number = 0.2\n // Fill opacity.\n fillOpacity: 0.2,\n // @option fillRule: String = 'evenodd'\n // A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.\n fillRule: 'evenodd',\n // className: '',\n // Option inherited from \"Interactive layer\" abstract class\n interactive: true,\n // @option bubblingMouseEvents: Boolean = true\n // When `true`, a mouse event on this path will trigger the same event on the map\n // (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\n bubblingMouseEvents: true\n },\n beforeAdd: function beforeAdd(map) {\n // Renderer is set here because we need to call renderer.getEvents\n // before this.getEvents.\n this._renderer = map.getRenderer(this);\n },\n onAdd: function onAdd() {\n this._renderer._initPath(this);\n\n this._reset();\n\n this._renderer._addPath(this);\n },\n onRemove: function onRemove() {\n this._renderer._removePath(this);\n },\n // @method redraw(): this\n // Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.\n redraw: function redraw() {\n if (this._map) {\n this._renderer._updatePath(this);\n }\n\n return this;\n },\n // @method setStyle(style: Path options): this\n // Changes the appearance of a Path based on the options in the `Path options` object.\n setStyle: function setStyle(style) {\n setOptions(this, style);\n\n if (this._renderer) {\n this._renderer._updateStyle(this);\n\n if (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {\n this._updateBounds();\n }\n }\n\n return this;\n },\n // @method bringToFront(): this\n // Brings the layer to the top of all path layers.\n bringToFront: function bringToFront() {\n if (this._renderer) {\n this._renderer._bringToFront(this);\n }\n\n return this;\n },\n // @method bringToBack(): this\n // Brings the layer to the bottom of all path layers.\n bringToBack: function bringToBack() {\n if (this._renderer) {\n this._renderer._bringToBack(this);\n }\n\n return this;\n },\n getElement: function getElement() {\n return this._path;\n },\n _reset: function _reset() {\n // defined in child classes\n this._project();\n\n this._update();\n },\n _clickTolerance: function _clickTolerance() {\n // used when doing hit detection for Canvas layers\n return (this.options.stroke ? this.options.weight / 2 : 0) + this._renderer.options.tolerance;\n }\n });\n /*\n * @class CircleMarker\n * @aka L.CircleMarker\n * @inherits Path\n *\n * A circle of a fixed size with radius specified in pixels. Extends `Path`.\n */\n\n var CircleMarker = Path.extend({\n // @section\n // @aka CircleMarker options\n options: {\n fill: true,\n // @option radius: Number = 10\n // Radius of the circle marker, in pixels\n radius: 10\n },\n initialize: function initialize(latlng, options) {\n setOptions(this, options);\n this._latlng = toLatLng(latlng);\n this._radius = this.options.radius;\n },\n // @method setLatLng(latLng: LatLng): this\n // Sets the position of a circle marker to a new location.\n setLatLng: function setLatLng(latlng) {\n var oldLatLng = this._latlng;\n this._latlng = toLatLng(latlng);\n this.redraw(); // @event move: Event\n // Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\n\n return this.fire('move', {\n oldLatLng: oldLatLng,\n latlng: this._latlng\n });\n },\n // @method getLatLng(): LatLng\n // Returns the current geographical position of the circle marker\n getLatLng: function getLatLng() {\n return this._latlng;\n },\n // @method setRadius(radius: Number): this\n // Sets the radius of a circle marker. Units are in pixels.\n setRadius: function setRadius(radius) {\n this.options.radius = this._radius = radius;\n return this.redraw();\n },\n // @method getRadius(): Number\n // Returns the current radius of the circle\n getRadius: function getRadius() {\n return this._radius;\n },\n setStyle: function setStyle(options) {\n var radius = options && options.radius || this._radius;\n Path.prototype.setStyle.call(this, options);\n this.setRadius(radius);\n return this;\n },\n _project: function _project() {\n this._point = this._map.latLngToLayerPoint(this._latlng);\n\n this._updateBounds();\n },\n _updateBounds: function _updateBounds() {\n var r = this._radius,\n r2 = this._radiusY || r,\n w = this._clickTolerance(),\n p = [r + w, r2 + w];\n\n this._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));\n },\n _update: function _update() {\n if (this._map) {\n this._updatePath();\n }\n },\n _updatePath: function _updatePath() {\n this._renderer._updateCircle(this);\n },\n _empty: function _empty() {\n return this._radius && !this._renderer._bounds.intersects(this._pxBounds);\n },\n // Needed by the `Canvas` renderer for interactivity\n _containsPoint: function _containsPoint(p) {\n return p.distanceTo(this._point) <= this._radius + this._clickTolerance();\n }\n }); // @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)\n // Instantiates a circle marker object given a geographical point, and an optional options object.\n\n function circleMarker(latlng, options) {\n return new CircleMarker(latlng, options);\n }\n /*\n * @class Circle\n * @aka L.Circle\n * @inherits CircleMarker\n *\n * A class for drawing circle overlays on a map. Extends `CircleMarker`.\n *\n * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).\n *\n * @example\n *\n * ```js\n * L.circle([50.5, 30.5], {radius: 200}).addTo(map);\n * ```\n */\n\n\n var Circle = CircleMarker.extend({\n initialize: function initialize(latlng, options, legacyOptions) {\n if (typeof options === 'number') {\n // Backwards compatibility with 0.7.x factory (latlng, radius, options?)\n options = extend({}, legacyOptions, {\n radius: options\n });\n }\n\n setOptions(this, options);\n this._latlng = toLatLng(latlng);\n\n if (isNaN(this.options.radius)) {\n throw new Error('Circle radius cannot be NaN');\n } // @section\n // @aka Circle options\n // @option radius: Number; Radius of the circle, in meters.\n\n\n this._mRadius = this.options.radius;\n },\n // @method setRadius(radius: Number): this\n // Sets the radius of a circle. Units are in meters.\n setRadius: function setRadius(radius) {\n this._mRadius = radius;\n return this.redraw();\n },\n // @method getRadius(): Number\n // Returns the current radius of a circle. Units are in meters.\n getRadius: function getRadius() {\n return this._mRadius;\n },\n // @method getBounds(): LatLngBounds\n // Returns the `LatLngBounds` of the path.\n getBounds: function getBounds() {\n var half = [this._radius, this._radiusY || this._radius];\n return new LatLngBounds(this._map.layerPointToLatLng(this._point.subtract(half)), this._map.layerPointToLatLng(this._point.add(half)));\n },\n setStyle: Path.prototype.setStyle,\n _project: function _project() {\n var lng = this._latlng.lng,\n lat = this._latlng.lat,\n map = this._map,\n crs = map.options.crs;\n\n if (crs.distance === Earth.distance) {\n var d = Math.PI / 180,\n latR = this._mRadius / Earth.R / d,\n top = map.project([lat + latR, lng]),\n bottom = map.project([lat - latR, lng]),\n p = top.add(bottom).divideBy(2),\n lat2 = map.unproject(p).lat,\n lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) / (Math.cos(lat * d) * Math.cos(lat2 * d))) / d;\n\n if (isNaN(lngR) || lngR === 0) {\n lngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425\n }\n\n this._point = p.subtract(map.getPixelOrigin());\n this._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;\n this._radiusY = p.y - top.y;\n } else {\n var latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));\n this._point = map.latLngToLayerPoint(this._latlng);\n this._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;\n }\n\n this._updateBounds();\n }\n }); // @factory L.circle(latlng: LatLng, options?: Circle options)\n // Instantiates a circle object given a geographical point, and an options object\n // which contains the circle radius.\n // @alternative\n // @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)\n // Obsolete way of instantiating a circle, for compatibility with 0.7.x code.\n // Do not use in new applications or plugins.\n\n function circle(latlng, options, legacyOptions) {\n return new Circle(latlng, options, legacyOptions);\n }\n /*\n * @class Polyline\n * @aka L.Polyline\n * @inherits Path\n *\n * A class for drawing polyline overlays on a map. Extends `Path`.\n *\n * @example\n *\n * ```js\n * // create a red polyline from an array of LatLng points\n * var latlngs = [\n * \t[45.51, -122.68],\n * \t[37.77, -122.43],\n * \t[34.04, -118.2]\n * ];\n *\n * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polyline\n * map.fitBounds(polyline.getBounds());\n * ```\n *\n * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:\n *\n * ```js\n * // create a red polyline from an array of arrays of LatLng points\n * var latlngs = [\n * \t[[45.51, -122.68],\n * \t [37.77, -122.43],\n * \t [34.04, -118.2]],\n * \t[[40.78, -73.91],\n * \t [41.83, -87.62],\n * \t [32.76, -96.72]]\n * ];\n * ```\n */\n\n\n var Polyline = Path.extend({\n // @section\n // @aka Polyline options\n options: {\n // @option smoothFactor: Number = 1.0\n // How much to simplify the polyline on each zoom level. More means\n // better performance and smoother look, and less means more accurate representation.\n smoothFactor: 1.0,\n // @option noClip: Boolean = false\n // Disable polyline clipping.\n noClip: false\n },\n initialize: function initialize(latlngs, options) {\n setOptions(this, options);\n\n this._setLatLngs(latlngs);\n },\n // @method getLatLngs(): LatLng[]\n // Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.\n getLatLngs: function getLatLngs() {\n return this._latlngs;\n },\n // @method setLatLngs(latlngs: LatLng[]): this\n // Replaces all the points in the polyline with the given array of geographical points.\n setLatLngs: function setLatLngs(latlngs) {\n this._setLatLngs(latlngs);\n\n return this.redraw();\n },\n // @method isEmpty(): Boolean\n // Returns `true` if the Polyline has no LatLngs.\n isEmpty: function isEmpty() {\n return !this._latlngs.length;\n },\n // @method closestLayerPoint(p: Point): Point\n // Returns the point closest to `p` on the Polyline.\n closestLayerPoint: function closestLayerPoint(p) {\n var minDistance = Infinity,\n minPoint = null,\n closest = _sqClosestPointOnSegment,\n p1,\n p2;\n\n for (var j = 0, jLen = this._parts.length; j < jLen; j++) {\n var points = this._parts[j];\n\n for (var i = 1, len = points.length; i < len; i++) {\n p1 = points[i - 1];\n p2 = points[i];\n var sqDist = closest(p, p1, p2, true);\n\n if (sqDist < minDistance) {\n minDistance = sqDist;\n minPoint = closest(p, p1, p2);\n }\n }\n }\n\n if (minPoint) {\n minPoint.distance = Math.sqrt(minDistance);\n }\n\n return minPoint;\n },\n // @method getCenter(): LatLng\n // Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the polyline.\n getCenter: function getCenter() {\n // throws error when not yet added to map as this center calculation requires projected coordinates\n if (!this._map) {\n throw new Error('Must add layer to map before using getCenter()');\n }\n\n var i,\n halfDist,\n segDist,\n dist,\n p1,\n p2,\n ratio,\n points = this._rings[0],\n len = points.length;\n\n if (!len) {\n return null;\n } // polyline centroid algorithm; only uses the first ring if there are multiple\n\n\n for (i = 0, halfDist = 0; i < len - 1; i++) {\n halfDist += points[i].distanceTo(points[i + 1]) / 2;\n } // The line is so small in the current view that all points are on the same pixel.\n\n\n if (halfDist === 0) {\n return this._map.layerPointToLatLng(points[0]);\n }\n\n for (i = 0, dist = 0; i < len - 1; i++) {\n p1 = points[i];\n p2 = points[i + 1];\n segDist = p1.distanceTo(p2);\n dist += segDist;\n\n if (dist > halfDist) {\n ratio = (dist - halfDist) / segDist;\n return this._map.layerPointToLatLng([p2.x - ratio * (p2.x - p1.x), p2.y - ratio * (p2.y - p1.y)]);\n }\n }\n },\n // @method getBounds(): LatLngBounds\n // Returns the `LatLngBounds` of the path.\n getBounds: function getBounds() {\n return this._bounds;\n },\n // @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this\n // Adds a given point to the polyline. By default, adds to the first ring of\n // the polyline in case of a multi-polyline, but can be overridden by passing\n // a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).\n addLatLng: function addLatLng(latlng, latlngs) {\n latlngs = latlngs || this._defaultShape();\n latlng = toLatLng(latlng);\n latlngs.push(latlng);\n\n this._bounds.extend(latlng);\n\n return this.redraw();\n },\n _setLatLngs: function _setLatLngs(latlngs) {\n this._bounds = new LatLngBounds();\n this._latlngs = this._convertLatLngs(latlngs);\n },\n _defaultShape: function _defaultShape() {\n return isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];\n },\n // recursively convert latlngs input into actual LatLng instances; calculate bounds along the way\n _convertLatLngs: function _convertLatLngs(latlngs) {\n var result = [],\n flat = isFlat(latlngs);\n\n for (var i = 0, len = latlngs.length; i < len; i++) {\n if (flat) {\n result[i] = toLatLng(latlngs[i]);\n\n this._bounds.extend(result[i]);\n } else {\n result[i] = this._convertLatLngs(latlngs[i]);\n }\n }\n\n return result;\n },\n _project: function _project() {\n var pxBounds = new Bounds();\n this._rings = [];\n\n this._projectLatlngs(this._latlngs, this._rings, pxBounds);\n\n if (this._bounds.isValid() && pxBounds.isValid()) {\n this._rawPxBounds = pxBounds;\n\n this._updateBounds();\n }\n },\n _updateBounds: function _updateBounds() {\n var w = this._clickTolerance(),\n p = new Point(w, w);\n\n this._pxBounds = new Bounds([this._rawPxBounds.min.subtract(p), this._rawPxBounds.max.add(p)]);\n },\n // recursively turns latlngs into a set of rings with projected coordinates\n _projectLatlngs: function _projectLatlngs(latlngs, result, projectedBounds) {\n var flat = latlngs[0] instanceof LatLng,\n len = latlngs.length,\n i,\n ring;\n\n if (flat) {\n ring = [];\n\n for (i = 0; i < len; i++) {\n ring[i] = this._map.latLngToLayerPoint(latlngs[i]);\n projectedBounds.extend(ring[i]);\n }\n\n result.push(ring);\n } else {\n for (i = 0; i < len; i++) {\n this._projectLatlngs(latlngs[i], result, projectedBounds);\n }\n }\n },\n // clip polyline by renderer bounds so that we have less to render for performance\n _clipPoints: function _clipPoints() {\n var bounds = this._renderer._bounds;\n this._parts = [];\n\n if (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n return;\n }\n\n if (this.options.noClip) {\n this._parts = this._rings;\n return;\n }\n\n var parts = this._parts,\n i,\n j,\n k,\n len,\n len2,\n segment,\n points;\n\n for (i = 0, k = 0, len = this._rings.length; i < len; i++) {\n points = this._rings[i];\n\n for (j = 0, len2 = points.length; j < len2 - 1; j++) {\n segment = clipSegment(points[j], points[j + 1], bounds, j, true);\n\n if (!segment) {\n continue;\n }\n\n parts[k] = parts[k] || [];\n parts[k].push(segment[0]); // if segment goes out of screen, or it's the last one, it's the end of the line part\n\n if (segment[1] !== points[j + 1] || j === len2 - 2) {\n parts[k].push(segment[1]);\n k++;\n }\n }\n }\n },\n // simplify each clipped part of the polyline for performance\n _simplifyPoints: function _simplifyPoints() {\n var parts = this._parts,\n tolerance = this.options.smoothFactor;\n\n for (var i = 0, len = parts.length; i < len; i++) {\n parts[i] = simplify(parts[i], tolerance);\n }\n },\n _update: function _update() {\n if (!this._map) {\n return;\n }\n\n this._clipPoints();\n\n this._simplifyPoints();\n\n this._updatePath();\n },\n _updatePath: function _updatePath() {\n this._renderer._updatePoly(this);\n },\n // Needed by the `Canvas` renderer for interactivity\n _containsPoint: function _containsPoint(p, closed) {\n var i,\n j,\n k,\n len,\n len2,\n part,\n w = this._clickTolerance();\n\n if (!this._pxBounds || !this._pxBounds.contains(p)) {\n return false;\n } // hit detection for polylines\n\n\n for (i = 0, len = this._parts.length; i < len; i++) {\n part = this._parts[i];\n\n for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n if (!closed && j === 0) {\n continue;\n }\n\n if (pointToSegmentDistance(p, part[k], part[j]) <= w) {\n return true;\n }\n }\n }\n\n return false;\n }\n }); // @factory L.polyline(latlngs: LatLng[], options?: Polyline options)\n // Instantiates a polyline object given an array of geographical points and\n // optionally an options object. You can create a `Polyline` object with\n // multiple separate lines (`MultiPolyline`) by passing an array of arrays\n // of geographic points.\n\n function polyline(latlngs, options) {\n return new Polyline(latlngs, options);\n } // Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.\n\n\n Polyline._flat = _flat;\n /*\n * @class Polygon\n * @aka L.Polygon\n * @inherits Polyline\n *\n * A class for drawing polygon overlays on a map. Extends `Polyline`.\n *\n * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.\n *\n *\n * @example\n *\n * ```js\n * // create a red polygon from an array of LatLng points\n * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];\n *\n * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polygon\n * map.fitBounds(polygon.getBounds());\n * ```\n *\n * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:\n *\n * ```js\n * var latlngs = [\n * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ];\n * ```\n *\n * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.\n *\n * ```js\n * var latlngs = [\n * [ // first polygon\n * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ],\n * [ // second polygon\n * [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]\n * ]\n * ];\n * ```\n */\n\n var Polygon = Polyline.extend({\n options: {\n fill: true\n },\n isEmpty: function isEmpty() {\n return !this._latlngs.length || !this._latlngs[0].length;\n },\n getCenter: function getCenter() {\n // throws error when not yet added to map as this center calculation requires projected coordinates\n if (!this._map) {\n throw new Error('Must add layer to map before using getCenter()');\n }\n\n var i,\n j,\n p1,\n p2,\n f,\n area,\n x,\n y,\n center,\n points = this._rings[0],\n len = points.length;\n\n if (!len) {\n return null;\n } // polygon centroid algorithm; only uses the first ring if there are multiple\n\n\n area = x = y = 0;\n\n for (i = 0, j = len - 1; i < len; j = i++) {\n p1 = points[i];\n p2 = points[j];\n f = p1.y * p2.x - p2.y * p1.x;\n x += (p1.x + p2.x) * f;\n y += (p1.y + p2.y) * f;\n area += f * 3;\n }\n\n if (area === 0) {\n // Polygon is so small that all points are on same pixel.\n center = points[0];\n } else {\n center = [x / area, y / area];\n }\n\n return this._map.layerPointToLatLng(center);\n },\n _convertLatLngs: function _convertLatLngs(latlngs) {\n var result = Polyline.prototype._convertLatLngs.call(this, latlngs),\n len = result.length; // remove last point if it equals first one\n\n\n if (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {\n result.pop();\n }\n\n return result;\n },\n _setLatLngs: function _setLatLngs(latlngs) {\n Polyline.prototype._setLatLngs.call(this, latlngs);\n\n if (isFlat(this._latlngs)) {\n this._latlngs = [this._latlngs];\n }\n },\n _defaultShape: function _defaultShape() {\n return isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];\n },\n _clipPoints: function _clipPoints() {\n // polygons need a different clipping algorithm so we redefine that\n var bounds = this._renderer._bounds,\n w = this.options.weight,\n p = new Point(w, w); // increase clip padding by stroke width to avoid stroke on clip edges\n\n bounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));\n this._parts = [];\n\n if (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n return;\n }\n\n if (this.options.noClip) {\n this._parts = this._rings;\n return;\n }\n\n for (var i = 0, len = this._rings.length, clipped; i < len; i++) {\n clipped = clipPolygon(this._rings[i], bounds, true);\n\n if (clipped.length) {\n this._parts.push(clipped);\n }\n }\n },\n _updatePath: function _updatePath() {\n this._renderer._updatePoly(this, true);\n },\n // Needed by the `Canvas` renderer for interactivity\n _containsPoint: function _containsPoint(p) {\n var inside = false,\n part,\n p1,\n p2,\n i,\n j,\n k,\n len,\n len2;\n\n if (!this._pxBounds || !this._pxBounds.contains(p)) {\n return false;\n } // ray casting algorithm for detecting if point is in polygon\n\n\n for (i = 0, len = this._parts.length; i < len; i++) {\n part = this._parts[i];\n\n for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n p1 = part[j];\n p2 = part[k];\n\n if (p1.y > p.y !== p2.y > p.y && p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x) {\n inside = !inside;\n }\n }\n } // also check if it's on polygon stroke\n\n\n return inside || Polyline.prototype._containsPoint.call(this, p, true);\n }\n }); // @factory L.polygon(latlngs: LatLng[], options?: Polyline options)\n\n function polygon(latlngs, options) {\n return new Polygon(latlngs, options);\n }\n /*\r\n * @class GeoJSON\r\n * @aka L.GeoJSON\r\n * @inherits FeatureGroup\r\n *\r\n * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse\r\n * GeoJSON data and display it on the map. Extends `FeatureGroup`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.geoJSON(data, {\r\n * \tstyle: function (feature) {\r\n * \t\treturn {color: feature.properties.color};\r\n * \t}\r\n * }).bindPopup(function (layer) {\r\n * \treturn layer.feature.properties.description;\r\n * }).addTo(map);\r\n * ```\r\n */\n\n\n var GeoJSON = FeatureGroup.extend({\n /* @section\r\n * @aka GeoJSON options\r\n *\r\n * @option pointToLayer: Function = *\r\n * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally\r\n * called when data is added, passing the GeoJSON point feature and its `LatLng`.\r\n * The default is to spawn a default `Marker`:\r\n * ```js\r\n * function(geoJsonPoint, latlng) {\r\n * \treturn L.marker(latlng);\r\n * }\r\n * ```\r\n *\r\n * @option style: Function = *\r\n * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,\r\n * called internally when data is added.\r\n * The default value is to not override any defaults:\r\n * ```js\r\n * function (geoJsonFeature) {\r\n * \treturn {}\r\n * }\r\n * ```\r\n *\r\n * @option onEachFeature: Function = *\r\n * A `Function` that will be called once for each created `Feature`, after it has\r\n * been created and styled. Useful for attaching events and popups to features.\r\n * The default is to do nothing with the newly created layers:\r\n * ```js\r\n * function (feature, layer) {}\r\n * ```\r\n *\r\n * @option filter: Function = *\r\n * A `Function` that will be used to decide whether to include a feature or not.\r\n * The default is to include all features:\r\n * ```js\r\n * function (geoJsonFeature) {\r\n * \treturn true;\r\n * }\r\n * ```\r\n * Note: dynamically changing the `filter` option will have effect only on newly\r\n * added data. It will _not_ re-evaluate already included features.\r\n *\r\n * @option coordsToLatLng: Function = *\r\n * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.\r\n * The default is the `coordsToLatLng` static method.\r\n *\r\n * @option markersInheritOptions: Boolean = false\r\n * Whether default Markers for \"Point\" type Features inherit from group options.\r\n */\n initialize: function initialize(geojson, options) {\n setOptions(this, options);\n this._layers = {};\n\n if (geojson) {\n this.addData(geojson);\n }\n },\n // @method addData( <GeoJSON> data ): this\n // Adds a GeoJSON object to the layer.\n addData: function addData(geojson) {\n var features = isArray(geojson) ? geojson : geojson.features,\n i,\n len,\n feature;\n\n if (features) {\n for (i = 0, len = features.length; i < len; i++) {\n // only add this if geometry or geometries are set and not null\n feature = features[i];\n\n if (feature.geometries || feature.geometry || feature.features || feature.coordinates) {\n this.addData(feature);\n }\n }\n\n return this;\n }\n\n var options = this.options;\n\n if (options.filter && !options.filter(geojson)) {\n return this;\n }\n\n var layer = geometryToLayer(geojson, options);\n\n if (!layer) {\n return this;\n }\n\n layer.feature = asFeature(geojson);\n layer.defaultOptions = layer.options;\n this.resetStyle(layer);\n\n if (options.onEachFeature) {\n options.onEachFeature(geojson, layer);\n }\n\n return this.addLayer(layer);\n },\n // @method resetStyle( <Path> layer? ): this\n // Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.\n // If `layer` is omitted, the style of all features in the current layer is reset.\n resetStyle: function resetStyle(layer) {\n if (layer === undefined) {\n return this.eachLayer(this.resetStyle, this);\n } // reset any custom styles\n\n\n layer.options = extend({}, layer.defaultOptions);\n\n this._setLayerStyle(layer, this.options.style);\n\n return this;\n },\n // @method setStyle( <Function> style ): this\n // Changes styles of GeoJSON vector layers with the given style function.\n setStyle: function setStyle(style) {\n return this.eachLayer(function (layer) {\n this._setLayerStyle(layer, style);\n }, this);\n },\n _setLayerStyle: function _setLayerStyle(layer, style) {\n if (layer.setStyle) {\n if (typeof style === 'function') {\n style = style(layer.feature);\n }\n\n layer.setStyle(style);\n }\n }\n }); // @section\n // There are several static functions which can be called without instantiating L.GeoJSON:\n // @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer\n // Creates a `Layer` from a given GeoJSON feature. Can use a custom\n // [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)\n // functions if provided as options.\n\n function geometryToLayer(geojson, options) {\n var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,\n coords = geometry ? geometry.coordinates : null,\n layers = [],\n pointToLayer = options && options.pointToLayer,\n _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,\n latlng,\n latlngs,\n i,\n len;\n\n if (!coords && !geometry) {\n return null;\n }\n\n switch (geometry.type) {\n case 'Point':\n latlng = _coordsToLatLng(coords);\n return _pointToLayer(pointToLayer, geojson, latlng, options);\n\n case 'MultiPoint':\n for (i = 0, len = coords.length; i < len; i++) {\n latlng = _coordsToLatLng(coords[i]);\n layers.push(_pointToLayer(pointToLayer, geojson, latlng, options));\n }\n\n return new FeatureGroup(layers);\n\n case 'LineString':\n case 'MultiLineString':\n latlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);\n return new Polyline(latlngs, options);\n\n case 'Polygon':\n case 'MultiPolygon':\n latlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);\n return new Polygon(latlngs, options);\n\n case 'GeometryCollection':\n for (i = 0, len = geometry.geometries.length; i < len; i++) {\n var layer = geometryToLayer({\n geometry: geometry.geometries[i],\n type: 'Feature',\n properties: geojson.properties\n }, options);\n\n if (layer) {\n layers.push(layer);\n }\n }\n\n return new FeatureGroup(layers);\n\n default:\n throw new Error('Invalid GeoJSON object.');\n }\n }\n\n function _pointToLayer(pointToLayerFn, geojson, latlng, options) {\n return pointToLayerFn ? pointToLayerFn(geojson, latlng) : new Marker(latlng, options && options.markersInheritOptions && options);\n } // @function coordsToLatLng(coords: Array): LatLng\n // Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)\n // or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.\n\n\n function coordsToLatLng(coords) {\n return new LatLng(coords[1], coords[0], coords[2]);\n } // @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array\n // Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.\n // `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).\n // Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.\n\n\n function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {\n var latlngs = [];\n\n for (var i = 0, len = coords.length, latlng; i < len; i++) {\n latlng = levelsDeep ? coordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) : (_coordsToLatLng || coordsToLatLng)(coords[i]);\n latlngs.push(latlng);\n }\n\n return latlngs;\n } // @function latLngToCoords(latlng: LatLng, precision?: Number): Array\n // Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)\n\n\n function latLngToCoords(latlng, precision) {\n precision = typeof precision === 'number' ? precision : 6;\n return latlng.alt !== undefined ? [formatNum(latlng.lng, precision), formatNum(latlng.lat, precision), formatNum(latlng.alt, precision)] : [formatNum(latlng.lng, precision), formatNum(latlng.lat, precision)];\n } // @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean): Array\n // Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)\n // `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.\n\n\n function latLngsToCoords(latlngs, levelsDeep, closed, precision) {\n var coords = [];\n\n for (var i = 0, len = latlngs.length; i < len; i++) {\n coords.push(levelsDeep ? latLngsToCoords(latlngs[i], levelsDeep - 1, closed, precision) : latLngToCoords(latlngs[i], precision));\n }\n\n if (!levelsDeep && closed) {\n coords.push(coords[0]);\n }\n\n return coords;\n }\n\n function getFeature(layer, newGeometry) {\n return layer.feature ? extend({}, layer.feature, {\n geometry: newGeometry\n }) : asFeature(newGeometry);\n } // @function asFeature(geojson: Object): Object\n // Normalize GeoJSON geometries/features into GeoJSON features.\n\n\n function asFeature(geojson) {\n if (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {\n return geojson;\n }\n\n return {\n type: 'Feature',\n properties: {},\n geometry: geojson\n };\n }\n\n var PointToGeoJSON = {\n toGeoJSON: function toGeoJSON(precision) {\n return getFeature(this, {\n type: 'Point',\n coordinates: latLngToCoords(this.getLatLng(), precision)\n });\n }\n }; // @namespace Marker\n // @section Other methods\n // @method toGeoJSON(precision?: Number): Object\n // `precision` is the number of decimal places for coordinates.\n // The default value is 6 places.\n // Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).\n\n Marker.include(PointToGeoJSON); // @namespace CircleMarker\n // @method toGeoJSON(precision?: Number): Object\n // `precision` is the number of decimal places for coordinates.\n // The default value is 6 places.\n // Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).\n\n Circle.include(PointToGeoJSON);\n CircleMarker.include(PointToGeoJSON); // @namespace Polyline\n // @method toGeoJSON(precision?: Number): Object\n // `precision` is the number of decimal places for coordinates.\n // The default value is 6 places.\n // Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).\n\n Polyline.include({\n toGeoJSON: function toGeoJSON(precision) {\n var multi = !isFlat(this._latlngs);\n var coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);\n return getFeature(this, {\n type: (multi ? 'Multi' : '') + 'LineString',\n coordinates: coords\n });\n }\n }); // @namespace Polygon\n // @method toGeoJSON(precision?: Number): Object\n // `precision` is the number of decimal places for coordinates.\n // The default value is 6 places.\n // Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).\n\n Polygon.include({\n toGeoJSON: function toGeoJSON(precision) {\n var holes = !isFlat(this._latlngs),\n multi = holes && !isFlat(this._latlngs[0]);\n var coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);\n\n if (!holes) {\n coords = [coords];\n }\n\n return getFeature(this, {\n type: (multi ? 'Multi' : '') + 'Polygon',\n coordinates: coords\n });\n }\n }); // @namespace LayerGroup\n\n LayerGroup.include({\n toMultiPoint: function toMultiPoint(precision) {\n var coords = [];\n this.eachLayer(function (layer) {\n coords.push(layer.toGeoJSON(precision).geometry.coordinates);\n });\n return getFeature(this, {\n type: 'MultiPoint',\n coordinates: coords\n });\n },\n // @method toGeoJSON(precision?: Number): Object\n // `precision` is the number of decimal places for coordinates.\n // The default value is 6 places.\n // Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).\n toGeoJSON: function toGeoJSON(precision) {\n var type = this.feature && this.feature.geometry && this.feature.geometry.type;\n\n if (type === 'MultiPoint') {\n return this.toMultiPoint(precision);\n }\n\n var isGeometryCollection = type === 'GeometryCollection',\n jsons = [];\n this.eachLayer(function (layer) {\n if (layer.toGeoJSON) {\n var json = layer.toGeoJSON(precision);\n\n if (isGeometryCollection) {\n jsons.push(json.geometry);\n } else {\n var feature = asFeature(json); // Squash nested feature collections\n\n if (feature.type === 'FeatureCollection') {\n jsons.push.apply(jsons, feature.features);\n } else {\n jsons.push(feature);\n }\n }\n }\n });\n\n if (isGeometryCollection) {\n return getFeature(this, {\n geometries: jsons,\n type: 'GeometryCollection'\n });\n }\n\n return {\n type: 'FeatureCollection',\n features: jsons\n };\n }\n }); // @namespace GeoJSON\n // @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)\n // Creates a GeoJSON layer. Optionally accepts an object in\n // [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map\n // (you can alternatively add it later with `addData` method) and an `options` object.\n\n function geoJSON(geojson, options) {\n return new GeoJSON(geojson, options);\n } // Backward compatibility.\n\n\n var geoJson = geoJSON;\n /*\r\n * @class ImageOverlay\r\n * @aka L.ImageOverlay\r\n * @inherits Interactive layer\r\n *\r\n * Used to load and display a single image over specific bounds of the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var imageUrl = 'http://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',\r\n * \timageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];\r\n * L.imageOverlay(imageUrl, imageBounds).addTo(map);\r\n * ```\r\n */\n\n var ImageOverlay = Layer.extend({\n // @section\n // @aka ImageOverlay options\n options: {\n // @option opacity: Number = 1.0\n // The opacity of the image overlay.\n opacity: 1,\n // @option alt: String = ''\n // Text for the `alt` attribute of the image (useful for accessibility).\n alt: '',\n // @option interactive: Boolean = false\n // If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.\n interactive: false,\n // @option crossOrigin: Boolean|String = false\n // Whether the crossOrigin attribute will be added to the image.\n // If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.\n // Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\n crossOrigin: false,\n // @option errorOverlayUrl: String = ''\n // URL to the overlay image to show in place of the overlay that failed to load.\n errorOverlayUrl: '',\n // @option zIndex: Number = 1\n // The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.\n zIndex: 1,\n // @option className: String = ''\n // A custom class name to assign to the image. Empty by default.\n className: ''\n },\n initialize: function initialize(url, bounds, options) {\n // (String, LatLngBounds, Object)\n this._url = url;\n this._bounds = toLatLngBounds(bounds);\n setOptions(this, options);\n },\n onAdd: function onAdd() {\n if (!this._image) {\n this._initImage();\n\n if (this.options.opacity < 1) {\n this._updateOpacity();\n }\n }\n\n if (this.options.interactive) {\n addClass(this._image, 'leaflet-interactive');\n this.addInteractiveTarget(this._image);\n }\n\n this.getPane().appendChild(this._image);\n\n this._reset();\n },\n onRemove: function onRemove() {\n _remove(this._image);\n\n if (this.options.interactive) {\n this.removeInteractiveTarget(this._image);\n }\n },\n // @method setOpacity(opacity: Number): this\n // Sets the opacity of the overlay.\n setOpacity: function setOpacity(opacity) {\n this.options.opacity = opacity;\n\n if (this._image) {\n this._updateOpacity();\n }\n\n return this;\n },\n setStyle: function setStyle(styleOpts) {\n if (styleOpts.opacity) {\n this.setOpacity(styleOpts.opacity);\n }\n\n return this;\n },\n // @method bringToFront(): this\n // Brings the layer to the top of all overlays.\n bringToFront: function bringToFront() {\n if (this._map) {\n toFront(this._image);\n }\n\n return this;\n },\n // @method bringToBack(): this\n // Brings the layer to the bottom of all overlays.\n bringToBack: function bringToBack() {\n if (this._map) {\n toBack(this._image);\n }\n\n return this;\n },\n // @method setUrl(url: String): this\n // Changes the URL of the image.\n setUrl: function setUrl(url) {\n this._url = url;\n\n if (this._image) {\n this._image.src = url;\n }\n\n return this;\n },\n // @method setBounds(bounds: LatLngBounds): this\n // Update the bounds that this ImageOverlay covers\n setBounds: function setBounds(bounds) {\n this._bounds = toLatLngBounds(bounds);\n\n if (this._map) {\n this._reset();\n }\n\n return this;\n },\n getEvents: function getEvents() {\n var events = {\n zoom: this._reset,\n viewreset: this._reset\n };\n\n if (this._zoomAnimated) {\n events.zoomanim = this._animateZoom;\n }\n\n return events;\n },\n // @method setZIndex(value: Number): this\n // Changes the [zIndex](#imageoverlay-zindex) of the image overlay.\n setZIndex: function setZIndex(value) {\n this.options.zIndex = value;\n\n this._updateZIndex();\n\n return this;\n },\n // @method getBounds(): LatLngBounds\n // Get the bounds that this ImageOverlay covers\n getBounds: function getBounds() {\n return this._bounds;\n },\n // @method getElement(): HTMLElement\n // Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\n // used by this overlay.\n getElement: function getElement() {\n return this._image;\n },\n _initImage: function _initImage() {\n var wasElementSupplied = this._url.tagName === 'IMG';\n var img = this._image = wasElementSupplied ? this._url : create$1('img');\n addClass(img, 'leaflet-image-layer');\n\n if (this._zoomAnimated) {\n addClass(img, 'leaflet-zoom-animated');\n }\n\n if (this.options.className) {\n addClass(img, this.options.className);\n }\n\n img.onselectstart = falseFn;\n img.onmousemove = falseFn; // @event load: Event\n // Fired when the ImageOverlay layer has loaded its image\n\n img.onload = bind(this.fire, this, 'load');\n img.onerror = bind(this._overlayOnError, this, 'error');\n\n if (this.options.crossOrigin || this.options.crossOrigin === '') {\n img.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\n }\n\n if (this.options.zIndex) {\n this._updateZIndex();\n }\n\n if (wasElementSupplied) {\n this._url = img.src;\n return;\n }\n\n img.src = this._url;\n img.alt = this.options.alt;\n },\n _animateZoom: function _animateZoom(e) {\n var scale = this._map.getZoomScale(e.zoom),\n offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;\n\n setTransform(this._image, offset, scale);\n },\n _reset: function _reset() {\n var image = this._image,\n bounds = new Bounds(this._map.latLngToLayerPoint(this._bounds.getNorthWest()), this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\n size = bounds.getSize();\n setPosition(image, bounds.min);\n image.style.width = size.x + 'px';\n image.style.height = size.y + 'px';\n },\n _updateOpacity: function _updateOpacity() {\n _setOpacity(this._image, this.options.opacity);\n },\n _updateZIndex: function _updateZIndex() {\n if (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {\n this._image.style.zIndex = this.options.zIndex;\n }\n },\n _overlayOnError: function _overlayOnError() {\n // @event error: Event\n // Fired when the ImageOverlay layer fails to load its image\n this.fire('error');\n var errorUrl = this.options.errorOverlayUrl;\n\n if (errorUrl && this._url !== errorUrl) {\n this._url = errorUrl;\n this._image.src = errorUrl;\n }\n }\n }); // @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)\n // Instantiates an image overlay object given the URL of the image and the\n // geographical bounds it is tied to.\n\n var imageOverlay = function imageOverlay(url, bounds, options) {\n return new ImageOverlay(url, bounds, options);\n };\n /*\r\n * @class VideoOverlay\r\n * @aka L.VideoOverlay\r\n * @inherits ImageOverlay\r\n *\r\n * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.\r\n *\r\n * A video overlay uses the [`<video>`](https://developer.mozilla.org/docs/Web/HTML/Element/video)\r\n * HTML5 element.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',\r\n * \tvideoBounds = [[ 32, -130], [ 13, -100]];\r\n * L.videoOverlay(videoUrl, videoBounds ).addTo(map);\r\n * ```\r\n */\n\n\n var VideoOverlay = ImageOverlay.extend({\n // @section\n // @aka VideoOverlay options\n options: {\n // @option autoplay: Boolean = true\n // Whether the video starts playing automatically when loaded.\n autoplay: true,\n // @option loop: Boolean = true\n // Whether the video will loop back to the beginning when played.\n loop: true,\n // @option keepAspectRatio: Boolean = true\n // Whether the video will save aspect ratio after the projection.\n // Relevant for supported browsers. Browser compatibility- https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit\n keepAspectRatio: true,\n // @option muted: Boolean = false\n // Whether the video starts on mute when loaded.\n muted: false\n },\n _initImage: function _initImage() {\n var wasElementSupplied = this._url.tagName === 'VIDEO';\n var vid = this._image = wasElementSupplied ? this._url : create$1('video');\n addClass(vid, 'leaflet-image-layer');\n\n if (this._zoomAnimated) {\n addClass(vid, 'leaflet-zoom-animated');\n }\n\n if (this.options.className) {\n addClass(vid, this.options.className);\n }\n\n vid.onselectstart = falseFn;\n vid.onmousemove = falseFn; // @event load: Event\n // Fired when the video has finished loading the first frame\n\n vid.onloadeddata = bind(this.fire, this, 'load');\n\n if (wasElementSupplied) {\n var sourceElements = vid.getElementsByTagName('source');\n var sources = [];\n\n for (var j = 0; j < sourceElements.length; j++) {\n sources.push(sourceElements[j].src);\n }\n\n this._url = sourceElements.length > 0 ? sources : [vid.src];\n return;\n }\n\n if (!isArray(this._url)) {\n this._url = [this._url];\n }\n\n if (!this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(vid.style, 'objectFit')) {\n vid.style['objectFit'] = 'fill';\n }\n\n vid.autoplay = !!this.options.autoplay;\n vid.loop = !!this.options.loop;\n vid.muted = !!this.options.muted;\n\n for (var i = 0; i < this._url.length; i++) {\n var source = create$1('source');\n source.src = this._url[i];\n vid.appendChild(source);\n }\n } // @method getElement(): HTMLVideoElement\n // Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)\n // used by this overlay.\n\n }); // @factory L.videoOverlay(video: String|Array|HTMLVideoElement, bounds: LatLngBounds, options?: VideoOverlay options)\n // Instantiates an image overlay object given the URL of the video (or array of URLs, or even a video element) and the\n // geographical bounds it is tied to.\n\n function videoOverlay(video, bounds, options) {\n return new VideoOverlay(video, bounds, options);\n }\n /*\n * @class SVGOverlay\n * @aka L.SVGOverlay\n * @inherits ImageOverlay\n *\n * Used to load, display and provide DOM access to an SVG file over specific bounds of the map. Extends `ImageOverlay`.\n *\n * An SVG overlay uses the [`<svg>`](https://developer.mozilla.org/docs/Web/SVG/Element/svg) element.\n *\n * @example\n *\n * ```js\n * var svgElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n * svgElement.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n * svgElement.setAttribute('viewBox', \"0 0 200 200\");\n * svgElement.innerHTML = '<rect width=\"200\" height=\"200\"/><rect x=\"75\" y=\"23\" width=\"50\" height=\"50\" style=\"fill:red\"/><rect x=\"75\" y=\"123\" width=\"50\" height=\"50\" style=\"fill:#0013ff\"/>';\n * var svgElementBounds = [ [ 32, -130 ], [ 13, -100 ] ];\n * L.svgOverlay(svgElement, svgElementBounds).addTo(map);\n * ```\n */\n\n\n var SVGOverlay = ImageOverlay.extend({\n _initImage: function _initImage() {\n var el = this._image = this._url;\n addClass(el, 'leaflet-image-layer');\n\n if (this._zoomAnimated) {\n addClass(el, 'leaflet-zoom-animated');\n }\n\n if (this.options.className) {\n addClass(el, this.options.className);\n }\n\n el.onselectstart = falseFn;\n el.onmousemove = falseFn;\n } // @method getElement(): SVGElement\n // Returns the instance of [`SVGElement`](https://developer.mozilla.org/docs/Web/API/SVGElement)\n // used by this overlay.\n\n }); // @factory L.svgOverlay(svg: String|SVGElement, bounds: LatLngBounds, options?: SVGOverlay options)\n // Instantiates an image overlay object given an SVG element and the geographical bounds it is tied to.\n // A viewBox attribute is required on the SVG element to zoom in and out properly.\n\n function svgOverlay(el, bounds, options) {\n return new SVGOverlay(el, bounds, options);\n }\n /*\r\n * @class DivOverlay\r\n * @inherits Layer\r\n * @aka L.DivOverlay\r\n * Base model for L.Popup and L.Tooltip. Inherit from it for custom popup like plugins.\r\n */\n // @namespace DivOverlay\n\n\n var DivOverlay = Layer.extend({\n // @section\n // @aka DivOverlay options\n options: {\n // @option offset: Point = Point(0, 7)\n // The offset of the popup position. Useful to control the anchor\n // of the popup when opening it on some overlays.\n offset: [0, 7],\n // @option className: String = ''\n // A custom CSS class name to assign to the popup.\n className: '',\n // @option pane: String = 'popupPane'\n // `Map pane` where the popup will be added.\n pane: 'popupPane'\n },\n initialize: function initialize(options, source) {\n setOptions(this, options);\n this._source = source;\n },\n onAdd: function onAdd(map) {\n this._zoomAnimated = map._zoomAnimated;\n\n if (!this._container) {\n this._initLayout();\n }\n\n if (map._fadeAnimated) {\n _setOpacity(this._container, 0);\n }\n\n clearTimeout(this._removeTimeout);\n this.getPane().appendChild(this._container);\n this.update();\n\n if (map._fadeAnimated) {\n _setOpacity(this._container, 1);\n }\n\n this.bringToFront();\n },\n onRemove: function onRemove(map) {\n if (map._fadeAnimated) {\n _setOpacity(this._container, 0);\n\n this._removeTimeout = setTimeout(bind(_remove, undefined, this._container), 200);\n } else {\n _remove(this._container);\n }\n },\n // @namespace Popup\n // @method getLatLng: LatLng\n // Returns the geographical point of popup.\n getLatLng: function getLatLng() {\n return this._latlng;\n },\n // @method setLatLng(latlng: LatLng): this\n // Sets the geographical point where the popup will open.\n setLatLng: function setLatLng(latlng) {\n this._latlng = toLatLng(latlng);\n\n if (this._map) {\n this._updatePosition();\n\n this._adjustPan();\n }\n\n return this;\n },\n // @method getContent: String|HTMLElement\n // Returns the content of the popup.\n getContent: function getContent() {\n return this._content;\n },\n // @method setContent(htmlContent: String|HTMLElement|Function): this\n // Sets the HTML content of the popup. If a function is passed the source layer will be passed to the function. The function should return a `String` or `HTMLElement` to be used in the popup.\n setContent: function setContent(content) {\n this._content = content;\n this.update();\n return this;\n },\n // @method getElement: String|HTMLElement\n // Returns the HTML container of the popup.\n getElement: function getElement() {\n return this._container;\n },\n // @method update: null\n // Updates the popup content, layout and position. Useful for updating the popup after something inside changed, e.g. image loaded.\n update: function update() {\n if (!this._map) {\n return;\n }\n\n this._container.style.visibility = 'hidden';\n\n this._updateContent();\n\n this._updateLayout();\n\n this._updatePosition();\n\n this._container.style.visibility = '';\n\n this._adjustPan();\n },\n getEvents: function getEvents() {\n var events = {\n zoom: this._updatePosition,\n viewreset: this._updatePosition\n };\n\n if (this._zoomAnimated) {\n events.zoomanim = this._animateZoom;\n }\n\n return events;\n },\n // @method isOpen: Boolean\n // Returns `true` when the popup is visible on the map.\n isOpen: function isOpen() {\n return !!this._map && this._map.hasLayer(this);\n },\n // @method bringToFront: this\n // Brings this popup in front of other popups (in the same map pane).\n bringToFront: function bringToFront() {\n if (this._map) {\n toFront(this._container);\n }\n\n return this;\n },\n // @method bringToBack: this\n // Brings this popup to the back of other popups (in the same map pane).\n bringToBack: function bringToBack() {\n if (this._map) {\n toBack(this._container);\n }\n\n return this;\n },\n _prepareOpen: function _prepareOpen(parent, layer, latlng) {\n if (!(layer instanceof Layer)) {\n latlng = layer;\n layer = parent;\n }\n\n if (layer instanceof FeatureGroup) {\n for (var id in parent._layers) {\n layer = parent._layers[id];\n break;\n }\n }\n\n if (!latlng) {\n if (layer.getCenter) {\n latlng = layer.getCenter();\n } else if (layer.getLatLng) {\n latlng = layer.getLatLng();\n } else {\n throw new Error('Unable to get source layer LatLng.');\n }\n } // set overlay source to this layer\n\n\n this._source = layer; // update the overlay (content, layout, ect...)\n\n this.update();\n return latlng;\n },\n _updateContent: function _updateContent() {\n if (!this._content) {\n return;\n }\n\n var node = this._contentNode;\n var content = typeof this._content === 'function' ? this._content(this._source || this) : this._content;\n\n if (typeof content === 'string') {\n node.innerHTML = content;\n } else {\n while (node.hasChildNodes()) {\n node.removeChild(node.firstChild);\n }\n\n node.appendChild(content);\n }\n\n this.fire('contentupdate');\n },\n _updatePosition: function _updatePosition() {\n if (!this._map) {\n return;\n }\n\n var pos = this._map.latLngToLayerPoint(this._latlng),\n offset = toPoint(this.options.offset),\n anchor = this._getAnchor();\n\n if (this._zoomAnimated) {\n setPosition(this._container, pos.add(anchor));\n } else {\n offset = offset.add(pos).add(anchor);\n }\n\n var bottom = this._containerBottom = -offset.y,\n left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x; // bottom position the popup in case the height of the popup changes (images loading etc)\n\n this._container.style.bottom = bottom + 'px';\n this._container.style.left = left + 'px';\n },\n _getAnchor: function _getAnchor() {\n return [0, 0];\n }\n });\n /*\r\n * @class Popup\r\n * @inherits DivOverlay\r\n * @aka L.Popup\r\n * Used to open popups in certain places of the map. Use [Map.openPopup](#map-openpopup) to\r\n * open popups while making sure that only one popup is open at one time\r\n * (recommended for usability), or use [Map.addLayer](#map-addlayer) to open as many as you want.\r\n *\r\n * @example\r\n *\r\n * If you want to just bind a popup to marker click and then open it, it's really easy:\r\n *\r\n * ```js\r\n * marker.bindPopup(popupContent).openPopup();\r\n * ```\r\n * Path overlays like polylines also have a `bindPopup` method.\r\n * Here's a more complicated way to open a popup on a map:\r\n *\r\n * ```js\r\n * var popup = L.popup()\r\n * \t.setLatLng(latlng)\r\n * \t.setContent('<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n */\n // @namespace Popup\n\n var Popup = DivOverlay.extend({\n // @section\n // @aka Popup options\n options: {\n // @option maxWidth: Number = 300\n // Max width of the popup, in pixels.\n maxWidth: 300,\n // @option minWidth: Number = 50\n // Min width of the popup, in pixels.\n minWidth: 50,\n // @option maxHeight: Number = null\n // If set, creates a scrollable container of the given height\n // inside a popup if its content exceeds it.\n maxHeight: null,\n // @option autoPan: Boolean = true\n // Set it to `false` if you don't want the map to do panning animation\n // to fit the opened popup.\n autoPan: true,\n // @option autoPanPaddingTopLeft: Point = null\n // The margin between the popup and the top left corner of the map\n // view after autopanning was performed.\n autoPanPaddingTopLeft: null,\n // @option autoPanPaddingBottomRight: Point = null\n // The margin between the popup and the bottom right corner of the map\n // view after autopanning was performed.\n autoPanPaddingBottomRight: null,\n // @option autoPanPadding: Point = Point(5, 5)\n // Equivalent of setting both top left and bottom right autopan padding to the same value.\n autoPanPadding: [5, 5],\n // @option keepInView: Boolean = false\n // Set it to `true` if you want to prevent users from panning the popup\n // off of the screen while it is open.\n keepInView: false,\n // @option closeButton: Boolean = true\n // Controls the presence of a close button in the popup.\n closeButton: true,\n // @option autoClose: Boolean = true\n // Set it to `false` if you want to override the default behavior of\n // the popup closing when another popup is opened.\n autoClose: true,\n // @option closeOnEscapeKey: Boolean = true\n // Set it to `false` if you want to override the default behavior of\n // the ESC key for closing of the popup.\n closeOnEscapeKey: true,\n // @option closeOnClick: Boolean = *\n // Set it if you want to override the default behavior of the popup closing when user clicks\n // on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.\n // @option className: String = ''\n // A custom CSS class name to assign to the popup.\n className: ''\n },\n // @namespace Popup\n // @method openOn(map: Map): this\n // Adds the popup to the map and closes the previous one. The same as `map.openPopup(popup)`.\n openOn: function openOn(map) {\n map.openPopup(this);\n return this;\n },\n onAdd: function onAdd(map) {\n DivOverlay.prototype.onAdd.call(this, map); // @namespace Map\n // @section Popup events\n // @event popupopen: PopupEvent\n // Fired when a popup is opened in the map\n\n map.fire('popupopen', {\n popup: this\n });\n\n if (this._source) {\n // @namespace Layer\n // @section Popup events\n // @event popupopen: PopupEvent\n // Fired when a popup bound to this layer is opened\n this._source.fire('popupopen', {\n popup: this\n }, true); // For non-path layers, we toggle the popup when clicking\n // again the layer, so prevent the map to reopen it.\n\n\n if (!(this._source instanceof Path)) {\n this._source.on('preclick', stopPropagation);\n }\n }\n },\n onRemove: function onRemove(map) {\n DivOverlay.prototype.onRemove.call(this, map); // @namespace Map\n // @section Popup events\n // @event popupclose: PopupEvent\n // Fired when a popup in the map is closed\n\n map.fire('popupclose', {\n popup: this\n });\n\n if (this._source) {\n // @namespace Layer\n // @section Popup events\n // @event popupclose: PopupEvent\n // Fired when a popup bound to this layer is closed\n this._source.fire('popupclose', {\n popup: this\n }, true);\n\n if (!(this._source instanceof Path)) {\n this._source.off('preclick', stopPropagation);\n }\n }\n },\n getEvents: function getEvents() {\n var events = DivOverlay.prototype.getEvents.call(this);\n\n if (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {\n events.preclick = this._close;\n }\n\n if (this.options.keepInView) {\n events.moveend = this._adjustPan;\n }\n\n return events;\n },\n _close: function _close() {\n if (this._map) {\n this._map.closePopup(this);\n }\n },\n _initLayout: function _initLayout() {\n var prefix = 'leaflet-popup',\n container = this._container = create$1('div', prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-animated');\n var wrapper = this._wrapper = create$1('div', prefix + '-content-wrapper', container);\n this._contentNode = create$1('div', prefix + '-content', wrapper);\n disableClickPropagation(container);\n disableScrollPropagation(this._contentNode);\n on(container, 'contextmenu', stopPropagation);\n this._tipContainer = create$1('div', prefix + '-tip-container', container);\n this._tip = create$1('div', prefix + '-tip', this._tipContainer);\n\n if (this.options.closeButton) {\n var closeButton = this._closeButton = create$1('a', prefix + '-close-button', container);\n closeButton.href = '#close';\n closeButton.innerHTML = '&#215;';\n on(closeButton, 'click', this._onCloseButtonClick, this);\n }\n },\n _updateLayout: function _updateLayout() {\n var container = this._contentNode,\n style = container.style;\n style.width = '';\n style.whiteSpace = 'nowrap';\n var width = container.offsetWidth;\n width = Math.min(width, this.options.maxWidth);\n width = Math.max(width, this.options.minWidth);\n style.width = width + 1 + 'px';\n style.whiteSpace = '';\n style.height = '';\n var height = container.offsetHeight,\n maxHeight = this.options.maxHeight,\n scrolledClass = 'leaflet-popup-scrolled';\n\n if (maxHeight && height > maxHeight) {\n style.height = maxHeight + 'px';\n addClass(container, scrolledClass);\n } else {\n removeClass(container, scrolledClass);\n }\n\n this._containerWidth = this._container.offsetWidth;\n },\n _animateZoom: function _animateZoom(e) {\n var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),\n anchor = this._getAnchor();\n\n setPosition(this._container, pos.add(anchor));\n },\n _adjustPan: function _adjustPan() {\n if (!this.options.autoPan) {\n return;\n }\n\n if (this._map._panAnim) {\n this._map._panAnim.stop();\n }\n\n var map = this._map,\n marginBottom = parseInt(getStyle(this._container, 'marginBottom'), 10) || 0,\n containerHeight = this._container.offsetHeight + marginBottom,\n containerWidth = this._containerWidth,\n layerPos = new Point(this._containerLeft, -containerHeight - this._containerBottom);\n\n layerPos._add(getPosition(this._container));\n\n var containerPos = map.layerPointToContainerPoint(layerPos),\n padding = toPoint(this.options.autoPanPadding),\n paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),\n paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),\n size = map.getSize(),\n dx = 0,\n dy = 0;\n\n if (containerPos.x + containerWidth + paddingBR.x > size.x) {\n // right\n dx = containerPos.x + containerWidth - size.x + paddingBR.x;\n }\n\n if (containerPos.x - dx - paddingTL.x < 0) {\n // left\n dx = containerPos.x - paddingTL.x;\n }\n\n if (containerPos.y + containerHeight + paddingBR.y > size.y) {\n // bottom\n dy = containerPos.y + containerHeight - size.y + paddingBR.y;\n }\n\n if (containerPos.y - dy - paddingTL.y < 0) {\n // top\n dy = containerPos.y - paddingTL.y;\n } // @namespace Map\n // @section Popup events\n // @event autopanstart: Event\n // Fired when the map starts autopanning when opening a popup.\n\n\n if (dx || dy) {\n map.fire('autopanstart').panBy([dx, dy]);\n }\n },\n _onCloseButtonClick: function _onCloseButtonClick(e) {\n this._close();\n\n stop(e);\n },\n _getAnchor: function _getAnchor() {\n // Where should we anchor the popup on the source layer?\n return toPoint(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);\n }\n }); // @namespace Popup\n // @factory L.popup(options?: Popup options, source?: Layer)\n // Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.\n\n var popup = function popup(options, source) {\n return new Popup(options, source);\n };\n /* @namespace Map\r\n * @section Interaction Options\r\n * @option closePopupOnClick: Boolean = true\r\n * Set it to `false` if you don't want popups to close when user clicks the map.\r\n */\n\n\n Map.mergeOptions({\n closePopupOnClick: true\n }); // @namespace Map\n // @section Methods for Layers and Controls\n\n Map.include({\n // @method openPopup(popup: Popup): this\n // Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).\n // @alternative\n // @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this\n // Creates a popup with the specified content and options and opens it in the given point on a map.\n openPopup: function openPopup(popup, latlng, options) {\n if (!(popup instanceof Popup)) {\n popup = new Popup(options).setContent(popup);\n }\n\n if (latlng) {\n popup.setLatLng(latlng);\n }\n\n if (this.hasLayer(popup)) {\n return this;\n }\n\n if (this._popup && this._popup.options.autoClose) {\n this.closePopup();\n }\n\n this._popup = popup;\n return this.addLayer(popup);\n },\n // @method closePopup(popup?: Popup): this\n // Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).\n closePopup: function closePopup(popup) {\n if (!popup || popup === this._popup) {\n popup = this._popup;\n this._popup = null;\n }\n\n if (popup) {\n this.removeLayer(popup);\n }\n\n return this;\n }\n });\n /*\r\n * @namespace Layer\r\n * @section Popup methods example\r\n *\r\n * All layers share a set of methods convenient for binding popups to it.\r\n *\r\n * ```js\r\n * var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);\r\n * layer.openPopup();\r\n * layer.closePopup();\r\n * ```\r\n *\r\n * Popups will also be automatically opened when the layer is clicked on and closed when the layer is removed from the map or another popup is opened.\r\n */\n // @section Popup methods\n\n Layer.include({\n // @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this\n // Binds a popup to the layer with the passed `content` and sets up the\n // necessary event listeners. If a `Function` is passed it will receive\n // the layer as the first argument and should return a `String` or `HTMLElement`.\n bindPopup: function bindPopup(content, options) {\n if (content instanceof Popup) {\n setOptions(content, options);\n this._popup = content;\n content._source = this;\n } else {\n if (!this._popup || options) {\n this._popup = new Popup(options, this);\n }\n\n this._popup.setContent(content);\n }\n\n if (!this._popupHandlersAdded) {\n this.on({\n click: this._openPopup,\n keypress: this._onKeyPress,\n remove: this.closePopup,\n move: this._movePopup\n });\n this._popupHandlersAdded = true;\n }\n\n return this;\n },\n // @method unbindPopup(): this\n // Removes the popup previously bound with `bindPopup`.\n unbindPopup: function unbindPopup() {\n if (this._popup) {\n this.off({\n click: this._openPopup,\n keypress: this._onKeyPress,\n remove: this.closePopup,\n move: this._movePopup\n });\n this._popupHandlersAdded = false;\n this._popup = null;\n }\n\n return this;\n },\n // @method openPopup(latlng?: LatLng): this\n // Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.\n openPopup: function openPopup(layer, latlng) {\n if (this._popup && this._map) {\n latlng = this._popup._prepareOpen(this, layer, latlng); // open the popup on the map\n\n this._map.openPopup(this._popup, latlng);\n }\n\n return this;\n },\n // @method closePopup(): this\n // Closes the popup bound to this layer if it is open.\n closePopup: function closePopup() {\n if (this._popup) {\n this._popup._close();\n }\n\n return this;\n },\n // @method togglePopup(): this\n // Opens or closes the popup bound to this layer depending on its current state.\n togglePopup: function togglePopup(target) {\n if (this._popup) {\n if (this._popup._map) {\n this.closePopup();\n } else {\n this.openPopup(target);\n }\n }\n\n return this;\n },\n // @method isPopupOpen(): boolean\n // Returns `true` if the popup bound to this layer is currently open.\n isPopupOpen: function isPopupOpen() {\n return this._popup ? this._popup.isOpen() : false;\n },\n // @method setPopupContent(content: String|HTMLElement|Popup): this\n // Sets the content of the popup bound to this layer.\n setPopupContent: function setPopupContent(content) {\n if (this._popup) {\n this._popup.setContent(content);\n }\n\n return this;\n },\n // @method getPopup(): Popup\n // Returns the popup bound to this layer.\n getPopup: function getPopup() {\n return this._popup;\n },\n _openPopup: function _openPopup(e) {\n var layer = e.layer || e.target;\n\n if (!this._popup) {\n return;\n }\n\n if (!this._map) {\n return;\n } // prevent map click\n\n\n stop(e); // if this inherits from Path its a vector and we can just\n // open the popup at the new location\n\n if (layer instanceof Path) {\n this.openPopup(e.layer || e.target, e.latlng);\n return;\n } // otherwise treat it like a marker and figure out\n // if we should toggle it open/closed\n\n\n if (this._map.hasLayer(this._popup) && this._popup._source === layer) {\n this.closePopup();\n } else {\n this.openPopup(layer, e.latlng);\n }\n },\n _movePopup: function _movePopup(e) {\n this._popup.setLatLng(e.latlng);\n },\n _onKeyPress: function _onKeyPress(e) {\n if (e.originalEvent.keyCode === 13) {\n this._openPopup(e);\n }\n }\n });\n /*\n * @class Tooltip\n * @inherits DivOverlay\n * @aka L.Tooltip\n * Used to display small texts on top of map layers.\n *\n * @example\n *\n * ```js\n * marker.bindTooltip(\"my tooltip text\").openTooltip();\n * ```\n * Note about tooltip offset. Leaflet takes two options in consideration\n * for computing tooltip offsetting:\n * - the `offset` Tooltip option: it defaults to [0, 0], and it's specific to one tooltip.\n * Add a positive x offset to move the tooltip to the right, and a positive y offset to\n * move it to the bottom. Negatives will move to the left and top.\n * - the `tooltipAnchor` Icon option: this will only be considered for Marker. You\n * should adapt this value if you use a custom icon.\n */\n // @namespace Tooltip\n\n var Tooltip = DivOverlay.extend({\n // @section\n // @aka Tooltip options\n options: {\n // @option pane: String = 'tooltipPane'\n // `Map pane` where the tooltip will be added.\n pane: 'tooltipPane',\n // @option offset: Point = Point(0, 0)\n // Optional offset of the tooltip position.\n offset: [0, 0],\n // @option direction: String = 'auto'\n // Direction where to open the tooltip. Possible values are: `right`, `left`,\n // `top`, `bottom`, `center`, `auto`.\n // `auto` will dynamically switch between `right` and `left` according to the tooltip\n // position on the map.\n direction: 'auto',\n // @option permanent: Boolean = false\n // Whether to open the tooltip permanently or only on mouseover.\n permanent: false,\n // @option sticky: Boolean = false\n // If true, the tooltip will follow the mouse instead of being fixed at the feature center.\n sticky: false,\n // @option interactive: Boolean = false\n // If true, the tooltip will listen to the feature events.\n interactive: false,\n // @option opacity: Number = 0.9\n // Tooltip container opacity.\n opacity: 0.9\n },\n onAdd: function onAdd(map) {\n DivOverlay.prototype.onAdd.call(this, map);\n this.setOpacity(this.options.opacity); // @namespace Map\n // @section Tooltip events\n // @event tooltipopen: TooltipEvent\n // Fired when a tooltip is opened in the map.\n\n map.fire('tooltipopen', {\n tooltip: this\n });\n\n if (this._source) {\n // @namespace Layer\n // @section Tooltip events\n // @event tooltipopen: TooltipEvent\n // Fired when a tooltip bound to this layer is opened.\n this._source.fire('tooltipopen', {\n tooltip: this\n }, true);\n }\n },\n onRemove: function onRemove(map) {\n DivOverlay.prototype.onRemove.call(this, map); // @namespace Map\n // @section Tooltip events\n // @event tooltipclose: TooltipEvent\n // Fired when a tooltip in the map is closed.\n\n map.fire('tooltipclose', {\n tooltip: this\n });\n\n if (this._source) {\n // @namespace Layer\n // @section Tooltip events\n // @event tooltipclose: TooltipEvent\n // Fired when a tooltip bound to this layer is closed.\n this._source.fire('tooltipclose', {\n tooltip: this\n }, true);\n }\n },\n getEvents: function getEvents() {\n var events = DivOverlay.prototype.getEvents.call(this);\n\n if (touch && !this.options.permanent) {\n events.preclick = this._close;\n }\n\n return events;\n },\n _close: function _close() {\n if (this._map) {\n this._map.closeTooltip(this);\n }\n },\n _initLayout: function _initLayout() {\n var prefix = 'leaflet-tooltip',\n className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\n this._contentNode = this._container = create$1('div', className);\n },\n _updateLayout: function _updateLayout() {},\n _adjustPan: function _adjustPan() {},\n _setPosition: function _setPosition(pos) {\n var subX,\n subY,\n map = this._map,\n container = this._container,\n centerPoint = map.latLngToContainerPoint(map.getCenter()),\n tooltipPoint = map.layerPointToContainerPoint(pos),\n direction = this.options.direction,\n tooltipWidth = container.offsetWidth,\n tooltipHeight = container.offsetHeight,\n offset = toPoint(this.options.offset),\n anchor = this._getAnchor();\n\n if (direction === 'top') {\n subX = tooltipWidth / 2;\n subY = tooltipHeight;\n } else if (direction === 'bottom') {\n subX = tooltipWidth / 2;\n subY = 0;\n } else if (direction === 'center') {\n subX = tooltipWidth / 2;\n subY = tooltipHeight / 2;\n } else if (direction === 'right') {\n subX = 0;\n subY = tooltipHeight / 2;\n } else if (direction === 'left') {\n subX = tooltipWidth;\n subY = tooltipHeight / 2;\n } else if (tooltipPoint.x < centerPoint.x) {\n direction = 'right';\n subX = 0;\n subY = tooltipHeight / 2;\n } else {\n direction = 'left';\n subX = tooltipWidth + (offset.x + anchor.x) * 2;\n subY = tooltipHeight / 2;\n }\n\n pos = pos.subtract(toPoint(subX, subY, true)).add(offset).add(anchor);\n removeClass(container, 'leaflet-tooltip-right');\n removeClass(container, 'leaflet-tooltip-left');\n removeClass(container, 'leaflet-tooltip-top');\n removeClass(container, 'leaflet-tooltip-bottom');\n addClass(container, 'leaflet-tooltip-' + direction);\n setPosition(container, pos);\n },\n _updatePosition: function _updatePosition() {\n var pos = this._map.latLngToLayerPoint(this._latlng);\n\n this._setPosition(pos);\n },\n setOpacity: function setOpacity(opacity) {\n this.options.opacity = opacity;\n\n if (this._container) {\n _setOpacity(this._container, opacity);\n }\n },\n _animateZoom: function _animateZoom(e) {\n var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n\n this._setPosition(pos);\n },\n _getAnchor: function _getAnchor() {\n // Where should we anchor the tooltip on the source layer?\n return toPoint(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);\n }\n }); // @namespace Tooltip\n // @factory L.tooltip(options?: Tooltip options, source?: Layer)\n // Instantiates a Tooltip object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.\n\n var tooltip = function tooltip(options, source) {\n return new Tooltip(options, source);\n }; // @namespace Map\n // @section Methods for Layers and Controls\n\n\n Map.include({\n // @method openTooltip(tooltip: Tooltip): this\n // Opens the specified tooltip.\n // @alternative\n // @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this\n // Creates a tooltip with the specified content and options and open it.\n openTooltip: function openTooltip(tooltip, latlng, options) {\n if (!(tooltip instanceof Tooltip)) {\n tooltip = new Tooltip(options).setContent(tooltip);\n }\n\n if (latlng) {\n tooltip.setLatLng(latlng);\n }\n\n if (this.hasLayer(tooltip)) {\n return this;\n }\n\n return this.addLayer(tooltip);\n },\n // @method closeTooltip(tooltip?: Tooltip): this\n // Closes the tooltip given as parameter.\n closeTooltip: function closeTooltip(tooltip) {\n if (tooltip) {\n this.removeLayer(tooltip);\n }\n\n return this;\n }\n });\n /*\n * @namespace Layer\n * @section Tooltip methods example\n *\n * All layers share a set of methods convenient for binding tooltips to it.\n *\n * ```js\n * var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);\n * layer.openTooltip();\n * layer.closeTooltip();\n * ```\n */\n // @section Tooltip methods\n\n Layer.include({\n // @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this\n // Binds a tooltip to the layer with the passed `content` and sets up the\n // necessary event listeners. If a `Function` is passed it will receive\n // the layer as the first argument and should return a `String` or `HTMLElement`.\n bindTooltip: function bindTooltip(content, options) {\n if (content instanceof Tooltip) {\n setOptions(content, options);\n this._tooltip = content;\n content._source = this;\n } else {\n if (!this._tooltip || options) {\n this._tooltip = new Tooltip(options, this);\n }\n\n this._tooltip.setContent(content);\n }\n\n this._initTooltipInteractions();\n\n if (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {\n this.openTooltip();\n }\n\n return this;\n },\n // @method unbindTooltip(): this\n // Removes the tooltip previously bound with `bindTooltip`.\n unbindTooltip: function unbindTooltip() {\n if (this._tooltip) {\n this._initTooltipInteractions(true);\n\n this.closeTooltip();\n this._tooltip = null;\n }\n\n return this;\n },\n _initTooltipInteractions: function _initTooltipInteractions(remove$$1) {\n if (!remove$$1 && this._tooltipHandlersAdded) {\n return;\n }\n\n var onOff = remove$$1 ? 'off' : 'on',\n events = {\n remove: this.closeTooltip,\n move: this._moveTooltip\n };\n\n if (!this._tooltip.options.permanent) {\n events.mouseover = this._openTooltip;\n events.mouseout = this.closeTooltip;\n\n if (this._tooltip.options.sticky) {\n events.mousemove = this._moveTooltip;\n }\n\n if (touch) {\n events.click = this._openTooltip;\n }\n } else {\n events.add = this._openTooltip;\n }\n\n this[onOff](events);\n this._tooltipHandlersAdded = !remove$$1;\n },\n // @method openTooltip(latlng?: LatLng): this\n // Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.\n openTooltip: function openTooltip(layer, latlng) {\n if (this._tooltip && this._map) {\n latlng = this._tooltip._prepareOpen(this, layer, latlng); // open the tooltip on the map\n\n this._map.openTooltip(this._tooltip, latlng); // Tooltip container may not be defined if not permanent and never\n // opened.\n\n\n if (this._tooltip.options.interactive && this._tooltip._container) {\n addClass(this._tooltip._container, 'leaflet-clickable');\n this.addInteractiveTarget(this._tooltip._container);\n }\n }\n\n return this;\n },\n // @method closeTooltip(): this\n // Closes the tooltip bound to this layer if it is open.\n closeTooltip: function closeTooltip() {\n if (this._tooltip) {\n this._tooltip._close();\n\n if (this._tooltip.options.interactive && this._tooltip._container) {\n removeClass(this._tooltip._container, 'leaflet-clickable');\n this.removeInteractiveTarget(this._tooltip._container);\n }\n }\n\n return this;\n },\n // @method toggleTooltip(): this\n // Opens or closes the tooltip bound to this layer depending on its current state.\n toggleTooltip: function toggleTooltip(target) {\n if (this._tooltip) {\n if (this._tooltip._map) {\n this.closeTooltip();\n } else {\n this.openTooltip(target);\n }\n }\n\n return this;\n },\n // @method isTooltipOpen(): boolean\n // Returns `true` if the tooltip bound to this layer is currently open.\n isTooltipOpen: function isTooltipOpen() {\n return this._tooltip.isOpen();\n },\n // @method setTooltipContent(content: String|HTMLElement|Tooltip): this\n // Sets the content of the tooltip bound to this layer.\n setTooltipContent: function setTooltipContent(content) {\n if (this._tooltip) {\n this._tooltip.setContent(content);\n }\n\n return this;\n },\n // @method getTooltip(): Tooltip\n // Returns the tooltip bound to this layer.\n getTooltip: function getTooltip() {\n return this._tooltip;\n },\n _openTooltip: function _openTooltip(e) {\n var layer = e.layer || e.target;\n\n if (!this._tooltip || !this._map) {\n return;\n }\n\n this.openTooltip(layer, this._tooltip.options.sticky ? e.latlng : undefined);\n },\n _moveTooltip: function _moveTooltip(e) {\n var latlng = e.latlng,\n containerPoint,\n layerPoint;\n\n if (this._tooltip.options.sticky && e.originalEvent) {\n containerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);\n layerPoint = this._map.containerPointToLayerPoint(containerPoint);\n latlng = this._map.layerPointToLatLng(layerPoint);\n }\n\n this._tooltip.setLatLng(latlng);\n }\n });\n /*\n * @class DivIcon\n * @aka L.DivIcon\n * @inherits Icon\n *\n * Represents a lightweight icon for markers that uses a simple `<div>`\n * element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.\n *\n * @example\n * ```js\n * var myIcon = L.divIcon({className: 'my-div-icon'});\n * // you can set .my-div-icon styles in CSS\n *\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\n * ```\n *\n * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.\n */\n\n var DivIcon = Icon.extend({\n options: {\n // @section\n // @aka DivIcon options\n iconSize: [12, 12],\n // also can be set through CSS\n // iconAnchor: (Point),\n // popupAnchor: (Point),\n // @option html: String|HTMLElement = ''\n // Custom HTML code to put inside the div element, empty by default. Alternatively,\n // an instance of `HTMLElement`.\n html: false,\n // @option bgPos: Point = [0, 0]\n // Optional relative position of the background, in pixels\n bgPos: null,\n className: 'leaflet-div-icon'\n },\n createIcon: function createIcon(oldIcon) {\n var div = oldIcon && oldIcon.tagName === 'DIV' ? oldIcon : document.createElement('div'),\n options = this.options;\n\n if (options.html instanceof Element) {\n empty(div);\n div.appendChild(options.html);\n } else {\n div.innerHTML = options.html !== false ? options.html : '';\n }\n\n if (options.bgPos) {\n var bgPos = toPoint(options.bgPos);\n div.style.backgroundPosition = -bgPos.x + 'px ' + -bgPos.y + 'px';\n }\n\n this._setIconStyles(div, 'icon');\n\n return div;\n },\n createShadow: function createShadow() {\n return null;\n }\n }); // @factory L.divIcon(options: DivIcon options)\n // Creates a `DivIcon` instance with the given options.\n\n function divIcon(options) {\n return new DivIcon(options);\n }\n\n Icon.Default = IconDefault;\n /*\n * @class GridLayer\n * @inherits Layer\n * @aka L.GridLayer\n *\n * Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.\n * GridLayer can be extended to create a tiled grid of HTML elements like `<canvas>`, `<img>` or `<div>`. GridLayer will handle creating and animating these DOM elements for you.\n *\n *\n * @section Synchronous usage\n * @example\n *\n * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n * createTile: function(coords){\n * // create a <canvas> element for drawing\n * var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n * // setup tile width and height according to the options\n * var size = this.getTileSize();\n * tile.width = size.x;\n * tile.height = size.y;\n *\n * // get a canvas context and draw something on it using coords.x, coords.y and coords.z\n * var ctx = tile.getContext('2d');\n *\n * // return the tile so it can be rendered on screen\n * return tile;\n * }\n * });\n * ```\n *\n * @section Asynchronous usage\n * @example\n *\n * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n * createTile: function(coords, done){\n * var error;\n *\n * // create a <canvas> element for drawing\n * var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n * // setup tile width and height according to the options\n * var size = this.getTileSize();\n * tile.width = size.x;\n * tile.height = size.y;\n *\n * // draw something asynchronously and pass the tile to the done() callback\n * setTimeout(function() {\n * done(error, tile);\n * }, 1000);\n *\n * return tile;\n * }\n * });\n * ```\n *\n * @section\n */\n\n var GridLayer = Layer.extend({\n // @section\n // @aka GridLayer options\n options: {\n // @option tileSize: Number|Point = 256\n // Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.\n tileSize: 256,\n // @option opacity: Number = 1.0\n // Opacity of the tiles. Can be used in the `createTile()` function.\n opacity: 1,\n // @option updateWhenIdle: Boolean = (depends)\n // Load new tiles only when panning ends.\n // `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.\n // `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the\n // [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.\n updateWhenIdle: mobile,\n // @option updateWhenZooming: Boolean = true\n // By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.\n updateWhenZooming: true,\n // @option updateInterval: Number = 200\n // Tiles will not update more than once every `updateInterval` milliseconds when panning.\n updateInterval: 200,\n // @option zIndex: Number = 1\n // The explicit zIndex of the tile layer.\n zIndex: 1,\n // @option bounds: LatLngBounds = undefined\n // If set, tiles will only be loaded inside the set `LatLngBounds`.\n bounds: null,\n // @option minZoom: Number = 0\n // The minimum zoom level down to which this layer will be displayed (inclusive).\n minZoom: 0,\n // @option maxZoom: Number = undefined\n // The maximum zoom level up to which this layer will be displayed (inclusive).\n maxZoom: undefined,\n // @option maxNativeZoom: Number = undefined\n // Maximum zoom number the tile source has available. If it is specified,\n // the tiles on all zoom levels higher than `maxNativeZoom` will be loaded\n // from `maxNativeZoom` level and auto-scaled.\n maxNativeZoom: undefined,\n // @option minNativeZoom: Number = undefined\n // Minimum zoom number the tile source has available. If it is specified,\n // the tiles on all zoom levels lower than `minNativeZoom` will be loaded\n // from `minNativeZoom` level and auto-scaled.\n minNativeZoom: undefined,\n // @option noWrap: Boolean = false\n // Whether the layer is wrapped around the antimeridian. If `true`, the\n // GridLayer will only be displayed once at low zoom levels. Has no\n // effect when the [map CRS](#map-crs) doesn't wrap around. Can be used\n // in combination with [`bounds`](#gridlayer-bounds) to prevent requesting\n // tiles outside the CRS limits.\n noWrap: false,\n // @option pane: String = 'tilePane'\n // `Map pane` where the grid layer will be added.\n pane: 'tilePane',\n // @option className: String = ''\n // A custom class name to assign to the tile layer. Empty by default.\n className: '',\n // @option keepBuffer: Number = 2\n // When panning the map, keep this many rows and columns of tiles before unloading them.\n keepBuffer: 2\n },\n initialize: function initialize(options) {\n setOptions(this, options);\n },\n onAdd: function onAdd() {\n this._initContainer();\n\n this._levels = {};\n this._tiles = {};\n\n this._resetView();\n\n this._update();\n },\n beforeAdd: function beforeAdd(map) {\n map._addZoomLimit(this);\n },\n onRemove: function onRemove(map) {\n this._removeAllTiles();\n\n _remove(this._container);\n\n map._removeZoomLimit(this);\n\n this._container = null;\n this._tileZoom = undefined;\n },\n // @method bringToFront: this\n // Brings the tile layer to the top of all tile layers.\n bringToFront: function bringToFront() {\n if (this._map) {\n toFront(this._container);\n\n this._setAutoZIndex(Math.max);\n }\n\n return this;\n },\n // @method bringToBack: this\n // Brings the tile layer to the bottom of all tile layers.\n bringToBack: function bringToBack() {\n if (this._map) {\n toBack(this._container);\n\n this._setAutoZIndex(Math.min);\n }\n\n return this;\n },\n // @method getContainer: HTMLElement\n // Returns the HTML element that contains the tiles for this layer.\n getContainer: function getContainer() {\n return this._container;\n },\n // @method setOpacity(opacity: Number): this\n // Changes the [opacity](#gridlayer-opacity) of the grid layer.\n setOpacity: function setOpacity(opacity) {\n this.options.opacity = opacity;\n\n this._updateOpacity();\n\n return this;\n },\n // @method setZIndex(zIndex: Number): this\n // Changes the [zIndex](#gridlayer-zindex) of the grid layer.\n setZIndex: function setZIndex(zIndex) {\n this.options.zIndex = zIndex;\n\n this._updateZIndex();\n\n return this;\n },\n // @method isLoading: Boolean\n // Returns `true` if any tile in the grid layer has not finished loading.\n isLoading: function isLoading() {\n return this._loading;\n },\n // @method redraw: this\n // Causes the layer to clear all the tiles and request them again.\n redraw: function redraw() {\n if (this._map) {\n this._removeAllTiles();\n\n this._update();\n }\n\n return this;\n },\n getEvents: function getEvents() {\n var events = {\n viewprereset: this._invalidateAll,\n viewreset: this._resetView,\n zoom: this._resetView,\n moveend: this._onMoveEnd\n };\n\n if (!this.options.updateWhenIdle) {\n // update tiles on move, but not more often than once per given interval\n if (!this._onMove) {\n this._onMove = throttle(this._onMoveEnd, this.options.updateInterval, this);\n }\n\n events.move = this._onMove;\n }\n\n if (this._zoomAnimated) {\n events.zoomanim = this._animateZoom;\n }\n\n return events;\n },\n // @section Extension methods\n // Layers extending `GridLayer` shall reimplement the following method.\n // @method createTile(coords: Object, done?: Function): HTMLElement\n // Called only internally, must be overridden by classes extending `GridLayer`.\n // Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback\n // is specified, it must be called when the tile has finished loading and drawing.\n createTile: function createTile() {\n return document.createElement('div');\n },\n // @section\n // @method getTileSize: Point\n // Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.\n getTileSize: function getTileSize() {\n var s = this.options.tileSize;\n return s instanceof Point ? s : new Point(s, s);\n },\n _updateZIndex: function _updateZIndex() {\n if (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {\n this._container.style.zIndex = this.options.zIndex;\n }\n },\n _setAutoZIndex: function _setAutoZIndex(compare) {\n // go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)\n var layers = this.getPane().children,\n edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min\n\n for (var i = 0, len = layers.length, zIndex; i < len; i++) {\n zIndex = layers[i].style.zIndex;\n\n if (layers[i] !== this._container && zIndex) {\n edgeZIndex = compare(edgeZIndex, +zIndex);\n }\n }\n\n if (isFinite(edgeZIndex)) {\n this.options.zIndex = edgeZIndex + compare(-1, 1);\n\n this._updateZIndex();\n }\n },\n _updateOpacity: function _updateOpacity() {\n if (!this._map) {\n return;\n } // IE doesn't inherit filter opacity properly, so we're forced to set it on tiles\n\n\n if (ielt9) {\n return;\n }\n\n _setOpacity(this._container, this.options.opacity);\n\n var now = +new Date(),\n nextFrame = false,\n willPrune = false;\n\n for (var key in this._tiles) {\n var tile = this._tiles[key];\n\n if (!tile.current || !tile.loaded) {\n continue;\n }\n\n var fade = Math.min(1, (now - tile.loaded) / 200);\n\n _setOpacity(tile.el, fade);\n\n if (fade < 1) {\n nextFrame = true;\n } else {\n if (tile.active) {\n willPrune = true;\n } else {\n this._onOpaqueTile(tile);\n }\n\n tile.active = true;\n }\n }\n\n if (willPrune && !this._noPrune) {\n this._pruneTiles();\n }\n\n if (nextFrame) {\n cancelAnimFrame(this._fadeFrame);\n this._fadeFrame = requestAnimFrame(this._updateOpacity, this);\n }\n },\n _onOpaqueTile: falseFn,\n _initContainer: function _initContainer() {\n if (this._container) {\n return;\n }\n\n this._container = create$1('div', 'leaflet-layer ' + (this.options.className || ''));\n\n this._updateZIndex();\n\n if (this.options.opacity < 1) {\n this._updateOpacity();\n }\n\n this.getPane().appendChild(this._container);\n },\n _updateLevels: function _updateLevels() {\n var zoom = this._tileZoom,\n maxZoom = this.options.maxZoom;\n\n if (zoom === undefined) {\n return undefined;\n }\n\n for (var z in this._levels) {\n z = Number(z);\n\n if (this._levels[z].el.children.length || z === zoom) {\n this._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);\n\n this._onUpdateLevel(z);\n } else {\n _remove(this._levels[z].el);\n\n this._removeTilesAtZoom(z);\n\n this._onRemoveLevel(z);\n\n delete this._levels[z];\n }\n }\n\n var level = this._levels[zoom],\n map = this._map;\n\n if (!level) {\n level = this._levels[zoom] = {};\n level.el = create$1('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);\n level.el.style.zIndex = maxZoom;\n level.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();\n level.zoom = zoom;\n\n this._setZoomTransform(level, map.getCenter(), map.getZoom()); // force the browser to consider the newly added element for transition\n\n\n falseFn(level.el.offsetWidth);\n\n this._onCreateLevel(level);\n }\n\n this._level = level;\n return level;\n },\n _onUpdateLevel: falseFn,\n _onRemoveLevel: falseFn,\n _onCreateLevel: falseFn,\n _pruneTiles: function _pruneTiles() {\n if (!this._map) {\n return;\n }\n\n var key, tile;\n\n var zoom = this._map.getZoom();\n\n if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n this._removeAllTiles();\n\n return;\n }\n\n for (key in this._tiles) {\n tile = this._tiles[key];\n tile.retain = tile.current;\n }\n\n for (key in this._tiles) {\n tile = this._tiles[key];\n\n if (tile.current && !tile.active) {\n var coords = tile.coords;\n\n if (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {\n this._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);\n }\n }\n }\n\n for (key in this._tiles) {\n if (!this._tiles[key].retain) {\n this._removeTile(key);\n }\n }\n },\n _removeTilesAtZoom: function _removeTilesAtZoom(zoom) {\n for (var key in this._tiles) {\n if (this._tiles[key].coords.z !== zoom) {\n continue;\n }\n\n this._removeTile(key);\n }\n },\n _removeAllTiles: function _removeAllTiles() {\n for (var key in this._tiles) {\n this._removeTile(key);\n }\n },\n _invalidateAll: function _invalidateAll() {\n for (var z in this._levels) {\n _remove(this._levels[z].el);\n\n this._onRemoveLevel(Number(z));\n\n delete this._levels[z];\n }\n\n this._removeAllTiles();\n\n this._tileZoom = undefined;\n },\n _retainParent: function _retainParent(x, y, z, minZoom) {\n var x2 = Math.floor(x / 2),\n y2 = Math.floor(y / 2),\n z2 = z - 1,\n coords2 = new Point(+x2, +y2);\n coords2.z = +z2;\n\n var key = this._tileCoordsToKey(coords2),\n tile = this._tiles[key];\n\n if (tile && tile.active) {\n tile.retain = true;\n return true;\n } else if (tile && tile.loaded) {\n tile.retain = true;\n }\n\n if (z2 > minZoom) {\n return this._retainParent(x2, y2, z2, minZoom);\n }\n\n return false;\n },\n _retainChildren: function _retainChildren(x, y, z, maxZoom) {\n for (var i = 2 * x; i < 2 * x + 2; i++) {\n for (var j = 2 * y; j < 2 * y + 2; j++) {\n var coords = new Point(i, j);\n coords.z = z + 1;\n\n var key = this._tileCoordsToKey(coords),\n tile = this._tiles[key];\n\n if (tile && tile.active) {\n tile.retain = true;\n continue;\n } else if (tile && tile.loaded) {\n tile.retain = true;\n }\n\n if (z + 1 < maxZoom) {\n this._retainChildren(i, j, z + 1, maxZoom);\n }\n }\n }\n },\n _resetView: function _resetView(e) {\n var animating = e && (e.pinch || e.flyTo);\n\n this._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);\n },\n _animateZoom: function _animateZoom(e) {\n this._setView(e.center, e.zoom, true, e.noUpdate);\n },\n _clampZoom: function _clampZoom(zoom) {\n var options = this.options;\n\n if (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {\n return options.minNativeZoom;\n }\n\n if (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {\n return options.maxNativeZoom;\n }\n\n return zoom;\n },\n _setView: function _setView(center, zoom, noPrune, noUpdate) {\n var tileZoom = Math.round(zoom);\n\n if (this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom || this.options.minZoom !== undefined && tileZoom < this.options.minZoom) {\n tileZoom = undefined;\n } else {\n tileZoom = this._clampZoom(tileZoom);\n }\n\n var tileZoomChanged = this.options.updateWhenZooming && tileZoom !== this._tileZoom;\n\n if (!noUpdate || tileZoomChanged) {\n this._tileZoom = tileZoom;\n\n if (this._abortLoading) {\n this._abortLoading();\n }\n\n this._updateLevels();\n\n this._resetGrid();\n\n if (tileZoom !== undefined) {\n this._update(center);\n }\n\n if (!noPrune) {\n this._pruneTiles();\n } // Flag to prevent _updateOpacity from pruning tiles during\n // a zoom anim or a pinch gesture\n\n\n this._noPrune = !!noPrune;\n }\n\n this._setZoomTransforms(center, zoom);\n },\n _setZoomTransforms: function _setZoomTransforms(center, zoom) {\n for (var i in this._levels) {\n this._setZoomTransform(this._levels[i], center, zoom);\n }\n },\n _setZoomTransform: function _setZoomTransform(level, center, zoom) {\n var scale = this._map.getZoomScale(zoom, level.zoom),\n translate = level.origin.multiplyBy(scale).subtract(this._map._getNewPixelOrigin(center, zoom)).round();\n\n if (any3d) {\n setTransform(level.el, translate, scale);\n } else {\n setPosition(level.el, translate);\n }\n },\n _resetGrid: function _resetGrid() {\n var map = this._map,\n crs = map.options.crs,\n tileSize = this._tileSize = this.getTileSize(),\n tileZoom = this._tileZoom;\n\n var bounds = this._map.getPixelWorldBounds(this._tileZoom);\n\n if (bounds) {\n this._globalTileRange = this._pxBoundsToTileRange(bounds);\n }\n\n this._wrapX = crs.wrapLng && !this.options.noWrap && [Math.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x), Math.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)];\n this._wrapY = crs.wrapLat && !this.options.noWrap && [Math.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x), Math.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)];\n },\n _onMoveEnd: function _onMoveEnd() {\n if (!this._map || this._map._animatingZoom) {\n return;\n }\n\n this._update();\n },\n _getTiledPixelBounds: function _getTiledPixelBounds(center) {\n var map = this._map,\n mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),\n scale = map.getZoomScale(mapZoom, this._tileZoom),\n pixelCenter = map.project(center, this._tileZoom).floor(),\n halfSize = map.getSize().divideBy(scale * 2);\n return new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n },\n // Private method to load tiles in the grid's active zoom level according to map bounds\n _update: function _update(center) {\n var map = this._map;\n\n if (!map) {\n return;\n }\n\n var zoom = this._clampZoom(map.getZoom());\n\n if (center === undefined) {\n center = map.getCenter();\n }\n\n if (this._tileZoom === undefined) {\n return;\n } // if out of minzoom/maxzoom\n\n\n var pixelBounds = this._getTiledPixelBounds(center),\n tileRange = this._pxBoundsToTileRange(pixelBounds),\n tileCenter = tileRange.getCenter(),\n queue = [],\n margin = this.options.keepBuffer,\n noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]), tileRange.getTopRight().add([margin, -margin])); // Sanity check: panic if the tile range contains Infinity somewhere.\n\n\n if (!(isFinite(tileRange.min.x) && isFinite(tileRange.min.y) && isFinite(tileRange.max.x) && isFinite(tileRange.max.y))) {\n throw new Error('Attempted to load an infinite number of tiles');\n }\n\n for (var key in this._tiles) {\n var c = this._tiles[key].coords;\n\n if (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {\n this._tiles[key].current = false;\n }\n } // _update just loads more tiles. If the tile zoom level differs too much\n // from the map's, let _setView reset levels and prune old tiles.\n\n\n if (Math.abs(zoom - this._tileZoom) > 1) {\n this._setView(center, zoom);\n\n return;\n } // create a queue of coordinates to load tiles from\n\n\n for (var j = tileRange.min.y; j <= tileRange.max.y; j++) {\n for (var i = tileRange.min.x; i <= tileRange.max.x; i++) {\n var coords = new Point(i, j);\n coords.z = this._tileZoom;\n\n if (!this._isValidTile(coords)) {\n continue;\n }\n\n var tile = this._tiles[this._tileCoordsToKey(coords)];\n\n if (tile) {\n tile.current = true;\n } else {\n queue.push(coords);\n }\n }\n } // sort tile queue to load tiles in order of their distance to center\n\n\n queue.sort(function (a, b) {\n return a.distanceTo(tileCenter) - b.distanceTo(tileCenter);\n });\n\n if (queue.length !== 0) {\n // if it's the first batch of tiles to load\n if (!this._loading) {\n this._loading = true; // @event loading: Event\n // Fired when the grid layer starts loading tiles.\n\n this.fire('loading');\n } // create DOM fragment to append tiles in one batch\n\n\n var fragment = document.createDocumentFragment();\n\n for (i = 0; i < queue.length; i++) {\n this._addTile(queue[i], fragment);\n }\n\n this._level.el.appendChild(fragment);\n }\n },\n _isValidTile: function _isValidTile(coords) {\n var crs = this._map.options.crs;\n\n if (!crs.infinite) {\n // don't load tile if it's out of bounds and not wrapped\n var bounds = this._globalTileRange;\n\n if (!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x) || !crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y)) {\n return false;\n }\n }\n\n if (!this.options.bounds) {\n return true;\n } // don't load tile if it doesn't intersect the bounds in options\n\n\n var tileBounds = this._tileCoordsToBounds(coords);\n\n return toLatLngBounds(this.options.bounds).overlaps(tileBounds);\n },\n _keyToBounds: function _keyToBounds(key) {\n return this._tileCoordsToBounds(this._keyToTileCoords(key));\n },\n _tileCoordsToNwSe: function _tileCoordsToNwSe(coords) {\n var map = this._map,\n tileSize = this.getTileSize(),\n nwPoint = coords.scaleBy(tileSize),\n sePoint = nwPoint.add(tileSize),\n nw = map.unproject(nwPoint, coords.z),\n se = map.unproject(sePoint, coords.z);\n return [nw, se];\n },\n // converts tile coordinates to its geographical bounds\n _tileCoordsToBounds: function _tileCoordsToBounds(coords) {\n var bp = this._tileCoordsToNwSe(coords),\n bounds = new LatLngBounds(bp[0], bp[1]);\n\n if (!this.options.noWrap) {\n bounds = this._map.wrapLatLngBounds(bounds);\n }\n\n return bounds;\n },\n // converts tile coordinates to key for the tile cache\n _tileCoordsToKey: function _tileCoordsToKey(coords) {\n return coords.x + ':' + coords.y + ':' + coords.z;\n },\n // converts tile cache key to coordinates\n _keyToTileCoords: function _keyToTileCoords(key) {\n var k = key.split(':'),\n coords = new Point(+k[0], +k[1]);\n coords.z = +k[2];\n return coords;\n },\n _removeTile: function _removeTile(key) {\n var tile = this._tiles[key];\n\n if (!tile) {\n return;\n }\n\n _remove(tile.el);\n\n delete this._tiles[key]; // @event tileunload: TileEvent\n // Fired when a tile is removed (e.g. when a tile goes off the screen).\n\n this.fire('tileunload', {\n tile: tile.el,\n coords: this._keyToTileCoords(key)\n });\n },\n _initTile: function _initTile(tile) {\n addClass(tile, 'leaflet-tile');\n var tileSize = this.getTileSize();\n tile.style.width = tileSize.x + 'px';\n tile.style.height = tileSize.y + 'px';\n tile.onselectstart = falseFn;\n tile.onmousemove = falseFn; // update opacity on tiles in IE7-8 because of filter inheritance problems\n\n if (ielt9 && this.options.opacity < 1) {\n _setOpacity(tile, this.options.opacity);\n } // without this hack, tiles disappear after zoom on Chrome for Android\n // https://github.com/Leaflet/Leaflet/issues/2078\n\n\n if (android && !android23) {\n tile.style.WebkitBackfaceVisibility = 'hidden';\n }\n },\n _addTile: function _addTile(coords, container) {\n var tilePos = this._getTilePos(coords),\n key = this._tileCoordsToKey(coords);\n\n var tile = this.createTile(this._wrapCoords(coords), bind(this._tileReady, this, coords));\n\n this._initTile(tile); // if createTile is defined with a second argument (\"done\" callback),\n // we know that tile is async and will be ready later; otherwise\n\n\n if (this.createTile.length < 2) {\n // mark tile as ready, but delay one frame for opacity animation to happen\n requestAnimFrame(bind(this._tileReady, this, coords, null, tile));\n }\n\n setPosition(tile, tilePos); // save tile in cache\n\n this._tiles[key] = {\n el: tile,\n coords: coords,\n current: true\n };\n container.appendChild(tile); // @event tileloadstart: TileEvent\n // Fired when a tile is requested and starts loading.\n\n this.fire('tileloadstart', {\n tile: tile,\n coords: coords\n });\n },\n _tileReady: function _tileReady(coords, err, tile) {\n if (err) {\n // @event tileerror: TileErrorEvent\n // Fired when there is an error loading a tile.\n this.fire('tileerror', {\n error: err,\n tile: tile,\n coords: coords\n });\n }\n\n var key = this._tileCoordsToKey(coords);\n\n tile = this._tiles[key];\n\n if (!tile) {\n return;\n }\n\n tile.loaded = +new Date();\n\n if (this._map._fadeAnimated) {\n _setOpacity(tile.el, 0);\n\n cancelAnimFrame(this._fadeFrame);\n this._fadeFrame = requestAnimFrame(this._updateOpacity, this);\n } else {\n tile.active = true;\n\n this._pruneTiles();\n }\n\n if (!err) {\n addClass(tile.el, 'leaflet-tile-loaded'); // @event tileload: TileEvent\n // Fired when a tile loads.\n\n this.fire('tileload', {\n tile: tile.el,\n coords: coords\n });\n }\n\n if (this._noTilesToLoad()) {\n this._loading = false; // @event load: Event\n // Fired when the grid layer loaded all visible tiles.\n\n this.fire('load');\n\n if (ielt9 || !this._map._fadeAnimated) {\n requestAnimFrame(this._pruneTiles, this);\n } else {\n // Wait a bit more than 0.2 secs (the duration of the tile fade-in)\n // to trigger a pruning.\n setTimeout(bind(this._pruneTiles, this), 250);\n }\n }\n },\n _getTilePos: function _getTilePos(coords) {\n return coords.scaleBy(this.getTileSize()).subtract(this._level.origin);\n },\n _wrapCoords: function _wrapCoords(coords) {\n var newCoords = new Point(this._wrapX ? wrapNum(coords.x, this._wrapX) : coords.x, this._wrapY ? wrapNum(coords.y, this._wrapY) : coords.y);\n newCoords.z = coords.z;\n return newCoords;\n },\n _pxBoundsToTileRange: function _pxBoundsToTileRange(bounds) {\n var tileSize = this.getTileSize();\n return new Bounds(bounds.min.unscaleBy(tileSize).floor(), bounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));\n },\n _noTilesToLoad: function _noTilesToLoad() {\n for (var key in this._tiles) {\n if (!this._tiles[key].loaded) {\n return false;\n }\n }\n\n return true;\n }\n }); // @factory L.gridLayer(options?: GridLayer options)\n // Creates a new instance of GridLayer with the supplied options.\n\n function gridLayer(options) {\n return new GridLayer(options);\n }\n /*\r\n * @class TileLayer\r\n * @inherits GridLayer\r\n * @aka L.TileLayer\r\n * Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: 'Map data &copy; <a href=\"https://www.openstreetmap.org/\">OpenStreetMap</a> contributors, <a href=\"https://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>'}).addTo(map);\r\n * ```\r\n *\r\n * @section URL template\r\n * @example\r\n *\r\n * A string of the following form:\r\n *\r\n * ```\r\n * 'http://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'\r\n * ```\r\n *\r\n * `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add \"&commat;2x\" to the URL to load retina tiles.\r\n *\r\n * You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:\r\n *\r\n * ```\r\n * L.tileLayer('http://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});\r\n * ```\r\n */\n\n\n var TileLayer = GridLayer.extend({\n // @section\n // @aka TileLayer options\n options: {\n // @option minZoom: Number = 0\n // The minimum zoom level down to which this layer will be displayed (inclusive).\n minZoom: 0,\n // @option maxZoom: Number = 18\n // The maximum zoom level up to which this layer will be displayed (inclusive).\n maxZoom: 18,\n // @option subdomains: String|String[] = 'abc'\n // Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.\n subdomains: 'abc',\n // @option errorTileUrl: String = ''\n // URL to the tile image to show in place of the tile that failed to load.\n errorTileUrl: '',\n // @option zoomOffset: Number = 0\n // The zoom number used in tile URLs will be offset with this value.\n zoomOffset: 0,\n // @option tms: Boolean = false\n // If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).\n tms: false,\n // @option zoomReverse: Boolean = false\n // If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)\n zoomReverse: false,\n // @option detectRetina: Boolean = false\n // If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.\n detectRetina: false,\n // @option crossOrigin: Boolean|String = false\n // Whether the crossOrigin attribute will be added to the tiles.\n // If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\n // Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\n crossOrigin: false\n },\n initialize: function initialize(url, options) {\n this._url = url;\n options = setOptions(this, options); // detecting retina displays, adjusting tileSize and zoom levels\n\n if (options.detectRetina && retina && options.maxZoom > 0) {\n options.tileSize = Math.floor(options.tileSize / 2);\n\n if (!options.zoomReverse) {\n options.zoomOffset++;\n options.maxZoom--;\n } else {\n options.zoomOffset--;\n options.minZoom++;\n }\n\n options.minZoom = Math.max(0, options.minZoom);\n }\n\n if (typeof options.subdomains === 'string') {\n options.subdomains = options.subdomains.split('');\n } // for https://github.com/Leaflet/Leaflet/issues/137\n\n\n if (!android) {\n this.on('tileunload', this._onTileRemove);\n }\n },\n // @method setUrl(url: String, noRedraw?: Boolean): this\n // Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).\n // If the URL does not change, the layer will not be redrawn unless\n // the noRedraw parameter is set to false.\n setUrl: function setUrl(url, noRedraw) {\n if (this._url === url && noRedraw === undefined) {\n noRedraw = true;\n }\n\n this._url = url;\n\n if (!noRedraw) {\n this.redraw();\n }\n\n return this;\n },\n // @method createTile(coords: Object, done?: Function): HTMLElement\n // Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)\n // to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`\n // callback is called when the tile has been loaded.\n createTile: function createTile(coords, done) {\n var tile = document.createElement('img');\n on(tile, 'load', bind(this._tileOnLoad, this, done, tile));\n on(tile, 'error', bind(this._tileOnError, this, done, tile));\n\n if (this.options.crossOrigin || this.options.crossOrigin === '') {\n tile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\n }\n /*\r\n Alt tag is set to empty string to keep screen readers from reading URL and for compliance reasons\r\n http://www.w3.org/TR/WCAG20-TECHS/H67\r\n */\n\n\n tile.alt = '';\n /*\r\n Set role=\"presentation\" to force screen readers to ignore this\r\n https://www.w3.org/TR/wai-aria/roles#textalternativecomputation\r\n */\n\n tile.setAttribute('role', 'presentation');\n tile.src = this.getTileUrl(coords);\n return tile;\n },\n // @section Extension methods\n // @uninheritable\n // Layers extending `TileLayer` might reimplement the following method.\n // @method getTileUrl(coords: Object): String\n // Called only internally, returns the URL for a tile given its coordinates.\n // Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.\n getTileUrl: function getTileUrl(coords) {\n var data = {\n r: retina ? '@2x' : '',\n s: this._getSubdomain(coords),\n x: coords.x,\n y: coords.y,\n z: this._getZoomForUrl()\n };\n\n if (this._map && !this._map.options.crs.infinite) {\n var invertedY = this._globalTileRange.max.y - coords.y;\n\n if (this.options.tms) {\n data['y'] = invertedY;\n }\n\n data['-y'] = invertedY;\n }\n\n return template(this._url, extend(data, this.options));\n },\n _tileOnLoad: function _tileOnLoad(done, tile) {\n // For https://github.com/Leaflet/Leaflet/issues/3332\n if (ielt9) {\n setTimeout(bind(done, this, null, tile), 0);\n } else {\n done(null, tile);\n }\n },\n _tileOnError: function _tileOnError(done, tile, e) {\n var errorUrl = this.options.errorTileUrl;\n\n if (errorUrl && tile.getAttribute('src') !== errorUrl) {\n tile.src = errorUrl;\n }\n\n done(e, tile);\n },\n _onTileRemove: function _onTileRemove(e) {\n e.tile.onload = null;\n },\n _getZoomForUrl: function _getZoomForUrl() {\n var zoom = this._tileZoom,\n maxZoom = this.options.maxZoom,\n zoomReverse = this.options.zoomReverse,\n zoomOffset = this.options.zoomOffset;\n\n if (zoomReverse) {\n zoom = maxZoom - zoom;\n }\n\n return zoom + zoomOffset;\n },\n _getSubdomain: function _getSubdomain(tilePoint) {\n var index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;\n return this.options.subdomains[index];\n },\n // stops loading all tiles in the background layer\n _abortLoading: function _abortLoading() {\n var i, tile;\n\n for (i in this._tiles) {\n if (this._tiles[i].coords.z !== this._tileZoom) {\n tile = this._tiles[i].el;\n tile.onload = falseFn;\n tile.onerror = falseFn;\n\n if (!tile.complete) {\n tile.src = emptyImageUrl;\n\n _remove(tile);\n\n delete this._tiles[i];\n }\n }\n }\n },\n _removeTile: function _removeTile(key) {\n var tile = this._tiles[key];\n\n if (!tile) {\n return;\n } // Cancels any pending http requests associated with the tile\n // unless we're on Android's stock browser,\n // see https://github.com/Leaflet/Leaflet/issues/137\n\n\n if (!androidStock) {\n tile.el.setAttribute('src', emptyImageUrl);\n }\n\n return GridLayer.prototype._removeTile.call(this, key);\n },\n _tileReady: function _tileReady(coords, err, tile) {\n if (!this._map || tile && tile.getAttribute('src') === emptyImageUrl) {\n return;\n }\n\n return GridLayer.prototype._tileReady.call(this, coords, err, tile);\n }\n }); // @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)\n // Instantiates a tile layer object given a `URL template` and optionally an options object.\n\n function tileLayer(url, options) {\n return new TileLayer(url, options);\n }\n /*\r\n * @class TileLayer.WMS\r\n * @inherits TileLayer\r\n * @aka L.TileLayer.WMS\r\n * Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var nexrad = L.tileLayer.wms(\"http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi\", {\r\n * \tlayers: 'nexrad-n0r-900913',\r\n * \tformat: 'image/png',\r\n * \ttransparent: true,\r\n * \tattribution: \"Weather data © 2012 IEM Nexrad\"\r\n * });\r\n * ```\r\n */\n\n\n var TileLayerWMS = TileLayer.extend({\n // @section\n // @aka TileLayer.WMS options\n // If any custom options not documented here are used, they will be sent to the\n // WMS server as extra parameters in each request URL. This can be useful for\n // [non-standard vendor WMS parameters](http://docs.geoserver.org/stable/en/user/services/wms/vendor.html).\n defaultWmsParams: {\n service: 'WMS',\n request: 'GetMap',\n // @option layers: String = ''\n // **(required)** Comma-separated list of WMS layers to show.\n layers: '',\n // @option styles: String = ''\n // Comma-separated list of WMS styles.\n styles: '',\n // @option format: String = 'image/jpeg'\n // WMS image format (use `'image/png'` for layers with transparency).\n format: 'image/jpeg',\n // @option transparent: Boolean = false\n // If `true`, the WMS service will return images with transparency.\n transparent: false,\n // @option version: String = '1.1.1'\n // Version of the WMS service to use\n version: '1.1.1'\n },\n options: {\n // @option crs: CRS = null\n // Coordinate Reference System to use for the WMS requests, defaults to\n // map CRS. Don't change this if you're not sure what it means.\n crs: null,\n // @option uppercase: Boolean = false\n // If `true`, WMS request parameter keys will be uppercase.\n uppercase: false\n },\n initialize: function initialize(url, options) {\n this._url = url;\n var wmsParams = extend({}, this.defaultWmsParams); // all keys that are not TileLayer options go to WMS params\n\n for (var i in options) {\n if (!(i in this.options)) {\n wmsParams[i] = options[i];\n }\n }\n\n options = setOptions(this, options);\n var realRetina = options.detectRetina && retina ? 2 : 1;\n var tileSize = this.getTileSize();\n wmsParams.width = tileSize.x * realRetina;\n wmsParams.height = tileSize.y * realRetina;\n this.wmsParams = wmsParams;\n },\n onAdd: function onAdd(map) {\n this._crs = this.options.crs || map.options.crs;\n this._wmsVersion = parseFloat(this.wmsParams.version);\n var projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';\n this.wmsParams[projectionKey] = this._crs.code;\n TileLayer.prototype.onAdd.call(this, map);\n },\n getTileUrl: function getTileUrl(coords) {\n var tileBounds = this._tileCoordsToNwSe(coords),\n crs = this._crs,\n bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),\n min = bounds.min,\n max = bounds.max,\n bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ? [min.y, min.x, max.y, max.x] : [min.x, min.y, max.x, max.y]).join(','),\n url = TileLayer.prototype.getTileUrl.call(this, coords);\n\n return url + getParamString(this.wmsParams, url, this.options.uppercase) + (this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;\n },\n // @method setParams(params: Object, noRedraw?: Boolean): this\n // Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).\n setParams: function setParams(params, noRedraw) {\n extend(this.wmsParams, params);\n\n if (!noRedraw) {\n this.redraw();\n }\n\n return this;\n }\n }); // @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)\n // Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.\n\n function tileLayerWMS(url, options) {\n return new TileLayerWMS(url, options);\n }\n\n TileLayer.WMS = TileLayerWMS;\n tileLayer.wms = tileLayerWMS;\n /*\n * @class Renderer\n * @inherits Layer\n * @aka L.Renderer\n *\n * Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the\n * DOM container of the renderer, its bounds, and its zoom animation.\n *\n * A `Renderer` works as an implicit layer group for all `Path`s - the renderer\n * itself can be added or removed to the map. All paths use a renderer, which can\n * be implicit (the map will decide the type of renderer and use it automatically)\n * or explicit (using the [`renderer`](#path-renderer) option of the path).\n *\n * Do not use this class directly, use `SVG` and `Canvas` instead.\n *\n * @event update: Event\n * Fired when the renderer updates its bounds, center and zoom, for example when\n * its map has moved\n */\n\n var Renderer = Layer.extend({\n // @section\n // @aka Renderer options\n options: {\n // @option padding: Number = 0.1\n // How much to extend the clip area around the map view (relative to its size)\n // e.g. 0.1 would be 10% of map view in each direction\n padding: 0.1,\n // @option tolerance: Number = 0\n // How much to extend click tolerance round a path/object on the map\n tolerance: 0\n },\n initialize: function initialize(options) {\n setOptions(this, options);\n stamp(this);\n this._layers = this._layers || {};\n },\n onAdd: function onAdd() {\n if (!this._container) {\n this._initContainer(); // defined by renderer implementations\n\n\n if (this._zoomAnimated) {\n addClass(this._container, 'leaflet-zoom-animated');\n }\n }\n\n this.getPane().appendChild(this._container);\n\n this._update();\n\n this.on('update', this._updatePaths, this);\n },\n onRemove: function onRemove() {\n this.off('update', this._updatePaths, this);\n\n this._destroyContainer();\n },\n getEvents: function getEvents() {\n var events = {\n viewreset: this._reset,\n zoom: this._onZoom,\n moveend: this._update,\n zoomend: this._onZoomEnd\n };\n\n if (this._zoomAnimated) {\n events.zoomanim = this._onAnimZoom;\n }\n\n return events;\n },\n _onAnimZoom: function _onAnimZoom(ev) {\n this._updateTransform(ev.center, ev.zoom);\n },\n _onZoom: function _onZoom() {\n this._updateTransform(this._map.getCenter(), this._map.getZoom());\n },\n _updateTransform: function _updateTransform(center, zoom) {\n var scale = this._map.getZoomScale(zoom, this._zoom),\n position = getPosition(this._container),\n viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),\n currentCenterPoint = this._map.project(this._center, zoom),\n destCenterPoint = this._map.project(center, zoom),\n centerOffset = destCenterPoint.subtract(currentCenterPoint),\n topLeftOffset = viewHalf.multiplyBy(-scale).add(position).add(viewHalf).subtract(centerOffset);\n\n if (any3d) {\n setTransform(this._container, topLeftOffset, scale);\n } else {\n setPosition(this._container, topLeftOffset);\n }\n },\n _reset: function _reset() {\n this._update();\n\n this._updateTransform(this._center, this._zoom);\n\n for (var id in this._layers) {\n this._layers[id]._reset();\n }\n },\n _onZoomEnd: function _onZoomEnd() {\n for (var id in this._layers) {\n this._layers[id]._project();\n }\n },\n _updatePaths: function _updatePaths() {\n for (var id in this._layers) {\n this._layers[id]._update();\n }\n },\n _update: function _update() {\n // Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n // Subclasses are responsible of firing the 'update' event.\n var p = this.options.padding,\n size = this._map.getSize(),\n min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n this._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());\n this._center = this._map.getCenter();\n this._zoom = this._map.getZoom();\n }\n });\n /*\n * @class Canvas\n * @inherits Renderer\n * @aka L.Canvas\n *\n * Allows vector layers to be displayed with [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](http://caniuse.com/#search=canvas), Canvas is not\n * available in all web browsers, notably IE8, and overlapping geometries might\n * not display properly in some edge cases.\n *\n * @example\n *\n * Use Canvas by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.canvas()\n * });\n * ```\n *\n * Use a Canvas renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.canvas({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\n var Canvas = Renderer.extend({\n getEvents: function getEvents() {\n var events = Renderer.prototype.getEvents.call(this);\n events.viewprereset = this._onViewPreReset;\n return events;\n },\n _onViewPreReset: function _onViewPreReset() {\n // Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once\n this._postponeUpdatePaths = true;\n },\n onAdd: function onAdd() {\n Renderer.prototype.onAdd.call(this); // Redraw vectors since canvas is cleared upon removal,\n // in case of removing the renderer itself from the map.\n\n this._draw();\n },\n _initContainer: function _initContainer() {\n var container = this._container = document.createElement('canvas');\n on(container, 'mousemove', this._onMouseMove, this);\n on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);\n on(container, 'mouseout', this._handleMouseOut, this);\n this._ctx = container.getContext('2d');\n },\n _destroyContainer: function _destroyContainer() {\n cancelAnimFrame(this._redrawRequest);\n delete this._ctx;\n\n _remove(this._container);\n\n off(this._container);\n delete this._container;\n },\n _updatePaths: function _updatePaths() {\n if (this._postponeUpdatePaths) {\n return;\n }\n\n var layer;\n this._redrawBounds = null;\n\n for (var id in this._layers) {\n layer = this._layers[id];\n\n layer._update();\n }\n\n this._redraw();\n },\n _update: function _update() {\n if (this._map._animatingZoom && this._bounds) {\n return;\n }\n\n Renderer.prototype._update.call(this);\n\n var b = this._bounds,\n container = this._container,\n size = b.getSize(),\n m = retina ? 2 : 1;\n setPosition(container, b.min); // set canvas size (also clearing it); use double size on retina\n\n container.width = m * size.x;\n container.height = m * size.y;\n container.style.width = size.x + 'px';\n container.style.height = size.y + 'px';\n\n if (retina) {\n this._ctx.scale(2, 2);\n } // translate so we use the same path coordinates after canvas element moves\n\n\n this._ctx.translate(-b.min.x, -b.min.y); // Tell paths to redraw themselves\n\n\n this.fire('update');\n },\n _reset: function _reset() {\n Renderer.prototype._reset.call(this);\n\n if (this._postponeUpdatePaths) {\n this._postponeUpdatePaths = false;\n\n this._updatePaths();\n }\n },\n _initPath: function _initPath(layer) {\n this._updateDashArray(layer);\n\n this._layers[stamp(layer)] = layer;\n var order = layer._order = {\n layer: layer,\n prev: this._drawLast,\n next: null\n };\n\n if (this._drawLast) {\n this._drawLast.next = order;\n }\n\n this._drawLast = order;\n this._drawFirst = this._drawFirst || this._drawLast;\n },\n _addPath: function _addPath(layer) {\n this._requestRedraw(layer);\n },\n _removePath: function _removePath(layer) {\n var order = layer._order;\n var next = order.next;\n var prev = order.prev;\n\n if (next) {\n next.prev = prev;\n } else {\n this._drawLast = prev;\n }\n\n if (prev) {\n prev.next = next;\n } else {\n this._drawFirst = next;\n }\n\n delete layer._order;\n delete this._layers[stamp(layer)];\n\n this._requestRedraw(layer);\n },\n _updatePath: function _updatePath(layer) {\n // Redraw the union of the layer's old pixel\n // bounds and the new pixel bounds.\n this._extendRedrawBounds(layer);\n\n layer._project();\n\n layer._update(); // The redraw will extend the redraw bounds\n // with the new pixel bounds.\n\n\n this._requestRedraw(layer);\n },\n _updateStyle: function _updateStyle(layer) {\n this._updateDashArray(layer);\n\n this._requestRedraw(layer);\n },\n _updateDashArray: function _updateDashArray(layer) {\n if (typeof layer.options.dashArray === 'string') {\n var parts = layer.options.dashArray.split(/[, ]+/),\n dashArray = [],\n dashValue,\n i;\n\n for (i = 0; i < parts.length; i++) {\n dashValue = Number(parts[i]); // Ignore dash array containing invalid lengths\n\n if (isNaN(dashValue)) {\n return;\n }\n\n dashArray.push(dashValue);\n }\n\n layer.options._dashArray = dashArray;\n } else {\n layer.options._dashArray = layer.options.dashArray;\n }\n },\n _requestRedraw: function _requestRedraw(layer) {\n if (!this._map) {\n return;\n }\n\n this._extendRedrawBounds(layer);\n\n this._redrawRequest = this._redrawRequest || requestAnimFrame(this._redraw, this);\n },\n _extendRedrawBounds: function _extendRedrawBounds(layer) {\n if (layer._pxBounds) {\n var padding = (layer.options.weight || 0) + 1;\n this._redrawBounds = this._redrawBounds || new Bounds();\n\n this._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));\n\n this._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));\n }\n },\n _redraw: function _redraw() {\n this._redrawRequest = null;\n\n if (this._redrawBounds) {\n this._redrawBounds.min._floor();\n\n this._redrawBounds.max._ceil();\n }\n\n this._clear(); // clear layers in redraw bounds\n\n\n this._draw(); // draw layers\n\n\n this._redrawBounds = null;\n },\n _clear: function _clear() {\n var bounds = this._redrawBounds;\n\n if (bounds) {\n var size = bounds.getSize();\n\n this._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);\n } else {\n this._ctx.save();\n\n this._ctx.setTransform(1, 0, 0, 1, 0, 0);\n\n this._ctx.clearRect(0, 0, this._container.width, this._container.height);\n\n this._ctx.restore();\n }\n },\n _draw: function _draw() {\n var layer,\n bounds = this._redrawBounds;\n\n this._ctx.save();\n\n if (bounds) {\n var size = bounds.getSize();\n\n this._ctx.beginPath();\n\n this._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);\n\n this._ctx.clip();\n }\n\n this._drawing = true;\n\n for (var order = this._drawFirst; order; order = order.next) {\n layer = order.layer;\n\n if (!bounds || layer._pxBounds && layer._pxBounds.intersects(bounds)) {\n layer._updatePath();\n }\n }\n\n this._drawing = false;\n\n this._ctx.restore(); // Restore state before clipping.\n\n },\n _updatePoly: function _updatePoly(layer, closed) {\n if (!this._drawing) {\n return;\n }\n\n var i,\n j,\n len2,\n p,\n parts = layer._parts,\n len = parts.length,\n ctx = this._ctx;\n\n if (!len) {\n return;\n }\n\n ctx.beginPath();\n\n for (i = 0; i < len; i++) {\n for (j = 0, len2 = parts[i].length; j < len2; j++) {\n p = parts[i][j];\n ctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);\n }\n\n if (closed) {\n ctx.closePath();\n }\n }\n\n this._fillStroke(ctx, layer); // TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature\n\n },\n _updateCircle: function _updateCircle(layer) {\n if (!this._drawing || layer._empty()) {\n return;\n }\n\n var p = layer._point,\n ctx = this._ctx,\n r = Math.max(Math.round(layer._radius), 1),\n s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;\n\n if (s !== 1) {\n ctx.save();\n ctx.scale(1, s);\n }\n\n ctx.beginPath();\n ctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);\n\n if (s !== 1) {\n ctx.restore();\n }\n\n this._fillStroke(ctx, layer);\n },\n _fillStroke: function _fillStroke(ctx, layer) {\n var options = layer.options;\n\n if (options.fill) {\n ctx.globalAlpha = options.fillOpacity;\n ctx.fillStyle = options.fillColor || options.color;\n ctx.fill(options.fillRule || 'evenodd');\n }\n\n if (options.stroke && options.weight !== 0) {\n if (ctx.setLineDash) {\n ctx.setLineDash(layer.options && layer.options._dashArray || []);\n }\n\n ctx.globalAlpha = options.opacity;\n ctx.lineWidth = options.weight;\n ctx.strokeStyle = options.color;\n ctx.lineCap = options.lineCap;\n ctx.lineJoin = options.lineJoin;\n ctx.stroke();\n }\n },\n // Canvas obviously doesn't have mouse events for individual drawn objects,\n // so we emulate that by calculating what's under the mouse on mousemove/click manually\n _onClick: function _onClick(e) {\n var point = this._map.mouseEventToLayerPoint(e),\n layer,\n clickedLayer;\n\n for (var order = this._drawFirst; order; order = order.next) {\n layer = order.layer;\n\n if (layer.options.interactive && layer._containsPoint(point)) {\n if (!(e.type === 'click' || e.type !== 'preclick') || !this._map._draggableMoved(layer)) {\n clickedLayer = layer;\n }\n }\n }\n\n if (clickedLayer) {\n fakeStop(e);\n\n this._fireEvent([clickedLayer], e);\n }\n },\n _onMouseMove: function _onMouseMove(e) {\n if (!this._map || this._map.dragging.moving() || this._map._animatingZoom) {\n return;\n }\n\n var point = this._map.mouseEventToLayerPoint(e);\n\n this._handleMouseHover(e, point);\n },\n _handleMouseOut: function _handleMouseOut(e) {\n var layer = this._hoveredLayer;\n\n if (layer) {\n // if we're leaving the layer, fire mouseout\n removeClass(this._container, 'leaflet-interactive');\n\n this._fireEvent([layer], e, 'mouseout');\n\n this._hoveredLayer = null;\n this._mouseHoverThrottled = false;\n }\n },\n _handleMouseHover: function _handleMouseHover(e, point) {\n if (this._mouseHoverThrottled) {\n return;\n }\n\n var layer, candidateHoveredLayer;\n\n for (var order = this._drawFirst; order; order = order.next) {\n layer = order.layer;\n\n if (layer.options.interactive && layer._containsPoint(point)) {\n candidateHoveredLayer = layer;\n }\n }\n\n if (candidateHoveredLayer !== this._hoveredLayer) {\n this._handleMouseOut(e);\n\n if (candidateHoveredLayer) {\n addClass(this._container, 'leaflet-interactive'); // change cursor\n\n this._fireEvent([candidateHoveredLayer], e, 'mouseover');\n\n this._hoveredLayer = candidateHoveredLayer;\n }\n }\n\n if (this._hoveredLayer) {\n this._fireEvent([this._hoveredLayer], e);\n }\n\n this._mouseHoverThrottled = true;\n setTimeout(bind(function () {\n this._mouseHoverThrottled = false;\n }, this), 32);\n },\n _fireEvent: function _fireEvent(layers, e, type) {\n this._map._fireDOMEvent(e, type || e.type, layers);\n },\n _bringToFront: function _bringToFront(layer) {\n var order = layer._order;\n\n if (!order) {\n return;\n }\n\n var next = order.next;\n var prev = order.prev;\n\n if (next) {\n next.prev = prev;\n } else {\n // Already last\n return;\n }\n\n if (prev) {\n prev.next = next;\n } else if (next) {\n // Update first entry unless this is the\n // single entry\n this._drawFirst = next;\n }\n\n order.prev = this._drawLast;\n this._drawLast.next = order;\n order.next = null;\n this._drawLast = order;\n\n this._requestRedraw(layer);\n },\n _bringToBack: function _bringToBack(layer) {\n var order = layer._order;\n\n if (!order) {\n return;\n }\n\n var next = order.next;\n var prev = order.prev;\n\n if (prev) {\n prev.next = next;\n } else {\n // Already first\n return;\n }\n\n if (next) {\n next.prev = prev;\n } else if (prev) {\n // Update last entry unless this is the\n // single entry\n this._drawLast = prev;\n }\n\n order.prev = null;\n order.next = this._drawFirst;\n this._drawFirst.prev = order;\n this._drawFirst = order;\n\n this._requestRedraw(layer);\n }\n }); // @factory L.canvas(options?: Renderer options)\n // Creates a Canvas renderer with the given options.\n\n function canvas$1(options) {\n return canvas ? new Canvas(options) : null;\n }\n /*\n * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!\n */\n\n\n var vmlCreate = function () {\n try {\n document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');\n return function (name) {\n return document.createElement('<lvml:' + name + ' class=\"lvml\">');\n };\n } catch (e) {\n return function (name) {\n return document.createElement('<' + name + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"lvml\">');\n };\n }\n }();\n /*\n * @class SVG\n *\n *\n * VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility\n * with old versions of Internet Explorer.\n */\n // mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences\n\n\n var vmlMixin = {\n _initContainer: function _initContainer() {\n this._container = create$1('div', 'leaflet-vml-container');\n },\n _update: function _update() {\n if (this._map._animatingZoom) {\n return;\n }\n\n Renderer.prototype._update.call(this);\n\n this.fire('update');\n },\n _initPath: function _initPath(layer) {\n var container = layer._container = vmlCreate('shape');\n addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));\n container.coordsize = '1 1';\n layer._path = vmlCreate('path');\n container.appendChild(layer._path);\n\n this._updateStyle(layer);\n\n this._layers[stamp(layer)] = layer;\n },\n _addPath: function _addPath(layer) {\n var container = layer._container;\n\n this._container.appendChild(container);\n\n if (layer.options.interactive) {\n layer.addInteractiveTarget(container);\n }\n },\n _removePath: function _removePath(layer) {\n var container = layer._container;\n\n _remove(container);\n\n layer.removeInteractiveTarget(container);\n delete this._layers[stamp(layer)];\n },\n _updateStyle: function _updateStyle(layer) {\n var stroke = layer._stroke,\n fill = layer._fill,\n options = layer.options,\n container = layer._container;\n container.stroked = !!options.stroke;\n container.filled = !!options.fill;\n\n if (options.stroke) {\n if (!stroke) {\n stroke = layer._stroke = vmlCreate('stroke');\n }\n\n container.appendChild(stroke);\n stroke.weight = options.weight + 'px';\n stroke.color = options.color;\n stroke.opacity = options.opacity;\n\n if (options.dashArray) {\n stroke.dashStyle = isArray(options.dashArray) ? options.dashArray.join(' ') : options.dashArray.replace(/( *, *)/g, ' ');\n } else {\n stroke.dashStyle = '';\n }\n\n stroke.endcap = options.lineCap.replace('butt', 'flat');\n stroke.joinstyle = options.lineJoin;\n } else if (stroke) {\n container.removeChild(stroke);\n layer._stroke = null;\n }\n\n if (options.fill) {\n if (!fill) {\n fill = layer._fill = vmlCreate('fill');\n }\n\n container.appendChild(fill);\n fill.color = options.fillColor || options.color;\n fill.opacity = options.fillOpacity;\n } else if (fill) {\n container.removeChild(fill);\n layer._fill = null;\n }\n },\n _updateCircle: function _updateCircle(layer) {\n var p = layer._point.round(),\n r = Math.round(layer._radius),\n r2 = Math.round(layer._radiusY || r);\n\n this._setPath(layer, layer._empty() ? 'M0 0' : 'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + 65535 * 360);\n },\n _setPath: function _setPath(layer, path) {\n layer._path.v = path;\n },\n _bringToFront: function _bringToFront(layer) {\n toFront(layer._container);\n },\n _bringToBack: function _bringToBack(layer) {\n toBack(layer._container);\n }\n };\n var create$2 = vml ? vmlCreate : svgCreate;\n /*\n * @class SVG\n * @inherits Renderer\n * @aka L.SVG\n *\n * Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](http://caniuse.com/#search=svg), SVG is not\n * available in all web browsers, notably Android 2.x and 3.x.\n *\n * Although SVG is not available on IE7 and IE8, these browsers support\n * [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)\n * (a now deprecated technology), and the SVG renderer will fall back to VML in\n * this case.\n *\n * @example\n *\n * Use SVG by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.svg()\n * });\n * ```\n *\n * Use a SVG renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.svg({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\n var SVG = Renderer.extend({\n getEvents: function getEvents() {\n var events = Renderer.prototype.getEvents.call(this);\n events.zoomstart = this._onZoomStart;\n return events;\n },\n _initContainer: function _initContainer() {\n this._container = create$2('svg'); // makes it possible to click through svg root; we'll reset it back in individual paths\n\n this._container.setAttribute('pointer-events', 'none');\n\n this._rootGroup = create$2('g');\n\n this._container.appendChild(this._rootGroup);\n },\n _destroyContainer: function _destroyContainer() {\n _remove(this._container);\n\n off(this._container);\n delete this._container;\n delete this._rootGroup;\n delete this._svgSize;\n },\n _onZoomStart: function _onZoomStart() {\n // Drag-then-pinch interactions might mess up the center and zoom.\n // In this case, the easiest way to prevent this is re-do the renderer\n // bounds and padding when the zooming starts.\n this._update();\n },\n _update: function _update() {\n if (this._map._animatingZoom && this._bounds) {\n return;\n }\n\n Renderer.prototype._update.call(this);\n\n var b = this._bounds,\n size = b.getSize(),\n container = this._container; // set size of svg-container if changed\n\n if (!this._svgSize || !this._svgSize.equals(size)) {\n this._svgSize = size;\n container.setAttribute('width', size.x);\n container.setAttribute('height', size.y);\n } // movement: update container viewBox so that we don't have to change coordinates of individual layers\n\n\n setPosition(container, b.min);\n container.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));\n this.fire('update');\n },\n // methods below are called by vector layers implementations\n _initPath: function _initPath(layer) {\n var path = layer._path = create$2('path'); // @namespace Path\n // @option className: String = null\n // Custom class name set on an element. Only for SVG renderer.\n\n if (layer.options.className) {\n addClass(path, layer.options.className);\n }\n\n if (layer.options.interactive) {\n addClass(path, 'leaflet-interactive');\n }\n\n this._updateStyle(layer);\n\n this._layers[stamp(layer)] = layer;\n },\n _addPath: function _addPath(layer) {\n if (!this._rootGroup) {\n this._initContainer();\n }\n\n this._rootGroup.appendChild(layer._path);\n\n layer.addInteractiveTarget(layer._path);\n },\n _removePath: function _removePath(layer) {\n _remove(layer._path);\n\n layer.removeInteractiveTarget(layer._path);\n delete this._layers[stamp(layer)];\n },\n _updatePath: function _updatePath(layer) {\n layer._project();\n\n layer._update();\n },\n _updateStyle: function _updateStyle(layer) {\n var path = layer._path,\n options = layer.options;\n\n if (!path) {\n return;\n }\n\n if (options.stroke) {\n path.setAttribute('stroke', options.color);\n path.setAttribute('stroke-opacity', options.opacity);\n path.setAttribute('stroke-width', options.weight);\n path.setAttribute('stroke-linecap', options.lineCap);\n path.setAttribute('stroke-linejoin', options.lineJoin);\n\n if (options.dashArray) {\n path.setAttribute('stroke-dasharray', options.dashArray);\n } else {\n path.removeAttribute('stroke-dasharray');\n }\n\n if (options.dashOffset) {\n path.setAttribute('stroke-dashoffset', options.dashOffset);\n } else {\n path.removeAttribute('stroke-dashoffset');\n }\n } else {\n path.setAttribute('stroke', 'none');\n }\n\n if (options.fill) {\n path.setAttribute('fill', options.fillColor || options.color);\n path.setAttribute('fill-opacity', options.fillOpacity);\n path.setAttribute('fill-rule', options.fillRule || 'evenodd');\n } else {\n path.setAttribute('fill', 'none');\n }\n },\n _updatePoly: function _updatePoly(layer, closed) {\n this._setPath(layer, pointsToPath(layer._parts, closed));\n },\n _updateCircle: function _updateCircle(layer) {\n var p = layer._point,\n r = Math.max(Math.round(layer._radius), 1),\n r2 = Math.max(Math.round(layer._radiusY), 1) || r,\n arc = 'a' + r + ',' + r2 + ' 0 1,0 '; // drawing a circle with two half-arcs\n\n var d = layer._empty() ? 'M0 0' : 'M' + (p.x - r) + ',' + p.y + arc + r * 2 + ',0 ' + arc + -r * 2 + ',0 ';\n\n this._setPath(layer, d);\n },\n _setPath: function _setPath(layer, path) {\n layer._path.setAttribute('d', path);\n },\n // SVG does not have the concept of zIndex so we resort to changing the DOM order of elements\n _bringToFront: function _bringToFront(layer) {\n toFront(layer._path);\n },\n _bringToBack: function _bringToBack(layer) {\n toBack(layer._path);\n }\n });\n\n if (vml) {\n SVG.include(vmlMixin);\n } // @namespace SVG\n // @factory L.svg(options?: Renderer options)\n // Creates a SVG renderer with the given options.\n\n\n function svg$1(options) {\n return svg || vml ? new SVG(options) : null;\n }\n\n Map.include({\n // @namespace Map; @method getRenderer(layer: Path): Renderer\n // Returns the instance of `Renderer` that should be used to render the given\n // `Path`. It will ensure that the `renderer` options of the map and paths\n // are respected, and that the renderers do exist on the map.\n getRenderer: function getRenderer(layer) {\n // @namespace Path; @option renderer: Renderer\n // Use this specific instance of `Renderer` for this path. Takes\n // precedence over the map's [default renderer](#map-renderer).\n var renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;\n\n if (!renderer) {\n renderer = this._renderer = this._createRenderer();\n }\n\n if (!this.hasLayer(renderer)) {\n this.addLayer(renderer);\n }\n\n return renderer;\n },\n _getPaneRenderer: function _getPaneRenderer(name) {\n if (name === 'overlayPane' || name === undefined) {\n return false;\n }\n\n var renderer = this._paneRenderers[name];\n\n if (renderer === undefined) {\n renderer = this._createRenderer({\n pane: name\n });\n this._paneRenderers[name] = renderer;\n }\n\n return renderer;\n },\n _createRenderer: function _createRenderer(options) {\n // @namespace Map; @option preferCanvas: Boolean = false\n // Whether `Path`s should be rendered on a `Canvas` renderer.\n // By default, all `Path`s are rendered in a `SVG` renderer.\n return this.options.preferCanvas && canvas$1(options) || svg$1(options);\n }\n });\n /*\n * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.\n */\n\n /*\n * @class Rectangle\n * @aka L.Rectangle\n * @inherits Polygon\n *\n * A class for drawing rectangle overlays on a map. Extends `Polygon`.\n *\n * @example\n *\n * ```js\n * // define rectangle geographical bounds\n * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];\n *\n * // create an orange rectangle\n * L.rectangle(bounds, {color: \"#ff7800\", weight: 1}).addTo(map);\n *\n * // zoom the map to the rectangle bounds\n * map.fitBounds(bounds);\n * ```\n *\n */\n\n var Rectangle = Polygon.extend({\n initialize: function initialize(latLngBounds, options) {\n Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);\n },\n // @method setBounds(latLngBounds: LatLngBounds): this\n // Redraws the rectangle with the passed bounds.\n setBounds: function setBounds(latLngBounds) {\n return this.setLatLngs(this._boundsToLatLngs(latLngBounds));\n },\n _boundsToLatLngs: function _boundsToLatLngs(latLngBounds) {\n latLngBounds = toLatLngBounds(latLngBounds);\n return [latLngBounds.getSouthWest(), latLngBounds.getNorthWest(), latLngBounds.getNorthEast(), latLngBounds.getSouthEast()];\n }\n }); // @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)\n\n function rectangle(latLngBounds, options) {\n return new Rectangle(latLngBounds, options);\n }\n\n SVG.create = create$2;\n SVG.pointsToPath = pointsToPath;\n GeoJSON.geometryToLayer = geometryToLayer;\n GeoJSON.coordsToLatLng = coordsToLatLng;\n GeoJSON.coordsToLatLngs = coordsToLatLngs;\n GeoJSON.latLngToCoords = latLngToCoords;\n GeoJSON.latLngsToCoords = latLngsToCoords;\n GeoJSON.getFeature = getFeature;\n GeoJSON.asFeature = asFeature;\n /*\n * L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map\n * (zoom to a selected bounding box), enabled by default.\n */\n // @namespace Map\n // @section Interaction Options\n\n Map.mergeOptions({\n // @option boxZoom: Boolean = true\n // Whether the map can be zoomed to a rectangular area specified by\n // dragging the mouse while pressing the shift key.\n boxZoom: true\n });\n var BoxZoom = Handler.extend({\n initialize: function initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n addHooks: function addHooks() {\n on(this._container, 'mousedown', this._onMouseDown, this);\n },\n removeHooks: function removeHooks() {\n off(this._container, 'mousedown', this._onMouseDown, this);\n },\n moved: function moved() {\n return this._moved;\n },\n _destroy: function _destroy() {\n _remove(this._pane);\n\n delete this._pane;\n },\n _resetState: function _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n _clearDeferredResetState: function _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n _onMouseDown: function _onMouseDown(e) {\n if (!e.shiftKey || e.which !== 1 && e.button !== 1) {\n return false;\n } // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n\n\n this._clearDeferredResetState();\n\n this._resetState();\n\n disableTextSelection();\n disableImageDrag();\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n on(document, {\n contextmenu: stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n keydown: this._onKeyDown\n }, this);\n },\n _onMouseMove: function _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n this._box = create$1('div', 'leaflet-zoom-box', this._container);\n addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n var bounds = new Bounds(this._point, this._startPoint),\n size = bounds.getSize();\n setPosition(this._box, bounds.min);\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n _finish: function _finish() {\n if (this._moved) {\n _remove(this._box);\n\n removeClass(this._container, 'leaflet-crosshair');\n }\n\n enableTextSelection();\n enableImageDrag();\n off(document, {\n contextmenu: stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n keydown: this._onKeyDown\n }, this);\n },\n _onMouseUp: function _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) {\n return;\n } // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n\n\n this._clearDeferredResetState();\n\n this._resetStateTimeout = setTimeout(bind(this._resetState, this), 0);\n var bounds = new LatLngBounds(this._map.containerPointToLatLng(this._startPoint), this._map.containerPointToLatLng(this._point));\n\n this._map.fitBounds(bounds).fire('boxzoomend', {\n boxZoomBounds: bounds\n });\n },\n _onKeyDown: function _onKeyDown(e) {\n if (e.keyCode === 27) {\n this._finish();\n }\n }\n }); // @section Handlers\n // @property boxZoom: Handler\n // Box (shift-drag with mouse) zoom handler.\n\n Map.addInitHook('addHandler', 'boxZoom', BoxZoom);\n /*\n * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.\n */\n // @namespace Map\n // @section Interaction Options\n\n Map.mergeOptions({\n // @option doubleClickZoom: Boolean|String = true\n // Whether the map can be zoomed in by double clicking on it and\n // zoomed out by double clicking while holding shift. If passed\n // `'center'`, double-click zoom will zoom to the center of the\n // view regardless of where the mouse was.\n doubleClickZoom: true\n });\n var DoubleClickZoom = Handler.extend({\n addHooks: function addHooks() {\n this._map.on('dblclick', this._onDoubleClick, this);\n },\n removeHooks: function removeHooks() {\n this._map.off('dblclick', this._onDoubleClick, this);\n },\n _onDoubleClick: function _onDoubleClick(e) {\n var map = this._map,\n oldZoom = map.getZoom(),\n delta = map.options.zoomDelta,\n zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n }\n }); // @section Handlers\n //\n // Map properties include interaction handlers that allow you to control\n // interaction behavior in runtime, enabling or disabling certain features such\n // as dragging or touch zoom (see `Handler` methods). For example:\n //\n // ```js\n // map.doubleClickZoom.disable();\n // ```\n //\n // @property doubleClickZoom: Handler\n // Double click zoom handler.\n\n Map.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);\n /*\n * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.\n */\n // @namespace Map\n // @section Interaction Options\n\n Map.mergeOptions({\n // @option dragging: Boolean = true\n // Whether the map be draggable with mouse/touch or not.\n dragging: true,\n // @section Panning Inertia Options\n // @option inertia: Boolean = *\n // If enabled, panning of the map will have an inertia effect where\n // the map builds momentum while dragging and continues moving in\n // the same direction for some time. Feels especially nice on touch\n // devices. Enabled by default unless running on old Android devices.\n inertia: !android23,\n // @option inertiaDeceleration: Number = 3000\n // The rate with which the inertial movement slows down, in pixels/second².\n inertiaDeceleration: 3400,\n // px/s^2\n // @option inertiaMaxSpeed: Number = Infinity\n // Max speed of the inertial movement, in pixels/second.\n inertiaMaxSpeed: Infinity,\n // px/s\n // @option easeLinearity: Number = 0.2\n easeLinearity: 0.2,\n // TODO refactor, move to CRS\n // @option worldCopyJump: Boolean = false\n // With this option enabled, the map tracks when you pan to another \"copy\"\n // of the world and seamlessly jumps to the original one so that all overlays\n // like markers and vector layers are still visible.\n worldCopyJump: false,\n // @option maxBoundsViscosity: Number = 0.0\n // If `maxBounds` is set, this option will control how solid the bounds\n // are when dragging the map around. The default value of `0.0` allows the\n // user to drag outside the bounds at normal speed, higher values will\n // slow down map dragging outside bounds, and `1.0` makes the bounds fully\n // solid, preventing the user from dragging outside the bounds.\n maxBoundsViscosity: 0.0\n });\n var Drag = Handler.extend({\n addHooks: function addHooks() {\n if (!this._draggable) {\n var map = this._map;\n this._draggable = new Draggable(map._mapPane, map._container);\n\n this._draggable.on({\n dragstart: this._onDragStart,\n drag: this._onDrag,\n dragend: this._onDragEnd\n }, this);\n\n this._draggable.on('predrag', this._onPreDragLimit, this);\n\n if (map.options.worldCopyJump) {\n this._draggable.on('predrag', this._onPreDragWrap, this);\n\n map.on('zoomend', this._onZoomEnd, this);\n map.whenReady(this._onZoomEnd, this);\n }\n }\n\n addClass(this._map._container, 'leaflet-grab leaflet-touch-drag');\n\n this._draggable.enable();\n\n this._positions = [];\n this._times = [];\n },\n removeHooks: function removeHooks() {\n removeClass(this._map._container, 'leaflet-grab');\n removeClass(this._map._container, 'leaflet-touch-drag');\n\n this._draggable.disable();\n },\n moved: function moved() {\n return this._draggable && this._draggable._moved;\n },\n moving: function moving() {\n return this._draggable && this._draggable._moving;\n },\n _onDragStart: function _onDragStart() {\n var map = this._map;\n\n map._stop();\n\n if (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {\n var bounds = toLatLngBounds(this._map.options.maxBounds);\n this._offsetLimit = toBounds(this._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1), this._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1).add(this._map.getSize()));\n this._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));\n } else {\n this._offsetLimit = null;\n }\n\n map.fire('movestart').fire('dragstart');\n\n if (map.options.inertia) {\n this._positions = [];\n this._times = [];\n }\n },\n _onDrag: function _onDrag(e) {\n if (this._map.options.inertia) {\n var time = this._lastTime = +new Date(),\n pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;\n\n this._positions.push(pos);\n\n this._times.push(time);\n\n this._prunePositions(time);\n }\n\n this._map.fire('move', e).fire('drag', e);\n },\n _prunePositions: function _prunePositions(time) {\n while (this._positions.length > 1 && time - this._times[0] > 50) {\n this._positions.shift();\n\n this._times.shift();\n }\n },\n _onZoomEnd: function _onZoomEnd() {\n var pxCenter = this._map.getSize().divideBy(2),\n pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);\n\n this._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;\n this._worldWidth = this._map.getPixelWorldBounds().getSize().x;\n },\n _viscousLimit: function _viscousLimit(value, threshold) {\n return value - (value - threshold) * this._viscosity;\n },\n _onPreDragLimit: function _onPreDragLimit() {\n if (!this._viscosity || !this._offsetLimit) {\n return;\n }\n\n var offset = this._draggable._newPos.subtract(this._draggable._startPos);\n\n var limit = this._offsetLimit;\n\n if (offset.x < limit.min.x) {\n offset.x = this._viscousLimit(offset.x, limit.min.x);\n }\n\n if (offset.y < limit.min.y) {\n offset.y = this._viscousLimit(offset.y, limit.min.y);\n }\n\n if (offset.x > limit.max.x) {\n offset.x = this._viscousLimit(offset.x, limit.max.x);\n }\n\n if (offset.y > limit.max.y) {\n offset.y = this._viscousLimit(offset.y, limit.max.y);\n }\n\n this._draggable._newPos = this._draggable._startPos.add(offset);\n },\n _onPreDragWrap: function _onPreDragWrap() {\n // TODO refactor to be able to adjust map pane position after zoom\n var worldWidth = this._worldWidth,\n halfWidth = Math.round(worldWidth / 2),\n dx = this._initialWorldOffset,\n x = this._draggable._newPos.x,\n newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,\n newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,\n newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;\n this._draggable._absPos = this._draggable._newPos.clone();\n this._draggable._newPos.x = newX;\n },\n _onDragEnd: function _onDragEnd(e) {\n var map = this._map,\n options = map.options,\n noInertia = !options.inertia || this._times.length < 2;\n map.fire('dragend', e);\n\n if (noInertia) {\n map.fire('moveend');\n } else {\n this._prunePositions(+new Date());\n\n var direction = this._lastPos.subtract(this._positions[0]),\n duration = (this._lastTime - this._times[0]) / 1000,\n ease = options.easeLinearity,\n speedVector = direction.multiplyBy(ease / duration),\n speed = speedVector.distanceTo([0, 0]),\n limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),\n limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),\n decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),\n offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();\n\n if (!offset.x && !offset.y) {\n map.fire('moveend');\n } else {\n offset = map._limitOffset(offset, map.options.maxBounds);\n requestAnimFrame(function () {\n map.panBy(offset, {\n duration: decelerationDuration,\n easeLinearity: ease,\n noMoveStart: true,\n animate: true\n });\n });\n }\n }\n }\n }); // @section Handlers\n // @property dragging: Handler\n // Map dragging handler (by both mouse and touch).\n\n Map.addInitHook('addHandler', 'dragging', Drag);\n /*\n * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.\n */\n // @namespace Map\n // @section Keyboard Navigation Options\n\n Map.mergeOptions({\n // @option keyboard: Boolean = true\n // Makes the map focusable and allows users to navigate the map with keyboard\n // arrows and `+`/`-` keys.\n keyboard: true,\n // @option keyboardPanDelta: Number = 80\n // Amount of pixels to pan when pressing an arrow key.\n keyboardPanDelta: 80\n });\n var Keyboard = Handler.extend({\n keyCodes: {\n left: [37],\n right: [39],\n down: [40],\n up: [38],\n zoomIn: [187, 107, 61, 171],\n zoomOut: [189, 109, 54, 173]\n },\n initialize: function initialize(map) {\n this._map = map;\n\n this._setPanDelta(map.options.keyboardPanDelta);\n\n this._setZoomDelta(map.options.zoomDelta);\n },\n addHooks: function addHooks() {\n var container = this._map._container; // make the container focusable by tabbing\n\n if (container.tabIndex <= 0) {\n container.tabIndex = '0';\n }\n\n on(container, {\n focus: this._onFocus,\n blur: this._onBlur,\n mousedown: this._onMouseDown\n }, this);\n\n this._map.on({\n focus: this._addHooks,\n blur: this._removeHooks\n }, this);\n },\n removeHooks: function removeHooks() {\n this._removeHooks();\n\n off(this._map._container, {\n focus: this._onFocus,\n blur: this._onBlur,\n mousedown: this._onMouseDown\n }, this);\n\n this._map.off({\n focus: this._addHooks,\n blur: this._removeHooks\n }, this);\n },\n _onMouseDown: function _onMouseDown() {\n if (this._focused) {\n return;\n }\n\n var body = document.body,\n docEl = document.documentElement,\n top = body.scrollTop || docEl.scrollTop,\n left = body.scrollLeft || docEl.scrollLeft;\n\n this._map._container.focus();\n\n window.scrollTo(left, top);\n },\n _onFocus: function _onFocus() {\n this._focused = true;\n\n this._map.fire('focus');\n },\n _onBlur: function _onBlur() {\n this._focused = false;\n\n this._map.fire('blur');\n },\n _setPanDelta: function _setPanDelta(panDelta) {\n var keys = this._panKeys = {},\n codes = this.keyCodes,\n i,\n len;\n\n for (i = 0, len = codes.left.length; i < len; i++) {\n keys[codes.left[i]] = [-1 * panDelta, 0];\n }\n\n for (i = 0, len = codes.right.length; i < len; i++) {\n keys[codes.right[i]] = [panDelta, 0];\n }\n\n for (i = 0, len = codes.down.length; i < len; i++) {\n keys[codes.down[i]] = [0, panDelta];\n }\n\n for (i = 0, len = codes.up.length; i < len; i++) {\n keys[codes.up[i]] = [0, -1 * panDelta];\n }\n },\n _setZoomDelta: function _setZoomDelta(zoomDelta) {\n var keys = this._zoomKeys = {},\n codes = this.keyCodes,\n i,\n len;\n\n for (i = 0, len = codes.zoomIn.length; i < len; i++) {\n keys[codes.zoomIn[i]] = zoomDelta;\n }\n\n for (i = 0, len = codes.zoomOut.length; i < len; i++) {\n keys[codes.zoomOut[i]] = -zoomDelta;\n }\n },\n _addHooks: function _addHooks() {\n on(document, 'keydown', this._onKeyDown, this);\n },\n _removeHooks: function _removeHooks() {\n off(document, 'keydown', this._onKeyDown, this);\n },\n _onKeyDown: function _onKeyDown(e) {\n if (e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n\n var key = e.keyCode,\n map = this._map,\n offset;\n\n if (key in this._panKeys) {\n if (!map._panAnim || !map._panAnim._inProgress) {\n offset = this._panKeys[key];\n\n if (e.shiftKey) {\n offset = toPoint(offset).multiplyBy(3);\n }\n\n map.panBy(offset);\n\n if (map.options.maxBounds) {\n map.panInsideBounds(map.options.maxBounds);\n }\n }\n } else if (key in this._zoomKeys) {\n map.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);\n } else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {\n map.closePopup();\n } else {\n return;\n }\n\n stop(e);\n }\n }); // @section Handlers\n // @section Handlers\n // @property keyboard: Handler\n // Keyboard navigation handler.\n\n Map.addInitHook('addHandler', 'keyboard', Keyboard);\n /*\n * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.\n */\n // @namespace Map\n // @section Interaction Options\n\n Map.mergeOptions({\n // @section Mouse wheel options\n // @option scrollWheelZoom: Boolean|String = true\n // Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,\n // it will zoom to the center of the view regardless of where the mouse was.\n scrollWheelZoom: true,\n // @option wheelDebounceTime: Number = 40\n // Limits the rate at which a wheel can fire (in milliseconds). By default\n // user can't zoom via wheel more often than once per 40 ms.\n wheelDebounceTime: 40,\n // @option wheelPxPerZoomLevel: Number = 60\n // How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))\n // mean a change of one full zoom level. Smaller values will make wheel-zooming\n // faster (and vice versa).\n wheelPxPerZoomLevel: 60\n });\n var ScrollWheelZoom = Handler.extend({\n addHooks: function addHooks() {\n on(this._map._container, 'wheel', this._onWheelScroll, this);\n this._delta = 0;\n },\n removeHooks: function removeHooks() {\n off(this._map._container, 'wheel', this._onWheelScroll, this);\n },\n _onWheelScroll: function _onWheelScroll(e) {\n var delta = getWheelDelta(e);\n var debounce = this._map.options.wheelDebounceTime;\n this._delta += delta;\n this._lastMousePos = this._map.mouseEventToContainerPoint(e);\n\n if (!this._startTime) {\n this._startTime = +new Date();\n }\n\n var left = Math.max(debounce - (+new Date() - this._startTime), 0);\n clearTimeout(this._timer);\n this._timer = setTimeout(bind(this._performZoom, this), left);\n stop(e);\n },\n _performZoom: function _performZoom() {\n var map = this._map,\n zoom = map.getZoom(),\n snap = this._map.options.zoomSnap || 0;\n\n map._stop(); // stop panning and fly animations if any\n // map the delta with a sigmoid function to -4..4 range leaning on -1..1\n\n\n var d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),\n d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,\n d4 = snap ? Math.ceil(d3 / snap) * snap : d3,\n delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;\n this._delta = 0;\n this._startTime = null;\n\n if (!delta) {\n return;\n }\n\n if (map.options.scrollWheelZoom === 'center') {\n map.setZoom(zoom + delta);\n } else {\n map.setZoomAround(this._lastMousePos, zoom + delta);\n }\n }\n }); // @section Handlers\n // @property scrollWheelZoom: Handler\n // Scroll wheel zoom handler.\n\n Map.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);\n /*\n * L.Map.Tap is used to enable mobile hacks like quick taps and long hold.\n */\n // @namespace Map\n // @section Interaction Options\n\n Map.mergeOptions({\n // @section Touch interaction options\n // @option tap: Boolean = true\n // Enables mobile hacks for supporting instant taps (fixing 200ms click\n // delay on iOS/Android) and touch holds (fired as `contextmenu` events).\n tap: true,\n // @option tapTolerance: Number = 15\n // The max number of pixels a user can shift his finger during touch\n // for it to be considered a valid tap.\n tapTolerance: 15\n });\n var Tap = Handler.extend({\n addHooks: function addHooks() {\n on(this._map._container, 'touchstart', this._onDown, this);\n },\n removeHooks: function removeHooks() {\n off(this._map._container, 'touchstart', this._onDown, this);\n },\n _onDown: function _onDown(e) {\n if (!e.touches) {\n return;\n }\n\n preventDefault(e);\n this._fireClick = true; // don't simulate click or track longpress if more than 1 touch\n\n if (e.touches.length > 1) {\n this._fireClick = false;\n clearTimeout(this._holdTimeout);\n return;\n }\n\n var first = e.touches[0],\n el = first.target;\n this._startPos = this._newPos = new Point(first.clientX, first.clientY); // if touching a link, highlight it\n\n if (el.tagName && el.tagName.toLowerCase() === 'a') {\n addClass(el, 'leaflet-active');\n } // simulate long hold but setting a timeout\n\n\n this._holdTimeout = setTimeout(bind(function () {\n if (this._isTapValid()) {\n this._fireClick = false;\n\n this._onUp();\n\n this._simulateEvent('contextmenu', first);\n }\n }, this), 1000);\n\n this._simulateEvent('mousedown', first);\n\n on(document, {\n touchmove: this._onMove,\n touchend: this._onUp\n }, this);\n },\n _onUp: function _onUp(e) {\n clearTimeout(this._holdTimeout);\n off(document, {\n touchmove: this._onMove,\n touchend: this._onUp\n }, this);\n\n if (this._fireClick && e && e.changedTouches) {\n var first = e.changedTouches[0],\n el = first.target;\n\n if (el && el.tagName && el.tagName.toLowerCase() === 'a') {\n removeClass(el, 'leaflet-active');\n }\n\n this._simulateEvent('mouseup', first); // simulate click if the touch didn't move too much\n\n\n if (this._isTapValid()) {\n this._simulateEvent('click', first);\n }\n }\n },\n _isTapValid: function _isTapValid() {\n return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;\n },\n _onMove: function _onMove(e) {\n var first = e.touches[0];\n this._newPos = new Point(first.clientX, first.clientY);\n\n this._simulateEvent('mousemove', first);\n },\n _simulateEvent: function _simulateEvent(type, e) {\n var simulatedEvent = document.createEvent('MouseEvents');\n simulatedEvent._simulated = true;\n e.target._simulatedClick = true;\n simulatedEvent.initMouseEvent(type, true, true, window, 1, e.screenX, e.screenY, e.clientX, e.clientY, false, false, false, false, 0, null);\n e.target.dispatchEvent(simulatedEvent);\n }\n }); // @section Handlers\n // @property tap: Handler\n // Mobile touch hacks (quick tap and touch hold) handler.\n\n if (touch && (!pointer || safari)) {\n Map.addInitHook('addHandler', 'tap', Tap);\n }\n /*\n * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.\n */\n // @namespace Map\n // @section Interaction Options\n\n\n Map.mergeOptions({\n // @section Touch interaction options\n // @option touchZoom: Boolean|String = *\n // Whether the map can be zoomed by touch-dragging with two fingers. If\n // passed `'center'`, it will zoom to the center of the view regardless of\n // where the touch events (fingers) were. Enabled for touch-capable web\n // browsers except for old Androids.\n touchZoom: touch && !android23,\n // @option bounceAtZoomLimits: Boolean = true\n // Set it to false if you don't want the map to zoom beyond min/max zoom\n // and then bounce back when pinch-zooming.\n bounceAtZoomLimits: true\n });\n var TouchZoom = Handler.extend({\n addHooks: function addHooks() {\n addClass(this._map._container, 'leaflet-touch-zoom');\n on(this._map._container, 'touchstart', this._onTouchStart, this);\n },\n removeHooks: function removeHooks() {\n removeClass(this._map._container, 'leaflet-touch-zoom');\n off(this._map._container, 'touchstart', this._onTouchStart, this);\n },\n _onTouchStart: function _onTouchStart(e) {\n var map = this._map;\n\n if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) {\n return;\n }\n\n var p1 = map.mouseEventToContainerPoint(e.touches[0]),\n p2 = map.mouseEventToContainerPoint(e.touches[1]);\n this._centerPoint = map.getSize()._divideBy(2);\n this._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\n if (map.options.touchZoom !== 'center') {\n this._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n }\n\n this._startDist = p1.distanceTo(p2);\n this._startZoom = map.getZoom();\n this._moved = false;\n this._zooming = true;\n\n map._stop();\n\n on(document, 'touchmove', this._onTouchMove, this);\n on(document, 'touchend', this._onTouchEnd, this);\n preventDefault(e);\n },\n _onTouchMove: function _onTouchMove(e) {\n if (!e.touches || e.touches.length !== 2 || !this._zooming) {\n return;\n }\n\n var map = this._map,\n p1 = map.mouseEventToContainerPoint(e.touches[0]),\n p2 = map.mouseEventToContainerPoint(e.touches[1]),\n scale = p1.distanceTo(p2) / this._startDist;\n\n this._zoom = map.getScaleZoom(scale, this._startZoom);\n\n if (!map.options.bounceAtZoomLimits && (this._zoom < map.getMinZoom() && scale < 1 || this._zoom > map.getMaxZoom() && scale > 1)) {\n this._zoom = map._limitZoom(this._zoom);\n }\n\n if (map.options.touchZoom === 'center') {\n this._center = this._startLatLng;\n\n if (scale === 1) {\n return;\n }\n } else {\n // Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n var delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n\n if (scale === 1 && delta.x === 0 && delta.y === 0) {\n return;\n }\n\n this._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);\n }\n\n if (!this._moved) {\n map._moveStart(true, false);\n\n this._moved = true;\n }\n\n cancelAnimFrame(this._animRequest);\n var moveFn = bind(map._move, map, this._center, this._zoom, {\n pinch: true,\n round: false\n });\n this._animRequest = requestAnimFrame(moveFn, this, true);\n preventDefault(e);\n },\n _onTouchEnd: function _onTouchEnd() {\n if (!this._moved || !this._zooming) {\n this._zooming = false;\n return;\n }\n\n this._zooming = false;\n cancelAnimFrame(this._animRequest);\n off(document, 'touchmove', this._onTouchMove, this);\n off(document, 'touchend', this._onTouchEnd, this); // Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n\n if (this._map.options.zoomAnimation) {\n this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n } else {\n this._map._resetView(this._center, this._map._limitZoom(this._zoom));\n }\n }\n }); // @section Handlers\n // @property touchZoom: Handler\n // Touch zoom handler.\n\n Map.addInitHook('addHandler', 'touchZoom', TouchZoom);\n Map.BoxZoom = BoxZoom;\n Map.DoubleClickZoom = DoubleClickZoom;\n Map.Drag = Drag;\n Map.Keyboard = Keyboard;\n Map.ScrollWheelZoom = ScrollWheelZoom;\n Map.Tap = Tap;\n Map.TouchZoom = TouchZoom;\n exports.version = version;\n exports.Control = Control;\n exports.control = control;\n exports.Browser = Browser;\n exports.Evented = Evented;\n exports.Mixin = Mixin;\n exports.Util = Util;\n exports.Class = Class;\n exports.Handler = Handler;\n exports.extend = extend;\n exports.bind = bind;\n exports.stamp = stamp;\n exports.setOptions = setOptions;\n exports.DomEvent = DomEvent;\n exports.DomUtil = DomUtil;\n exports.PosAnimation = PosAnimation;\n exports.Draggable = Draggable;\n exports.LineUtil = LineUtil;\n exports.PolyUtil = PolyUtil;\n exports.Point = Point;\n exports.point = toPoint;\n exports.Bounds = Bounds;\n exports.bounds = toBounds;\n exports.Transformation = Transformation;\n exports.transformation = toTransformation;\n exports.Projection = index;\n exports.LatLng = LatLng;\n exports.latLng = toLatLng;\n exports.LatLngBounds = LatLngBounds;\n exports.latLngBounds = toLatLngBounds;\n exports.CRS = CRS;\n exports.GeoJSON = GeoJSON;\n exports.geoJSON = geoJSON;\n exports.geoJson = geoJson;\n exports.Layer = Layer;\n exports.LayerGroup = LayerGroup;\n exports.layerGroup = layerGroup;\n exports.FeatureGroup = FeatureGroup;\n exports.featureGroup = featureGroup;\n exports.ImageOverlay = ImageOverlay;\n exports.imageOverlay = imageOverlay;\n exports.VideoOverlay = VideoOverlay;\n exports.videoOverlay = videoOverlay;\n exports.SVGOverlay = SVGOverlay;\n exports.svgOverlay = svgOverlay;\n exports.DivOverlay = DivOverlay;\n exports.Popup = Popup;\n exports.popup = popup;\n exports.Tooltip = Tooltip;\n exports.tooltip = tooltip;\n exports.Icon = Icon;\n exports.icon = icon;\n exports.DivIcon = DivIcon;\n exports.divIcon = divIcon;\n exports.Marker = Marker;\n exports.marker = marker;\n exports.TileLayer = TileLayer;\n exports.tileLayer = tileLayer;\n exports.GridLayer = GridLayer;\n exports.gridLayer = gridLayer;\n exports.SVG = SVG;\n exports.svg = svg$1;\n exports.Renderer = Renderer;\n exports.Canvas = Canvas;\n exports.canvas = canvas$1;\n exports.Path = Path;\n exports.CircleMarker = CircleMarker;\n exports.circleMarker = circleMarker;\n exports.Circle = Circle;\n exports.circle = circle;\n exports.Polyline = Polyline;\n exports.polyline = polyline;\n exports.Polygon = Polygon;\n exports.polygon = polygon;\n exports.Rectangle = Rectangle;\n exports.rectangle = rectangle;\n exports.Map = Map;\n exports.map = createMap;\n var oldL = window.L;\n\n exports.noConflict = function () {\n window.L = oldL;\n return this;\n }; // Always export us to window global (see #2364)\n\n\n window.L = exports;\n});","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? 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 has = require('../internals/has');\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 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 O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","module.exports = false;\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport promiseFinally from './finally';\nimport allSettled from './allSettled'; // Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\n\nvar setTimeoutFunc = setTimeout;\n\nfunction isArray(x) {\n return Boolean(x && typeof x.length !== 'undefined');\n}\n\nfunction noop() {} // Polyfill for Function.prototype.bind\n\n\nfunction bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n}\n/**\n * @constructor\n * @param {Function} fn\n */\n\n\nfunction Promise(fn) {\n if (!(this instanceof Promise)) throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n /** @type {!number} */\n\n this._state = 0;\n /** @type {!boolean} */\n\n this._handled = false;\n /** @type {Promise|undefined} */\n\n this._value = undefined;\n /** @type {!Array<!Function>} */\n\n this._deferreds = [];\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n\n if (self._state === 0) {\n self._deferreds.push(deferred);\n\n return;\n }\n\n self._handled = true;\n\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n\n var ret;\n\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.');\n\n if (newValue && (_typeof(newValue) === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n\n self._deferreds = null;\n}\n/**\n * @constructor\n */\n\n\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\n\n\nfunction doResolve(fn, self) {\n var done = false;\n\n try {\n fn(function (value) {\n if (done) return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function (onFulfilled, onRejected) {\n // @ts-ignore\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = promiseFinally;\n\nPromise.all = function (arr) {\n return new Promise(function (resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.all accepts an array'));\n }\n\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (_typeof(val) === 'object' || typeof val === 'function')) {\n var then = val.then;\n\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n\n args[i] = val;\n\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.allSettled = allSettled;\n\nPromise.resolve = function (value) {\n if (value && _typeof(value) === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function (resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function (arr) {\n return new Promise(function (resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.race accepts an array'));\n }\n\n for (var i = 0, len = arr.length; i < len; i++) {\n Promise.resolve(arr[i]).then(resolve, reject);\n }\n });\n}; // Use polyfill for setImmediate for performance gains\n\n\nPromise._immediateFn = // @ts-ignore\ntypeof setImmediate === 'function' && function (fn) {\n // @ts-ignore\n setImmediate(fn);\n} || function (fn) {\n setTimeoutFunc(fn, 0);\n};\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nexport default Promise;","var 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 /* global ActiveXObject */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\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 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\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anInstance = require('../internals/an-instance');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar toOffset = require('../internals/to-offset');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar typedArrayFrom = require('../internals/typed-array-from');\nvar forEach = require('../internals/array-iteration').forEach;\nvar setSpecies = require('../internals/set-species');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar InternalStateModule = require('../internals/internal-state');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = new (aTypedArrayConstructor(C))(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\nvar addGetter = function (it, key) {\n nativeDefineProperty(it, key, { get: function () {\n return getInternalState(this)[key];\n } });\n};\n\nvar isArrayBuffer = function (it) {\n var klass;\n return it instanceof ArrayBuffer || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n return isTypedArray(target)\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n return isTypedArrayIndex(target, key = toPrimitive(key, true))\n ? createPropertyDescriptor(2, target[key])\n : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n if (isTypedArrayIndex(target, key = toPrimitive(key, true))\n && isObject(descriptor)\n && has(descriptor, 'value')\n && !has(descriptor, 'get')\n && !has(descriptor, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !descriptor.configurable\n && (!has(descriptor, 'writable') || descriptor.writable)\n && (!has(descriptor, 'enumerable') || descriptor.enumerable)\n ) {\n target[key] = descriptor.value;\n return target;\n } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n definePropertyModule.f = wrappedDefineProperty;\n addGetter(TypedArrayPrototype, 'buffer');\n addGetter(TypedArrayPrototype, 'byteOffset');\n addGetter(TypedArrayPrototype, 'byteLength');\n addGetter(TypedArrayPrototype, 'length');\n }\n\n $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n defineProperty: wrappedDefineProperty\n });\n\n module.exports = function (TYPE, wrapper, CLAMPED) {\n var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + TYPE;\n var SETTER = 'set' + TYPE;\n var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n var TypedArrayConstructor = NativeTypedArrayConstructor;\n var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n var exported = {};\n\n var getter = function (that, index) {\n var data = getInternalState(that);\n return data.view[GETTER](index * BYTES + data.byteOffset, true);\n };\n\n var setter = function (that, index, value) {\n var data = getInternalState(that);\n if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n };\n\n var addElement = function (that, index) {\n nativeDefineProperty(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME);\n var index = 0;\n var byteOffset = 0;\n var buffer, byteLength, length;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new ArrayBuffer(byteLength);\n } else if (isArrayBuffer(data)) {\n buffer = data;\n byteOffset = toOffset(offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - byteOffset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (isTypedArray(data)) {\n return fromList(TypedArrayConstructor, data);\n } else {\n return typedArrayFrom.call(TypedArrayConstructor, data);\n }\n setInternalState(that, {\n buffer: buffer,\n byteOffset: byteOffset,\n byteLength: byteLength,\n length: length,\n view: new DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME);\n return inheritIfRequired(function () {\n if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n if (isArrayBuffer(data)) return $length !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n : typedArrayOffset !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n : new NativeTypedArrayConstructor(data);\n if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n return typedArrayFrom.call(TypedArrayConstructor, data);\n }(), dummy, TypedArrayConstructor);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n if (!(key in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n }\n });\n TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n }\n\n if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n }\n\n if (TYPED_ARRAY_TAG) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n }\n\n exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n $({\n global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n }, exported);\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n }\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n }\n\n setSpecies(CONSTRUCTOR_NAME);\n };\n} else module.exports = function () { /* empty */ };\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 toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var toInteger = require('../internals/to-integer');\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 = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\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","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\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 : aFunction(S);\n};\n","var EventListener =\n/** @class */\nfunction () {\n function EventListener(eventTarget, eventName) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.unorderedBindings = new Set();\n }\n\n EventListener.prototype.connect = function () {\n this.eventTarget.addEventListener(this.eventName, this, false);\n };\n\n EventListener.prototype.disconnect = function () {\n this.eventTarget.removeEventListener(this.eventName, this, false);\n }; // Binding observer delegate\n\n /** @hidden */\n\n\n EventListener.prototype.bindingConnected = function (binding) {\n this.unorderedBindings.add(binding);\n };\n /** @hidden */\n\n\n EventListener.prototype.bindingDisconnected = function (binding) {\n this.unorderedBindings[\"delete\"](binding);\n };\n\n EventListener.prototype.handleEvent = function (event) {\n var extendedEvent = extendEvent(event);\n\n for (var _i = 0, _a = this.bindings; _i < _a.length; _i++) {\n var binding = _a[_i];\n\n if (extendedEvent.immediatePropagationStopped) {\n break;\n } else {\n binding.handleEvent(extendedEvent);\n }\n }\n };\n\n Object.defineProperty(EventListener.prototype, \"bindings\", {\n get: function get() {\n return Array.from(this.unorderedBindings).sort(function (left, right) {\n var leftIndex = left.index,\n rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n },\n enumerable: true,\n configurable: true\n });\n return EventListener;\n}();\n\nexport { EventListener };\n\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n } else {\n var stopImmediatePropagation_1 = event.stopImmediatePropagation;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation: function stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation_1.call(this);\n }\n });\n }\n}","import { EventListener } from \"./event_listener\";\n\nvar Dispatcher =\n/** @class */\nfunction () {\n function Dispatcher(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n\n Dispatcher.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach(function (eventListener) {\n return eventListener.connect();\n });\n }\n };\n\n Dispatcher.prototype.stop = function () {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach(function (eventListener) {\n return eventListener.disconnect();\n });\n }\n };\n\n Object.defineProperty(Dispatcher.prototype, \"eventListeners\", {\n get: function get() {\n return Array.from(this.eventListenerMaps.values()).reduce(function (listeners, map) {\n return listeners.concat(Array.from(map.values()));\n }, []);\n },\n enumerable: true,\n configurable: true\n }); // Binding observer delegate\n\n /** @hidden */\n\n Dispatcher.prototype.bindingConnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n };\n /** @hidden */\n\n\n Dispatcher.prototype.bindingDisconnected = function (binding) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n }; // Error handling\n\n\n Dispatcher.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n\n this.application.handleError(error, \"Error \" + message, detail);\n };\n\n Dispatcher.prototype.fetchEventListenerForBinding = function (binding) {\n var eventTarget = binding.eventTarget,\n eventName = binding.eventName;\n return this.fetchEventListener(eventTarget, eventName);\n };\n\n Dispatcher.prototype.fetchEventListener = function (eventTarget, eventName) {\n var eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n var eventListener = eventListenerMap.get(eventName);\n\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName);\n eventListenerMap.set(eventName, eventListener);\n }\n\n return eventListener;\n };\n\n Dispatcher.prototype.createEventListener = function (eventTarget, eventName) {\n var eventListener = new EventListener(eventTarget, eventName);\n\n if (this.started) {\n eventListener.connect();\n }\n\n return eventListener;\n };\n\n Dispatcher.prototype.fetchEventListenerMapForEventTarget = function (eventTarget) {\n var eventListenerMap = this.eventListenerMaps.get(eventTarget);\n\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n\n return eventListenerMap;\n };\n\n return Dispatcher;\n}();\n\nexport { Dispatcher };","// capture nos.: 12 23 4 43 1 5 56 7 76\nvar descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#(.+))?$/;\nexport function parseDescriptorString(descriptorString) {\n var source = descriptorString.trim();\n var matches = source.match(descriptorPattern) || [];\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName: matches[2],\n identifier: matches[5],\n methodName: matches[7]\n };\n}\n\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n } else if (eventTargetName == \"document\") {\n return document;\n }\n}\n\nexport function stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n } else if (eventTarget == document) {\n return \"document\";\n }\n}","import { parseDescriptorString, stringifyEventTarget } from \"./action_descriptor\";\n\nvar Action =\n/** @class */\nfunction () {\n function Action(element, index, descriptor) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n }\n\n Action.forToken = function (token) {\n return new this(token.element, token.index, parseDescriptorString(token.content));\n };\n\n Action.prototype.toString = function () {\n var eventNameSuffix = this.eventTargetName ? \"@\" + this.eventTargetName : \"\";\n return \"\" + this.eventName + eventNameSuffix + \"->\" + this.identifier + \"#\" + this.methodName;\n };\n\n Object.defineProperty(Action.prototype, \"eventTargetName\", {\n get: function get() {\n return stringifyEventTarget(this.eventTarget);\n },\n enumerable: true,\n configurable: true\n });\n return Action;\n}();\n\nexport { Action };\nvar defaultEventNames = {\n \"a\": function a(e) {\n return \"click\";\n },\n \"button\": function button(e) {\n return \"click\";\n },\n \"form\": function form(e) {\n return \"submit\";\n },\n \"input\": function input(e) {\n return e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"change\";\n },\n \"select\": function select(e) {\n return \"change\";\n },\n \"textarea\": function textarea(e) {\n return \"change\";\n }\n};\nexport function getDefaultEventNameForElement(element) {\n var tagName = element.tagName.toLowerCase();\n\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\n\nfunction error(message) {\n throw new Error(message);\n}","var Binding =\n/** @class */\nfunction () {\n function Binding(context, action) {\n this.context = context;\n this.action = action;\n }\n\n Object.defineProperty(Binding.prototype, \"index\", {\n get: function get() {\n return this.action.index;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"eventTarget\", {\n get: function get() {\n return this.action.eventTarget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"identifier\", {\n get: function get() {\n return this.context.identifier;\n },\n enumerable: true,\n configurable: true\n });\n\n Binding.prototype.handleEvent = function (event) {\n if (this.willBeInvokedByEvent(event)) {\n this.invokeWithEvent(event);\n }\n };\n\n Object.defineProperty(Binding.prototype, \"eventName\", {\n get: function get() {\n return this.action.eventName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"method\", {\n get: function get() {\n var method = this.controller[this.methodName];\n\n if (typeof method == \"function\") {\n return method;\n }\n\n throw new Error(\"Action \\\"\" + this.action + \"\\\" references undefined method \\\"\" + this.methodName + \"\\\"\");\n },\n enumerable: true,\n configurable: true\n });\n\n Binding.prototype.invokeWithEvent = function (event) {\n try {\n this.method.call(this.controller, event);\n } catch (error) {\n var _a = this,\n identifier = _a.identifier,\n controller = _a.controller,\n element = _a.element,\n index = _a.index;\n\n var detail = {\n identifier: identifier,\n controller: controller,\n element: element,\n index: index,\n event: event\n };\n this.context.handleError(error, \"invoking action \\\"\" + this.action + \"\\\"\", detail);\n }\n };\n\n Binding.prototype.willBeInvokedByEvent = function (event) {\n var eventTarget = event.target;\n\n if (this.element === eventTarget) {\n return true;\n } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n } else {\n return true;\n }\n };\n\n Object.defineProperty(Binding.prototype, \"controller\", {\n get: function get() {\n return this.context.controller;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"methodName\", {\n get: function get() {\n return this.action.methodName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Binding.prototype, \"scope\", {\n get: function get() {\n return this.context.scope;\n },\n enumerable: true,\n configurable: true\n });\n return Binding;\n}();\n\nexport { Binding };","var ElementObserver =\n/** @class */\nfunction () {\n function ElementObserver(element, delegate) {\n var _this = this;\n\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver(function (mutations) {\n return _this.processMutations(mutations);\n });\n }\n\n ElementObserver.prototype.start = function () {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, {\n attributes: true,\n childList: true,\n subtree: true\n });\n this.refresh();\n }\n };\n\n ElementObserver.prototype.stop = function () {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n };\n\n ElementObserver.prototype.refresh = function () {\n if (this.started) {\n var matches = new Set(this.matchElementsInTree());\n\n for (var _i = 0, _a = Array.from(this.elements); _i < _a.length; _i++) {\n var element = _a[_i];\n\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n\n for (var _b = 0, _c = Array.from(matches); _b < _c.length; _b++) {\n var element = _c[_b];\n this.addElement(element);\n }\n }\n }; // Mutation record processing\n\n\n ElementObserver.prototype.processMutations = function (mutations) {\n if (this.started) {\n for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {\n var mutation = mutations_1[_i];\n this.processMutation(mutation);\n }\n }\n };\n\n ElementObserver.prototype.processMutation = function (mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n } else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n };\n\n ElementObserver.prototype.processAttributeChange = function (node, attributeName) {\n var element = node;\n\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n } else {\n this.removeElement(element);\n }\n } else if (this.matchElement(element)) {\n this.addElement(element);\n }\n };\n\n ElementObserver.prototype.processRemovedNodes = function (nodes) {\n for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {\n var node = _a[_i];\n var element = this.elementFromNode(node);\n\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n };\n\n ElementObserver.prototype.processAddedNodes = function (nodes) {\n for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {\n var node = _a[_i];\n var element = this.elementFromNode(node);\n\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }; // Element matching\n\n\n ElementObserver.prototype.matchElement = function (element) {\n return this.delegate.matchElement(element);\n };\n\n ElementObserver.prototype.matchElementsInTree = function (tree) {\n if (tree === void 0) {\n tree = this.element;\n }\n\n return this.delegate.matchElementsInTree(tree);\n };\n\n ElementObserver.prototype.processTree = function (tree, processor) {\n for (var _i = 0, _a = this.matchElementsInTree(tree); _i < _a.length; _i++) {\n var element = _a[_i];\n processor.call(this, element);\n }\n };\n\n ElementObserver.prototype.elementFromNode = function (node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n };\n\n ElementObserver.prototype.elementIsActive = function (element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n } else {\n return this.element.contains(element);\n }\n }; // Element tracking\n\n\n ElementObserver.prototype.addElement = function (element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n };\n\n ElementObserver.prototype.removeElement = function (element) {\n if (this.elements.has(element)) {\n this.elements[\"delete\"](element);\n\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n };\n\n return ElementObserver;\n}();\n\nexport { ElementObserver };","import { ElementObserver } from \"./element_observer\";\n\nvar AttributeObserver =\n/** @class */\nfunction () {\n function AttributeObserver(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n\n Object.defineProperty(AttributeObserver.prototype, \"element\", {\n get: function get() {\n return this.elementObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AttributeObserver.prototype, \"selector\", {\n get: function get() {\n return \"[\" + this.attributeName + \"]\";\n },\n enumerable: true,\n configurable: true\n });\n\n AttributeObserver.prototype.start = function () {\n this.elementObserver.start();\n };\n\n AttributeObserver.prototype.stop = function () {\n this.elementObserver.stop();\n };\n\n AttributeObserver.prototype.refresh = function () {\n this.elementObserver.refresh();\n };\n\n Object.defineProperty(AttributeObserver.prototype, \"started\", {\n get: function get() {\n return this.elementObserver.started;\n },\n enumerable: true,\n configurable: true\n }); // Element observer delegate\n\n AttributeObserver.prototype.matchElement = function (element) {\n return element.hasAttribute(this.attributeName);\n };\n\n AttributeObserver.prototype.matchElementsInTree = function (tree) {\n var match = this.matchElement(tree) ? [tree] : [];\n var matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n };\n\n AttributeObserver.prototype.elementMatched = function (element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n };\n\n AttributeObserver.prototype.elementUnmatched = function (element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n };\n\n AttributeObserver.prototype.elementAttributeChanged = function (element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n };\n\n return AttributeObserver;\n}();\n\nexport { AttributeObserver };","export function add(map, key, value) {\n fetch(map, key).add(value);\n}\nexport function del(map, key, value) {\n fetch(map, key)[\"delete\"](value);\n prune(map, key);\n}\nexport function fetch(map, key) {\n var values = map.get(key);\n\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n\n return values;\n}\nexport function prune(map, key) {\n var values = map.get(key);\n\n if (values != null && values.size == 0) {\n map[\"delete\"](key);\n }\n}","import { add, del } from \"./set_operations\";\n\nvar Multimap =\n/** @class */\nfunction () {\n function Multimap() {\n this.valuesByKey = new Map();\n }\n\n Object.defineProperty(Multimap.prototype, \"values\", {\n get: function get() {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (values, set) {\n return values.concat(Array.from(set));\n }, []);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Multimap.prototype, \"size\", {\n get: function get() {\n var sets = Array.from(this.valuesByKey.values());\n return sets.reduce(function (size, set) {\n return size + set.size;\n }, 0);\n },\n enumerable: true,\n configurable: true\n });\n\n Multimap.prototype.add = function (key, value) {\n add(this.valuesByKey, key, value);\n };\n\n Multimap.prototype[\"delete\"] = function (key, value) {\n del(this.valuesByKey, key, value);\n };\n\n Multimap.prototype.has = function (key, value) {\n var values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n };\n\n Multimap.prototype.hasKey = function (key) {\n return this.valuesByKey.has(key);\n };\n\n Multimap.prototype.hasValue = function (value) {\n var sets = Array.from(this.valuesByKey.values());\n return sets.some(function (set) {\n return set.has(value);\n });\n };\n\n Multimap.prototype.getValuesForKey = function (key) {\n var values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n };\n\n Multimap.prototype.getKeysForValue = function (value) {\n return Array.from(this.valuesByKey).filter(function (_a) {\n var key = _a[0],\n values = _a[1];\n return values.has(value);\n }).map(function (_a) {\n var key = _a[0],\n values = _a[1];\n return key;\n });\n };\n\n return Multimap;\n}();\n\nexport { Multimap };","var __extends = this && this.__extends || function () {\n var extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return function (d, b) {\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nimport { Multimap } from \"./multimap\";\nimport { add, del } from \"./set_operations\";\n\nvar IndexedMultimap =\n/** @class */\nfunction (_super) {\n __extends(IndexedMultimap, _super);\n\n function IndexedMultimap() {\n var _this = _super.call(this) || this;\n\n _this.keysByValue = new Map();\n return _this;\n }\n\n Object.defineProperty(IndexedMultimap.prototype, \"values\", {\n get: function get() {\n return Array.from(this.keysByValue.keys());\n },\n enumerable: true,\n configurable: true\n });\n\n IndexedMultimap.prototype.add = function (key, value) {\n _super.prototype.add.call(this, key, value);\n\n add(this.keysByValue, value, key);\n };\n\n IndexedMultimap.prototype[\"delete\"] = function (key, value) {\n _super.prototype[\"delete\"].call(this, key, value);\n\n del(this.keysByValue, value, key);\n };\n\n IndexedMultimap.prototype.hasValue = function (value) {\n return this.keysByValue.has(value);\n };\n\n IndexedMultimap.prototype.getKeysForValue = function (value) {\n var set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n };\n\n return IndexedMultimap;\n}(Multimap);\n\nexport { IndexedMultimap };","import { AttributeObserver } from \"./attribute_observer\";\nimport { Multimap } from \"@stimulus/multimap\";\n\nvar TokenListObserver =\n/** @class */\nfunction () {\n function TokenListObserver(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n\n Object.defineProperty(TokenListObserver.prototype, \"started\", {\n get: function get() {\n return this.attributeObserver.started;\n },\n enumerable: true,\n configurable: true\n });\n\n TokenListObserver.prototype.start = function () {\n this.attributeObserver.start();\n };\n\n TokenListObserver.prototype.stop = function () {\n this.attributeObserver.stop();\n };\n\n TokenListObserver.prototype.refresh = function () {\n this.attributeObserver.refresh();\n };\n\n Object.defineProperty(TokenListObserver.prototype, \"element\", {\n get: function get() {\n return this.attributeObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TokenListObserver.prototype, \"attributeName\", {\n get: function get() {\n return this.attributeObserver.attributeName;\n },\n enumerable: true,\n configurable: true\n }); // Attribute observer delegate\n\n TokenListObserver.prototype.elementMatchedAttribute = function (element) {\n this.tokensMatched(this.readTokensForElement(element));\n };\n\n TokenListObserver.prototype.elementAttributeValueChanged = function (element) {\n var _a = this.refreshTokensForElement(element),\n unmatchedTokens = _a[0],\n matchedTokens = _a[1];\n\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n };\n\n TokenListObserver.prototype.elementUnmatchedAttribute = function (element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n };\n\n TokenListObserver.prototype.tokensMatched = function (tokens) {\n var _this = this;\n\n tokens.forEach(function (token) {\n return _this.tokenMatched(token);\n });\n };\n\n TokenListObserver.prototype.tokensUnmatched = function (tokens) {\n var _this = this;\n\n tokens.forEach(function (token) {\n return _this.tokenUnmatched(token);\n });\n };\n\n TokenListObserver.prototype.tokenMatched = function (token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n };\n\n TokenListObserver.prototype.tokenUnmatched = function (token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement[\"delete\"](token.element, token);\n };\n\n TokenListObserver.prototype.refreshTokensForElement = function (element) {\n var previousTokens = this.tokensByElement.getValuesForKey(element);\n var currentTokens = this.readTokensForElement(element);\n var firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(function (_a) {\n var previousToken = _a[0],\n currentToken = _a[1];\n return !tokensAreEqual(previousToken, currentToken);\n });\n\n if (firstDifferingIndex == -1) {\n return [[], []];\n } else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n };\n\n TokenListObserver.prototype.readTokensForElement = function (element) {\n var attributeName = this.attributeName;\n var tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n };\n\n return TokenListObserver;\n}();\n\nexport { TokenListObserver };\n\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString.trim().split(/\\s+/).filter(function (content) {\n return content.length;\n }).map(function (content, index) {\n return {\n element: element,\n attributeName: attributeName,\n content: content,\n index: index\n };\n });\n}\n\nfunction zip(left, right) {\n var length = Math.max(left.length, right.length);\n return Array.from({\n length: length\n }, function (_, index) {\n return [left[index], right[index]];\n });\n}\n\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}","import { TokenListObserver } from \"./token_list_observer\";\n\nvar ValueListObserver =\n/** @class */\nfunction () {\n function ValueListObserver(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n\n Object.defineProperty(ValueListObserver.prototype, \"started\", {\n get: function get() {\n return this.tokenListObserver.started;\n },\n enumerable: true,\n configurable: true\n });\n\n ValueListObserver.prototype.start = function () {\n this.tokenListObserver.start();\n };\n\n ValueListObserver.prototype.stop = function () {\n this.tokenListObserver.stop();\n };\n\n ValueListObserver.prototype.refresh = function () {\n this.tokenListObserver.refresh();\n };\n\n Object.defineProperty(ValueListObserver.prototype, \"element\", {\n get: function get() {\n return this.tokenListObserver.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ValueListObserver.prototype, \"attributeName\", {\n get: function get() {\n return this.tokenListObserver.attributeName;\n },\n enumerable: true,\n configurable: true\n });\n\n ValueListObserver.prototype.tokenMatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n };\n\n ValueListObserver.prototype.tokenUnmatched = function (token) {\n var element = token.element;\n var value = this.fetchParseResultForToken(token).value;\n\n if (value) {\n this.fetchValuesByTokenForElement(element)[\"delete\"](token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n };\n\n ValueListObserver.prototype.fetchParseResultForToken = function (token) {\n var parseResult = this.parseResultsByToken.get(token);\n\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n\n return parseResult;\n };\n\n ValueListObserver.prototype.fetchValuesByTokenForElement = function (element) {\n var valuesByToken = this.valuesByTokenByElement.get(element);\n\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n\n return valuesByToken;\n };\n\n ValueListObserver.prototype.parseToken = function (token) {\n try {\n var value = this.delegate.parseValueForToken(token);\n return {\n value: value\n };\n } catch (error) {\n return {\n error: error\n };\n }\n };\n\n return ValueListObserver;\n}();\n\nexport { ValueListObserver };","import { Action } from \"./action\";\nimport { Binding } from \"./binding\";\nimport { ValueListObserver } from \"@stimulus/mutation-observers\";\n\nvar BindingObserver =\n/** @class */\nfunction () {\n function BindingObserver(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n\n BindingObserver.prototype.start = function () {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n };\n\n BindingObserver.prototype.stop = function () {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n };\n\n Object.defineProperty(BindingObserver.prototype, \"element\", {\n get: function get() {\n return this.context.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"identifier\", {\n get: function get() {\n return this.context.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"actionAttribute\", {\n get: function get() {\n return this.schema.actionAttribute;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"schema\", {\n get: function get() {\n return this.context.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BindingObserver.prototype, \"bindings\", {\n get: function get() {\n return Array.from(this.bindingsByAction.values());\n },\n enumerable: true,\n configurable: true\n });\n\n BindingObserver.prototype.connectAction = function (action) {\n var binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n };\n\n BindingObserver.prototype.disconnectAction = function (action) {\n var binding = this.bindingsByAction.get(action);\n\n if (binding) {\n this.bindingsByAction[\"delete\"](action);\n this.delegate.bindingDisconnected(binding);\n }\n };\n\n BindingObserver.prototype.disconnectAllActions = function () {\n var _this = this;\n\n this.bindings.forEach(function (binding) {\n return _this.delegate.bindingDisconnected(binding);\n });\n this.bindingsByAction.clear();\n }; // Value observer delegate\n\n\n BindingObserver.prototype.parseValueForToken = function (token) {\n var action = Action.forToken(token);\n\n if (action.identifier == this.identifier) {\n return action;\n }\n };\n\n BindingObserver.prototype.elementMatchedValue = function (element, action) {\n this.connectAction(action);\n };\n\n BindingObserver.prototype.elementUnmatchedValue = function (element, action) {\n this.disconnectAction(action);\n };\n\n return BindingObserver;\n}();\n\nexport { BindingObserver };","import { BindingObserver } from \"./binding_observer\";\n\nvar Context =\n/** @class */\nfunction () {\n function Context(module, scope) {\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n\n try {\n this.controller.initialize();\n } catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n\n Context.prototype.connect = function () {\n this.bindingObserver.start();\n\n try {\n this.controller.connect();\n } catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n };\n\n Context.prototype.disconnect = function () {\n try {\n this.controller.disconnect();\n } catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n\n this.bindingObserver.stop();\n };\n\n Object.defineProperty(Context.prototype, \"application\", {\n get: function get() {\n return this.module.application;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"identifier\", {\n get: function get() {\n return this.module.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"schema\", {\n get: function get() {\n return this.application.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"dispatcher\", {\n get: function get() {\n return this.application.dispatcher;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Context.prototype, \"parentElement\", {\n get: function get() {\n return this.element.parentElement;\n },\n enumerable: true,\n configurable: true\n }); // Error handling\n\n Context.prototype.handleError = function (error, message, detail) {\n if (detail === void 0) {\n detail = {};\n }\n\n var _a = this,\n identifier = _a.identifier,\n controller = _a.controller,\n element = _a.element;\n\n detail = Object.assign({\n identifier: identifier,\n controller: controller,\n element: element\n }, detail);\n this.application.handleError(error, \"Error \" + message, detail);\n };\n\n return Context;\n}();\n\nexport { Context };","var __extends = this && this.__extends || function () {\n var extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return function (d, b) {\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n/** @hidden */\n\n\nexport function blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: blessControllerConstructor(definition.controllerConstructor)\n };\n}\n\nfunction blessControllerConstructor(controllerConstructor) {\n var constructor = extend(controllerConstructor);\n constructor.bless();\n return constructor;\n}\n\nvar extend = function () {\n function extendWithReflect(constructor) {\n function Controller() {\n var _newTarget = this && this instanceof Controller ? this.constructor : void 0;\n\n return Reflect.construct(constructor, arguments, _newTarget);\n }\n\n Controller.prototype = Object.create(constructor.prototype, {\n constructor: {\n value: Controller\n }\n });\n Reflect.setPrototypeOf(Controller, constructor);\n return Controller;\n }\n\n function testReflectExtension() {\n var a = function a() {\n this.a.call(this);\n };\n\n var b = extendWithReflect(a);\n\n b.prototype.a = function () {};\n\n return new b();\n }\n\n try {\n testReflectExtension();\n return extendWithReflect;\n } catch (error) {\n return function (constructor) {\n return (\n /** @class */\n function (_super) {\n __extends(Controller, _super);\n\n function Controller() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n return Controller;\n }(constructor)\n );\n };\n }\n}();","import { Context } from \"./context\";\nimport { blessDefinition } from \"./definition\";\n\nvar Module =\n/** @class */\nfunction () {\n function Module(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n\n Object.defineProperty(Module.prototype, \"identifier\", {\n get: function get() {\n return this.definition.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"controllerConstructor\", {\n get: function get() {\n return this.definition.controllerConstructor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Module.prototype, \"contexts\", {\n get: function get() {\n return Array.from(this.connectedContexts);\n },\n enumerable: true,\n configurable: true\n });\n\n Module.prototype.connectContextForScope = function (scope) {\n var context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n };\n\n Module.prototype.disconnectContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n\n if (context) {\n this.connectedContexts[\"delete\"](context);\n context.disconnect();\n }\n };\n\n Module.prototype.fetchContextForScope = function (scope) {\n var context = this.contextsByScope.get(scope);\n\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n\n return context;\n };\n\n return Module;\n}();\n\nexport { Module };","var DataMap =\n/** @class */\nfunction () {\n function DataMap(scope) {\n this.scope = scope;\n }\n\n Object.defineProperty(DataMap.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataMap.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n\n DataMap.prototype.get = function (key) {\n key = this.getFormattedKey(key);\n return this.element.getAttribute(key);\n };\n\n DataMap.prototype.set = function (key, value) {\n key = this.getFormattedKey(key);\n this.element.setAttribute(key, value);\n return this.get(key);\n };\n\n DataMap.prototype.has = function (key) {\n key = this.getFormattedKey(key);\n return this.element.hasAttribute(key);\n };\n\n DataMap.prototype[\"delete\"] = function (key) {\n if (this.has(key)) {\n key = this.getFormattedKey(key);\n this.element.removeAttribute(key);\n return true;\n } else {\n return false;\n }\n };\n\n DataMap.prototype.getFormattedKey = function (key) {\n return \"data-\" + this.identifier + \"-\" + dasherize(key);\n };\n\n return DataMap;\n}();\n\nexport { DataMap };\n\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, function (_, _char) {\n return \"-\" + _char.toLowerCase();\n });\n}","/** @hidden */\nexport function attributeValueContainsToken(attributeName, token) {\n return \"[\" + attributeName + \"~=\\\"\" + token + \"\\\"]\";\n}","import { attributeValueContainsToken } from \"./selectors\";\n\nvar TargetSet =\n/** @class */\nfunction () {\n function TargetSet(scope) {\n this.scope = scope;\n }\n\n Object.defineProperty(TargetSet.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TargetSet.prototype, \"schema\", {\n get: function get() {\n return this.scope.schema;\n },\n enumerable: true,\n configurable: true\n });\n\n TargetSet.prototype.has = function (targetName) {\n return this.find(targetName) != null;\n };\n\n TargetSet.prototype.find = function () {\n var targetNames = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n\n var selector = this.getSelectorForTargetNames(targetNames);\n return this.scope.findElement(selector);\n };\n\n TargetSet.prototype.findAll = function () {\n var targetNames = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n targetNames[_i] = arguments[_i];\n }\n\n var selector = this.getSelectorForTargetNames(targetNames);\n return this.scope.findAllElements(selector);\n };\n\n TargetSet.prototype.getSelectorForTargetNames = function (targetNames) {\n var _this = this;\n\n return targetNames.map(function (targetName) {\n return _this.getSelectorForTargetName(targetName);\n }).join(\", \");\n };\n\n TargetSet.prototype.getSelectorForTargetName = function (targetName) {\n var targetDescriptor = this.identifier + \".\" + targetName;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n };\n\n return TargetSet;\n}();\n\nexport { TargetSet };","import { DataMap } from \"./data_map\";\nimport { TargetSet } from \"./target_set\";\nimport { attributeValueContainsToken } from \"./selectors\";\n\nvar Scope =\n/** @class */\nfunction () {\n function Scope(schema, identifier, element) {\n this.schema = schema;\n this.identifier = identifier;\n this.element = element;\n this.targets = new TargetSet(this);\n this.data = new DataMap(this);\n }\n\n Scope.prototype.findElement = function (selector) {\n return this.findAllElements(selector)[0];\n };\n\n Scope.prototype.findAllElements = function (selector) {\n var head = this.element.matches(selector) ? [this.element] : [];\n var tail = this.filterElements(Array.from(this.element.querySelectorAll(selector)));\n return head.concat(tail);\n };\n\n Scope.prototype.filterElements = function (elements) {\n var _this = this;\n\n return elements.filter(function (element) {\n return _this.containsElement(element);\n });\n };\n\n Scope.prototype.containsElement = function (element) {\n return element.closest(this.controllerSelector) === this.element;\n };\n\n Object.defineProperty(Scope.prototype, \"controllerSelector\", {\n get: function get() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n },\n enumerable: true,\n configurable: true\n });\n return Scope;\n}();\n\nexport { Scope };","import { Scope } from \"./scope\";\nimport { ValueListObserver } from \"@stimulus/mutation-observers\";\n\nvar ScopeObserver =\n/** @class */\nfunction () {\n function ScopeObserver(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n\n ScopeObserver.prototype.start = function () {\n this.valueListObserver.start();\n };\n\n ScopeObserver.prototype.stop = function () {\n this.valueListObserver.stop();\n };\n\n Object.defineProperty(ScopeObserver.prototype, \"controllerAttribute\", {\n get: function get() {\n return this.schema.controllerAttribute;\n },\n enumerable: true,\n configurable: true\n }); // Value observer delegate\n\n /** @hidden */\n\n ScopeObserver.prototype.parseValueForToken = function (token) {\n var element = token.element,\n identifier = token.content;\n var scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n var scope = scopesByIdentifier.get(identifier);\n\n if (!scope) {\n scope = new Scope(this.schema, identifier, element);\n scopesByIdentifier.set(identifier, scope);\n }\n\n return scope;\n };\n /** @hidden */\n\n\n ScopeObserver.prototype.elementMatchedValue = function (element, value) {\n var referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n };\n /** @hidden */\n\n\n ScopeObserver.prototype.elementUnmatchedValue = function (element, value) {\n var referenceCount = this.scopeReferenceCounts.get(value);\n\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n };\n\n ScopeObserver.prototype.fetchScopesByIdentifierForElement = function (element) {\n var scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n\n return scopesByIdentifier;\n };\n\n return ScopeObserver;\n}();\n\nexport { ScopeObserver };","import { Module } from \"./module\";\nimport { Multimap } from \"@stimulus/multimap\";\nimport { ScopeObserver } from \"./scope_observer\";\n\nvar Router =\n/** @class */\nfunction () {\n function Router(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n\n Object.defineProperty(Router.prototype, \"element\", {\n get: function get() {\n return this.application.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"schema\", {\n get: function get() {\n return this.application.schema;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"controllerAttribute\", {\n get: function get() {\n return this.schema.controllerAttribute;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"modules\", {\n get: function get() {\n return Array.from(this.modulesByIdentifier.values());\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Router.prototype, \"contexts\", {\n get: function get() {\n return this.modules.reduce(function (contexts, module) {\n return contexts.concat(module.contexts);\n }, []);\n },\n enumerable: true,\n configurable: true\n });\n\n Router.prototype.start = function () {\n this.scopeObserver.start();\n };\n\n Router.prototype.stop = function () {\n this.scopeObserver.stop();\n };\n\n Router.prototype.loadDefinition = function (definition) {\n this.unloadIdentifier(definition.identifier);\n var module = new Module(this.application, definition);\n this.connectModule(module);\n };\n\n Router.prototype.unloadIdentifier = function (identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n\n if (module) {\n this.disconnectModule(module);\n }\n };\n\n Router.prototype.getContextForElementAndIdentifier = function (element, identifier) {\n var module = this.modulesByIdentifier.get(identifier);\n\n if (module) {\n return module.contexts.find(function (context) {\n return context.element == element;\n });\n }\n }; // Error handler delegate\n\n /** @hidden */\n\n\n Router.prototype.handleError = function (error, message, detail) {\n this.application.handleError(error, message, detail);\n }; // Scope observer delegate\n\n /** @hidden */\n\n\n Router.prototype.scopeConnected = function (scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n\n if (module) {\n module.connectContextForScope(scope);\n }\n };\n /** @hidden */\n\n\n Router.prototype.scopeDisconnected = function (scope) {\n this.scopesByIdentifier[\"delete\"](scope.identifier, scope);\n var module = this.modulesByIdentifier.get(scope.identifier);\n\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }; // Modules\n\n\n Router.prototype.connectModule = function (module) {\n this.modulesByIdentifier.set(module.identifier, module);\n var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(function (scope) {\n return module.connectContextForScope(scope);\n });\n };\n\n Router.prototype.disconnectModule = function (module) {\n this.modulesByIdentifier[\"delete\"](module.identifier);\n var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(function (scope) {\n return module.disconnectContextForScope(scope);\n });\n };\n\n return Router;\n}();\n\nexport { Router };","export var defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\"\n};","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : new P(function (resolve) {\n resolve(result.value);\n }).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar __generator = this && this.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n};\n\nimport { Dispatcher } from \"./dispatcher\";\nimport { Router } from \"./router\";\nimport { defaultSchema } from \"./schema\";\n\nvar Application =\n/** @class */\nfunction () {\n function Application(element, schema) {\n if (element === void 0) {\n element = document.documentElement;\n }\n\n if (schema === void 0) {\n schema = defaultSchema;\n }\n\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n }\n\n Application.start = function (element, schema) {\n var application = new Application(element, schema);\n application.start();\n return application;\n };\n\n Application.prototype.start = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , domReady()];\n\n case 1:\n _a.sent();\n\n this.router.start();\n this.dispatcher.start();\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n Application.prototype.stop = function () {\n this.router.stop();\n this.dispatcher.stop();\n };\n\n Application.prototype.register = function (identifier, controllerConstructor) {\n this.load({\n identifier: identifier,\n controllerConstructor: controllerConstructor\n });\n };\n\n Application.prototype.load = function (head) {\n var _this = this;\n\n var rest = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n\n var definitions = Array.isArray(head) ? head : [head].concat(rest);\n definitions.forEach(function (definition) {\n return _this.router.loadDefinition(definition);\n });\n };\n\n Application.prototype.unload = function (head) {\n var _this = this;\n\n var rest = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n\n var identifiers = Array.isArray(head) ? head : [head].concat(rest);\n identifiers.forEach(function (identifier) {\n return _this.router.unloadIdentifier(identifier);\n });\n };\n\n Object.defineProperty(Application.prototype, \"controllers\", {\n // Controllers\n get: function get() {\n return this.router.contexts.map(function (context) {\n return context.controller;\n });\n },\n enumerable: true,\n configurable: true\n });\n\n Application.prototype.getControllerForElementAndIdentifier = function (element, identifier) {\n var context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }; // Error handling\n\n\n Application.prototype.handleError = function (error, message, detail) {\n console.error(\"%s\\n\\n%o\\n\\n%o\", message, error, detail);\n };\n\n return Application;\n}();\n\nexport { Application };\n\nfunction domReady() {\n return new Promise(function (resolve) {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", resolve);\n } else {\n resolve();\n }\n });\n}","/** @hidden */\nexport function defineTargetProperties(constructor) {\n var prototype = constructor.prototype;\n var targetNames = getTargetNamesForConstructor(constructor);\n targetNames.forEach(function (name) {\n var _a;\n\n return defineLinkedProperties(prototype, (_a = {}, _a[name + \"Target\"] = {\n get: function get() {\n var target = this.targets.find(name);\n\n if (target) {\n return target;\n } else {\n throw new Error(\"Missing target element \\\"\" + this.identifier + \".\" + name + \"\\\"\");\n }\n }\n }, _a[name + \"Targets\"] = {\n get: function get() {\n return this.targets.findAll(name);\n }\n }, _a[\"has\" + capitalize(name) + \"Target\"] = {\n get: function get() {\n return this.targets.has(name);\n }\n }, _a));\n });\n}\n\nfunction getTargetNamesForConstructor(constructor) {\n var ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce(function (targetNames, constructor) {\n getOwnTargetNamesForConstructor(constructor).forEach(function (name) {\n return targetNames.add(name);\n });\n return targetNames;\n }, new Set()));\n}\n\nfunction getAncestorsForConstructor(constructor) {\n var ancestors = [];\n\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n\n return ancestors;\n}\n\nfunction getOwnTargetNamesForConstructor(constructor) {\n var definition = constructor[\"targets\"];\n return Array.isArray(definition) ? definition : [];\n}\n\nfunction defineLinkedProperties(object, properties) {\n Object.keys(properties).forEach(function (name) {\n if (!(name in object)) {\n var descriptor = properties[name];\n Object.defineProperty(object, name, descriptor);\n }\n });\n}\n\nfunction capitalize(name) {\n return name.charAt(0).toUpperCase() + name.slice(1);\n}","import { defineTargetProperties } from \"./target_properties\";\n\nvar Controller =\n/** @class */\nfunction () {\n function Controller(context) {\n this.context = context;\n }\n\n Controller.bless = function () {\n defineTargetProperties(this);\n };\n\n Object.defineProperty(Controller.prototype, \"application\", {\n get: function get() {\n return this.context.application;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"scope\", {\n get: function get() {\n return this.context.scope;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"element\", {\n get: function get() {\n return this.scope.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"identifier\", {\n get: function get() {\n return this.scope.identifier;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"targets\", {\n get: function get() {\n return this.scope.targets;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Controller.prototype, \"data\", {\n get: function get() {\n return this.scope.data;\n },\n enumerable: true,\n configurable: true\n });\n\n Controller.prototype.initialize = function () {// Override in your subclass to set up initial controller state\n };\n\n Controller.prototype.connect = function () {// Override in your subclass to respond when the controller is connected to the DOM\n };\n\n Controller.prototype.disconnect = function () {// Override in your subclass to respond when the controller is disconnected from the DOM\n };\n\n Controller.targets = [];\n return Controller;\n}();\n\nexport { Controller };","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\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var 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 no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(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.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar defineProperty = require('../internals/object-define-property').f;\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + ++id, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar meta = module.exports = {\n REQUIRED: false,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\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","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","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar whitespaces = require('../internals/whitespaces');\n\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 = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(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","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.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\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","module.exports = {};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\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 = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\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 fails = require('../internals/fails');\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 : typeof detection == 'function' ? 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 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\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (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 new (C === undefined ? Array : C)(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","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (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 && +version;\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","module.exports = {};\n","var classof = require('../internals/classof');\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 it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\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' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\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, 1 + AS_ENTRIES + INTERRUPTED);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator);\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 (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar g; // This works in non-strict mode\n\ng = function () {\n return this;\n}();\n\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n} // g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\n\nmodule.exports = g;","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.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} : nativePropertyIsEnumerable;\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 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 no-throw-literal\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","'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","var aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = toLength(O.length);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","'use strict';\nvar global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefineAll = require('../internals/redefine-all');\nvar fails = require('../internals/fails');\nvar anInstance = require('../internals/an-instance');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar IEEE754 = require('../internals/ieee754');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar arrayFill = require('../internals/array-fill');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar $DataView = global[DATA_VIEW];\nvar $DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar RangeError = global.RangeError;\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function (number) {\n return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key) {\n defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = bytes.slice(start, start + count);\n return isLittleEndian ? pack : pack.reverse();\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = conversion(+value);\n for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n setInternalState(this, {\n bytes: arrayFill.call(new Array(byteLength), 0),\n byteLength: byteLength\n });\n if (!DESCRIPTORS) this.byteLength = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = getInternalState(buffer).byteLength;\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n setInternalState(this, {\n buffer: buffer,\n byteLength: byteLength,\n byteOffset: offset\n });\n if (!DESCRIPTORS) {\n this.buffer = buffer;\n this.byteLength = byteLength;\n this.byteOffset = offset;\n }\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, 'byteLength');\n addGetter($DataView, 'buffer');\n addGetter($DataView, 'byteLength');\n addGetter($DataView, 'byteOffset');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n }\n });\n} else {\n if (!fails(function () {\n NativeArrayBuffer(1);\n }) || !fails(function () {\n new NativeArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new NativeArrayBuffer(); // eslint-disable-line no-new\n new NativeArrayBuffer(1.5); // eslint-disable-line no-new\n new NativeArrayBuffer(NaN); // eslint-disable-line no-new\n return NativeArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new NativeArrayBuffer(toIndex(length));\n };\n var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE] = NativeArrayBuffer[PROTOTYPE];\n for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) {\n createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n }\n }\n ArrayBufferPrototype.constructor = $ArrayBuffer;\n }\n\n // WebKit bug - the same parent prototype for typed arrays and data view\n if (setPrototypeOf && getPrototypeOf($DataViewPrototype) !== ObjectPrototype) {\n setPrototypeOf($DataViewPrototype, ObjectPrototype);\n }\n\n // iOS Safari 7.x bug\n var testView = new $DataView(new $ArrayBuffer(2));\n var nativeSetInt8 = $DataViewPrototype.setInt8;\n testView.setInt8(0, 2147483648);\n testView.setInt8(1, 2147483649);\n if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll($DataViewPrototype, {\n setInt8: function setInt8(byteOffset, value) {\n nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n ArrayBuffer: $ArrayBuffer,\n DataView: $DataView\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\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 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 nativeMethod = NativePrototype[KEY];\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n nativeMethod.call(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n nativeMethod.call(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n // eslint-disable-next-line max-len\n if (isForced(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n })))) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.REQUIRED = true;\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\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, Constructor, CONSTRUCTOR_NAME);\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 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 typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","var nativeExpm1 = Math.expm1;\nvar exp = Math.exp;\n\n// `Math.expm1` method implementation\n// https://tc39.es/ecma262/#sec-math.expm1\nmodule.exports = (!nativeExpm1\n // Old FF bug\n || nativeExpm1(10) > 22025.465794806719 || nativeExpm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || nativeExpm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : exp(x) - 1;\n} : nativeExpm1;\n","// a string of all valid unicode whitespaces\n// eslint-disable-next-line max-len\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\n\n// Forced replacement object prototype accessors methods\nmodule.exports = IS_PURE || !fails(function () {\n var key = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, key, function () { /* empty */ });\n delete global[key];\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","'use strict';\nvar regexpFlags = require('./regexp-flags');\nvar stickyHelpers = require('./regexp-sticky-helpers');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.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;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = String(str).slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && 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 = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(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 nativeReplace.call(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 return match;\n };\n}\n\nmodule.exports = patchedExec;\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (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';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar regexpExec = require('../internals/regexp-exec');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$<a>') !== '7';\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 return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\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\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 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\nmodule.exports = function (KEY, length, exec, 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 (KEY === 'replace' && !(\n REPLACE_SUPPORTS_NAMED_GROUPS &&\n REPLACE_KEEPS_$0 &&\n !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n )) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\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: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }, {\n REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n });\n var stringMethod = methods[0];\n var regexMethod = methods[1];\n\n redefine(String.prototype, KEY, stringMethod);\n redefine(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return regexMethod.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return regexMethod.call(string, this); }\n );\n }\n\n if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n};\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([\"exports\"], factory) : factory(global.ActiveStorage = {});\n})(this, function (exports) {\n \"use strict\";\n\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n\n var sparkMd5 = createCommonjsModule(function (module, exports) {\n (function (factory) {\n {\n module.exports = factory();\n }\n })(function (undefined) {\n var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function rhex(n) {\n var s = \"\",\n j;\n\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n\n return s;\n }\n\n function hex(x) {\n var i;\n\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n\n return x.join(\"\");\n }\n\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = val | 0 || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n function SparkMD5() {\n this.reset();\n }\n\n SparkMD5.prototype.append = function (str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.prototype.reset = function () {\n this._buff = \"\";\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(this._hash, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n SparkMD5.hash = function (str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n SparkMD5.ArrayBuffer = function () {\n this.reset();\n };\n\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n });\n });\n\n var classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\n var FileChecksum = function () {\n createClass(FileChecksum, null, [{\n key: \"create\",\n value: function create(file, callback) {\n var instance = new FileChecksum(file);\n instance.create(callback);\n }\n }]);\n\n function FileChecksum(file) {\n classCallCheck(this, FileChecksum);\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n\n createClass(FileChecksum, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n\n this.callback = callback;\n this.md5Buffer = new sparkMd5.ArrayBuffer();\n this.fileReader = new FileReader();\n this.fileReader.addEventListener(\"load\", function (event) {\n return _this.fileReaderDidLoad(event);\n });\n this.fileReader.addEventListener(\"error\", function (event) {\n return _this.fileReaderDidError(event);\n });\n this.readNextChunk();\n }\n }, {\n key: \"fileReaderDidLoad\",\n value: function fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n\n if (!this.readNextChunk()) {\n var binaryDigest = this.md5Buffer.end(true);\n var base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n }, {\n key: \"fileReaderDidError\",\n value: function fileReaderDidError(event) {\n this.callback(\"Error reading \" + this.file.name);\n }\n }, {\n key: \"readNextChunk\",\n value: function readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n var start = this.chunkIndex * this.chunkSize;\n var end = Math.min(start + this.chunkSize, this.file.size);\n var bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n }]);\n return FileChecksum;\n }();\n\n function getMetaValue(name) {\n var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n\n function findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n var elements = root.querySelectorAll(selector);\n return toArray$1(elements);\n }\n\n function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n return root.querySelector(selector);\n }\n\n function dispatchEvent(element, type) {\n var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var disabled = element.disabled;\n var bubbles = eventInit.bubbles,\n cancelable = eventInit.cancelable,\n detail = eventInit.detail;\n var event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n\n return event;\n }\n\n function toArray$1(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n }\n\n var BlobRecord = function () {\n function BlobRecord(file, checksum, url) {\n var _this = this;\n\n classCallCheck(this, BlobRecord);\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n var csrfToken = getMetaValue(\"csrf-token\");\n\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n\n createClass(BlobRecord, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n var response = this.response;\n var direct_upload = response.direct_upload;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n var result = {};\n\n for (var key in this.attributes) {\n result[key] = this.attributes[key];\n }\n\n return result;\n }\n }, {\n key: \"status\",\n get: function get$$1() {\n return this.xhr.status;\n }\n }, {\n key: \"response\",\n get: function get$$1() {\n var _xhr = this.xhr,\n responseType = _xhr.responseType,\n response = _xhr.response;\n\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n }]);\n return BlobRecord;\n }();\n\n var BlobUpload = function () {\n function BlobUpload(blob) {\n var _this = this;\n\n classCallCheck(this, BlobUpload);\n this.blob = blob;\n this.file = blob.file;\n var _blob$directUploadDat = blob.directUploadData,\n url = _blob$directUploadDat.url,\n headers = _blob$directUploadDat.headers;\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n\n for (var key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n\n createClass(BlobUpload, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n var _xhr = this.xhr,\n status = _xhr.status,\n response = _xhr.response;\n\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n }\n }]);\n return BlobUpload;\n }();\n\n var id = 0;\n\n var DirectUpload = function () {\n function DirectUpload(file, url, delegate) {\n classCallCheck(this, DirectUpload);\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n }\n\n createClass(DirectUpload, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n\n FileChecksum.create(this.file, function (error, checksum) {\n if (error) {\n callback(error);\n return;\n }\n\n var blob = new BlobRecord(_this.file, checksum, _this.url);\n notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create(function (error) {\n if (error) {\n callback(error);\n } else {\n var upload = new BlobUpload(blob);\n notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create(function (error) {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n });\n }\n });\n });\n }\n }]);\n return DirectUpload;\n }();\n\n function notify(object, methodName) {\n if (object && typeof object[methodName] == \"function\") {\n for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n messages[_key - 2] = arguments[_key];\n }\n\n return object[methodName].apply(object, messages);\n }\n }\n\n var DirectUploadController = function () {\n function DirectUploadController(input, file) {\n classCallCheck(this, DirectUploadController);\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n\n createClass(DirectUploadController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n\n var hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(function (error, attributes) {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n\n _this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n\n _this.dispatch(\"end\");\n\n callback(error);\n });\n }\n }, {\n key: \"uploadRequestDidProgress\",\n value: function uploadRequestDidProgress(event) {\n var progress = event.loaded / event.total * 100;\n\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, \"direct-upload:\" + name, {\n detail: detail\n });\n }\n }, {\n key: \"dispatchError\",\n value: function dispatchError(error) {\n var event = this.dispatch(\"error\", {\n error: error\n });\n\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n }, {\n key: \"directUploadWillCreateBlobWithXHR\",\n value: function directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n }, {\n key: \"directUploadWillStoreFileWithXHR\",\n value: function directUploadWillStoreFileWithXHR(xhr) {\n var _this2 = this;\n\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", function (event) {\n return _this2.uploadRequestDidProgress(event);\n });\n }\n }, {\n key: \"url\",\n get: function get$$1() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n }]);\n return DirectUploadController;\n }();\n\n var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\n var DirectUploadsController = function () {\n function DirectUploadsController(form) {\n classCallCheck(this, DirectUploadsController);\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter(function (input) {\n return input.files.length;\n });\n }\n\n createClass(DirectUploadsController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n\n var controllers = this.createDirectUploadControllers();\n\n var startNextController = function startNextController() {\n var controller = controllers.shift();\n\n if (controller) {\n controller.start(function (error) {\n if (error) {\n callback(error);\n\n _this.dispatch(\"end\");\n } else {\n startNextController();\n }\n });\n } else {\n callback();\n\n _this.dispatch(\"end\");\n }\n };\n\n this.dispatch(\"start\");\n startNextController();\n }\n }, {\n key: \"createDirectUploadControllers\",\n value: function createDirectUploadControllers() {\n var controllers = [];\n this.inputs.forEach(function (input) {\n toArray$1(input.files).forEach(function (file) {\n var controller = new DirectUploadController(input, file);\n controllers.push(controller);\n });\n });\n return controllers;\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n detail: detail\n });\n }\n }]);\n return DirectUploadsController;\n }();\n\n var processingAttribute = \"data-direct-uploads-processing\";\n var submitButtonsByForm = new WeakMap();\n var started = false;\n\n function start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n }\n\n function didClick(event) {\n var target = event.target;\n\n if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n submitButtonsByForm.set(target.form, target);\n }\n }\n\n function didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n }\n\n function didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n }\n\n function handleFormSubmissionEvent(event) {\n var form = event.target;\n\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n\n var controller = new DirectUploadsController(form);\n var inputs = controller.inputs;\n\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start(function (error) {\n form.removeAttribute(processingAttribute);\n\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n });\n }\n }\n\n function submitForm(form) {\n var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n\n if (button) {\n var _button = button,\n disabled = _button.disabled;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n\n submitButtonsByForm[\"delete\"](form);\n }\n\n function disable(input) {\n input.disabled = true;\n }\n\n function enable(input) {\n input.disabled = false;\n }\n\n function autostart() {\n if (window.ActiveStorage) {\n start();\n }\n }\n\n setTimeout(autostart, 1);\n exports.start = start;\n exports.DirectUpload = DirectUpload;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\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 global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\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.8.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var getBuiltIn = require('../internals/get-built-in');\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\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 ? keys.concat(getOwnPropertySymbols(it)) : keys;\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","exports.f = Object.getOwnPropertySymbols;\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n // eslint-disable-next-line no-undef\n return !String(Symbol());\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\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++], Properties[key]);\n return O;\n};\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\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 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","'use strict';\nvar $ = require('../internals/export');\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 IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\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 (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(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#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\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 return methods;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","module.exports = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('../internals/to-length');\nvar repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = String(requireObjectCoercible($this));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr == '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.es/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.es/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(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","// `Math.sign` method implementation\n// https://tc39.es/ecma262/#sec-math.sign\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar location = global.location;\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(id + '', location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n typeof postMessage == 'function' &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\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","'use strict';\n\nvar fails = require('./fails');\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n var re = RE('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = RE('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\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","'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 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]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","/* eslint-disable no-new */\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar NATIVE_ARRAY_BUFFER_VIEWS = require('../internals/array-buffer-view-core').NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n Int8Array(1);\n}) || !fails(function () {\n new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n new Int8Array();\n new Int8Array(null);\n new Int8Array(1.5);\n new Int8Array(iterable);\n}, true) || fails(function () {\n // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n","module.exports = /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/;","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n/**\n * new Ruler()\n **/\n\nfunction Ruler() {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = []; // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n\n this.__cache__ = null;\n} ////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n// Find rule index by name\n//\n\n\nRuler.prototype.__find__ = function (name) {\n for (var i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i;\n }\n }\n\n return -1;\n}; // Build rules lookup cache\n//\n\n\nRuler.prototype.__compile__ = function () {\n var self = this;\n var chains = ['']; // collect unique names\n\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) {\n return;\n }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName);\n }\n });\n });\n\n self.__cache__ = {};\n chains.forEach(function (chain) {\n self.__cache__[chain] = [];\n\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) {\n return;\n }\n\n if (chain && rule.alt.indexOf(chain) < 0) {\n return;\n }\n\n self.__cache__[chain].push(rule.fn);\n });\n });\n};\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\n\n\nRuler.prototype.at = function (name, fn, options) {\n var index = this.__find__(name);\n\n var opt = options || {};\n\n if (index === -1) {\n throw new Error('Parser rule not found: ' + name);\n }\n\n this.__rules__[index].fn = fn;\n this.__rules__[index].alt = opt.alt || [];\n this.__cache__ = null;\n};\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\n\n\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n var index = this.__find__(beforeName);\n\n var opt = options || {};\n\n if (index === -1) {\n throw new Error('Parser rule not found: ' + beforeName);\n }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\n\n\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n var index = this.__find__(afterName);\n\n var opt = options || {};\n\n if (index === -1) {\n throw new Error('Parser rule not found: ' + afterName);\n }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\n\n\nRuler.prototype.push = function (ruleName, fn, options) {\n var opt = options || {};\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn: fn,\n alt: opt.alt || []\n });\n\n this.__cache__ = null;\n};\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\n\n\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) {\n list = [list];\n }\n\n var result = []; // Search by name and enable\n\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) {\n return;\n }\n\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n\n this.__rules__[idx].enabled = true;\n result.push(name);\n }, this);\n this.__cache__ = null;\n return result;\n};\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\n\n\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) {\n list = [list];\n }\n\n this.__rules__.forEach(function (rule) {\n rule.enabled = false;\n });\n\n this.enable(list, ignoreInvalid);\n};\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\n\n\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) {\n list = [list];\n }\n\n var result = []; // Search by name and disable\n\n list.forEach(function (name) {\n var idx = this.__find__(name);\n\n if (idx < 0) {\n if (ignoreInvalid) {\n return;\n }\n\n throw new Error('Rules manager: invalid rule name ' + name);\n }\n\n this.__rules__[idx].enabled = false;\n result.push(name);\n }, this);\n this.__cache__ = null;\n return result;\n};\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\n\n\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__();\n } // Chain can be empty, if rules disabled. But we still have to return Array.\n\n\n return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;","// Token class\n'use strict';\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\n\nfunction Token(type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type;\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n\n this.tag = tag;\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n\n this.attrs = null;\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n\n this.map = null;\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n\n this.nesting = nesting;\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n\n this.level = 0;\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n\n this.children = null;\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n\n this.content = '';\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n\n this.markup = '';\n /**\n * Token#info -> String\n *\n * fence infostring\n **/\n\n this.info = '';\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n\n this.meta = null;\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n\n this.block = false;\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n\n this.hidden = false;\n}\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\n\n\nToken.prototype.attrIndex = function attrIndex(name) {\n var attrs, i, len;\n\n if (!this.attrs) {\n return -1;\n }\n\n attrs = this.attrs;\n\n for (i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) {\n return i;\n }\n }\n\n return -1;\n};\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\n\n\nToken.prototype.attrPush = function attrPush(attrData) {\n if (this.attrs) {\n this.attrs.push(attrData);\n } else {\n this.attrs = [attrData];\n }\n};\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\n\n\nToken.prototype.attrSet = function attrSet(name, value) {\n var idx = this.attrIndex(name),\n attrData = [name, value];\n\n if (idx < 0) {\n this.attrPush(attrData);\n } else {\n this.attrs[idx] = attrData;\n }\n};\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\n\n\nToken.prototype.attrGet = function attrGet(name) {\n var idx = this.attrIndex(name),\n value = null;\n\n if (idx >= 0) {\n value = this.attrs[idx][1];\n }\n\n return value;\n};\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\n\n\nToken.prototype.attrJoin = function attrJoin(name, value) {\n var idx = this.attrIndex(name);\n\n if (idx < 0) {\n this.attrPush([name, value]);\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n }\n};\n\nmodule.exports = Token;","module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};","module.exports = require(\"regenerator-runtime\");\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 return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var has = require('../internals/has');\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 (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\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) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n // eslint-disable-next-line no-undef\n && !Symbol.sham\n // eslint-disable-next-line no-undef\n && typeof Symbol.iterator == 'symbol';\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return nativeGetOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg, 3) : false;\n var element;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1FFFFFFFFFFFFF) throw TypeError('Exceed the acceptable array length');\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","var anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) {\n return anObject(returnMethod.call(iterator)).value;\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) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\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\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\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 = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar min = Math.min;\nvar nativeLastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\n// For preventing possible almost infinite loop in non-standard implementations, test the forward version of the method\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return nativeLastIndexOf.apply(this, arguments) || 0;\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n return -1;\n} : nativeLastIndexOf;\n","var toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length or index');\n return length;\n};\n","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\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 C = wrapper(function (that, iterable) {\n anInstance(that, C, CONSTRUCTOR_NAME);\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 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(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 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 // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\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 // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\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 // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(C.prototype, IS_MAP ? {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return C;\n },\n setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n defineIterator(C, 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 // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","var log = Math.log;\n\n// `Math.log1p` method implementation\n// https://tc39.es/ecma262/#sec-math.log1p\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : log(1 + x);\n};\n","var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `Number.isInteger` method implementation\n// https://tc39.es/ecma262/#sec-number.isinteger\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseFloat = global.parseFloat;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity;\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(String(string));\n var result = $parseFloat(trimmedString);\n return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar hex = /^[+-]?0[Xx]/;\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22;\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(String(string));\n return $parseInt(S, (radix >>> 0) || (hex.test(S) ? 16 : 10));\n} : $parseInt;\n","var classof = require('../internals/classof-raw');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = function (value) {\n if (typeof value != 'number' && classof(value) != 'Number') {\n throw TypeError('Incorrect invocation');\n }\n return +value;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(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 no-undef\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : nativeAssign;\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\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.call(O, key)) {\n result.push(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","// `SameValue` abstract operation\n// https://tc39.es/ecma262/#sec-samevalue\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n then = promise.then;\n notify = function () {\n then.call(promise, flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\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","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\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: String(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","// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\n// eslint-disable-next-line unicorn/no-unsafe-regex\nmodule.exports = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","var toPositiveInteger = require('../internals/to-positive-integer');\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw RangeError('Wrong offset');\n return offset;\n};\n","var toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar bind = require('../internals/function-bind-context');\nvar aTypedArrayConstructor = require('../internals/array-buffer-view-core').aTypedArrayConstructor;\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var i, length, result, step, iterator, next;\n if (iteratorMethod != undefined && !isArrayIteratorMethod(iteratorMethod)) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n O = [];\n while (!(step = next.call(iterator)).done) {\n O.push(step.value);\n }\n }\n if (mapping && argumentsLength > 2) {\n mapfn = bind(mapfn, arguments[2], 2);\n }\n length = toLength(O.length);\n result = new (aTypedArrayConstructor(this))(length);\n for (i = 0; length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n};\n","'use strict';\nvar redefineAll = require('../internals/redefine-all');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar $has = require('../internals/has');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (store) {\n return store.frozen || (store.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n return find(store.entries, function (it) {\n return it[0] === key;\n });\n};\n\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.entries.push([key, value]);\n },\n 'delete': function (key) {\n var index = findIndex(this.entries, function (it) {\n return it[0] === key;\n });\n if (~index) this.entries.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, CONSTRUCTOR_NAME);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n id: id++,\n frozen: undefined\n });\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var data = getWeakData(anObject(key), true);\n if (data === true) uncaughtFrozenStore(state).set(key, value);\n else data[state.id] = value;\n return that;\n };\n\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n return data && $has(data, state.id) && delete data[state.id];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).has(key);\n return data && $has(data, state.id);\n }\n });\n\n redefineAll(C.prototype, IS_MAP ? {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n var state = getInternalState(this);\n if (isObject(key)) {\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).get(key);\n return data ? data[state.id] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return define(this, key, value);\n }\n } : {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return define(this, value, true);\n }\n });\n\n return C;\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","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $fetch = getBuiltIn('fetch');\nvar Headers = getBuiltIn('Headers');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = it.replace(plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = result.replace(percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replace[match];\n};\n\nvar serialize = function (it) {\n return encodeURIComponent(it).replace(find, replacer);\n};\n\nvar parseSearchParams = function (result, query) {\n if (query) {\n var attributes = query.split('&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = attribute.split('=');\n result.push({\n key: deserialize(entry.shift()),\n value: deserialize(entry.join('='))\n });\n }\n }\n }\n};\n\nvar updateSearchParams = function (query) {\n this.entries.length = 0;\n parseSearchParams(this.entries, query);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n});\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n var that = this;\n var entries = [];\n var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\n\n setInternalState(that, {\n type: URL_SEARCH_PARAMS,\n entries: entries,\n updateURL: function () { /* empty */ },\n updateSearchParams: updateSearchParams\n });\n\n if (init !== undefined) {\n if (isObject(init)) {\n iteratorMethod = getIteratorMethod(init);\n if (typeof iteratorMethod === 'function') {\n iterator = iteratorMethod.call(init);\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = entryNext.call(entryIterator)).done ||\n (second = entryNext.call(entryIterator)).done ||\n !entryNext.call(entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n entries.push({ key: first.value + '', value: second.value + '' });\n }\n } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });\n } else {\n parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\n }\n }\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.append` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n state.entries.push({ key: name + '', value: value + '' });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) entries.splice(index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) result.push(entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = name + '';\n var val = value + '';\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) entries.splice(index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) entries.push({ key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n var entries = state.entries;\n // Array#sort is not stable in some engines\n var slice = entries.slice();\n var entry, entriesIndex, sliceIndex;\n entries.length = 0;\n for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\n entry = slice[sliceIndex];\n for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\n if (entries[entriesIndex].key > entry.key) {\n entries.splice(entriesIndex, 0, entry);\n break;\n }\n }\n if (entriesIndex === sliceIndex) entries.push(entry);\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n var entries = getInternalParamsState(this).entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n result.push(serialize(entry.key) + '=' + serialize(entry.value));\n } return result.join('&');\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` for correct work with polyfilled `URLSearchParams`\n// https://github.com/zloirock/core-js/issues/674\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\n $({ global: true, enumerable: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n var args = [input];\n var init, body, headers;\n if (arguments.length > 1) {\n init = arguments[1];\n if (isObject(init)) {\n body = init.body;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n init = create(init, {\n body: createPropertyDescriptor(0, String(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n }\n args.push(init);\n } return $fetch.apply(this, args);\n }\n });\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n","function TreeBase() {} // removes all nodes from the tree\n\n\nTreeBase.prototype.clear = function () {\n this._root = null;\n this.size = 0;\n}; // returns node data if found, null otherwise\n\n\nTreeBase.prototype.find = function (data) {\n var res = this._root;\n\n while (res !== null) {\n var c = this._comparator(data, res.data);\n\n if (c === 0) {\n return res.data;\n } else {\n res = res.get_child(c > 0);\n }\n }\n\n return null;\n}; // returns iterator to node if found, null otherwise\n\n\nTreeBase.prototype.findIter = function (data) {\n var res = this._root;\n var iter = this.iterator();\n\n while (res !== null) {\n var c = this._comparator(data, res.data);\n\n if (c === 0) {\n iter._cursor = res;\n return iter;\n } else {\n iter._ancestors.push(res);\n\n res = res.get_child(c > 0);\n }\n }\n\n return null;\n}; // Returns an iterator to the tree node at or immediately after the item\n\n\nTreeBase.prototype.lowerBound = function (item) {\n var cur = this._root;\n var iter = this.iterator();\n var cmp = this._comparator;\n\n while (cur !== null) {\n var c = cmp(item, cur.data);\n\n if (c === 0) {\n iter._cursor = cur;\n return iter;\n }\n\n iter._ancestors.push(cur);\n\n cur = cur.get_child(c > 0);\n }\n\n for (var i = iter._ancestors.length - 1; i >= 0; --i) {\n cur = iter._ancestors[i];\n\n if (cmp(item, cur.data) < 0) {\n iter._cursor = cur;\n iter._ancestors.length = i;\n return iter;\n }\n }\n\n iter._ancestors.length = 0;\n return iter;\n}; // Returns an iterator to the tree node immediately after the item\n\n\nTreeBase.prototype.upperBound = function (item) {\n var iter = this.lowerBound(item);\n var cmp = this._comparator;\n\n while (iter.data() !== null && cmp(iter.data(), item) === 0) {\n iter.next();\n }\n\n return iter;\n}; // returns null if tree is empty\n\n\nTreeBase.prototype.min = function () {\n var res = this._root;\n\n if (res === null) {\n return null;\n }\n\n while (res.left !== null) {\n res = res.left;\n }\n\n return res.data;\n}; // returns null if tree is empty\n\n\nTreeBase.prototype.max = function () {\n var res = this._root;\n\n if (res === null) {\n return null;\n }\n\n while (res.right !== null) {\n res = res.right;\n }\n\n return res.data;\n}; // returns a null iterator\n// call next() or prev() to point to an element\n\n\nTreeBase.prototype.iterator = function () {\n return new Iterator(this);\n}; // calls cb on each node's data, in order\n\n\nTreeBase.prototype.each = function (cb) {\n var it = this.iterator(),\n data;\n\n while ((data = it.next()) !== null) {\n cb(data);\n }\n}; // calls cb on each node's data, in reverse order\n\n\nTreeBase.prototype.reach = function (cb) {\n var it = this.iterator(),\n data;\n\n while ((data = it.prev()) !== null) {\n cb(data);\n }\n};\n\nfunction Iterator(tree) {\n this._tree = tree;\n this._ancestors = [];\n this._cursor = null;\n}\n\nIterator.prototype.data = function () {\n return this._cursor !== null ? this._cursor.data : null;\n}; // if null-iterator, returns first node\n// otherwise, returns next node\n\n\nIterator.prototype.next = function () {\n if (this._cursor === null) {\n var root = this._tree._root;\n\n if (root !== null) {\n this._minNode(root);\n }\n } else {\n if (this._cursor.right === null) {\n // no greater node in subtree, go up to parent\n // if coming from a right child, continue up the stack\n var save;\n\n do {\n save = this._cursor;\n\n if (this._ancestors.length) {\n this._cursor = this._ancestors.pop();\n } else {\n this._cursor = null;\n break;\n }\n } while (this._cursor.right === save);\n } else {\n // get the next node from the subtree\n this._ancestors.push(this._cursor);\n\n this._minNode(this._cursor.right);\n }\n }\n\n return this._cursor !== null ? this._cursor.data : null;\n}; // if null-iterator, returns last node\n// otherwise, returns previous node\n\n\nIterator.prototype.prev = function () {\n if (this._cursor === null) {\n var root = this._tree._root;\n\n if (root !== null) {\n this._maxNode(root);\n }\n } else {\n if (this._cursor.left === null) {\n var save;\n\n do {\n save = this._cursor;\n\n if (this._ancestors.length) {\n this._cursor = this._ancestors.pop();\n } else {\n this._cursor = null;\n break;\n }\n } while (this._cursor.left === save);\n } else {\n this._ancestors.push(this._cursor);\n\n this._maxNode(this._cursor.left);\n }\n }\n\n return this._cursor !== null ? this._cursor.data : null;\n};\n\nIterator.prototype._minNode = function (start) {\n while (start.left !== null) {\n this._ancestors.push(start);\n\n start = start.left;\n }\n\n this._cursor = start;\n};\n\nIterator.prototype._maxNode = function (start) {\n while (start.right !== null) {\n this._ancestors.push(start);\n\n start = start.right;\n }\n\n this._cursor = start;\n};\n\nmodule.exports = TreeBase;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = __webpack_public_path__ + \"media/images/marker-icon-2x-680f69f3.png\";","module.exports = __webpack_public_path__ + \"media/images/marker-icon-2b3e1faf.png\";","module.exports = __webpack_public_path__ + \"media/images/marker-shadow-a0c6cc14.png\";","// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n/*eslint quotes:0*/\n\nmodule.exports = require('entities/lib/maps/entities.json');","'use strict';\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');","module.exports = /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;","module.exports = /[\\0-\\x1F\\x7F-\\x9F]/;","module.exports = /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;","// Regexps to match html elements\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?].*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment + '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;","// ~~strike through~~\n//\n'use strict'; // Insert each marker as a separate text token, and add it to delimiter list\n//\n\nmodule.exports.tokenize = function strikethrough(state, silent) {\n var i,\n scanned,\n token,\n len,\n ch,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) {\n return false;\n }\n\n if (marker !== 0x7E\n /* ~ */\n ) {\n return false;\n }\n\n scanned = state.scanDelims(state.pos, true);\n len = scanned.length;\n ch = String.fromCharCode(marker);\n\n if (len < 2) {\n return false;\n }\n\n if (len % 2) {\n token = state.push('text', '', 0);\n token.content = ch;\n len--;\n }\n\n for (i = 0; i < len; i += 2) {\n token = state.push('text', '', 0);\n token.content = ch + ch;\n state.delimiters.push({\n marker: marker,\n length: 0,\n // disable \"rule of 3\" length checks meant for emphasis\n jump: i,\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n return true;\n};\n\nfunction postProcess(state, delimiters) {\n var i,\n j,\n startDelim,\n endDelim,\n token,\n loneMarkers = [],\n max = delimiters.length;\n\n for (i = 0; i < max; i++) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x7E\n /* ~ */\n ) {\n continue;\n }\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end];\n token = state.tokens[startDelim.token];\n token.type = 's_open';\n token.tag = 's';\n token.nesting = 1;\n token.markup = '~~';\n token.content = '';\n token = state.tokens[endDelim.token];\n token.type = 's_close';\n token.tag = 's';\n token.nesting = -1;\n token.markup = '~~';\n token.content = '';\n\n if (state.tokens[endDelim.token - 1].type === 'text' && state.tokens[endDelim.token - 1].content === '~') {\n loneMarkers.push(endDelim.token - 1);\n }\n } // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n\n\n while (loneMarkers.length) {\n i = loneMarkers.pop();\n j = i + 1;\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++;\n }\n\n j--;\n\n if (i !== j) {\n token = state.tokens[j];\n state.tokens[j] = state.tokens[i];\n state.tokens[i] = token;\n }\n }\n} // Walk through delimiter list and replace text tokens with tags\n//\n\n\nmodule.exports.postProcess = function strikethrough(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};","// Process *this* and _that_\n//\n'use strict'; // Insert each marker as a separate text token, and add it to delimiter list\n//\n\nmodule.exports.tokenize = function emphasis(state, silent) {\n var i,\n scanned,\n token,\n start = state.pos,\n marker = state.src.charCodeAt(start);\n\n if (silent) {\n return false;\n }\n\n if (marker !== 0x5F\n /* _ */\n && marker !== 0x2A\n /* * */\n ) {\n return false;\n }\n\n scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n for (i = 0; i < scanned.length; i++) {\n token = state.push('text', '', 0);\n token.content = String.fromCharCode(marker);\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker: marker,\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n // An amount of characters before this one that's equivalent to\n // current one. In plain English: if this delimiter does not open\n // an emphasis, neither do previous `jump` characters.\n //\n // Used to skip sequences like \"*****\" in one step, for 1st asterisk\n // value will be 0, for 2nd it's 1 and so on.\n //\n jump: i,\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n });\n }\n\n state.pos += scanned.length;\n return true;\n};\n\nfunction postProcess(state, delimiters) {\n var i,\n startDelim,\n endDelim,\n token,\n ch,\n isStrong,\n max = delimiters.length;\n\n for (i = max - 1; i >= 0; i--) {\n startDelim = delimiters[i];\n\n if (startDelim.marker !== 0x5F\n /* _ */\n && startDelim.marker !== 0x2A\n /* * */\n ) {\n continue;\n } // Process only opening markers\n\n\n if (startDelim.end === -1) {\n continue;\n }\n\n endDelim = delimiters[startDelim.end]; // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n\n isStrong = i > 0 && delimiters[i - 1].end === startDelim.end + 1 && delimiters[i - 1].token === startDelim.token - 1 && delimiters[startDelim.end + 1].token === endDelim.token + 1 && delimiters[i - 1].marker === startDelim.marker;\n ch = String.fromCharCode(startDelim.marker);\n token = state.tokens[startDelim.token];\n token.type = isStrong ? 'strong_open' : 'em_open';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = 1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n token = state.tokens[endDelim.token];\n token.type = isStrong ? 'strong_close' : 'em_close';\n token.tag = isStrong ? 'strong' : 'em';\n token.nesting = -1;\n token.markup = isStrong ? ch + ch : ch;\n token.content = '';\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = '';\n state.tokens[delimiters[startDelim.end + 1].token].content = '';\n i--;\n }\n }\n} // Walk through delimiter list and replace text tokens with tags\n//\n\n\nmodule.exports.postProcess = function emphasis(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n postProcess(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters);\n }\n }\n};","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","/**\n * @this {Promise}\n */\nfunction finallyConstructor(callback) {\n var constructor = this.constructor;\n return this.then(function (value) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function () {\n // @ts-ignore\n return constructor.reject(reason);\n });\n });\n}\n\nexport default finallyConstructor;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction allSettled(arr) {\n var P = this;\n return new P(function (resolve, reject) {\n if (!(arr && typeof arr.length !== 'undefined')) {\n return reject(new TypeError(_typeof(arr) + ' ' + arr + ' is not iterable(cannot read property Symbol(Symbol.iterator))'));\n }\n\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n if (val && (_typeof(val) === 'object' || typeof val === 'function')) {\n var then = val.then;\n\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, function (e) {\n args[i] = {\n status: 'rejected',\n reason: e\n };\n\n if (--remaining === 0) {\n resolve(args);\n }\n });\n return;\n }\n }\n\n args[i] = {\n status: 'fulfilled',\n value: val\n };\n\n if (--remaining === 0) {\n resolve(args);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n}\n\nexport default allSettled;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (root, factory) {\n 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n})(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n return filtered.map(function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(\\),.*$)/g, '');\n }\n\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '('); // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/); // remove the parenthesized location from the line, if it was matched\n\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n var tokens = sanitizedLine.split(/\\s+/).slice(1); // if a location was matched, pass it to extractLocation() otherwise pop the last token\n\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n return filtered.map(function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || e.message.indexOf('\\n') > -1 && e.message.split('\\n').length > e.stacktrace.split('\\n').length) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n\n if (match) {\n result.push(new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n return filtered.map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = tokens.shift() || '';\n var functionName = functionCall.replace(/<anonymous function(: (\\w+))?>/, '$2').replace(/\\([^)]*\\)/g, '') || undefined;\n var argsRaw;\n\n if (functionCall.match(/\\(([^)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n }\n\n var args = argsRaw === undefined || argsRaw === '[arguments not available]' ? undefined : argsRaw.split(',');\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n});","var __self__ = function (root) {\n function F() {\n this.fetch = false;\n this.DOMException = root.DOMException;\n }\n\n F.prototype = root;\n return new F();\n}(typeof self !== 'undefined' ? self : this);\n\n(function (self) {\n var irrelevant = function (exports) {\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && function () {\n try {\n new Blob();\n return true;\n } catch (e) {\n return false;\n }\n }(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj);\n }\n\n if (support.arrayBuffer) {\n var viewClasses = ['[object Int8Array]', '[object Uint8Array]', '[object Uint8ClampedArray]', '[object Int16Array]', '[object Uint16Array]', '[object Int32Array]', '[object Uint32Array]', '[object Float32Array]', '[object Float64Array]'];\n\n var isArrayBufferView = ArrayBuffer.isView || function (obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1;\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name');\n }\n\n return name.toLowerCase();\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n\n return value;\n } // Build a destructive iterator for the value list\n\n\n function iteratorFor(items) {\n var iterator = {\n next: function next() {\n var value = items.shift();\n return {\n done: value === undefined,\n value: value\n };\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function () {\n return iterator;\n };\n }\n\n return iterator;\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function (value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function (header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function (name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function (name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function (name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function (name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null;\n };\n\n Headers.prototype.has = function (name) {\n return this.map.hasOwnProperty(normalizeName(name));\n };\n\n Headers.prototype.set = function (name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function (callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function () {\n var items = [];\n this.forEach(function (value, name) {\n items.push(name);\n });\n return iteratorFor(items);\n };\n\n Headers.prototype.values = function () {\n var items = [];\n this.forEach(function (value) {\n items.push(value);\n });\n return iteratorFor(items);\n };\n\n Headers.prototype.entries = function () {\n var items = [];\n this.forEach(function (value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items);\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'));\n }\n\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function (resolve, reject) {\n reader.onload = function () {\n resolve(reader.result);\n };\n\n reader.onerror = function () {\n reject(reader.error);\n };\n });\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise;\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise;\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n\n return chars.join('');\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0);\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer;\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function (body) {\n this._bodyInit = body;\n\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer); // IE 10-11 can't handle a DataView body.\n\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function () {\n var rejected = consumed(this);\n\n if (rejected) {\n return rejected;\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob);\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]));\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob');\n } else {\n return Promise.resolve(new Blob([this._bodyText]));\n }\n };\n\n this.arrayBuffer = function () {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer);\n } else {\n return this.blob().then(readBlobAsArrayBuffer);\n }\n };\n }\n\n this.text = function () {\n var rejected = consumed(this);\n\n if (rejected) {\n return rejected;\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob);\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text');\n } else {\n return Promise.resolve(this._bodyText);\n }\n };\n\n if (support.formData) {\n this.formData = function () {\n return this.text().then(decode);\n };\n }\n\n this.json = function () {\n return this.text().then(JSON.parse);\n };\n\n return this;\n } // HTTP methods whose capitalization should be normalized\n\n\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method;\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read');\n }\n\n this.url = input.url;\n this.credentials = input.credentials;\n\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests');\n }\n\n this._initBody(body);\n }\n\n Request.prototype.clone = function () {\n return new Request(this, {\n body: this._bodyInit\n });\n };\n\n function decode(body) {\n var form = new FormData();\n body.trim().split('&').forEach(function (bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form;\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers(); // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n preProcessedHeaders.split(/\\r?\\n/).forEach(function (line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers;\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function () {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n });\n };\n\n Response.error = function () {\n var response = new Response(null, {\n status: 0,\n statusText: ''\n });\n response.type = 'error';\n return response;\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function (url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code');\n }\n\n return new Response(null, {\n status: status,\n headers: {\n location: url\n }\n });\n };\n\n exports.DOMException = self.DOMException;\n\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function (message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function (resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'));\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function () {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function () {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function () {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.onabort = function () {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function (value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function () {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n });\n }\n\n fetch.polyfill = true;\n\n if (!self.fetch) {\n self.fetch = fetch;\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n return exports;\n }({});\n})(__self__);\n\ndelete __self__.fetch.polyfill;\nexports = __self__.fetch; // To enable: import fetch from 'cross-fetch'\n\nexports[\"default\"] = __self__.fetch; // For TypeScript consumers without esModuleInterop.\n\nexports.fetch = __self__.fetch; // To enable: import {fetch} from 'cross-fetch'\n\nexports.Headers = __self__.Headers;\nexports.Request = __self__.Request;\nexports.Response = __self__.Response;\nmodule.exports = exports;","'use strict';\n\nmodule.exports = require('./lib/');","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n CSRFProtection(xhr);\n }\n\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n\n element = e.target;\n } else {\n element = e;\n }\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n\n isXhrRedirect = function isXhrRedirect(event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n }\n\n formContent += '<input type=\"submit\" />';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nTurbolinks 5.2.0\nCopyright © 2018 Basecamp, LLC\n */\n(function () {\n var t = this;\n (function () {\n (function () {\n this.Turbolinks = {\n supported: function () {\n return null != window.history.pushState && null != window.requestAnimationFrame && null != window.addEventListener;\n }(),\n visit: function visit(t, r) {\n return e.controller.visit(t, r);\n },\n clearCache: function clearCache() {\n return e.controller.clearCache();\n },\n setProgressBarDelay: function setProgressBarDelay(t) {\n return e.controller.setProgressBarDelay(t);\n }\n };\n }).call(this);\n }).call(t);\n var e = t.Turbolinks;\n (function () {\n (function () {\n var t,\n r,\n n,\n o = [].slice;\n e.copyObject = function (t) {\n var e, r, n;\n r = {};\n\n for (e in t) {\n n = t[e], r[e] = n;\n }\n\n return r;\n }, e.closest = function (e, r) {\n return t.call(e, r);\n }, t = function () {\n var t, e;\n return t = document.documentElement, null != (e = t.closest) ? e : function (t) {\n var e;\n\n for (e = this; e;) {\n if (e.nodeType === Node.ELEMENT_NODE && r.call(e, t)) return e;\n e = e.parentNode;\n }\n };\n }(), e.defer = function (t) {\n return setTimeout(t, 1);\n }, e.throttle = function (t) {\n var e;\n return e = null, function () {\n var r;\n return r = 1 <= arguments.length ? o.call(arguments, 0) : [], null != e ? e : e = requestAnimationFrame(function (n) {\n return function () {\n return e = null, t.apply(n, r);\n };\n }(this));\n };\n }, e.dispatch = function (t, e) {\n var r, o, i, s, a, u;\n return a = null != e ? e : {}, u = a.target, r = a.cancelable, o = a.data, i = document.createEvent(\"Events\"), i.initEvent(t, !0, r === !0), i.data = null != o ? o : {}, i.cancelable && !n && (s = i.preventDefault, i.preventDefault = function () {\n return this.defaultPrevented || Object.defineProperty(this, \"defaultPrevented\", {\n get: function get() {\n return !0;\n }\n }), s.call(this);\n }), (null != u ? u : document).dispatchEvent(i), i;\n }, n = function () {\n var t;\n return t = document.createEvent(\"Events\"), t.initEvent(\"test\", !0, !0), t.preventDefault(), t.defaultPrevented;\n }(), e.match = function (t, e) {\n return r.call(t, e);\n }, r = function () {\n var t, e, r, n;\n return t = document.documentElement, null != (e = null != (r = null != (n = t.matchesSelector) ? n : t.webkitMatchesSelector) ? r : t.msMatchesSelector) ? e : t.mozMatchesSelector;\n }(), e.uuid = function () {\n var t, e, r;\n\n for (r = \"\", t = e = 1; 36 >= e; t = ++e) {\n r += 9 === t || 14 === t || 19 === t || 24 === t ? \"-\" : 15 === t ? \"4\" : 20 === t ? (Math.floor(4 * Math.random()) + 8).toString(16) : Math.floor(15 * Math.random()).toString(16);\n }\n\n return r;\n };\n }).call(this), function () {\n e.Location = function () {\n function t(t) {\n var e, r;\n null == t && (t = \"\"), r = document.createElement(\"a\"), r.href = t.toString(), this.absoluteURL = r.href, e = r.hash.length, 2 > e ? this.requestURL = this.absoluteURL : (this.requestURL = this.absoluteURL.slice(0, -e), this.anchor = r.hash.slice(1));\n }\n\n var e, r, n, o;\n return t.wrap = function (t) {\n return t instanceof this ? t : new this(t);\n }, t.prototype.getOrigin = function () {\n return this.absoluteURL.split(\"/\", 3).join(\"/\");\n }, t.prototype.getPath = function () {\n var t, e;\n return null != (t = null != (e = this.requestURL.match(/\\/\\/[^\\/]*(\\/[^?;]*)/)) ? e[1] : void 0) ? t : \"/\";\n }, t.prototype.getPathComponents = function () {\n return this.getPath().split(\"/\").slice(1);\n }, t.prototype.getLastPathComponent = function () {\n return this.getPathComponents().slice(-1)[0];\n }, t.prototype.getExtension = function () {\n var t, e;\n return null != (t = null != (e = this.getLastPathComponent().match(/\\.[^.]*$/)) ? e[0] : void 0) ? t : \"\";\n }, t.prototype.isHTML = function () {\n return this.getExtension().match(/^(?:|\\.(?:htm|html|xhtml))$/);\n }, t.prototype.isPrefixedBy = function (t) {\n var e;\n return e = r(t), this.isEqualTo(t) || o(this.absoluteURL, e);\n }, t.prototype.isEqualTo = function (t) {\n return this.absoluteURL === (null != t ? t.absoluteURL : void 0);\n }, t.prototype.toCacheKey = function () {\n return this.requestURL;\n }, t.prototype.toJSON = function () {\n return this.absoluteURL;\n }, t.prototype.toString = function () {\n return this.absoluteURL;\n }, t.prototype.valueOf = function () {\n return this.absoluteURL;\n }, r = function r(t) {\n return e(t.getOrigin() + t.getPath());\n }, e = function e(t) {\n return n(t, \"/\") ? t : t + \"/\";\n }, o = function o(t, e) {\n return t.slice(0, e.length) === e;\n }, n = function n(t, e) {\n return t.slice(-e.length) === e;\n }, t;\n }();\n }.call(this), function () {\n var t = function t(_t, e) {\n return function () {\n return _t.apply(e, arguments);\n };\n };\n\n e.HttpRequest = function () {\n function r(r, n, o) {\n this.delegate = r, this.requestCanceled = t(this.requestCanceled, this), this.requestTimedOut = t(this.requestTimedOut, this), this.requestFailed = t(this.requestFailed, this), this.requestLoaded = t(this.requestLoaded, this), this.requestProgressed = t(this.requestProgressed, this), this.url = e.Location.wrap(n).requestURL, this.referrer = e.Location.wrap(o).absoluteURL, this.createXHR();\n }\n\n return r.NETWORK_FAILURE = 0, r.TIMEOUT_FAILURE = -1, r.timeout = 60, r.prototype.send = function () {\n var t;\n return this.xhr && !this.sent ? (this.notifyApplicationBeforeRequestStart(), this.setProgress(0), this.xhr.send(), this.sent = !0, \"function\" == typeof (t = this.delegate).requestStarted ? t.requestStarted() : void 0) : void 0;\n }, r.prototype.cancel = function () {\n return this.xhr && this.sent ? this.xhr.abort() : void 0;\n }, r.prototype.requestProgressed = function (t) {\n return t.lengthComputable ? this.setProgress(t.loaded / t.total) : void 0;\n }, r.prototype.requestLoaded = function () {\n return this.endRequest(function (t) {\n return function () {\n var e;\n return 200 <= (e = t.xhr.status) && 300 > e ? t.delegate.requestCompletedWithResponse(t.xhr.responseText, t.xhr.getResponseHeader(\"Turbolinks-Location\")) : (t.failed = !0, t.delegate.requestFailedWithStatusCode(t.xhr.status, t.xhr.responseText));\n };\n }(this));\n }, r.prototype.requestFailed = function () {\n return this.endRequest(function (t) {\n return function () {\n return t.failed = !0, t.delegate.requestFailedWithStatusCode(t.constructor.NETWORK_FAILURE);\n };\n }(this));\n }, r.prototype.requestTimedOut = function () {\n return this.endRequest(function (t) {\n return function () {\n return t.failed = !0, t.delegate.requestFailedWithStatusCode(t.constructor.TIMEOUT_FAILURE);\n };\n }(this));\n }, r.prototype.requestCanceled = function () {\n return this.endRequest();\n }, r.prototype.notifyApplicationBeforeRequestStart = function () {\n return e.dispatch(\"turbolinks:request-start\", {\n data: {\n url: this.url,\n xhr: this.xhr\n }\n });\n }, r.prototype.notifyApplicationAfterRequestEnd = function () {\n return e.dispatch(\"turbolinks:request-end\", {\n data: {\n url: this.url,\n xhr: this.xhr\n }\n });\n }, r.prototype.createXHR = function () {\n return this.xhr = new XMLHttpRequest(), this.xhr.open(\"GET\", this.url, !0), this.xhr.timeout = 1e3 * this.constructor.timeout, this.xhr.setRequestHeader(\"Accept\", \"text/html, application/xhtml+xml\"), this.xhr.setRequestHeader(\"Turbolinks-Referrer\", this.referrer), this.xhr.onprogress = this.requestProgressed, this.xhr.onload = this.requestLoaded, this.xhr.onerror = this.requestFailed, this.xhr.ontimeout = this.requestTimedOut, this.xhr.onabort = this.requestCanceled;\n }, r.prototype.endRequest = function (t) {\n return this.xhr ? (this.notifyApplicationAfterRequestEnd(), null != t && t.call(this), this.destroy()) : void 0;\n }, r.prototype.setProgress = function (t) {\n var e;\n return this.progress = t, \"function\" == typeof (e = this.delegate).requestProgressed ? e.requestProgressed(this.progress) : void 0;\n }, r.prototype.destroy = function () {\n var t;\n return this.setProgress(1), \"function\" == typeof (t = this.delegate).requestFinished && t.requestFinished(), this.delegate = null, this.xhr = null;\n }, r;\n }();\n }.call(this), function () {\n var t = function t(_t2, e) {\n return function () {\n return _t2.apply(e, arguments);\n };\n };\n\n e.ProgressBar = function () {\n function e() {\n this.trickle = t(this.trickle, this), this.stylesheetElement = this.createStylesheetElement(), this.progressElement = this.createProgressElement();\n }\n\n var r;\n return r = 300, e.defaultCSS = \".turbolinks-progress-bar {\\n position: fixed;\\n display: block;\\n top: 0;\\n left: 0;\\n height: 3px;\\n background: #0076ff;\\n z-index: 9999;\\n transition: width \" + r + \"ms ease-out, opacity \" + r / 2 + \"ms \" + r / 2 + \"ms ease-in;\\n transform: translate3d(0, 0, 0);\\n}\", e.prototype.show = function () {\n return this.visible ? void 0 : (this.visible = !0, this.installStylesheetElement(), this.installProgressElement(), this.startTrickling());\n }, e.prototype.hide = function () {\n return this.visible && !this.hiding ? (this.hiding = !0, this.fadeProgressElement(function (t) {\n return function () {\n return t.uninstallProgressElement(), t.stopTrickling(), t.visible = !1, t.hiding = !1;\n };\n }(this))) : void 0;\n }, e.prototype.setValue = function (t) {\n return this.value = t, this.refresh();\n }, e.prototype.installStylesheetElement = function () {\n return document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }, e.prototype.installProgressElement = function () {\n return this.progressElement.style.width = 0, this.progressElement.style.opacity = 1, document.documentElement.insertBefore(this.progressElement, document.body), this.refresh();\n }, e.prototype.fadeProgressElement = function (t) {\n return this.progressElement.style.opacity = 0, setTimeout(t, 1.5 * r);\n }, e.prototype.uninstallProgressElement = function () {\n return this.progressElement.parentNode ? document.documentElement.removeChild(this.progressElement) : void 0;\n }, e.prototype.startTrickling = function () {\n return null != this.trickleInterval ? this.trickleInterval : this.trickleInterval = setInterval(this.trickle, r);\n }, e.prototype.stopTrickling = function () {\n return clearInterval(this.trickleInterval), this.trickleInterval = null;\n }, e.prototype.trickle = function () {\n return this.setValue(this.value + Math.random() / 100);\n }, e.prototype.refresh = function () {\n return requestAnimationFrame(function (t) {\n return function () {\n return t.progressElement.style.width = 10 + 90 * t.value + \"%\";\n };\n }(this));\n }, e.prototype.createStylesheetElement = function () {\n var t;\n return t = document.createElement(\"style\"), t.type = \"text/css\", t.textContent = this.constructor.defaultCSS, t;\n }, e.prototype.createProgressElement = function () {\n var t;\n return t = document.createElement(\"div\"), t.className = \"turbolinks-progress-bar\", t;\n }, e;\n }();\n }.call(this), function () {\n var t = function t(_t3, e) {\n return function () {\n return _t3.apply(e, arguments);\n };\n };\n\n e.BrowserAdapter = function () {\n function r(r) {\n this.controller = r, this.showProgressBar = t(this.showProgressBar, this), this.progressBar = new e.ProgressBar();\n }\n\n var n, o, i;\n return i = e.HttpRequest, n = i.NETWORK_FAILURE, o = i.TIMEOUT_FAILURE, r.prototype.visitProposedToLocationWithAction = function (t, e) {\n return this.controller.startVisitToLocationWithAction(t, e);\n }, r.prototype.visitStarted = function (t) {\n return t.issueRequest(), t.changeHistory(), t.loadCachedSnapshot();\n }, r.prototype.visitRequestStarted = function (t) {\n return this.progressBar.setValue(0), t.hasCachedSnapshot() || \"restore\" !== t.action ? this.showProgressBarAfterDelay() : this.showProgressBar();\n }, r.prototype.visitRequestProgressed = function (t) {\n return this.progressBar.setValue(t.progress);\n }, r.prototype.visitRequestCompleted = function (t) {\n return t.loadResponse();\n }, r.prototype.visitRequestFailedWithStatusCode = function (t, e) {\n switch (e) {\n case n:\n case o:\n return this.reload();\n\n default:\n return t.loadResponse();\n }\n }, r.prototype.visitRequestFinished = function (t) {\n return this.hideProgressBar();\n }, r.prototype.visitCompleted = function (t) {\n return t.followRedirect();\n }, r.prototype.pageInvalidated = function () {\n return this.reload();\n }, r.prototype.showProgressBarAfterDelay = function () {\n return this.progressBarTimeout = setTimeout(this.showProgressBar, this.controller.progressBarDelay);\n }, r.prototype.showProgressBar = function () {\n return this.progressBar.show();\n }, r.prototype.hideProgressBar = function () {\n return this.progressBar.hide(), clearTimeout(this.progressBarTimeout);\n }, r.prototype.reload = function () {\n return window.location.reload();\n }, r;\n }();\n }.call(this), function () {\n var t = function t(_t4, e) {\n return function () {\n return _t4.apply(e, arguments);\n };\n };\n\n e.History = function () {\n function r(e) {\n this.delegate = e, this.onPageLoad = t(this.onPageLoad, this), this.onPopState = t(this.onPopState, this);\n }\n\n return r.prototype.start = function () {\n return this.started ? void 0 : (addEventListener(\"popstate\", this.onPopState, !1), addEventListener(\"load\", this.onPageLoad, !1), this.started = !0);\n }, r.prototype.stop = function () {\n return this.started ? (removeEventListener(\"popstate\", this.onPopState, !1), removeEventListener(\"load\", this.onPageLoad, !1), this.started = !1) : void 0;\n }, r.prototype.push = function (t, r) {\n return t = e.Location.wrap(t), this.update(\"push\", t, r);\n }, r.prototype.replace = function (t, r) {\n return t = e.Location.wrap(t), this.update(\"replace\", t, r);\n }, r.prototype.onPopState = function (t) {\n var r, n, o, i;\n return this.shouldHandlePopState() && (i = null != (n = t.state) ? n.turbolinks : void 0) ? (r = e.Location.wrap(window.location), o = i.restorationIdentifier, this.delegate.historyPoppedToLocationWithRestorationIdentifier(r, o)) : void 0;\n }, r.prototype.onPageLoad = function (t) {\n return e.defer(function (t) {\n return function () {\n return t.pageLoaded = !0;\n };\n }(this));\n }, r.prototype.shouldHandlePopState = function () {\n return this.pageIsLoaded();\n }, r.prototype.pageIsLoaded = function () {\n return this.pageLoaded || \"complete\" === document.readyState;\n }, r.prototype.update = function (t, e, r) {\n var n;\n return n = {\n turbolinks: {\n restorationIdentifier: r\n }\n }, history[t + \"State\"](n, null, e);\n }, r;\n }();\n }.call(this), function () {\n e.HeadDetails = function () {\n function t(t) {\n var e, r, n, s, a, u;\n\n for (this.elements = {}, n = 0, a = t.length; a > n; n++) {\n u = t[n], u.nodeType === Node.ELEMENT_NODE && (s = u.outerHTML, r = null != (e = this.elements)[s] ? e[s] : e[s] = {\n type: i(u),\n tracked: o(u),\n elements: []\n }, r.elements.push(u));\n }\n }\n\n var e, r, n, o, i;\n return t.fromHeadElement = function (t) {\n var e;\n return new this(null != (e = null != t ? t.childNodes : void 0) ? e : []);\n }, t.prototype.hasElementWithKey = function (t) {\n return t in this.elements;\n }, t.prototype.getTrackedElementSignature = function () {\n var t, e;\n return function () {\n var r, n;\n r = this.elements, n = [];\n\n for (t in r) {\n e = r[t].tracked, e && n.push(t);\n }\n\n return n;\n }.call(this).join(\"\");\n }, t.prototype.getScriptElementsNotInDetails = function (t) {\n return this.getElementsMatchingTypeNotInDetails(\"script\", t);\n }, t.prototype.getStylesheetElementsNotInDetails = function (t) {\n return this.getElementsMatchingTypeNotInDetails(\"stylesheet\", t);\n }, t.prototype.getElementsMatchingTypeNotInDetails = function (t, e) {\n var r, n, o, i, s, a;\n o = this.elements, s = [];\n\n for (n in o) {\n i = o[n], a = i.type, r = i.elements, a !== t || e.hasElementWithKey(n) || s.push(r[0]);\n }\n\n return s;\n }, t.prototype.getProvisionalElements = function () {\n var t, e, r, n, o, i, s;\n r = [], n = this.elements;\n\n for (e in n) {\n o = n[e], s = o.type, i = o.tracked, t = o.elements, null != s || i ? t.length > 1 && r.push.apply(r, t.slice(1)) : r.push.apply(r, t);\n }\n\n return r;\n }, t.prototype.getMetaValue = function (t) {\n var e;\n return null != (e = this.findMetaElementByName(t)) ? e.getAttribute(\"content\") : void 0;\n }, t.prototype.findMetaElementByName = function (t) {\n var r, n, o, i;\n r = void 0, i = this.elements;\n\n for (o in i) {\n n = i[o].elements, e(n[0], t) && (r = n[0]);\n }\n\n return r;\n }, i = function i(t) {\n return r(t) ? \"script\" : n(t) ? \"stylesheet\" : void 0;\n }, o = function o(t) {\n return \"reload\" === t.getAttribute(\"data-turbolinks-track\");\n }, r = function r(t) {\n var e;\n return e = t.tagName.toLowerCase(), \"script\" === e;\n }, n = function n(t) {\n var e;\n return e = t.tagName.toLowerCase(), \"style\" === e || \"link\" === e && \"stylesheet\" === t.getAttribute(\"rel\");\n }, e = function e(t, _e) {\n var r;\n return r = t.tagName.toLowerCase(), \"meta\" === r && t.getAttribute(\"name\") === _e;\n }, t;\n }();\n }.call(this), function () {\n e.Snapshot = function () {\n function t(t, e) {\n this.headDetails = t, this.bodyElement = e;\n }\n\n return t.wrap = function (t) {\n return t instanceof this ? t : \"string\" == typeof t ? this.fromHTMLString(t) : this.fromHTMLElement(t);\n }, t.fromHTMLString = function (t) {\n var e;\n return e = document.createElement(\"html\"), e.innerHTML = t, this.fromHTMLElement(e);\n }, t.fromHTMLElement = function (t) {\n var r, n, o, i;\n return o = t.querySelector(\"head\"), r = null != (i = t.querySelector(\"body\")) ? i : document.createElement(\"body\"), n = e.HeadDetails.fromHeadElement(o), new this(n, r);\n }, t.prototype.clone = function () {\n return new this.constructor(this.headDetails, this.bodyElement.cloneNode(!0));\n }, t.prototype.getRootLocation = function () {\n var t, r;\n return r = null != (t = this.getSetting(\"root\")) ? t : \"/\", new e.Location(r);\n }, t.prototype.getCacheControlValue = function () {\n return this.getSetting(\"cache-control\");\n }, t.prototype.getElementForAnchor = function (t) {\n try {\n return this.bodyElement.querySelector(\"[id='\" + t + \"'], a[name='\" + t + \"']\");\n } catch (e) {}\n }, t.prototype.getPermanentElements = function () {\n return this.bodyElement.querySelectorAll(\"[id][data-turbolinks-permanent]\");\n }, t.prototype.getPermanentElementById = function (t) {\n return this.bodyElement.querySelector(\"#\" + t + \"[data-turbolinks-permanent]\");\n }, t.prototype.getPermanentElementsPresentInSnapshot = function (t) {\n var e, r, n, o, i;\n\n for (o = this.getPermanentElements(), i = [], r = 0, n = o.length; n > r; r++) {\n e = o[r], t.getPermanentElementById(e.id) && i.push(e);\n }\n\n return i;\n }, t.prototype.findFirstAutofocusableElement = function () {\n return this.bodyElement.querySelector(\"[autofocus]\");\n }, t.prototype.hasAnchor = function (t) {\n return null != this.getElementForAnchor(t);\n }, t.prototype.isPreviewable = function () {\n return \"no-preview\" !== this.getCacheControlValue();\n }, t.prototype.isCacheable = function () {\n return \"no-cache\" !== this.getCacheControlValue();\n }, t.prototype.isVisitable = function () {\n return \"reload\" !== this.getSetting(\"visit-control\");\n }, t.prototype.getSetting = function (t) {\n return this.headDetails.getMetaValue(\"turbolinks-\" + t);\n }, t;\n }();\n }.call(this), function () {\n var t = [].slice;\n\n e.Renderer = function () {\n function e() {}\n\n var r;\n return e.render = function () {\n var e, r, n, o;\n return n = arguments[0], r = arguments[1], e = 3 <= arguments.length ? t.call(arguments, 2) : [], o = function (t, e, r) {\n r.prototype = t.prototype;\n var n = new r(),\n o = t.apply(n, e);\n return Object(o) === o ? o : n;\n }(this, e, function () {}), o.delegate = n, o.render(r), o;\n }, e.prototype.renderView = function (t) {\n return this.delegate.viewWillRender(this.newBody), t(), this.delegate.viewRendered(this.newBody);\n }, e.prototype.invalidateView = function () {\n return this.delegate.viewInvalidated();\n }, e.prototype.createScriptElement = function (t) {\n var e;\n return \"false\" === t.getAttribute(\"data-turbolinks-eval\") ? t : (e = document.createElement(\"script\"), e.textContent = t.textContent, e.async = !1, r(e, t), e);\n }, r = function r(t, e) {\n var r, n, o, i, s, a, u;\n\n for (i = e.attributes, a = [], r = 0, n = i.length; n > r; r++) {\n s = i[r], o = s.name, u = s.value, a.push(t.setAttribute(o, u));\n }\n\n return a;\n }, e;\n }();\n }.call(this), function () {\n var t,\n r,\n n = function n(t, e) {\n function r() {\n this.constructor = t;\n }\n\n for (var n in e) {\n o.call(e, n) && (t[n] = e[n]);\n }\n\n return r.prototype = e.prototype, t.prototype = new r(), t.__super__ = e.prototype, t;\n },\n o = {}.hasOwnProperty;\n\n e.SnapshotRenderer = function (e) {\n function o(t, e, r) {\n this.currentSnapshot = t, this.newSnapshot = e, this.isPreview = r, this.currentHeadDetails = this.currentSnapshot.headDetails, this.newHeadDetails = this.newSnapshot.headDetails, this.currentBody = this.currentSnapshot.bodyElement, this.newBody = this.newSnapshot.bodyElement;\n }\n\n return n(o, e), o.prototype.render = function (t) {\n return this.shouldRender() ? (this.mergeHead(), this.renderView(function (e) {\n return function () {\n return e.replaceBody(), e.isPreview || e.focusFirstAutofocusableElement(), t();\n };\n }(this))) : this.invalidateView();\n }, o.prototype.mergeHead = function () {\n return this.copyNewHeadStylesheetElements(), this.copyNewHeadScriptElements(), this.removeCurrentHeadProvisionalElements(), this.copyNewHeadProvisionalElements();\n }, o.prototype.replaceBody = function () {\n var t;\n return t = this.relocateCurrentBodyPermanentElements(), this.activateNewBodyScriptElements(), this.assignNewBody(), this.replacePlaceholderElementsWithClonedPermanentElements(t);\n }, o.prototype.shouldRender = function () {\n return this.newSnapshot.isVisitable() && this.trackedElementsAreIdentical();\n }, o.prototype.trackedElementsAreIdentical = function () {\n return this.currentHeadDetails.getTrackedElementSignature() === this.newHeadDetails.getTrackedElementSignature();\n }, o.prototype.copyNewHeadStylesheetElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getNewHeadStylesheetElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.appendChild(t));\n }\n\n return o;\n }, o.prototype.copyNewHeadScriptElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getNewHeadScriptElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.appendChild(this.createScriptElement(t)));\n }\n\n return o;\n }, o.prototype.removeCurrentHeadProvisionalElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getCurrentHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.removeChild(t));\n }\n\n return o;\n }, o.prototype.copyNewHeadProvisionalElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getNewHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.appendChild(t));\n }\n\n return o;\n }, o.prototype.relocateCurrentBodyPermanentElements = function () {\n var e, n, o, i, s, a, u;\n\n for (a = this.getCurrentBodyPermanentElements(), u = [], e = 0, n = a.length; n > e; e++) {\n i = a[e], s = t(i), o = this.newSnapshot.getPermanentElementById(i.id), r(i, s.element), r(o, i), u.push(s);\n }\n\n return u;\n }, o.prototype.replacePlaceholderElementsWithClonedPermanentElements = function (t) {\n var e, n, o, i, s, a, u;\n\n for (u = [], o = 0, i = t.length; i > o; o++) {\n a = t[o], n = a.element, s = a.permanentElement, e = s.cloneNode(!0), u.push(r(n, e));\n }\n\n return u;\n }, o.prototype.activateNewBodyScriptElements = function () {\n var t, e, n, o, i, s;\n\n for (i = this.getNewBodyScriptElements(), s = [], e = 0, o = i.length; o > e; e++) {\n n = i[e], t = this.createScriptElement(n), s.push(r(n, t));\n }\n\n return s;\n }, o.prototype.assignNewBody = function () {\n return document.body = this.newBody;\n }, o.prototype.focusFirstAutofocusableElement = function () {\n var t;\n return null != (t = this.newSnapshot.findFirstAutofocusableElement()) ? t.focus() : void 0;\n }, o.prototype.getNewHeadStylesheetElements = function () {\n return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails);\n }, o.prototype.getNewHeadScriptElements = function () {\n return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails);\n }, o.prototype.getCurrentHeadProvisionalElements = function () {\n return this.currentHeadDetails.getProvisionalElements();\n }, o.prototype.getNewHeadProvisionalElements = function () {\n return this.newHeadDetails.getProvisionalElements();\n }, o.prototype.getCurrentBodyPermanentElements = function () {\n return this.currentSnapshot.getPermanentElementsPresentInSnapshot(this.newSnapshot);\n }, o.prototype.getNewBodyScriptElements = function () {\n return this.newBody.querySelectorAll(\"script\");\n }, o;\n }(e.Renderer), t = function t(_t5) {\n var e;\n return e = document.createElement(\"meta\"), e.setAttribute(\"name\", \"turbolinks-permanent-placeholder\"), e.setAttribute(\"content\", _t5.id), {\n element: e,\n permanentElement: _t5\n };\n }, r = function r(t, e) {\n var r;\n return (r = t.parentNode) ? r.replaceChild(e, t) : void 0;\n };\n }.call(this), function () {\n var t = function t(_t6, e) {\n function n() {\n this.constructor = _t6;\n }\n\n for (var o in e) {\n r.call(e, o) && (_t6[o] = e[o]);\n }\n\n return n.prototype = e.prototype, _t6.prototype = new n(), _t6.__super__ = e.prototype, _t6;\n },\n r = {}.hasOwnProperty;\n\n e.ErrorRenderer = function (e) {\n function r(t) {\n var e;\n e = document.createElement(\"html\"), e.innerHTML = t, this.newHead = e.querySelector(\"head\"), this.newBody = e.querySelector(\"body\");\n }\n\n return t(r, e), r.prototype.render = function (t) {\n return this.renderView(function (e) {\n return function () {\n return e.replaceHeadAndBody(), e.activateBodyScriptElements(), t();\n };\n }(this));\n }, r.prototype.replaceHeadAndBody = function () {\n var t, e;\n return e = document.head, t = document.body, e.parentNode.replaceChild(this.newHead, e), t.parentNode.replaceChild(this.newBody, t);\n }, r.prototype.activateBodyScriptElements = function () {\n var t, e, r, n, o, i;\n\n for (n = this.getScriptElements(), i = [], e = 0, r = n.length; r > e; e++) {\n o = n[e], t = this.createScriptElement(o), i.push(o.parentNode.replaceChild(t, o));\n }\n\n return i;\n }, r.prototype.getScriptElements = function () {\n return document.documentElement.querySelectorAll(\"script\");\n }, r;\n }(e.Renderer);\n }.call(this), function () {\n e.View = function () {\n function t(t) {\n this.delegate = t, this.htmlElement = document.documentElement;\n }\n\n return t.prototype.getRootLocation = function () {\n return this.getSnapshot().getRootLocation();\n }, t.prototype.getElementForAnchor = function (t) {\n return this.getSnapshot().getElementForAnchor(t);\n }, t.prototype.getSnapshot = function () {\n return e.Snapshot.fromHTMLElement(this.htmlElement);\n }, t.prototype.render = function (t, e) {\n var r, n, o;\n return o = t.snapshot, r = t.error, n = t.isPreview, this.markAsPreview(n), null != o ? this.renderSnapshot(o, n, e) : this.renderError(r, e);\n }, t.prototype.markAsPreview = function (t) {\n return t ? this.htmlElement.setAttribute(\"data-turbolinks-preview\", \"\") : this.htmlElement.removeAttribute(\"data-turbolinks-preview\");\n }, t.prototype.renderSnapshot = function (t, r, n) {\n return e.SnapshotRenderer.render(this.delegate, n, this.getSnapshot(), e.Snapshot.wrap(t), r);\n }, t.prototype.renderError = function (t, r) {\n return e.ErrorRenderer.render(this.delegate, r, t);\n }, t;\n }();\n }.call(this), function () {\n var t = function t(_t7, e) {\n return function () {\n return _t7.apply(e, arguments);\n };\n };\n\n e.ScrollManager = function () {\n function r(r) {\n this.delegate = r, this.onScroll = t(this.onScroll, this), this.onScroll = e.throttle(this.onScroll);\n }\n\n return r.prototype.start = function () {\n return this.started ? void 0 : (addEventListener(\"scroll\", this.onScroll, !1), this.onScroll(), this.started = !0);\n }, r.prototype.stop = function () {\n return this.started ? (removeEventListener(\"scroll\", this.onScroll, !1), this.started = !1) : void 0;\n }, r.prototype.scrollToElement = function (t) {\n return t.scrollIntoView();\n }, r.prototype.scrollToPosition = function (t) {\n var e, r;\n return e = t.x, r = t.y, window.scrollTo(e, r);\n }, r.prototype.onScroll = function (t) {\n return this.updatePosition({\n x: window.pageXOffset,\n y: window.pageYOffset\n });\n }, r.prototype.updatePosition = function (t) {\n var e;\n return this.position = t, null != (e = this.delegate) ? e.scrollPositionChanged(this.position) : void 0;\n }, r;\n }();\n }.call(this), function () {\n e.SnapshotCache = function () {\n function t(t) {\n this.size = t, this.keys = [], this.snapshots = {};\n }\n\n var r;\n return t.prototype.has = function (t) {\n var e;\n return e = r(t), e in this.snapshots;\n }, t.prototype.get = function (t) {\n var e;\n if (this.has(t)) return e = this.read(t), this.touch(t), e;\n }, t.prototype.put = function (t, e) {\n return this.write(t, e), this.touch(t), e;\n }, t.prototype.read = function (t) {\n var e;\n return e = r(t), this.snapshots[e];\n }, t.prototype.write = function (t, e) {\n var n;\n return n = r(t), this.snapshots[n] = e;\n }, t.prototype.touch = function (t) {\n var e, n;\n return n = r(t), e = this.keys.indexOf(n), e > -1 && this.keys.splice(e, 1), this.keys.unshift(n), this.trim();\n }, t.prototype.trim = function () {\n var t, e, r, n, o;\n\n for (n = this.keys.splice(this.size), o = [], t = 0, r = n.length; r > t; t++) {\n e = n[t], o.push(delete this.snapshots[e]);\n }\n\n return o;\n }, r = function r(t) {\n return e.Location.wrap(t).toCacheKey();\n }, t;\n }();\n }.call(this), function () {\n var t = function t(_t8, e) {\n return function () {\n return _t8.apply(e, arguments);\n };\n };\n\n e.Visit = function () {\n function r(r, n, o) {\n this.controller = r, this.action = o, this.performScroll = t(this.performScroll, this), this.identifier = e.uuid(), this.location = e.Location.wrap(n), this.adapter = this.controller.adapter, this.state = \"initialized\", this.timingMetrics = {};\n }\n\n var n;\n return r.prototype.start = function () {\n return \"initialized\" === this.state ? (this.recordTimingMetric(\"visitStart\"), this.state = \"started\", this.adapter.visitStarted(this)) : void 0;\n }, r.prototype.cancel = function () {\n var t;\n return \"started\" === this.state ? (null != (t = this.request) && t.cancel(), this.cancelRender(), this.state = \"canceled\") : void 0;\n }, r.prototype.complete = function () {\n var t;\n return \"started\" === this.state ? (this.recordTimingMetric(\"visitEnd\"), this.state = \"completed\", \"function\" == typeof (t = this.adapter).visitCompleted && t.visitCompleted(this), this.controller.visitCompleted(this)) : void 0;\n }, r.prototype.fail = function () {\n var t;\n return \"started\" === this.state ? (this.state = \"failed\", \"function\" == typeof (t = this.adapter).visitFailed ? t.visitFailed(this) : void 0) : void 0;\n }, r.prototype.changeHistory = function () {\n var t, e;\n return this.historyChanged ? void 0 : (t = this.location.isEqualTo(this.referrer) ? \"replace\" : this.action, e = n(t), this.controller[e](this.location, this.restorationIdentifier), this.historyChanged = !0);\n }, r.prototype.issueRequest = function () {\n return this.shouldIssueRequest() && null == this.request ? (this.progress = 0, this.request = new e.HttpRequest(this, this.location, this.referrer), this.request.send()) : void 0;\n }, r.prototype.getCachedSnapshot = function () {\n var t;\n return !(t = this.controller.getCachedSnapshotForLocation(this.location)) || null != this.location.anchor && !t.hasAnchor(this.location.anchor) || \"restore\" !== this.action && !t.isPreviewable() ? void 0 : t;\n }, r.prototype.hasCachedSnapshot = function () {\n return null != this.getCachedSnapshot();\n }, r.prototype.loadCachedSnapshot = function () {\n var t, e;\n return (e = this.getCachedSnapshot()) ? (t = this.shouldIssueRequest(), this.render(function () {\n var r;\n return this.cacheSnapshot(), this.controller.render({\n snapshot: e,\n isPreview: t\n }, this.performScroll), \"function\" == typeof (r = this.adapter).visitRendered && r.visitRendered(this), t ? void 0 : this.complete();\n })) : void 0;\n }, r.prototype.loadResponse = function () {\n return null != this.response ? this.render(function () {\n var t, e;\n return this.cacheSnapshot(), this.request.failed ? (this.controller.render({\n error: this.response\n }, this.performScroll), \"function\" == typeof (t = this.adapter).visitRendered && t.visitRendered(this), this.fail()) : (this.controller.render({\n snapshot: this.response\n }, this.performScroll), \"function\" == typeof (e = this.adapter).visitRendered && e.visitRendered(this), this.complete());\n }) : void 0;\n }, r.prototype.followRedirect = function () {\n return this.redirectedToLocation && !this.followedRedirect ? (this.location = this.redirectedToLocation, this.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.redirectedToLocation, this.restorationIdentifier), this.followedRedirect = !0) : void 0;\n }, r.prototype.requestStarted = function () {\n var t;\n return this.recordTimingMetric(\"requestStart\"), \"function\" == typeof (t = this.adapter).visitRequestStarted ? t.visitRequestStarted(this) : void 0;\n }, r.prototype.requestProgressed = function (t) {\n var e;\n return this.progress = t, \"function\" == typeof (e = this.adapter).visitRequestProgressed ? e.visitRequestProgressed(this) : void 0;\n }, r.prototype.requestCompletedWithResponse = function (t, r) {\n return this.response = t, null != r && (this.redirectedToLocation = e.Location.wrap(r)), this.adapter.visitRequestCompleted(this);\n }, r.prototype.requestFailedWithStatusCode = function (t, e) {\n return this.response = e, this.adapter.visitRequestFailedWithStatusCode(this, t);\n }, r.prototype.requestFinished = function () {\n var t;\n return this.recordTimingMetric(\"requestEnd\"), \"function\" == typeof (t = this.adapter).visitRequestFinished ? t.visitRequestFinished(this) : void 0;\n }, r.prototype.performScroll = function () {\n return this.scrolled ? void 0 : (\"restore\" === this.action ? this.scrollToRestoredPosition() || this.scrollToTop() : this.scrollToAnchor() || this.scrollToTop(), this.scrolled = !0);\n }, r.prototype.scrollToRestoredPosition = function () {\n var t, e;\n return t = null != (e = this.restorationData) ? e.scrollPosition : void 0, null != t ? (this.controller.scrollToPosition(t), !0) : void 0;\n }, r.prototype.scrollToAnchor = function () {\n return null != this.location.anchor ? (this.controller.scrollToAnchor(this.location.anchor), !0) : void 0;\n }, r.prototype.scrollToTop = function () {\n return this.controller.scrollToPosition({\n x: 0,\n y: 0\n });\n }, r.prototype.recordTimingMetric = function (t) {\n var e;\n return null != (e = this.timingMetrics)[t] ? e[t] : e[t] = new Date().getTime();\n }, r.prototype.getTimingMetrics = function () {\n return e.copyObject(this.timingMetrics);\n }, n = function n(t) {\n switch (t) {\n case \"replace\":\n return \"replaceHistoryWithLocationAndRestorationIdentifier\";\n\n case \"advance\":\n case \"restore\":\n return \"pushHistoryWithLocationAndRestorationIdentifier\";\n }\n }, r.prototype.shouldIssueRequest = function () {\n return \"restore\" === this.action ? !this.hasCachedSnapshot() : !0;\n }, r.prototype.cacheSnapshot = function () {\n return this.snapshotCached ? void 0 : (this.controller.cacheSnapshot(), this.snapshotCached = !0);\n }, r.prototype.render = function (t) {\n return this.cancelRender(), this.frame = requestAnimationFrame(function (e) {\n return function () {\n return e.frame = null, t.call(e);\n };\n }(this));\n }, r.prototype.cancelRender = function () {\n return this.frame ? cancelAnimationFrame(this.frame) : void 0;\n }, r;\n }();\n }.call(this), function () {\n var t = function t(_t9, e) {\n return function () {\n return _t9.apply(e, arguments);\n };\n };\n\n e.Controller = function () {\n function r() {\n this.clickBubbled = t(this.clickBubbled, this), this.clickCaptured = t(this.clickCaptured, this), this.pageLoaded = t(this.pageLoaded, this), this.history = new e.History(this), this.view = new e.View(this), this.scrollManager = new e.ScrollManager(this), this.restorationData = {}, this.clearCache(), this.setProgressBarDelay(500);\n }\n\n return r.prototype.start = function () {\n return e.supported && !this.started ? (addEventListener(\"click\", this.clickCaptured, !0), addEventListener(\"DOMContentLoaded\", this.pageLoaded, !1), this.scrollManager.start(), this.startHistory(), this.started = !0, this.enabled = !0) : void 0;\n }, r.prototype.disable = function () {\n return this.enabled = !1;\n }, r.prototype.stop = function () {\n return this.started ? (removeEventListener(\"click\", this.clickCaptured, !0), removeEventListener(\"DOMContentLoaded\", this.pageLoaded, !1), this.scrollManager.stop(), this.stopHistory(), this.started = !1) : void 0;\n }, r.prototype.clearCache = function () {\n return this.cache = new e.SnapshotCache(10);\n }, r.prototype.visit = function (t, r) {\n var n, o;\n return null == r && (r = {}), t = e.Location.wrap(t), this.applicationAllowsVisitingLocation(t) ? this.locationIsVisitable(t) ? (n = null != (o = r.action) ? o : \"advance\", this.adapter.visitProposedToLocationWithAction(t, n)) : window.location = t : void 0;\n }, r.prototype.startVisitToLocationWithAction = function (t, r, n) {\n var o;\n return e.supported ? (o = this.getRestorationDataForIdentifier(n), this.startVisit(t, r, {\n restorationData: o\n })) : window.location = t;\n }, r.prototype.setProgressBarDelay = function (t) {\n return this.progressBarDelay = t;\n }, r.prototype.startHistory = function () {\n return this.location = e.Location.wrap(window.location), this.restorationIdentifier = e.uuid(), this.history.start(), this.history.replace(this.location, this.restorationIdentifier);\n }, r.prototype.stopHistory = function () {\n return this.history.stop();\n }, r.prototype.pushHistoryWithLocationAndRestorationIdentifier = function (t, r) {\n return this.restorationIdentifier = r, this.location = e.Location.wrap(t), this.history.push(this.location, this.restorationIdentifier);\n }, r.prototype.replaceHistoryWithLocationAndRestorationIdentifier = function (t, r) {\n return this.restorationIdentifier = r, this.location = e.Location.wrap(t), this.history.replace(this.location, this.restorationIdentifier);\n }, r.prototype.historyPoppedToLocationWithRestorationIdentifier = function (t, r) {\n var n;\n return this.restorationIdentifier = r, this.enabled ? (n = this.getRestorationDataForIdentifier(this.restorationIdentifier), this.startVisit(t, \"restore\", {\n restorationIdentifier: this.restorationIdentifier,\n restorationData: n,\n historyChanged: !0\n }), this.location = e.Location.wrap(t)) : this.adapter.pageInvalidated();\n }, r.prototype.getCachedSnapshotForLocation = function (t) {\n var e;\n return null != (e = this.cache.get(t)) ? e.clone() : void 0;\n }, r.prototype.shouldCacheSnapshot = function () {\n return this.view.getSnapshot().isCacheable();\n }, r.prototype.cacheSnapshot = function () {\n var t, r;\n return this.shouldCacheSnapshot() ? (this.notifyApplicationBeforeCachingSnapshot(), r = this.view.getSnapshot(), t = this.lastRenderedLocation, e.defer(function (e) {\n return function () {\n return e.cache.put(t, r.clone());\n };\n }(this))) : void 0;\n }, r.prototype.scrollToAnchor = function (t) {\n var e;\n return (e = this.view.getElementForAnchor(t)) ? this.scrollToElement(e) : this.scrollToPosition({\n x: 0,\n y: 0\n });\n }, r.prototype.scrollToElement = function (t) {\n return this.scrollManager.scrollToElement(t);\n }, r.prototype.scrollToPosition = function (t) {\n return this.scrollManager.scrollToPosition(t);\n }, r.prototype.scrollPositionChanged = function (t) {\n var e;\n return e = this.getCurrentRestorationData(), e.scrollPosition = t;\n }, r.prototype.render = function (t, e) {\n return this.view.render(t, e);\n }, r.prototype.viewInvalidated = function () {\n return this.adapter.pageInvalidated();\n }, r.prototype.viewWillRender = function (t) {\n return this.notifyApplicationBeforeRender(t);\n }, r.prototype.viewRendered = function () {\n return this.lastRenderedLocation = this.currentVisit.location, this.notifyApplicationAfterRender();\n }, r.prototype.pageLoaded = function () {\n return this.lastRenderedLocation = this.location, this.notifyApplicationAfterPageLoad();\n }, r.prototype.clickCaptured = function () {\n return removeEventListener(\"click\", this.clickBubbled, !1), addEventListener(\"click\", this.clickBubbled, !1);\n }, r.prototype.clickBubbled = function (t) {\n var e, r, n;\n return this.enabled && this.clickEventIsSignificant(t) && (r = this.getVisitableLinkForNode(t.target)) && (n = this.getVisitableLocationForLink(r)) && this.applicationAllowsFollowingLinkToLocation(r, n) ? (t.preventDefault(), e = this.getActionForLink(r), this.visit(n, {\n action: e\n })) : void 0;\n }, r.prototype.applicationAllowsFollowingLinkToLocation = function (t, e) {\n var r;\n return r = this.notifyApplicationAfterClickingLinkToLocation(t, e), !r.defaultPrevented;\n }, r.prototype.applicationAllowsVisitingLocation = function (t) {\n var e;\n return e = this.notifyApplicationBeforeVisitingLocation(t), !e.defaultPrevented;\n }, r.prototype.notifyApplicationAfterClickingLinkToLocation = function (t, r) {\n return e.dispatch(\"turbolinks:click\", {\n target: t,\n data: {\n url: r.absoluteURL\n },\n cancelable: !0\n });\n }, r.prototype.notifyApplicationBeforeVisitingLocation = function (t) {\n return e.dispatch(\"turbolinks:before-visit\", {\n data: {\n url: t.absoluteURL\n },\n cancelable: !0\n });\n }, r.prototype.notifyApplicationAfterVisitingLocation = function (t) {\n return e.dispatch(\"turbolinks:visit\", {\n data: {\n url: t.absoluteURL\n }\n });\n }, r.prototype.notifyApplicationBeforeCachingSnapshot = function () {\n return e.dispatch(\"turbolinks:before-cache\");\n }, r.prototype.notifyApplicationBeforeRender = function (t) {\n return e.dispatch(\"turbolinks:before-render\", {\n data: {\n newBody: t\n }\n });\n }, r.prototype.notifyApplicationAfterRender = function () {\n return e.dispatch(\"turbolinks:render\");\n }, r.prototype.notifyApplicationAfterPageLoad = function (t) {\n return null == t && (t = {}), e.dispatch(\"turbolinks:load\", {\n data: {\n url: this.location.absoluteURL,\n timing: t\n }\n });\n }, r.prototype.startVisit = function (t, e, r) {\n var n;\n return null != (n = this.currentVisit) && n.cancel(), this.currentVisit = this.createVisit(t, e, r), this.currentVisit.start(), this.notifyApplicationAfterVisitingLocation(t);\n }, r.prototype.createVisit = function (t, r, n) {\n var o, i, s, a, u;\n return i = null != n ? n : {}, a = i.restorationIdentifier, s = i.restorationData, o = i.historyChanged, u = new e.Visit(this, t, r), u.restorationIdentifier = null != a ? a : e.uuid(), u.restorationData = e.copyObject(s), u.historyChanged = o, u.referrer = this.location, u;\n }, r.prototype.visitCompleted = function (t) {\n return this.notifyApplicationAfterPageLoad(t.getTimingMetrics());\n }, r.prototype.clickEventIsSignificant = function (t) {\n return !(t.defaultPrevented || t.target.isContentEditable || t.which > 1 || t.altKey || t.ctrlKey || t.metaKey || t.shiftKey);\n }, r.prototype.getVisitableLinkForNode = function (t) {\n return this.nodeIsVisitable(t) ? e.closest(t, \"a[href]:not([target]):not([download])\") : void 0;\n }, r.prototype.getVisitableLocationForLink = function (t) {\n var r;\n return r = new e.Location(t.getAttribute(\"href\")), this.locationIsVisitable(r) ? r : void 0;\n }, r.prototype.getActionForLink = function (t) {\n var e;\n return null != (e = t.getAttribute(\"data-turbolinks-action\")) ? e : \"advance\";\n }, r.prototype.nodeIsVisitable = function (t) {\n var r;\n return (r = e.closest(t, \"[data-turbolinks]\")) ? \"false\" !== r.getAttribute(\"data-turbolinks\") : !0;\n }, r.prototype.locationIsVisitable = function (t) {\n return t.isPrefixedBy(this.view.getRootLocation()) && t.isHTML();\n }, r.prototype.getCurrentRestorationData = function () {\n return this.getRestorationDataForIdentifier(this.restorationIdentifier);\n }, r.prototype.getRestorationDataForIdentifier = function (t) {\n var e;\n return null != (e = this.restorationData)[t] ? e[t] : e[t] = {};\n }, r;\n }();\n }.call(this), function () {\n !function () {\n var t, e;\n if ((t = e = document.currentScript) && !e.hasAttribute(\"data-turbolinks-suppress-warning\")) for (; t = t.parentNode;) {\n if (t === document.body) return console.warn(\"You are loading Turbolinks from a <script> element inside the <body> element. This is probably not what you meant to do!\\n\\nLoad your application\\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\\n\\nFor more information, see: https://github.com/turbolinks/turbolinks#working-with-script-elements\\n\\n\\u2014\\u2014\\nSuppress this warning by adding a `data-turbolinks-suppress-warning` attribute to: %s\", e.outerHTML);\n }\n }();\n }.call(this), function () {\n var t, r, n;\n e.start = function () {\n return r() ? (null == e.controller && (e.controller = t()), e.controller.start()) : void 0;\n }, r = function r() {\n return null == window.Turbolinks && (window.Turbolinks = e), n();\n }, t = function t() {\n var t;\n return t = new e.Controller(), t.adapter = new e.BrowserAdapter(t), t;\n }, n = function n() {\n return window.Turbolinks === e;\n }, n() && e.start();\n }.call(this);\n }).call(this), \"object\" == (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) && module.exports ? module.exports = e : \"function\" == typeof define && define.amd && define(e);\n}).call(this);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * Chartkick.js\n * Create beautiful charts with one line of JavaScript\n * https://github.com/ankane/chartkick.js\n * v4.0.5\n * MIT License\n */\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Chartkick = factory());\n})(this, function () {\n 'use strict';\n\n function isArray(variable) {\n return Object.prototype.toString.call(variable) === \"[object Array]\";\n }\n\n function isFunction(variable) {\n return variable instanceof Function;\n }\n\n function isPlainObject(variable) {\n // protect against prototype pollution, defense 2\n return Object.prototype.toString.call(variable) === \"[object Object]\" && !isFunction(variable) && variable instanceof Object;\n } // https://github.com/madrobby/zepto/blob/master/src/zepto.js\n\n\n function extend(target, source) {\n var key;\n\n for (key in source) {\n // protect against prototype pollution, defense 1\n if (key === \"__proto__\") {\n continue;\n }\n\n if (isPlainObject(source[key]) || isArray(source[key])) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n target[key] = {};\n }\n\n if (isArray(source[key]) && !isArray(target[key])) {\n target[key] = [];\n }\n\n extend(target[key], source[key]);\n } else if (source[key] !== undefined) {\n target[key] = source[key];\n }\n }\n }\n\n function merge(obj1, obj2) {\n var target = {};\n extend(target, obj1);\n extend(target, obj2);\n return target;\n }\n\n var DATE_PATTERN = /^(\\d\\d\\d\\d)(-)?(\\d\\d)(-)?(\\d\\d)$/i;\n\n function negativeValues(series) {\n var i, j, data;\n\n for (i = 0; i < series.length; i++) {\n data = series[i].data;\n\n for (j = 0; j < data.length; j++) {\n if (data[j][1] < 0) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n function toStr(n) {\n return \"\" + n;\n }\n\n function toFloat(n) {\n return parseFloat(n);\n }\n\n function toDate(n) {\n var matches, year, month, day;\n\n if (_typeof(n) !== \"object\") {\n if (typeof n === \"number\") {\n n = new Date(n * 1000); // ms\n } else {\n n = toStr(n);\n\n if (matches = n.match(DATE_PATTERN)) {\n year = parseInt(matches[1], 10);\n month = parseInt(matches[3], 10) - 1;\n day = parseInt(matches[5], 10);\n return new Date(year, month, day);\n } else {\n // try our best to get the str into iso8601\n // TODO be smarter about this\n var str = n.replace(/ /, \"T\").replace(\" \", \"\").replace(\"UTC\", \"Z\"); // Date.parse returns milliseconds if valid and NaN if invalid\n\n n = new Date(Date.parse(str) || n);\n }\n }\n }\n\n return n;\n }\n\n function toArr(n) {\n if (!isArray(n)) {\n var arr = [],\n i;\n\n for (i in n) {\n if (n.hasOwnProperty(i)) {\n arr.push([i, n[i]]);\n }\n }\n\n n = arr;\n }\n\n return n;\n }\n\n function jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle) {\n return function (chart, opts, chartOptions) {\n var series = chart.data;\n var options = merge({}, defaultOptions);\n options = merge(options, chartOptions || {});\n\n if (chart.singleSeriesFormat || \"legend\" in opts) {\n hideLegend(options, opts.legend, chart.singleSeriesFormat);\n }\n\n if (opts.title) {\n setTitle(options, opts.title);\n } // min\n\n\n if (\"min\" in opts) {\n setMin(options, opts.min);\n } else if (!negativeValues(series)) {\n setMin(options, 0);\n } // max\n\n\n if (opts.max) {\n setMax(options, opts.max);\n }\n\n if (\"stacked\" in opts) {\n setStacked(options, opts.stacked);\n }\n\n if (opts.colors) {\n options.colors = opts.colors;\n }\n\n if (opts.xtitle) {\n setXtitle(options, opts.xtitle);\n }\n\n if (opts.ytitle) {\n setYtitle(options, opts.ytitle);\n } // merge library last\n\n\n options = merge(options, opts.library || {});\n return options;\n };\n }\n\n function sortByTime(a, b) {\n return a[0].getTime() - b[0].getTime();\n }\n\n function sortByNumberSeries(a, b) {\n return a[0] - b[0];\n }\n\n function sortByNumber(a, b) {\n return a - b;\n }\n\n function isMinute(d) {\n return d.getMilliseconds() === 0 && d.getSeconds() === 0;\n }\n\n function isHour(d) {\n return isMinute(d) && d.getMinutes() === 0;\n }\n\n function isDay(d) {\n return isHour(d) && d.getHours() === 0;\n }\n\n function isWeek(d, dayOfWeek) {\n return isDay(d) && d.getDay() === dayOfWeek;\n }\n\n function isMonth(d) {\n return isDay(d) && d.getDate() === 1;\n }\n\n function isYear(d) {\n return isMonth(d) && d.getMonth() === 0;\n }\n\n function isDate(obj) {\n return !isNaN(toDate(obj)) && toStr(obj).length >= 6;\n }\n\n function isNumber(obj) {\n return typeof obj === \"number\";\n }\n\n var byteSuffixes = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"];\n\n function formatValue(pre, value, options, axis) {\n pre = pre || \"\";\n\n if (options.prefix) {\n if (value < 0) {\n value = value * -1;\n pre += \"-\";\n }\n\n pre += options.prefix;\n }\n\n var suffix = options.suffix || \"\";\n var precision = options.precision;\n var round = options.round;\n\n if (options.byteScale) {\n var suffixIdx;\n var baseValue = axis ? options.byteScale : value;\n\n if (baseValue >= 1152921504606846976) {\n value /= 1152921504606846976;\n suffixIdx = 6;\n } else if (baseValue >= 1125899906842624) {\n value /= 1125899906842624;\n suffixIdx = 5;\n } else if (baseValue >= 1099511627776) {\n value /= 1099511627776;\n suffixIdx = 4;\n } else if (baseValue >= 1073741824) {\n value /= 1073741824;\n suffixIdx = 3;\n } else if (baseValue >= 1048576) {\n value /= 1048576;\n suffixIdx = 2;\n } else if (baseValue >= 1024) {\n value /= 1024;\n suffixIdx = 1;\n } else {\n suffixIdx = 0;\n } // TODO handle manual precision case\n\n\n if (precision === undefined && round === undefined) {\n if (value >= 1023.5) {\n if (suffixIdx < byteSuffixes.length - 1) {\n value = 1.0;\n suffixIdx += 1;\n }\n }\n\n precision = value >= 1000 ? 4 : 3;\n }\n\n suffix = \" \" + byteSuffixes[suffixIdx];\n }\n\n if (precision !== undefined && round !== undefined) {\n throw Error(\"Use either round or precision, not both\");\n }\n\n if (!axis) {\n if (precision !== undefined) {\n value = value.toPrecision(precision);\n\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n\n if (round !== undefined) {\n if (round < 0) {\n var num = Math.pow(10, -1 * round);\n value = parseInt((1.0 * value / num).toFixed(0)) * num;\n } else {\n value = value.toFixed(round);\n\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n }\n }\n\n if (options.thousands || options.decimal) {\n value = toStr(value);\n var parts = value.split(\".\");\n value = parts[0];\n\n if (options.thousands) {\n value = value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousands);\n }\n\n if (parts.length > 1) {\n value += (options.decimal || \".\") + parts[1];\n }\n }\n\n return pre + value + suffix;\n }\n\n function seriesOption(chart, series, option) {\n if (option in series) {\n return series[option];\n } else if (option in chart.options) {\n return chart.options[option];\n }\n\n return null;\n }\n\n function allZeros(data) {\n var i, j, d;\n\n for (i = 0; i < data.length; i++) {\n d = data[i].data;\n\n for (j = 0; j < d.length; j++) {\n if (d[j][1] != 0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n var baseOptions = {\n maintainAspectRatio: false,\n animation: false,\n plugins: {\n legend: {},\n tooltip: {\n displayColors: false,\n callbacks: {}\n },\n title: {\n font: {\n size: 20\n },\n color: \"#333\"\n }\n },\n interaction: {}\n };\n var defaultOptions$2 = {\n scales: {\n y: {\n ticks: {\n maxTicksLimit: 4\n },\n title: {\n font: {\n size: 16\n },\n color: \"#333\"\n },\n grid: {}\n },\n x: {\n grid: {\n drawOnChartArea: false\n },\n title: {\n font: {\n size: 16\n },\n color: \"#333\"\n },\n time: {},\n ticks: {}\n }\n }\n }; // http://there4.io/2012/05/02/google-chart-color-list/\n\n var defaultColors = [\"#3366CC\", \"#DC3912\", \"#FF9900\", \"#109618\", \"#990099\", \"#3B3EAC\", \"#0099C6\", \"#DD4477\", \"#66AA00\", \"#B82E2E\", \"#316395\", \"#994499\", \"#22AA99\", \"#AAAA11\", \"#6633CC\", \"#E67300\", \"#8B0707\", \"#329262\", \"#5574A6\", \"#651067\"];\n\n var hideLegend$2 = function hideLegend$2(options, legend, hideLegend) {\n if (legend !== undefined) {\n options.plugins.legend.display = !!legend;\n\n if (legend && legend !== true) {\n options.plugins.legend.position = legend;\n }\n } else if (hideLegend) {\n options.plugins.legend.display = false;\n }\n };\n\n var setTitle$2 = function setTitle$2(options, title) {\n options.plugins.title.display = true;\n options.plugins.title.text = title;\n };\n\n var setMin$2 = function setMin$2(options, min) {\n if (min !== null) {\n options.scales.y.min = toFloat(min);\n }\n };\n\n var setMax$2 = function setMax$2(options, max) {\n options.scales.y.max = toFloat(max);\n };\n\n var setBarMin$1 = function setBarMin$1(options, min) {\n if (min !== null) {\n options.scales.x.min = toFloat(min);\n }\n };\n\n var setBarMax$1 = function setBarMax$1(options, max) {\n options.scales.x.max = toFloat(max);\n };\n\n var setStacked$2 = function setStacked$2(options, stacked) {\n options.scales.x.stacked = !!stacked;\n options.scales.y.stacked = !!stacked;\n };\n\n var setXtitle$2 = function setXtitle$2(options, title) {\n options.scales.x.title.display = true;\n options.scales.x.title.text = title;\n };\n\n var setYtitle$2 = function setYtitle$2(options, title) {\n options.scales.y.title.display = true;\n options.scales.y.title.text = title;\n }; // https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\n\n\n var addOpacity = function addOpacity(hex, opacity) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? \"rgba(\" + parseInt(result[1], 16) + \", \" + parseInt(result[2], 16) + \", \" + parseInt(result[3], 16) + \", \" + opacity + \")\" : hex;\n }; // check if not null or undefined\n // https://stackoverflow.com/a/27757708/1177228\n\n\n var notnull = function notnull(x) {\n return x != null;\n };\n\n var setLabelSize = function setLabelSize(chart, data, options) {\n var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);\n\n if (maxLabelSize > 25) {\n maxLabelSize = 25;\n } else if (maxLabelSize < 10) {\n maxLabelSize = 10;\n }\n\n if (!options.scales.x.ticks.callback) {\n options.scales.x.ticks.callback = function (value) {\n value = toStr(this.getLabelForValue(value));\n\n if (value.length > maxLabelSize) {\n return value.substring(0, maxLabelSize - 2) + \"...\";\n } else {\n return value;\n }\n };\n }\n };\n\n var setFormatOptions$1 = function setFormatOptions$1(chart, options, chartType) {\n var formatOptions = {\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n thousands: chart.options.thousands,\n decimal: chart.options.decimal,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n };\n\n if (chart.options.bytes) {\n var series = chart.data;\n\n if (chartType === \"pie\") {\n series = [{\n data: series\n }];\n } // calculate max\n\n\n var max = 0;\n\n for (var i = 0; i < series.length; i++) {\n var s = series[i];\n\n for (var j = 0; j < s.data.length; j++) {\n if (s.data[j][1] > max) {\n max = s.data[j][1];\n }\n }\n } // calculate scale\n\n\n var scale = 1;\n\n while (max >= 1024) {\n scale *= 1024;\n max /= 1024;\n } // set step size\n\n\n formatOptions.byteScale = scale;\n }\n\n if (chartType !== \"pie\") {\n var axis = options.scales.y;\n\n if (chartType === \"bar\") {\n axis = options.scales.x;\n }\n\n if (formatOptions.byteScale) {\n if (!axis.ticks.stepSize) {\n axis.ticks.stepSize = formatOptions.byteScale / 2;\n }\n\n if (!axis.ticks.maxTicksLimit) {\n axis.ticks.maxTicksLimit = 4;\n }\n }\n\n if (!axis.ticks.callback) {\n axis.ticks.callback = function (value) {\n return formatValue(\"\", value, formatOptions, true);\n };\n }\n }\n\n if (!options.plugins.tooltip.callbacks.label) {\n if (chartType === \"scatter\") {\n options.plugins.tooltip.callbacks.label = function (context) {\n var label = context.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n\n return label + '(' + context.label + ', ' + context.formattedValue + ')';\n };\n } else if (chartType === \"bubble\") {\n options.plugins.tooltip.callbacks.label = function (context) {\n var label = context.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n\n var dataPoint = context.raw;\n return label + '(' + dataPoint.x + ', ' + dataPoint.y + ', ' + dataPoint.v + ')';\n };\n } else if (chartType === \"pie\") {\n // need to use separate label for pie charts\n options.plugins.tooltip.callbacks.label = function (context) {\n var dataLabel = context.label;\n var value = ': ';\n\n if (isArray(dataLabel)) {\n // show value on first line of multiline label\n // need to clone because we are changing the value\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n\n return formatValue(dataLabel, context.parsed, formatOptions);\n };\n } else {\n var valueLabel = chartType === \"bar\" ? \"x\" : \"y\";\n\n options.plugins.tooltip.callbacks.label = function (context) {\n // don't show null values for stacked charts\n if (context.parsed[valueLabel] === null) {\n return;\n }\n\n var label = context.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n\n return formatValue(label, context.parsed[valueLabel], formatOptions);\n };\n }\n }\n };\n\n var jsOptions$2 = jsOptionsFunc(merge(baseOptions, defaultOptions$2), hideLegend$2, setTitle$2, setMin$2, setMax$2, setStacked$2, setXtitle$2, setYtitle$2);\n\n var createDataTable = function createDataTable(chart, options, chartType) {\n var datasets = [];\n var labels = [];\n var colors = chart.options.colors || defaultColors;\n var day = true;\n var week = true;\n var dayOfWeek;\n var month = true;\n var year = true;\n var hour = true;\n var minute = true;\n var series = chart.data;\n var max = 0;\n\n if (chartType === \"bubble\") {\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n var s$1 = series[i$1];\n\n for (var j$1 = 0; j$1 < s$1.data.length; j$1++) {\n if (s$1.data[j$1][2] > max) {\n max = s$1.data[j$1][2];\n }\n }\n }\n }\n\n var i,\n j,\n s,\n d,\n key,\n rows = [],\n rows2 = [];\n\n if (chartType === \"bar\" || chartType === \"column\" || chart.xtype !== \"number\" && chart.xtype !== \"bubble\") {\n var sortedLabels = [];\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n key = chart.xtype == \"datetime\" ? d[0].getTime() : d[0];\n\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n }\n\n rows[key][i] = toFloat(d[1]);\n\n if (sortedLabels.indexOf(key) === -1) {\n sortedLabels.push(key);\n }\n }\n }\n\n if (chart.xtype === \"datetime\" || chart.xtype === \"number\") {\n sortedLabels.sort(sortByNumber);\n }\n\n for (j = 0; j < series.length; j++) {\n rows2.push([]);\n }\n\n var value;\n var k;\n\n for (k = 0; k < sortedLabels.length; k++) {\n i = sortedLabels[k];\n\n if (chart.xtype === \"datetime\") {\n value = new Date(toFloat(i)); // TODO make this efficient\n\n day = day && isDay(value);\n\n if (!dayOfWeek) {\n dayOfWeek = value.getDay();\n }\n\n week = week && isWeek(value, dayOfWeek);\n month = month && isMonth(value);\n year = year && isYear(value);\n hour = hour && isHour(value);\n minute = minute && isMinute(value);\n } else {\n value = i;\n }\n\n labels.push(value);\n\n for (j = 0; j < series.length; j++) {\n // Chart.js doesn't like undefined\n rows2[j].push(rows[i][j] === undefined ? null : rows[i][j]);\n }\n }\n } else {\n for (var i$2 = 0; i$2 < series.length; i$2++) {\n var s$2 = series[i$2];\n var d$1 = [];\n\n for (var j$2 = 0; j$2 < s$2.data.length; j$2++) {\n var point = {\n x: toFloat(s$2.data[j$2][0]),\n y: toFloat(s$2.data[j$2][1])\n };\n\n if (chartType === \"bubble\") {\n point.r = toFloat(s$2.data[j$2][2]) * 20 / max; // custom attribute, for tooltip\n\n point.v = s$2.data[j$2][2];\n }\n\n d$1.push(point);\n }\n\n rows2.push(d$1);\n }\n }\n\n var color;\n var backgroundColor;\n\n for (i = 0; i < series.length; i++) {\n s = series[i]; // use colors for each bar for single series format\n\n if (chart.options.colors && chart.singleSeriesFormat && (chartType === \"bar\" || chartType === \"column\") && !s.color && isArray(chart.options.colors) && !isArray(chart.options.colors[0])) {\n color = colors;\n backgroundColor = [];\n\n for (var j$3 = 0; j$3 < colors.length; j$3++) {\n backgroundColor[j$3] = addOpacity(color[j$3], 0.5);\n }\n } else {\n color = s.color || colors[i];\n backgroundColor = chartType !== \"line\" ? addOpacity(color, 0.5) : color;\n }\n\n var dataset = {\n label: s.name || \"\",\n data: rows2[i],\n fill: chartType === \"area\",\n borderColor: color,\n backgroundColor: backgroundColor,\n borderWidth: 2\n };\n var pointChart = chartType === \"line\" || chartType === \"area\" || chartType === \"scatter\" || chartType === \"bubble\";\n\n if (pointChart) {\n dataset.pointBackgroundColor = color;\n dataset.pointHoverBackgroundColor = color;\n dataset.pointHitRadius = 50;\n }\n\n if (chartType === \"bubble\") {\n dataset.pointBackgroundColor = backgroundColor;\n dataset.pointHoverBackgroundColor = backgroundColor;\n dataset.pointHoverBorderWidth = 2;\n }\n\n if (s.stack) {\n dataset.stack = s.stack;\n }\n\n var curve = seriesOption(chart, s, \"curve\");\n\n if (curve === false) {\n dataset.tension = 0;\n } else if (pointChart) {\n dataset.tension = 0.4;\n }\n\n var points = seriesOption(chart, s, \"points\");\n\n if (points === false) {\n dataset.pointRadius = 0;\n dataset.pointHoverRadius = 0;\n }\n\n dataset = merge(dataset, chart.options.dataset || {});\n dataset = merge(dataset, s.library || {});\n dataset = merge(dataset, s.dataset || {});\n datasets.push(dataset);\n }\n\n var xmin = chart.options.xmin;\n var xmax = chart.options.xmax;\n\n if (chart.xtype === \"datetime\") {\n if (notnull(xmin)) {\n options.scales.x.ticks.min = toDate(xmin).getTime();\n }\n\n if (notnull(xmax)) {\n options.scales.x.ticks.max = toDate(xmax).getTime();\n }\n } else if (chart.xtype === \"number\") {\n if (notnull(xmin)) {\n options.scales.x.ticks.min = xmin;\n }\n\n if (notnull(xmax)) {\n options.scales.x.ticks.max = xmax;\n }\n } // for empty datetime chart\n\n\n if (chart.xtype === \"datetime\" && labels.length === 0) {\n if (notnull(xmin)) {\n labels.push(toDate(xmin));\n }\n\n if (notnull(xmax)) {\n labels.push(toDate(xmax));\n }\n\n day = false;\n week = false;\n month = false;\n year = false;\n hour = false;\n minute = false;\n }\n\n if (chart.xtype === \"datetime\" && labels.length > 0) {\n var minTime = (notnull(xmin) ? toDate(xmin) : labels[0]).getTime();\n var maxTime = (notnull(xmax) ? toDate(xmax) : labels[0]).getTime();\n\n for (i = 1; i < labels.length; i++) {\n var value$1 = labels[i].getTime();\n\n if (value$1 < minTime) {\n minTime = value$1;\n }\n\n if (value$1 > maxTime) {\n maxTime = value$1;\n }\n }\n\n var timeDiff = (maxTime - minTime) / (86400 * 1000.0);\n\n if (!options.scales.x.time.unit) {\n var step;\n\n if (year || timeDiff > 365 * 10) {\n options.scales.x.time.unit = \"year\";\n step = 365;\n } else if (month || timeDiff > 30 * 10) {\n options.scales.x.time.unit = \"month\";\n step = 30;\n } else if (day || timeDiff > 10) {\n options.scales.x.time.unit = \"day\";\n step = 1;\n } else if (hour || timeDiff > 0.5) {\n options.scales.x.time.displayFormats = {\n hour: \"MMM d, h a\"\n };\n options.scales.x.time.unit = \"hour\";\n step = 1 / 24.0;\n } else if (minute) {\n options.scales.x.time.displayFormats = {\n minute: \"h:mm a\"\n };\n options.scales.x.time.unit = \"minute\";\n step = 1 / 24.0 / 60.0;\n }\n\n if (step && timeDiff > 0) {\n // width not available for hidden elements\n var width = chart.element.offsetWidth;\n\n if (width > 0) {\n var unitStepSize = Math.ceil(timeDiff / step / (width / 100.0));\n\n if (week && step === 1) {\n unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;\n }\n\n options.scales.x.time.stepSize = unitStepSize;\n }\n }\n }\n\n if (!options.scales.x.time.tooltipFormat) {\n if (day) {\n options.scales.x.time.tooltipFormat = \"PP\";\n } else if (hour) {\n options.scales.x.time.tooltipFormat = \"MMM d, h a\";\n } else if (minute) {\n options.scales.x.time.tooltipFormat = \"h:mm a\";\n }\n }\n }\n\n var data = {\n labels: labels,\n datasets: datasets\n };\n return data;\n };\n\n var defaultExport$2 = function defaultExport(library) {\n this.name = \"chartjs\";\n this.library = library;\n };\n\n defaultExport$2.prototype.renderLineChart = function renderLineChart(chart, chartType) {\n var chartOptions = {}; // fix for https://github.com/chartjs/Chart.js/issues/2441\n\n if (!chart.options.max && allZeros(chart.data)) {\n chartOptions.max = 1;\n }\n\n var options = jsOptions$2(chart, merge(chartOptions, chart.options));\n setFormatOptions$1(chart, options, chartType);\n var data = createDataTable(chart, options, chartType || \"line\");\n\n if (chart.xtype === \"number\") {\n options.scales.x.type = options.scales.x.type || \"linear\";\n options.scales.x.position = options.scales.x.position || \"bottom\";\n } else {\n options.scales.x.type = chart.xtype === \"string\" ? \"category\" : \"time\";\n }\n\n this.drawChart(chart, \"line\", data, options);\n };\n\n defaultExport$2.prototype.renderPieChart = function renderPieChart(chart) {\n var options = merge({}, baseOptions);\n\n if (chart.options.donut) {\n options.cutout = \"50%\";\n }\n\n if (\"legend\" in chart.options) {\n hideLegend$2(options, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle$2(options, chart.options.title);\n }\n\n options = merge(options, chart.options.library || {});\n setFormatOptions$1(chart, options, \"pie\");\n var labels = [];\n var values = [];\n\n for (var i = 0; i < chart.data.length; i++) {\n var point = chart.data[i];\n labels.push(point[0]);\n values.push(point[1]);\n }\n\n var dataset = {\n data: values,\n backgroundColor: chart.options.colors || defaultColors\n };\n dataset = merge(dataset, chart.options.dataset || {});\n var data = {\n labels: labels,\n datasets: [dataset]\n };\n this.drawChart(chart, \"pie\", data, options);\n };\n\n defaultExport$2.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {\n var options;\n\n if (chartType === \"bar\") {\n var barOptions = merge(baseOptions, defaultOptions$2);\n barOptions.indexAxis = \"y\"; // ensure gridlines have proper orientation\n\n barOptions.scales.x.grid.drawOnChartArea = true;\n barOptions.scales.y.grid.drawOnChartArea = false;\n delete barOptions.scales.y.ticks.maxTicksLimit;\n options = jsOptionsFunc(barOptions, hideLegend$2, setTitle$2, setBarMin$1, setBarMax$1, setStacked$2, setXtitle$2, setYtitle$2)(chart, chart.options);\n } else {\n options = jsOptions$2(chart, chart.options);\n }\n\n setFormatOptions$1(chart, options, chartType);\n var data = createDataTable(chart, options, \"column\");\n\n if (chartType !== \"bar\") {\n setLabelSize(chart, data, options);\n }\n\n this.drawChart(chart, \"bar\", data, options);\n };\n\n defaultExport$2.prototype.renderAreaChart = function renderAreaChart(chart) {\n this.renderLineChart(chart, \"area\");\n };\n\n defaultExport$2.prototype.renderBarChart = function renderBarChart(chart) {\n this.renderColumnChart(chart, \"bar\");\n };\n\n defaultExport$2.prototype.renderScatterChart = function renderScatterChart(chart, chartType) {\n chartType = chartType || \"scatter\";\n var options = jsOptions$2(chart, chart.options);\n setFormatOptions$1(chart, options, chartType);\n\n if (!(\"showLine\" in options)) {\n options.showLine = false;\n }\n\n var data = createDataTable(chart, options, chartType);\n options.scales.x.type = options.scales.x.type || \"linear\";\n options.scales.x.position = options.scales.x.position || \"bottom\"; // prevent grouping hover and tooltips\n\n if (!(\"mode\" in options.interaction)) {\n options.interaction.mode = \"nearest\";\n }\n\n this.drawChart(chart, chartType, data, options);\n };\n\n defaultExport$2.prototype.renderBubbleChart = function renderBubbleChart(chart) {\n this.renderScatterChart(chart, \"bubble\");\n };\n\n defaultExport$2.prototype.destroy = function destroy(chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n };\n\n defaultExport$2.prototype.drawChart = function drawChart(chart, type, data, options) {\n this.destroy(chart);\n\n if (chart.destroyed) {\n return;\n }\n\n var chartOptions = {\n type: type,\n data: data,\n options: options\n };\n\n if (chart.options.code) {\n window.console.log(\"new Chart(ctx, \" + JSON.stringify(chartOptions) + \");\");\n }\n\n chart.element.innerHTML = \"<canvas></canvas>\";\n var ctx = chart.element.getElementsByTagName(\"CANVAS\")[0];\n chart.chart = new this.library(ctx, chartOptions);\n };\n\n var defaultOptions$1 = {\n chart: {},\n xAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n legend: {\n borderWidth: 0\n },\n tooltip: {\n style: {\n fontSize: \"12px\"\n }\n },\n plotOptions: {\n areaspline: {},\n area: {},\n series: {\n marker: {}\n }\n },\n time: {\n useUTC: false\n }\n };\n\n var hideLegend$1 = function hideLegend$1(options, legend, hideLegend) {\n if (legend !== undefined) {\n options.legend.enabled = !!legend;\n\n if (legend && legend !== true) {\n if (legend === \"top\" || legend === \"bottom\") {\n options.legend.verticalAlign = legend;\n } else {\n options.legend.layout = \"vertical\";\n options.legend.verticalAlign = \"middle\";\n options.legend.align = legend;\n }\n }\n } else if (hideLegend) {\n options.legend.enabled = false;\n }\n };\n\n var setTitle$1 = function setTitle$1(options, title) {\n options.title.text = title;\n };\n\n var setMin$1 = function setMin$1(options, min) {\n options.yAxis.min = min;\n };\n\n var setMax$1 = function setMax$1(options, max) {\n options.yAxis.max = max;\n };\n\n var setStacked$1 = function setStacked$1(options, stacked) {\n var stackedValue = stacked ? stacked === true ? \"normal\" : stacked : null;\n options.plotOptions.series.stacking = stackedValue;\n options.plotOptions.area.stacking = stackedValue;\n options.plotOptions.areaspline.stacking = stackedValue;\n };\n\n var setXtitle$1 = function setXtitle$1(options, title) {\n options.xAxis.title.text = title;\n };\n\n var setYtitle$1 = function setYtitle$1(options, title) {\n options.yAxis.title.text = title;\n };\n\n var jsOptions$1 = jsOptionsFunc(defaultOptions$1, hideLegend$1, setTitle$1, setMin$1, setMax$1, setStacked$1, setXtitle$1, setYtitle$1);\n\n var setFormatOptions = function setFormatOptions(chart, options, chartType) {\n var formatOptions = {\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n thousands: chart.options.thousands,\n decimal: chart.options.decimal,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n };\n\n if (chartType !== \"pie\" && !options.yAxis.labels.formatter) {\n options.yAxis.labels.formatter = function () {\n return formatValue(\"\", this.value, formatOptions);\n };\n }\n\n if (!options.tooltip.pointFormatter && !options.tooltip.pointFormat) {\n options.tooltip.pointFormatter = function () {\n return '<span style=\"color:' + this.color + \"\\\">\\u25CF</span> \" + formatValue(this.series.name + ': <b>', this.y, formatOptions) + '</b><br/>';\n };\n }\n };\n\n var defaultExport$1 = function defaultExport(library) {\n this.name = \"highcharts\";\n this.library = library;\n };\n\n defaultExport$1.prototype.renderLineChart = function renderLineChart(chart, chartType) {\n chartType = chartType || \"spline\";\n var chartOptions = {};\n\n if (chartType === \"areaspline\") {\n chartOptions = {\n plotOptions: {\n areaspline: {\n stacking: \"normal\"\n },\n area: {\n stacking: \"normal\"\n },\n series: {\n marker: {\n enabled: false\n }\n }\n }\n };\n }\n\n if (chart.options.curve === false) {\n if (chartType === \"areaspline\") {\n chartType = \"area\";\n } else if (chartType === \"spline\") {\n chartType = \"line\";\n }\n }\n\n var options = jsOptions$1(chart, chart.options, chartOptions),\n data,\n i,\n j;\n\n if (chart.xtype === \"number\") {\n options.xAxis.type = options.xAxis.type || \"linear\";\n } else {\n options.xAxis.type = chart.xtype === \"string\" ? \"category\" : \"datetime\";\n }\n\n if (!options.chart.type) {\n options.chart.type = chartType;\n }\n\n setFormatOptions(chart, options, chartType);\n var series = chart.data;\n\n for (i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n data = series[i].data;\n\n if (chart.xtype === \"datetime\") {\n for (j = 0; j < data.length; j++) {\n data[j][0] = data[j][0].getTime();\n }\n }\n\n series[i].marker = {\n symbol: \"circle\"\n };\n\n if (chart.options.points === false) {\n series[i].marker.enabled = false;\n }\n }\n\n this.drawChart(chart, series, options);\n };\n\n defaultExport$1.prototype.renderScatterChart = function renderScatterChart(chart) {\n var options = jsOptions$1(chart, chart.options, {});\n options.chart.type = \"scatter\";\n this.drawChart(chart, chart.data, options);\n };\n\n defaultExport$1.prototype.renderPieChart = function renderPieChart(chart) {\n var chartOptions = merge(defaultOptions$1, {});\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n\n if (chart.options.donut) {\n chartOptions.plotOptions = {\n pie: {\n innerSize: \"50%\"\n }\n };\n }\n\n if (\"legend\" in chart.options) {\n hideLegend$1(chartOptions, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle$1(chartOptions, chart.options.title);\n }\n\n var options = merge(chartOptions, chart.options.library || {});\n setFormatOptions(chart, options, \"pie\");\n var series = [{\n type: \"pie\",\n name: chart.options.label || \"Value\",\n data: chart.data\n }];\n this.drawChart(chart, series, options);\n };\n\n defaultExport$1.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {\n chartType = chartType || \"column\";\n var series = chart.data;\n var options = jsOptions$1(chart, chart.options),\n i,\n j,\n s,\n d,\n rows = [],\n categories = [];\n options.chart.type = chartType;\n setFormatOptions(chart, options, chartType);\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n\n if (!rows[d[0]]) {\n rows[d[0]] = new Array(series.length);\n categories.push(d[0]);\n }\n\n rows[d[0]][i] = d[1];\n }\n }\n\n if (chart.xtype === \"number\") {\n categories.sort(sortByNumber);\n }\n\n options.xAxis.categories = categories;\n var newSeries = [],\n d2;\n\n for (i = 0; i < series.length; i++) {\n d = [];\n\n for (j = 0; j < categories.length; j++) {\n d.push(rows[categories[j]][i] || 0);\n }\n\n d2 = {\n name: series[i].name || \"Value\",\n data: d\n };\n\n if (series[i].stack) {\n d2.stack = series[i].stack;\n }\n\n newSeries.push(d2);\n }\n\n this.drawChart(chart, newSeries, options);\n };\n\n defaultExport$1.prototype.renderBarChart = function renderBarChart(chart) {\n this.renderColumnChart(chart, \"bar\");\n };\n\n defaultExport$1.prototype.renderAreaChart = function renderAreaChart(chart) {\n this.renderLineChart(chart, \"areaspline\");\n };\n\n defaultExport$1.prototype.destroy = function destroy(chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n };\n\n defaultExport$1.prototype.drawChart = function drawChart(chart, data, options) {\n this.destroy(chart);\n\n if (chart.destroyed) {\n return;\n }\n\n options.chart.renderTo = chart.element.id;\n options.series = data;\n\n if (chart.options.code) {\n window.console.log(\"new Highcharts.Chart(\" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.Chart(options);\n };\n\n var loaded = {};\n var callbacks = []; // Set chart options\n\n var defaultOptions = {\n chartArea: {},\n fontName: \"'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif\",\n pointSize: 6,\n legend: {\n textStyle: {\n fontSize: 12,\n color: \"#444\"\n },\n alignment: \"center\",\n position: \"right\"\n },\n curveType: \"function\",\n hAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n gridlines: {\n color: \"transparent\"\n },\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n vAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n tooltip: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n }\n }\n };\n\n var hideLegend = function hideLegend(options, legend, _hideLegend) {\n if (legend !== undefined) {\n var position;\n\n if (!legend) {\n position = \"none\";\n } else if (legend === true) {\n position = \"right\";\n } else {\n position = legend;\n }\n\n options.legend.position = position;\n } else if (_hideLegend) {\n options.legend.position = \"none\";\n }\n };\n\n var setTitle = function setTitle(options, title) {\n options.title = title;\n options.titleTextStyle = {\n color: \"#333\",\n fontSize: \"20px\"\n };\n };\n\n var setMin = function setMin(options, min) {\n options.vAxis.viewWindow.min = min;\n };\n\n var setMax = function setMax(options, max) {\n options.vAxis.viewWindow.max = max;\n };\n\n var setBarMin = function setBarMin(options, min) {\n options.hAxis.viewWindow.min = min;\n };\n\n var setBarMax = function setBarMax(options, max) {\n options.hAxis.viewWindow.max = max;\n };\n\n var setStacked = function setStacked(options, stacked) {\n options.isStacked = stacked ? stacked : false;\n };\n\n var setXtitle = function setXtitle(options, title) {\n options.hAxis.title = title;\n options.hAxis.titleTextStyle.italic = false;\n };\n\n var setYtitle = function setYtitle(options, title) {\n options.vAxis.title = title;\n options.vAxis.titleTextStyle.italic = false;\n };\n\n var jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);\n\n var resize = function resize(callback) {\n if (window.attachEvent) {\n window.attachEvent(\"onresize\", callback);\n } else if (window.addEventListener) {\n window.addEventListener(\"resize\", callback, true);\n }\n\n callback();\n };\n\n var defaultExport = function defaultExport(library) {\n this.name = \"google\";\n this.library = library;\n };\n\n defaultExport.prototype.renderLineChart = function renderLineChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n\n if (chart.options.curve === false) {\n chartOptions.curveType = \"none\";\n }\n\n if (chart.options.points === false) {\n chartOptions.pointSize = 0;\n }\n\n var options = jsOptions(chart, chart.options, chartOptions);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n this$1.drawChart(chart, \"LineChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderPieChart = function renderPieChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n chartArea: {\n top: \"10%\",\n height: \"80%\"\n },\n legend: {}\n };\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n\n if (chart.options.donut) {\n chartOptions.pieHole = 0.5;\n }\n\n if (\"legend\" in chart.options) {\n hideLegend(chartOptions, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle(chartOptions, chart.options.title);\n }\n\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n var data = new this$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", \"Value\");\n data.addRows(chart.data);\n this$1.drawChart(chart, \"PieChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderColumnChart = function renderColumnChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var options = jsOptions(chart, chart.options);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n this$1.drawChart(chart, \"ColumnChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderBarChart = function renderBarChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n hAxis: {\n gridlines: {\n color: \"#ccc\"\n }\n }\n };\n var options = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options, chartOptions);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n this$1.drawChart(chart, \"BarChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderAreaChart = function renderAreaChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n isStacked: true,\n pointSize: 0,\n areaOpacity: 0.5\n };\n var options = jsOptions(chart, chart.options, chartOptions);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n this$1.drawChart(chart, \"AreaChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderGeoChart = function renderGeoChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, \"geochart\", function () {\n var chartOptions = {\n legend: \"none\",\n colorAxis: {\n colors: chart.options.colors || [\"#f6c7b6\", \"#ce502d\"]\n }\n };\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n var data = new this$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", chart.options.label || \"Value\");\n data.addRows(chart.data);\n this$1.drawChart(chart, \"GeoChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderScatterChart = function renderScatterChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n var options = jsOptions(chart, chart.options, chartOptions);\n var series = chart.data,\n rows2 = [],\n i,\n j,\n data,\n d;\n\n for (i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n d = series[i].data;\n\n for (j = 0; j < d.length; j++) {\n var row = new Array(series.length + 1);\n row[0] = d[j][0];\n row[i + 1] = d[j][1];\n rows2.push(row);\n }\n }\n\n data = new this$1.library.visualization.DataTable();\n data.addColumn(\"number\", \"\");\n\n for (i = 0; i < series.length; i++) {\n data.addColumn(\"number\", series[i].name);\n }\n\n data.addRows(rows2);\n this$1.drawChart(chart, \"ScatterChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderTimeline = function renderTimeline(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, \"timeline\", function () {\n var chartOptions = {\n legend: \"none\"\n };\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n var data = new this$1.library.visualization.DataTable();\n data.addColumn({\n type: \"string\",\n id: \"Name\"\n });\n data.addColumn({\n type: \"date\",\n id: \"Start\"\n });\n data.addColumn({\n type: \"date\",\n id: \"End\"\n });\n data.addRows(chart.data);\n chart.element.style.lineHeight = \"normal\";\n this$1.drawChart(chart, \"Timeline\", data, options);\n });\n }; // TODO remove resize events\n\n\n defaultExport.prototype.destroy = function destroy(chart) {\n if (chart.chart) {\n chart.chart.clearChart();\n }\n };\n\n defaultExport.prototype.drawChart = function drawChart(chart, type, data, options) {\n this.destroy(chart);\n\n if (chart.destroyed) {\n return;\n }\n\n if (chart.options.code) {\n window.console.log(\"var data = new google.visualization.DataTable(\" + data.toJSON() + \");\\nvar chart = new google.visualization.\" + type + \"(element);\\nchart.draw(data, \" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.visualization[type](chart.element);\n resize(function () {\n chart.chart.draw(data, options);\n });\n };\n\n defaultExport.prototype.waitForLoaded = function waitForLoaded(chart, pack, callback) {\n var this$1 = this;\n\n if (!callback) {\n callback = pack;\n pack = \"corechart\";\n }\n\n callbacks.push({\n pack: pack,\n callback: callback\n });\n\n if (loaded[pack]) {\n this.runCallbacks();\n } else {\n loaded[pack] = true; // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI\n\n var loadOptions = {\n packages: [pack],\n callback: function callback() {\n this$1.runCallbacks();\n }\n };\n\n var config = chart.__config();\n\n if (config.language) {\n loadOptions.language = config.language;\n }\n\n if (pack === \"geochart\" && config.mapsApiKey) {\n loadOptions.mapsApiKey = config.mapsApiKey;\n }\n\n this.library.charts.load(\"current\", loadOptions);\n }\n };\n\n defaultExport.prototype.runCallbacks = function runCallbacks() {\n var cb, call;\n\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n call = this.library.visualization && (cb.pack === \"corechart\" && this.library.visualization.LineChart || cb.pack === \"timeline\" && this.library.visualization.Timeline || cb.pack === \"geochart\" && this.library.visualization.GeoChart);\n\n if (call) {\n cb.callback();\n callbacks.splice(i, 1);\n i--;\n }\n }\n }; // cant use object as key\n\n\n defaultExport.prototype.createDataTable = function createDataTable(series, columnType) {\n var i,\n j,\n s,\n d,\n key,\n rows = [],\n sortedLabels = [];\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n series[i].name = series[i].name || \"Value\";\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n key = columnType === \"datetime\" ? d[0].getTime() : d[0];\n\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n sortedLabels.push(key);\n }\n\n rows[key][i] = toFloat(d[1]);\n }\n }\n\n var rows2 = [];\n var day = true;\n var value;\n\n for (j = 0; j < sortedLabels.length; j++) {\n i = sortedLabels[j];\n\n if (columnType === \"datetime\") {\n value = new Date(toFloat(i));\n day = day && isDay(value);\n } else if (columnType === \"number\") {\n value = toFloat(i);\n } else {\n value = i;\n }\n\n rows2.push([value].concat(rows[i]));\n }\n\n if (columnType === \"datetime\") {\n rows2.sort(sortByTime);\n } else if (columnType === \"number\") {\n rows2.sort(sortByNumberSeries);\n\n for (i = 0; i < rows2.length; i++) {\n rows2[i][0] = toStr(rows2[i][0]);\n }\n\n columnType = \"string\";\n } // create datatable\n\n\n var data = new this.library.visualization.DataTable();\n columnType = columnType === \"datetime\" && day ? \"date\" : columnType;\n data.addColumn(columnType, \"\");\n\n for (i = 0; i < series.length; i++) {\n data.addColumn(\"number\", series[i].name);\n }\n\n data.addRows(rows2);\n return data;\n };\n\n function formatSeriesData(data, keyType) {\n var r = [],\n j,\n keyFunc;\n\n if (keyType === \"number\") {\n keyFunc = toFloat;\n } else if (keyType === \"datetime\") {\n keyFunc = toDate;\n } else {\n keyFunc = toStr;\n }\n\n if (keyType === \"bubble\") {\n for (j = 0; j < data.length; j++) {\n r.push([toFloat(data[j][0]), toFloat(data[j][1]), toFloat(data[j][2])]);\n }\n } else {\n for (j = 0; j < data.length; j++) {\n r.push([keyFunc(data[j][0]), toFloat(data[j][1])]);\n }\n }\n\n if (keyType === \"datetime\") {\n r.sort(sortByTime);\n } else if (keyType === \"number\") {\n r.sort(sortByNumberSeries);\n }\n\n return r;\n }\n\n function detectXType(series, noDatetime, options) {\n if (dataEmpty(series)) {\n if ((options.xmin || options.xmax) && (!options.xmin || isDate(options.xmin)) && (!options.xmax || isDate(options.xmax))) {\n return \"datetime\";\n } else {\n return \"number\";\n }\n } else if (detectXTypeWithFunction(series, isNumber)) {\n return \"number\";\n } else if (!noDatetime && detectXTypeWithFunction(series, isDate)) {\n return \"datetime\";\n } else {\n return \"string\";\n }\n }\n\n function detectXTypeWithFunction(series, func) {\n var i, j, data;\n\n for (i = 0; i < series.length; i++) {\n data = toArr(series[i].data);\n\n for (j = 0; j < data.length; j++) {\n if (!func(data[j][0])) {\n return false;\n }\n }\n }\n\n return true;\n } // creates a shallow copy of each element of the array\n // elements are expected to be objects\n\n\n function copySeries(series) {\n var newSeries = [],\n i,\n j;\n\n for (i = 0; i < series.length; i++) {\n var copy = {};\n\n for (j in series[i]) {\n if (series[i].hasOwnProperty(j)) {\n copy[j] = series[i][j];\n }\n }\n\n newSeries.push(copy);\n }\n\n return newSeries;\n }\n\n function processSeries(chart, keyType, noDatetime) {\n var i;\n var opts = chart.options;\n var series = chart.rawData; // see if one series or multiple\n\n chart.singleSeriesFormat = !isArray(series) || _typeof(series[0]) !== \"object\" || isArray(series[0]);\n\n if (chart.singleSeriesFormat) {\n series = [{\n name: opts.label,\n data: series\n }];\n } // convert to array\n // must come before dataEmpty check\n\n\n series = copySeries(series);\n\n for (i = 0; i < series.length; i++) {\n series[i].data = toArr(series[i].data);\n }\n\n chart.xtype = keyType ? keyType : opts.discrete ? \"string\" : detectXType(series, noDatetime, opts); // right format\n\n for (i = 0; i < series.length; i++) {\n series[i].data = formatSeriesData(series[i].data, chart.xtype);\n }\n\n return series;\n }\n\n function processSimple(chart) {\n var perfectData = toArr(chart.rawData),\n i;\n\n for (i = 0; i < perfectData.length; i++) {\n perfectData[i] = [toStr(perfectData[i][0]), toFloat(perfectData[i][1])];\n }\n\n return perfectData;\n }\n\n function dataEmpty(data, chartType) {\n if (chartType === \"PieChart\" || chartType === \"GeoChart\" || chartType === \"Timeline\") {\n return data.length === 0;\n } else {\n for (var i = 0; i < data.length; i++) {\n if (data[i].data.length > 0) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n function addDownloadButton(chart) {\n var element = chart.element;\n var link = document.createElement(\"a\");\n var download = chart.options.download;\n\n if (download === true) {\n download = {};\n } else if (typeof download === \"string\") {\n download = {\n filename: download\n };\n }\n\n link.download = download.filename || \"chart.png\"; // https://caniuse.com/download\n\n link.style.position = \"absolute\";\n link.style.top = \"20px\";\n link.style.right = \"20px\";\n link.style.zIndex = 1000;\n link.style.lineHeight = \"20px\";\n link.target = \"_blank\"; // for safari\n\n var image = document.createElement(\"img\");\n image.alt = \"Download\";\n image.style.border = \"none\"; // icon from font-awesome\n // http://fa2png.io/\n\n image.src = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABCFBMVEUAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMywEsqxAAAAV3RSTlMAAQIDBggJCgsMDQ4PERQaHB0eISIjJCouLzE0OTo/QUJHSUpLTU5PUllhYmltcHh5foWLjI+SlaCio6atr7S1t7m6vsHHyM7R2tze5Obo7fHz9ff5+/1hlxK2AAAA30lEQVQYGUXBhVYCQQBA0TdYWAt2d3d3YWAHyur7/z9xgD16Lw0DW+XKx+1GgX+FRzM3HWQWrHl5N/oapW5RPe0PkBu+UYeICvozTWZVK23Ao04B79oJrOsJDOoxkZoQPWgX29pHpCZEk7rEvQYiNSFq1UMqvlCjJkRBS1R8hb00Vb/TajtBL7nTHE1X1vyMQF732dQhyF2o6SAwrzP06iUQzvwsArlnzcOdrgBhJyHa1QOgO9U1GsKuvjUTjavliZYQ8nNPapG6sap/3nrIdJ6bOWzmX/fy0XVpfzZP3S8OJT3g9EEiJwAAAABJRU5ErkJggg==\";\n link.appendChild(image);\n element.style.position = \"relative\";\n chart.__downloadAttached = true; // mouseenter\n\n chart.__enterEvent = addEvent(element, \"mouseover\", function (e) {\n var related = e.relatedTarget; // check download option again to ensure it wasn't changed\n\n if ((!related || related !== this && !childOf(this, related)) && chart.options.download) {\n link.href = chart.toImage(download);\n element.appendChild(link);\n }\n }); // mouseleave\n\n chart.__leaveEvent = addEvent(element, \"mouseout\", function (e) {\n var related = e.relatedTarget;\n\n if (!related || related !== this && !childOf(this, related)) {\n if (link.parentNode) {\n link.parentNode.removeChild(link);\n }\n }\n });\n } // https://stackoverflow.com/questions/10149963/adding-event-listener-cross-browser\n\n\n function addEvent(elem, event, fn) {\n if (elem.addEventListener) {\n elem.addEventListener(event, fn, false);\n return fn;\n } else {\n var fn2 = function fn2() {\n // set the this pointer same as addEventListener when fn is called\n return fn.call(elem, window.event);\n };\n\n elem.attachEvent(\"on\" + event, fn2);\n return fn2;\n }\n }\n\n function removeEvent(elem, event, fn) {\n if (elem.removeEventListener) {\n elem.removeEventListener(event, fn, false);\n } else {\n elem.detachEvent(\"on\" + event, fn);\n }\n } // https://gist.github.com/shawnbot/4166283\n\n\n function childOf(p, c) {\n if (p === c) {\n return false;\n }\n\n while (c && c !== p) {\n c = c.parentNode;\n }\n\n return c === p;\n }\n\n var pendingRequests = [],\n runningRequests = 0,\n maxRequests = 4;\n\n function pushRequest(url, success, error) {\n pendingRequests.push([url, success, error]);\n runNext();\n }\n\n function runNext() {\n if (runningRequests < maxRequests) {\n var request = pendingRequests.shift();\n\n if (request) {\n runningRequests++;\n getJSON(request[0], request[1], request[2]);\n runNext();\n }\n }\n }\n\n function requestComplete() {\n runningRequests--;\n runNext();\n }\n\n function getJSON(url, success, error) {\n ajaxCall(url, success, function (jqXHR, textStatus, errorThrown) {\n var message = typeof errorThrown === \"string\" ? errorThrown : errorThrown.message;\n error(message);\n });\n }\n\n function ajaxCall(url, success, error) {\n var $ = window.jQuery || window.Zepto || window.$;\n\n if ($ && $.ajax) {\n $.ajax({\n dataType: \"json\",\n url: url,\n success: success,\n error: error,\n complete: requestComplete\n });\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, true);\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n\n xhr.onload = function () {\n requestComplete();\n\n if (xhr.status === 200) {\n success(JSON.parse(xhr.responseText), xhr.statusText, xhr);\n } else {\n error(xhr, \"error\", xhr.statusText);\n }\n };\n\n xhr.send();\n }\n }\n\n var config = {};\n var adapters = []; // helpers\n\n function setText(element, text) {\n if (document.body.innerText) {\n element.innerText = text;\n } else {\n element.textContent = text;\n }\n } // TODO remove prefix for all messages\n\n\n function chartError(element, message, noPrefix) {\n if (!noPrefix) {\n message = \"Error Loading Chart: \" + message;\n }\n\n setText(element, message);\n element.style.color = \"#ff0000\";\n }\n\n function errorCatcher(chart) {\n try {\n chart.__render();\n } catch (err) {\n chartError(chart.element, err.message);\n throw err;\n }\n }\n\n function fetchDataSource(chart, dataSource, showLoading) {\n // only show loading message for urls and callbacks\n if (showLoading && chart.options.loading && (typeof dataSource === \"string\" || typeof dataSource === \"function\")) {\n setText(chart.element, chart.options.loading);\n }\n\n if (typeof dataSource === \"string\") {\n pushRequest(dataSource, function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message);\n });\n } else if (typeof dataSource === \"function\") {\n try {\n dataSource(function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message, true);\n });\n } catch (err) {\n chartError(chart.element, err, true);\n }\n } else {\n chart.rawData = dataSource;\n errorCatcher(chart);\n }\n }\n\n function getAdapterType(library) {\n if (library) {\n if (library.product === \"Highcharts\") {\n return defaultExport$1;\n } else if (library.charts) {\n return defaultExport;\n } else if (isFunction(library)) {\n return defaultExport$2;\n }\n }\n\n throw new Error(\"Unknown adapter\");\n }\n\n function addAdapter(library) {\n var adapterType = getAdapterType(library);\n var adapter = new adapterType(library);\n\n if (adapters.indexOf(adapter) === -1) {\n adapters.push(adapter);\n }\n }\n\n function loadAdapters() {\n if (\"Chart\" in window) {\n addAdapter(window.Chart);\n }\n\n if (\"Highcharts\" in window) {\n addAdapter(window.Highcharts);\n }\n\n if (window.google && window.google.charts) {\n addAdapter(window.google);\n }\n }\n\n function renderChart(chartType, chart) {\n if (dataEmpty(chart.data, chartType)) {\n var message = chart.options.empty || chart.options.messages && chart.options.messages.empty || \"No data\";\n setText(chart.element, message);\n } else {\n callAdapter(chartType, chart);\n\n if (chart.options.download && !chart.__downloadAttached && chart.adapter === \"chartjs\") {\n addDownloadButton(chart);\n }\n }\n } // TODO remove chartType if cross-browser way\n // to get the name of the chart class\n\n\n function callAdapter(chartType, chart) {\n var i, adapter, fnName, adapterName;\n fnName = \"render\" + chartType;\n adapterName = chart.options.adapter;\n loadAdapters();\n\n for (i = 0; i < adapters.length; i++) {\n adapter = adapters[i];\n\n if ((!adapterName || adapterName === adapter.name) && isFunction(adapter[fnName])) {\n chart.adapter = adapter.name;\n chart.__adapterObject = adapter;\n return adapter[fnName](chart);\n }\n }\n\n if (adapters.length > 0) {\n throw new Error(\"No charting library found for \" + chartType);\n } else {\n throw new Error(\"No charting libraries found - be sure to include one before your charts\");\n }\n } // define classes\n\n\n var Chart = function Chart(element, dataSource, options) {\n var elementId;\n\n if (typeof element === \"string\") {\n elementId = element;\n element = document.getElementById(element);\n\n if (!element) {\n throw new Error(\"No element with id \" + elementId);\n }\n }\n\n this.element = element;\n this.options = merge(Chartkick.options, options || {});\n this.dataSource = dataSource;\n Chartkick.charts[element.id] = this;\n fetchDataSource(this, dataSource, true);\n\n if (this.options.refresh) {\n this.startRefresh();\n }\n };\n\n Chart.prototype.getElement = function getElement() {\n return this.element;\n };\n\n Chart.prototype.getDataSource = function getDataSource() {\n return this.dataSource;\n };\n\n Chart.prototype.getData = function getData() {\n return this.data;\n };\n\n Chart.prototype.getOptions = function getOptions() {\n return this.options;\n };\n\n Chart.prototype.getChartObject = function getChartObject() {\n return this.chart;\n };\n\n Chart.prototype.getAdapter = function getAdapter() {\n return this.adapter;\n };\n\n Chart.prototype.updateData = function updateData(dataSource, options) {\n this.dataSource = dataSource;\n\n if (options) {\n this.__updateOptions(options);\n }\n\n fetchDataSource(this, dataSource, true);\n };\n\n Chart.prototype.setOptions = function setOptions(options) {\n this.__updateOptions(options);\n\n this.redraw();\n };\n\n Chart.prototype.redraw = function redraw() {\n fetchDataSource(this, this.rawData);\n };\n\n Chart.prototype.refreshData = function refreshData() {\n if (typeof this.dataSource === \"string\") {\n // prevent browser from caching\n var sep = this.dataSource.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n var url = this.dataSource + sep + \"_=\" + new Date().getTime();\n fetchDataSource(this, url);\n } else if (typeof this.dataSource === \"function\") {\n fetchDataSource(this, this.dataSource);\n }\n };\n\n Chart.prototype.startRefresh = function startRefresh() {\n var this$1 = this;\n var refresh = this.options.refresh;\n\n if (refresh && typeof this.dataSource !== \"string\" && typeof this.dataSource !== \"function\") {\n throw new Error(\"Data source must be a URL or callback for refresh\");\n }\n\n if (!this.intervalId) {\n if (refresh) {\n this.intervalId = setInterval(function () {\n this$1.refreshData();\n }, refresh * 1000);\n } else {\n throw new Error(\"No refresh interval\");\n }\n }\n };\n\n Chart.prototype.stopRefresh = function stopRefresh() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n };\n\n Chart.prototype.toImage = function toImage(download) {\n if (this.adapter === \"chartjs\") {\n if (download && download.background && download.background !== \"transparent\") {\n // https://stackoverflow.com/questions/30464750/chartjs-line-chart-set-background-color\n var canvas = this.chart.canvas;\n var ctx = this.chart.ctx;\n var tmpCanvas = document.createElement(\"canvas\");\n var tmpCtx = tmpCanvas.getContext(\"2d\");\n tmpCanvas.width = ctx.canvas.width;\n tmpCanvas.height = ctx.canvas.height;\n tmpCtx.fillStyle = download.background;\n tmpCtx.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);\n tmpCtx.drawImage(canvas, 0, 0);\n return tmpCanvas.toDataURL(\"image/png\");\n } else {\n return this.chart.toBase64Image();\n }\n } else {\n throw new Error(\"Feature only available for Chart.js\");\n }\n };\n\n Chart.prototype.destroy = function destroy() {\n this.destroyed = true;\n this.stopRefresh();\n\n if (this.__adapterObject) {\n this.__adapterObject.destroy(this);\n }\n\n if (this.__enterEvent) {\n removeEvent(this.element, \"mouseover\", this.__enterEvent);\n }\n\n if (this.__leaveEvent) {\n removeEvent(this.element, \"mouseout\", this.__leaveEvent);\n }\n };\n\n Chart.prototype.__updateOptions = function __updateOptions(options) {\n var updateRefresh = options.refresh && options.refresh !== this.options.refresh;\n this.options = merge(Chartkick.options, options);\n\n if (updateRefresh) {\n this.stopRefresh();\n this.startRefresh();\n }\n };\n\n Chart.prototype.__render = function __render() {\n this.data = this.__processData();\n renderChart(this.__chartName(), this);\n };\n\n Chart.prototype.__config = function __config() {\n return config;\n };\n\n var LineChart = /*@__PURE__*/function (Chart) {\n function LineChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) LineChart.__proto__ = Chart;\n LineChart.prototype = Object.create(Chart && Chart.prototype);\n LineChart.prototype.constructor = LineChart;\n\n LineChart.prototype.__processData = function __processData() {\n return processSeries(this);\n };\n\n LineChart.prototype.__chartName = function __chartName() {\n return \"LineChart\";\n };\n\n return LineChart;\n }(Chart);\n\n var PieChart = /*@__PURE__*/function (Chart) {\n function PieChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) PieChart.__proto__ = Chart;\n PieChart.prototype = Object.create(Chart && Chart.prototype);\n PieChart.prototype.constructor = PieChart;\n\n PieChart.prototype.__processData = function __processData() {\n return processSimple(this);\n };\n\n PieChart.prototype.__chartName = function __chartName() {\n return \"PieChart\";\n };\n\n return PieChart;\n }(Chart);\n\n var ColumnChart = /*@__PURE__*/function (Chart) {\n function ColumnChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) ColumnChart.__proto__ = Chart;\n ColumnChart.prototype = Object.create(Chart && Chart.prototype);\n ColumnChart.prototype.constructor = ColumnChart;\n\n ColumnChart.prototype.__processData = function __processData() {\n return processSeries(this, null, true);\n };\n\n ColumnChart.prototype.__chartName = function __chartName() {\n return \"ColumnChart\";\n };\n\n return ColumnChart;\n }(Chart);\n\n var BarChart = /*@__PURE__*/function (Chart) {\n function BarChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) BarChart.__proto__ = Chart;\n BarChart.prototype = Object.create(Chart && Chart.prototype);\n BarChart.prototype.constructor = BarChart;\n\n BarChart.prototype.__processData = function __processData() {\n return processSeries(this, null, true);\n };\n\n BarChart.prototype.__chartName = function __chartName() {\n return \"BarChart\";\n };\n\n return BarChart;\n }(Chart);\n\n var AreaChart = /*@__PURE__*/function (Chart) {\n function AreaChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) AreaChart.__proto__ = Chart;\n AreaChart.prototype = Object.create(Chart && Chart.prototype);\n AreaChart.prototype.constructor = AreaChart;\n\n AreaChart.prototype.__processData = function __processData() {\n return processSeries(this);\n };\n\n AreaChart.prototype.__chartName = function __chartName() {\n return \"AreaChart\";\n };\n\n return AreaChart;\n }(Chart);\n\n var GeoChart = /*@__PURE__*/function (Chart) {\n function GeoChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) GeoChart.__proto__ = Chart;\n GeoChart.prototype = Object.create(Chart && Chart.prototype);\n GeoChart.prototype.constructor = GeoChart;\n\n GeoChart.prototype.__processData = function __processData() {\n return processSimple(this);\n };\n\n GeoChart.prototype.__chartName = function __chartName() {\n return \"GeoChart\";\n };\n\n return GeoChart;\n }(Chart);\n\n var ScatterChart = /*@__PURE__*/function (Chart) {\n function ScatterChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) ScatterChart.__proto__ = Chart;\n ScatterChart.prototype = Object.create(Chart && Chart.prototype);\n ScatterChart.prototype.constructor = ScatterChart;\n\n ScatterChart.prototype.__processData = function __processData() {\n return processSeries(this, \"number\");\n };\n\n ScatterChart.prototype.__chartName = function __chartName() {\n return \"ScatterChart\";\n };\n\n return ScatterChart;\n }(Chart);\n\n var BubbleChart = /*@__PURE__*/function (Chart) {\n function BubbleChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) BubbleChart.__proto__ = Chart;\n BubbleChart.prototype = Object.create(Chart && Chart.prototype);\n BubbleChart.prototype.constructor = BubbleChart;\n\n BubbleChart.prototype.__processData = function __processData() {\n return processSeries(this, \"bubble\");\n };\n\n BubbleChart.prototype.__chartName = function __chartName() {\n return \"BubbleChart\";\n };\n\n return BubbleChart;\n }(Chart);\n\n var Timeline = /*@__PURE__*/function (Chart) {\n function Timeline() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) Timeline.__proto__ = Chart;\n Timeline.prototype = Object.create(Chart && Chart.prototype);\n Timeline.prototype.constructor = Timeline;\n\n Timeline.prototype.__processData = function __processData() {\n var i,\n data = this.rawData;\n\n for (i = 0; i < data.length; i++) {\n data[i][1] = toDate(data[i][1]);\n data[i][2] = toDate(data[i][2]);\n }\n\n return data;\n };\n\n Timeline.prototype.__chartName = function __chartName() {\n return \"Timeline\";\n };\n\n return Timeline;\n }(Chart);\n\n var Chartkick = {\n LineChart: LineChart,\n PieChart: PieChart,\n ColumnChart: ColumnChart,\n BarChart: BarChart,\n AreaChart: AreaChart,\n GeoChart: GeoChart,\n ScatterChart: ScatterChart,\n BubbleChart: BubbleChart,\n Timeline: Timeline,\n charts: {},\n configure: function configure(options) {\n for (var key in options) {\n if (options.hasOwnProperty(key)) {\n config[key] = options[key];\n }\n }\n },\n setDefaultOptions: function setDefaultOptions(opts) {\n Chartkick.options = opts;\n },\n eachChart: function eachChart(callback) {\n for (var chartId in Chartkick.charts) {\n if (Chartkick.charts.hasOwnProperty(chartId)) {\n callback(Chartkick.charts[chartId]);\n }\n }\n },\n destroyAll: function destroyAll() {\n for (var chartId in Chartkick.charts) {\n if (Chartkick.charts.hasOwnProperty(chartId)) {\n Chartkick.charts[chartId].destroy();\n delete Chartkick.charts[chartId];\n }\n }\n },\n config: config,\n options: {},\n adapters: adapters,\n addAdapter: addAdapter,\n use: function use(adapter) {\n addAdapter(adapter);\n return Chartkick;\n }\n }; // not ideal, but allows for simpler integration\n\n if (typeof window !== \"undefined\" && !window.Chartkick) {\n window.Chartkick = Chartkick; // clean up previous charts before Turbolinks loads new page\n\n document.addEventListener(\"turbolinks:before-render\", function () {\n Chartkick.destroyAll();\n }); // use setTimeout so charting library can come later in same JS file\n\n setTimeout(function () {\n window.dispatchEvent(new Event(\"chartkick:load\"));\n }, 0);\n } // backwards compatibility for esm require\n\n\n Chartkick[\"default\"] = Chartkick;\n return Chartkick;\n});","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\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 createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\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');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\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');\nvar QObject = global.QObject;\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($Symbol[PROTOTYPE]);\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 isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPrimitive(P, true);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(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 || $propertyIsEnumerable.call(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 = toPrimitive(V, true);\n var enumerable = nativePropertyIsEnumerable.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPrimitive(P, true);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(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 (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(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 (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(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 (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(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 redefine($Symbol[PROTOTYPE], '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($Symbol[PROTOTYPE], '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 = String(key);\n if (has(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 (has(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\n stringify: function stringify(it, replacer, space) {\n var args = [it];\n var index = 1;\n var $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $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 (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return $stringify.apply(null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar has = require('../internals/has');\nvar isObject = require('../internals/is-object');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\n\nif (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n var result = this instanceof SymbolWrapper\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n symbolPrototype.constructor = SymbolWrapper;\n\n var symbolToString = symbolPrototype.toString;\n var native = String(NativeSymbol('test')) == 'Symbol(test)';\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n defineProperty(symbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = isObject(this) ? this.valueOf() : this;\n var string = symbolToString.call(symbol);\n if (has(EmptyStringDescriptionStore, symbol)) return '';\n var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\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.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","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\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';\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 concat: function concat(arg) { // eslint-disable-line no-unused-vars\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 = toLength(E.length);\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 $ = require('../internals/export');\nvar copyWithin = require('../internals/array-copy-within');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n$({ target: 'Array', proto: true }, {\n copyWithin: copyWithin\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('copyWithin');\n","'use strict';\nvar $ = require('../internals/export');\nvar $every = require('../internals/array-iteration').every;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('every');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('every');\n\n// `Array.prototype.every` method\n// https://tc39.es/ecma262/#sec-array.prototype.every\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n// Edge 14- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('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 || !USES_TO_LENGTH }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength(FIND);\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 || !USES_TO_LENGTH }, {\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","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength(FIND_INDEX);\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flat` method\n// https://tc39.es/ecma262/#sec-array.prototype.flat\n$({ target: 'Array', proto: true }, {\n flat: function flat(/* depthArg = 1 */) {\n var depthArg = arguments.length ? arguments[0] : undefined;\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar aFunction = require('../internals/a-function');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A;\n aFunction(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\n$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {\n forEach: forEach\n});\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, {\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","'use strict';\nvar $ = require('../internals/export');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\n// `Array.isArray` method\n// https://tc39.es/ecma262/#sec-array.isarray\n$({ target: 'Array', stat: true }, {\n isArray: isArray\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeJoin = [].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 nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","var $ = require('../internals/export');\nvar lastIndexOf = require('../internals/array-last-index-of');\n\n// `Array.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\n$({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, {\n lastIndexOf: lastIndexOf\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n// FF49- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('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 || !USES_TO_LENGTH }, {\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 fails = require('../internals/fails');\nvar createProperty = require('../internals/create-property');\n\nvar ISNT_GENERIC = fails(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n});\n\n// `Array.of` method\n// https://tc39.es/ecma262/#sec-array.of\n// WebKit Array.of isn't generic\n$({ target: 'Array', stat: true, forced: ISNT_GENERIC }, {\n of: function of(/* ...args */) {\n var index = 0;\n var argumentsLength = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(argumentsLength);\n while (argumentsLength > index) createProperty(result, index, arguments[index++]);\n result.length = argumentsLength;\n return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 });\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH || CHROME_BUG }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduceRight = require('../internals/array-reduce').right;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduceRight');\n// For preventing possible almost infinite loop in non-standard implementations, test the forward version of the method\nvar USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 });\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\n\n// `Array.prototype.reduceRight` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduceright\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH || CHROME_BUG }, {\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduceRight(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = [].reverse;\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign\n if (isArray(this)) this.length = this.length;\n return nativeReverse.call(this);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 });\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('some');\n\n// `Array.prototype.some` method\n// https://tc39.es/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar test = [];\nvar nativeSort = test.sort;\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 FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD;\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 return comparefn === undefined\n ? nativeSort.call(toObject(this))\n : nativeSort.call(toObject(this), aFunction(comparefn));\n }\n});\n","var setSpecies = require('../internals/set-species');\n\n// `Array[@@species]` getter\n// https://tc39.es/ecma262/#sec-get-array-@@species\nsetSpecies('Array');\n","'use strict';\nvar $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('splice', { ACCESSORS: true, 0: 0, 1: 2 });\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flat');\n","// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flatMap');\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar arrayBufferModule = require('../internals/array-buffer');\nvar setSpecies = require('../internals/set-species');\n\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\n\n// `ArrayBuffer` constructor\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\n$({ global: true, forced: NativeArrayBuffer !== ArrayBuffer }, {\n ArrayBuffer: ArrayBuffer\n});\n\nsetSpecies(ARRAY_BUFFER);\n","// IEEE754 conversions based on https://github.com/feross/ieee754\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = 1 / 0;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n var buffer = new Array(bytes);\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n var index = 0;\n var exponent, mantissa, c;\n number = abs(number);\n // eslint-disable-next-line no-self-compare\n if (number != number || number === Infinity) {\n // eslint-disable-next-line no-self-compare\n mantissa = number != number ? 1 : 0;\n exponent = eMax;\n } else {\n exponent = floor(log(number) / LN2);\n if (number * (c = pow(2, -exponent)) < 1) {\n exponent--;\n c *= 2;\n }\n if (exponent + eBias >= 1) {\n number += rt / c;\n } else {\n number += rt * pow(2, 1 - eBias);\n }\n if (number * c >= 2) {\n exponent++;\n c /= 2;\n }\n if (exponent + eBias >= eMax) {\n mantissa = 0;\n exponent = eMax;\n } else if (exponent + eBias >= 1) {\n mantissa = (number * c - 1) * pow(2, mantissaLength);\n exponent = exponent + eBias;\n } else {\n mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n exponent = 0;\n }\n }\n for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);\n exponent = exponent << mantissaLength | mantissa;\n exponentLength += mantissaLength;\n for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);\n buffer[--index] |= sign * 128;\n return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n var bytes = buffer.length;\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var nBits = exponentLength - 7;\n var index = bytes - 1;\n var sign = buffer[index--];\n var exponent = sign & 127;\n var mantissa;\n sign >>= 7;\n for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);\n mantissa = exponent & (1 << -nBits) - 1;\n exponent >>= -nBits;\n nBits += mantissaLength;\n for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);\n if (exponent === 0) {\n exponent = 1 - eBias;\n } else if (exponent === eMax) {\n return mantissa ? NaN : sign ? -Infinity : Infinity;\n } else {\n mantissa = mantissa + pow(2, mantissaLength);\n exponent = exponent - eBias;\n } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n pack: pack,\n unpack: unpack\n};\n","var $ = require('../internals/export');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\n\n// `ArrayBuffer.isView` method\n// https://tc39.es/ecma262/#sec-arraybuffer.isview\n$({ target: 'ArrayBuffer', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n isView: ArrayBufferViewCore.isView\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anObject = require('../internals/an-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar DataView = ArrayBufferModule.DataView;\nvar nativeArrayBufferSlice = ArrayBuffer.prototype.slice;\n\nvar INCORRECT_SLICE = fails(function () {\n return !new ArrayBuffer(2).slice(1, undefined).byteLength;\n});\n\n// `ArrayBuffer.prototype.slice` method\n// https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice\n$({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {\n slice: function slice(start, end) {\n if (nativeArrayBufferSlice !== undefined && end === undefined) {\n return nativeArrayBufferSlice.call(anObject(this), start); // FF fix\n }\n var length = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = new (speciesConstructor(this, ArrayBuffer))(toLength(fin - first));\n var viewSource = new DataView(this);\n var viewTarget = new DataView(result);\n var index = 0;\n while (first < fin) {\n viewTarget.setUint8(index++, viewSource.getUint8(first++));\n } return result;\n }\n});\n","var $ = require('../internals/export');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\n\n// `DataView` constructor\n// https://tc39.es/ecma262/#sec-dataview-constructor\n$({ global: true, forced: !NATIVE_ARRAY_BUFFER }, {\n DataView: ArrayBufferModule.DataView\n});\n","var $ = require('../internals/export');\n\n// `Date.now` method\n// https://tc39.es/ecma262/#sec-date.now\n$({ target: 'Date', stat: true }, {\n now: function now() {\n return new Date().getTime();\n }\n});\n","var $ = require('../internals/export');\nvar toISOString = require('../internals/date-to-iso-string');\n\n// `Date.prototype.toISOString` method\n// https://tc39.es/ecma262/#sec-date.prototype.toisostring\n// PhantomJS / old WebKit has a broken implementations\n$({ target: 'Date', proto: true, forced: Date.prototype.toISOString !== toISOString }, {\n toISOString: toISOString\n});\n","'use strict';\nvar fails = require('../internals/fails');\nvar padStart = require('../internals/string-pad').start;\n\nvar abs = Math.abs;\nvar DatePrototype = Date.prototype;\nvar getTime = DatePrototype.getTime;\nvar nativeDateToISOString = DatePrototype.toISOString;\n\n// `Date.prototype.toISOString` method implementation\n// https://tc39.es/ecma262/#sec-date.prototype.toisostring\n// PhantomJS / old WebKit fails here:\nmodule.exports = (fails(function () {\n return nativeDateToISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n nativeDateToISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var date = this;\n var year = date.getUTCFullYear();\n var milliseconds = date.getUTCMilliseconds();\n var sign = year < 0 ? '-' : year > 9999 ? '+' : '';\n return sign + padStart(abs(year), sign ? 6 : 4, 0) +\n '-' + padStart(date.getUTCMonth() + 1, 2, 0) +\n '-' + padStart(date.getUTCDate(), 2, 0) +\n 'T' + padStart(date.getUTCHours(), 2, 0) +\n ':' + padStart(date.getUTCMinutes(), 2, 0) +\n ':' + padStart(date.getUTCSeconds(), 2, 0) +\n '.' + padStart(milliseconds, 3, 0) +\n 'Z';\n} : nativeDateToISOString;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar FORCED = fails(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n});\n\n// `Date.prototype.toJSON` method\n// https://tc39.es/ecma262/#sec-date.prototype.tojson\n$({ target: 'Date', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar dateToPrimitive = require('../internals/date-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar DatePrototype = Date.prototype;\n\n// `Date.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nif (!(TO_PRIMITIVE in DatePrototype)) {\n createNonEnumerableProperty(DatePrototype, TO_PRIMITIVE, dateToPrimitive);\n}\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== 'number' && hint !== 'default') {\n throw TypeError('Incorrect hint');\n } return toPrimitive(anObject(this), hint !== 'number');\n};\n","var redefine = require('../internals/redefine');\n\nvar DatePrototype = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar nativeDateToString = DatePrototype[TO_STRING];\nvar getTime = DatePrototype.getTime;\n\n// `Date.prototype.toString` method\n// https://tc39.es/ecma262/#sec-date.prototype.tostring\nif (new Date(NaN) + '' != INVALID_DATE) {\n redefine(DatePrototype, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? nativeDateToString.call(this) : INVALID_DATE;\n });\n}\n","var $ = require('../internals/export');\nvar bind = require('../internals/function-bind');\n\n// `Function.prototype.bind` method\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n$({ target: 'Function', proto: true }, {\n bind: bind\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar HAS_INSTANCE = wellKnownSymbol('hasInstance');\nvar FunctionPrototype = Function.prototype;\n\n// `Function.prototype[@@hasInstance]` method\n// https://tc39.es/ecma262/#sec-function.prototype-@@hasinstance\nif (!(HAS_INSTANCE in FunctionPrototype)) {\n definePropertyModule.f(FunctionPrototype, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n } });\n}\n","var DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\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","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","var $ = require('../internals/export');\nvar log1p = require('../internals/math-log1p');\n\nvar nativeAcosh = Math.acosh;\nvar log = Math.log;\nvar sqrt = Math.sqrt;\nvar LN2 = Math.LN2;\n\nvar FORCED = !nativeAcosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n || Math.floor(nativeAcosh(Number.MAX_VALUE)) != 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n || nativeAcosh(Infinity) != Infinity;\n\n// `Math.acosh` method\n// https://tc39.es/ecma262/#sec-math.acosh\n$({ target: 'Math', stat: true, forced: FORCED }, {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? log(x) + LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","var $ = require('../internals/export');\n\nvar nativeAsinh = Math.asinh;\nvar log = Math.log;\nvar sqrt = Math.sqrt;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : log(x + sqrt(x * x + 1));\n}\n\n// `Math.asinh` method\n// https://tc39.es/ecma262/#sec-math.asinh\n// Tor Browser bug: Math.asinh(0) -> -0\n$({ target: 'Math', stat: true, forced: !(nativeAsinh && 1 / nativeAsinh(0) > 0) }, {\n asinh: asinh\n});\n","var $ = require('../internals/export');\n\nvar nativeAtanh = Math.atanh;\nvar log = Math.log;\n\n// `Math.atanh` method\n// https://tc39.es/ecma262/#sec-math.atanh\n// Tor Browser bug: Math.atanh(-0) -> 0\n$({ target: 'Math', stat: true, forced: !(nativeAtanh && 1 / nativeAtanh(-0) < 0) }, {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : log((1 + x) / (1 - x)) / 2;\n }\n});\n","var $ = require('../internals/export');\nvar sign = require('../internals/math-sign');\n\nvar abs = Math.abs;\nvar pow = Math.pow;\n\n// `Math.cbrt` method\n// https://tc39.es/ecma262/#sec-math.cbrt\n$({ target: 'Math', stat: true }, {\n cbrt: function cbrt(x) {\n return sign(x = +x) * pow(abs(x), 1 / 3);\n }\n});\n","var $ = require('../internals/export');\n\nvar floor = Math.floor;\nvar log = Math.log;\nvar LOG2E = Math.LOG2E;\n\n// `Math.clz32` method\n// https://tc39.es/ecma262/#sec-math.clz32\n$({ target: 'Math', stat: true }, {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - floor(log(x + 0.5) * LOG2E) : 32;\n }\n});\n","var $ = require('../internals/export');\nvar expm1 = require('../internals/math-expm1');\n\nvar nativeCosh = Math.cosh;\nvar abs = Math.abs;\nvar E = Math.E;\n\n// `Math.cosh` method\n// https://tc39.es/ecma262/#sec-math.cosh\n$({ target: 'Math', stat: true, forced: !nativeCosh || nativeCosh(710) === Infinity }, {\n cosh: function cosh(x) {\n var t = expm1(abs(x) - 1) + 1;\n return (t + 1 / (t * E * E)) * (E / 2);\n }\n});\n","var $ = require('../internals/export');\nvar expm1 = require('../internals/math-expm1');\n\n// `Math.expm1` method\n// https://tc39.es/ecma262/#sec-math.expm1\n$({ target: 'Math', stat: true, forced: expm1 != Math.expm1 }, { expm1: expm1 });\n","var $ = require('../internals/export');\nvar fround = require('../internals/math-fround');\n\n// `Math.fround` method\n// https://tc39.es/ecma262/#sec-math.fround\n$({ target: 'Math', stat: true }, { fround: fround });\n","var sign = require('../internals/math-sign');\n\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\n// `Math.fround` method implementation\n// https://tc39.es/ecma262/#sec-math.fround\nmodule.exports = Math.fround || function fround(x) {\n var $abs = abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","var $ = require('../internals/export');\n\nvar $hypot = Math.hypot;\nvar abs = Math.abs;\nvar sqrt = Math.sqrt;\n\n// Chrome 77 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=9546\nvar BUGGY = !!$hypot && $hypot(Infinity, NaN) !== Infinity;\n\n// `Math.hypot` method\n// https://tc39.es/ecma262/#sec-math.hypot\n$({ target: 'Math', stat: true, forced: BUGGY }, {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * sqrt(sum);\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\n\nvar nativeImul = Math.imul;\n\nvar FORCED = fails(function () {\n return nativeImul(0xFFFFFFFF, 5) != -5 || nativeImul.length != 2;\n});\n\n// `Math.imul` method\n// https://tc39.es/ecma262/#sec-math.imul\n// some WebKit versions fails with big numbers, some has wrong arity\n$({ target: 'Math', stat: true, forced: FORCED }, {\n imul: function imul(x, y) {\n var UINT16 = 0xFFFF;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","var $ = require('../internals/export');\n\nvar log = Math.log;\nvar LOG10E = Math.LOG10E;\n\n// `Math.log10` method\n// https://tc39.es/ecma262/#sec-math.log10\n$({ target: 'Math', stat: true }, {\n log10: function log10(x) {\n return log(x) * LOG10E;\n }\n});\n","var $ = require('../internals/export');\nvar log1p = require('../internals/math-log1p');\n\n// `Math.log1p` method\n// https://tc39.es/ecma262/#sec-math.log1p\n$({ target: 'Math', stat: true }, { log1p: log1p });\n","var $ = require('../internals/export');\n\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\n// `Math.log2` method\n// https://tc39.es/ecma262/#sec-math.log2\n$({ target: 'Math', stat: true }, {\n log2: function log2(x) {\n return log(x) / LN2;\n }\n});\n","var $ = require('../internals/export');\nvar sign = require('../internals/math-sign');\n\n// `Math.sign` method\n// https://tc39.es/ecma262/#sec-math.sign\n$({ target: 'Math', stat: true }, {\n sign: sign\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar expm1 = require('../internals/math-expm1');\n\nvar abs = Math.abs;\nvar exp = Math.exp;\nvar E = Math.E;\n\nvar FORCED = fails(function () {\n return Math.sinh(-2e-17) != -2e-17;\n});\n\n// `Math.sinh` method\n// https://tc39.es/ecma262/#sec-math.sinh\n// V8 near Chromium 38 has a problem with very small numbers\n$({ target: 'Math', stat: true, forced: FORCED }, {\n sinh: function sinh(x) {\n return abs(x = +x) < 1 ? (expm1(x) - expm1(-x)) / 2 : (exp(x - 1) - exp(-x - 1)) * (E / 2);\n }\n});\n","var $ = require('../internals/export');\nvar expm1 = require('../internals/math-expm1');\n\nvar exp = Math.exp;\n\n// `Math.tanh` method\n// https://tc39.es/ecma262/#sec-math.tanh\n$({ target: 'Math', stat: true }, {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","var setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","var $ = require('../internals/export');\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n$({ target: 'Math', stat: true }, {\n trunc: function trunc(it) {\n return (it > 0 ? floor : ceil)(it);\n }\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","var $ = require('../internals/export');\n\n// `Number.EPSILON` constant\n// https://tc39.es/ecma262/#sec-number.epsilon\n$({ target: 'Number', stat: true }, {\n EPSILON: Math.pow(2, -52)\n});\n","var $ = require('../internals/export');\nvar numberIsFinite = require('../internals/number-is-finite');\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n$({ target: 'Number', stat: true }, { isFinite: numberIsFinite });\n","var global = require('../internals/global');\n\nvar globalIsFinite = global.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\nmodule.exports = Number.isFinite || function isFinite(it) {\n return typeof it == 'number' && globalIsFinite(it);\n};\n","var $ = require('../internals/export');\nvar isInteger = require('../internals/is-integer');\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n isInteger: isInteger\n});\n","var $ = require('../internals/export');\n\n// `Number.isNaN` method\n// https://tc39.es/ecma262/#sec-number.isnan\n$({ target: 'Number', stat: true }, {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","var $ = require('../internals/export');\nvar isInteger = require('../internals/is-integer');\n\nvar abs = Math.abs;\n\n// `Number.isSafeInteger` method\n// https://tc39.es/ecma262/#sec-number.issafeinteger\n$({ target: 'Number', stat: true }, {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1FFFFFFFFFFFFF;\n }\n});\n","var $ = require('../internals/export');\n\n// `Number.MAX_SAFE_INTEGER` constant\n// https://tc39.es/ecma262/#sec-number.max_safe_integer\n$({ target: 'Number', stat: true }, {\n MAX_SAFE_INTEGER: 0x1FFFFFFFFFFFFF\n});\n","var $ = require('../internals/export');\n\n// `Number.MIN_SAFE_INTEGER` constant\n// https://tc39.es/ecma262/#sec-number.min_safe_integer\n$({ target: 'Number', stat: true }, {\n MIN_SAFE_INTEGER: -0x1FFFFFFFFFFFFF\n});\n","var $ = require('../internals/export');\nvar parseFloat = require('../internals/number-parse-float');\n\n// `Number.parseFloat` method\n// https://tc39.es/ecma262/#sec-number.parseFloat\n$({ target: 'Number', stat: true, forced: Number.parseFloat != parseFloat }, {\n parseFloat: parseFloat\n});\n","var $ = require('../internals/export');\nvar parseInt = require('../internals/number-parse-int');\n\n// `Number.parseInt` method\n// https://tc39.es/ecma262/#sec-number.parseint\n$({ target: 'Number', stat: true, forced: Number.parseInt != parseInt }, {\n parseInt: parseInt\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toInteger = require('../internals/to-integer');\nvar thisNumberValue = require('../internals/this-number-value');\nvar repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar nativeToFixed = 1.0.toFixed;\nvar floor = Math.floor;\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 FORCED = nativeToFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToFixed.call({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n // eslint-disable-next-line max-statements\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toInteger(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 var multiply = function (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\n var divide = function (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\n var dataToString = function () {\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.call('0', 7 - t.length) + t;\n }\n } return s;\n };\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare\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(0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n result = dataToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n result = dataToString() + repeat.call('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat.call('0', fractDigits - k) + result\n : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar thisNumberValue = require('../internals/this-number-value');\n\nvar nativeToPrecision = 1.0.toPrecision;\n\nvar FORCED = fails(function () {\n // IE7-\n return nativeToPrecision.call(1, undefined) !== '1';\n}) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToPrecision.call({});\n});\n\n// `Number.prototype.toPrecision` method\n// https://tc39.es/ecma262/#sec-number.prototype.toprecision\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toPrecision: function toPrecision(precision) {\n return precision === undefined\n ? nativeToPrecision.call(thisNumberValue(this))\n : nativeToPrecision.call(thisNumberValue(this), precision);\n }\n});\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$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar create = require('../internals/object-create');\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n create: create\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar toObject = require('../internals/to-object');\nvar aFunction = require('../internals/a-function');\nvar definePropertyModule = require('../internals/object-define-property');\n\n// `Object.prototype.__defineGetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__defineGetter__\nif (DESCRIPTORS) {\n $({ target: 'Object', proto: true, forced: FORCED }, {\n __defineGetter__: function __defineGetter__(P, getter) {\n definePropertyModule.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n });\n}\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperties = require('../internals/object-define-properties');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n defineProperties: defineProperties\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar objectDefinePropertyModile = require('../internals/object-define-property');\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n defineProperty: objectDefinePropertyModile.f\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar toObject = require('../internals/to-object');\nvar aFunction = require('../internals/a-function');\nvar definePropertyModule = require('../internals/object-define-property');\n\n// `Object.prototype.__defineSetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__defineSetter__\nif (DESCRIPTORS) {\n $({ target: 'Object', proto: true, forced: FORCED }, {\n __defineSetter__: function __defineSetter__(P, setter) {\n definePropertyModule.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n });\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","var $ = require('../internals/export');\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\n\nvar nativeFreeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeFreeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n freeze: function freeze(it) {\n return nativeFreeze && isObject(it) ? nativeFreeze(onFreeze(it)) : it;\n }\n});\n","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names-external').f;\n\nvar FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n getOwnPropertyNames: nativeGetOwnPropertyNames\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","var $ = require('../internals/export');\nvar is = require('../internals/same-value');\n\n// `Object.is` method\n// https://tc39.es/ecma262/#sec-object.is\n$({ target: 'Object', stat: true }, {\n is: is\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\n\nvar nativeIsExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeIsExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n isExtensible: function isExtensible(it) {\n return isObject(it) ? nativeIsExtensible ? nativeIsExtensible(it) : true : false;\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\n\nvar nativeIsFrozen = Object.isFrozen;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeIsFrozen(1); });\n\n// `Object.isFrozen` method\n// https://tc39.es/ecma262/#sec-object.isfrozen\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n isFrozen: function isFrozen(it) {\n return isObject(it) ? nativeIsFrozen ? nativeIsFrozen(it) : false : true;\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\n\nvar nativeIsSealed = Object.isSealed;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeIsSealed(1); });\n\n// `Object.isSealed` method\n// https://tc39.es/ecma262/#sec-object.issealed\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n isSealed: function isSealed(it) {\n return isObject(it) ? nativeIsSealed ? nativeIsSealed(it) : false : true;\n }\n});\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","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar toObject = require('../internals/to-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\n\n// `Object.prototype.__lookupGetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__lookupGetter__\nif (DESCRIPTORS) {\n $({ target: 'Object', proto: true, forced: FORCED }, {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var key = toPrimitive(P, true);\n var desc;\n do {\n if (desc = getOwnPropertyDescriptor(O, key)) return desc.get;\n } while (O = getPrototypeOf(O));\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar toObject = require('../internals/to-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\n\n// `Object.prototype.__lookupSetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__lookupSetter__\nif (DESCRIPTORS) {\n $({ target: 'Object', proto: true, forced: FORCED }, {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var key = toPrimitive(P, true);\n var desc;\n do {\n if (desc = getOwnPropertyDescriptor(O, key)) return desc.set;\n } while (O = getPrototypeOf(O));\n }\n });\n}\n","var $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\n\nvar nativePreventExtensions = Object.preventExtensions;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativePreventExtensions(1); });\n\n// `Object.preventExtensions` method\n// https://tc39.es/ecma262/#sec-object.preventextensions\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n preventExtensions: function preventExtensions(it) {\n return nativePreventExtensions && isObject(it) ? nativePreventExtensions(onFreeze(it)) : it;\n }\n});\n","var $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\n\nvar nativeSeal = Object.seal;\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeSeal(1); });\n\n// `Object.seal` method\n// https://tc39.es/ecma262/#sec-object.seal\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n seal: function seal(it) {\n return nativeSeal && isObject(it) ? nativeSeal(onFreeze(it)) : it;\n }\n});\n","var $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n setPrototypeOf: setPrototypeOf\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","'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 $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","var $ = require('../internals/export');\nvar parseFloatImplementation = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat != parseFloatImplementation }, {\n parseFloat: parseFloatImplementation\n});\n","var $ = require('../internals/export');\nvar parseIntImplementation = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt != parseIntImplementation }, {\n parseInt: parseIntImplementation\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar PromiseConstructor = NativePromise;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar $fetch = getBuiltIn('fetch');\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);\n if (!GLOBAL_CORE_JS_PROMISE) {\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (V8_VERSION === 66) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n if (!IS_NODE && !NATIVE_REJECTION_EVENT) return true;\n }\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromiseConstructor.prototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = PromiseConstructor.resolve(1);\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n return !(promise.then(function () { /* empty */ }) instanceof FakePromise);\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n then.call(value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromiseConstructor, PROMISE);\n aFunction(executor);\n Internal.call(this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromiseConstructor.prototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n state.reactions.push(reaction);\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && typeof NativePromise == 'function') {\n nativeThen = NativePromise.prototype.then;\n\n // wrap native Promise#then for native async functions\n redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n nativeThen.call(that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // wrap fetch result\n if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, {\n // eslint-disable-next-line no-unused-vars\n fetch: function fetch(input /* , init */) {\n return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));\n }\n });\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n capability.reject.call(undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n $promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n iterate(iterable, function (promise) {\n $promiseResolve.call(C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n }\n};\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// patch native Promise.prototype for native async functions\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\n redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\n}\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\n\nvar nativeApply = getBuiltIn('Reflect', 'apply');\nvar functionApply = Function.apply;\n\n// MS Edge argumentsList argument is optional\nvar OPTIONAL_ARGUMENTS_LIST = !fails(function () {\n nativeApply(function () { /* empty */ });\n});\n\n// `Reflect.apply` method\n// https://tc39.es/ecma262/#sec-reflect.apply\n$({ target: 'Reflect', stat: true, forced: OPTIONAL_ARGUMENTS_LIST }, {\n apply: function apply(target, thisArgument, argumentsList) {\n aFunction(target);\n anObject(argumentsList);\n return nativeApply\n ? nativeApply(target, thisArgument, argumentsList)\n : functionApply.call(target, thisArgument, argumentsList);\n }\n});\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar bind = require('../internals/function-bind');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar fails = require('../internals/fails');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\nvar ERROR_INSTEAD_OF_FALSE = fails(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(definePropertyModule.f({}, 1, { value: 1 }), 1, { value: 2 });\n});\n\n// `Reflect.defineProperty` method\n// https://tc39.es/ecma262/#sec-reflect.defineproperty\n$({ target: 'Reflect', stat: true, forced: ERROR_INSTEAD_OF_FALSE, sham: !DESCRIPTORS }, {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n var key = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n definePropertyModule.f(target, key, attributes);\n return true;\n } catch (error) {\n return false;\n }\n }\n});\n","var $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\n\n// `Reflect.deleteProperty` method\n// https://tc39.es/ecma262/#sec-reflect.deleteproperty\n$({ target: 'Reflect', stat: true }, {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var descriptor = getOwnPropertyDescriptor(anObject(target), propertyKey);\n return descriptor && !descriptor.configurable ? false : delete target[propertyKey];\n }\n});\n","var $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar has = require('../internals/has');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\n// `Reflect.get` method\n// https://tc39.es/ecma262/#sec-reflect.get\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var descriptor, prototype;\n if (anObject(target) === receiver) return target[propertyKey];\n if (descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey)) return has(descriptor, 'value')\n ? descriptor.value\n : descriptor.get === undefined\n ? undefined\n : descriptor.get.call(receiver);\n if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);\n}\n\n$({ target: 'Reflect', stat: true }, {\n get: get\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar anObject = require('../internals/an-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\n\n// `Reflect.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-reflect.getownpropertydescriptor\n$({ target: 'Reflect', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return getOwnPropertyDescriptorModule.f(anObject(target), propertyKey);\n }\n});\n","var $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar objectGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\n// `Reflect.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-reflect.getprototypeof\n$({ target: 'Reflect', stat: true, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(target) {\n return objectGetPrototypeOf(anObject(target));\n }\n});\n","var $ = require('../internals/export');\n\n// `Reflect.has` method\n// https://tc39.es/ecma262/#sec-reflect.has\n$({ target: 'Reflect', stat: true }, {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","var $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\n\nvar objectIsExtensible = Object.isExtensible;\n\n// `Reflect.isExtensible` method\n// https://tc39.es/ecma262/#sec-reflect.isextensible\n$({ target: 'Reflect', stat: true }, {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return objectIsExtensible ? objectIsExtensible(target) : true;\n }\n});\n","var $ = require('../internals/export');\nvar ownKeys = require('../internals/own-keys');\n\n// `Reflect.ownKeys` method\n// https://tc39.es/ecma262/#sec-reflect.ownkeys\n$({ target: 'Reflect', stat: true }, {\n ownKeys: ownKeys\n});\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar anObject = require('../internals/an-object');\nvar FREEZING = require('../internals/freezing');\n\n// `Reflect.preventExtensions` method\n// https://tc39.es/ecma262/#sec-reflect.preventextensions\n$({ target: 'Reflect', stat: true, sham: !FREEZING }, {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n var objectPreventExtensions = getBuiltIn('Object', 'preventExtensions');\n if (objectPreventExtensions) objectPreventExtensions(target);\n return true;\n } catch (error) {\n return false;\n }\n }\n});\n","var $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar fails = require('../internals/fails');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\n// `Reflect.set` method\n// https://tc39.es/ecma262/#sec-reflect.set\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDescriptor = getOwnPropertyDescriptorModule.f(anObject(target), propertyKey);\n var existingDescriptor, prototype;\n if (!ownDescriptor) {\n if (isObject(prototype = getPrototypeOf(target))) {\n return set(prototype, propertyKey, V, receiver);\n }\n ownDescriptor = createPropertyDescriptor(0);\n }\n if (has(ownDescriptor, 'value')) {\n if (ownDescriptor.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = getOwnPropertyDescriptorModule.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n definePropertyModule.f(receiver, propertyKey, existingDescriptor);\n } else definePropertyModule.f(receiver, propertyKey, createPropertyDescriptor(0, V));\n return true;\n }\n return ownDescriptor.set === undefined ? false : (ownDescriptor.set.call(receiver, V), true);\n}\n\n// MS Edge 17-18 Reflect.set allows setting the property to object\n// with non-writable property on the prototype\nvar MS_EDGE_BUG = fails(function () {\n var Constructor = function () { /* empty */ };\n var object = definePropertyModule.f(new Constructor(), 'a', { configurable: true });\n // eslint-disable-next-line no-undef\n return Reflect.set(Constructor.prototype, 'a', 1, object) !== false;\n});\n\n$({ target: 'Reflect', stat: true, forced: MS_EDGE_BUG }, {\n set: set\n});\n","var $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\nvar objectSetPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Reflect.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-reflect.setprototypeof\nif (objectSetPrototypeOf) $({ target: 'Reflect', stat: true }, {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n anObject(target);\n aPossiblePrototype(proto);\n try {\n objectSetPrototypeOf(target, proto);\n return true;\n } catch (error) {\n return false;\n }\n }\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isRegExp = require('../internals/is-regexp');\nvar getFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar setInternalState = require('../internals/internal-state').set;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar FORCED = DESCRIPTORS && isForced('RegExp', (!CORRECT_NEW || UNSUPPORTED_Y || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n})));\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (FORCED) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = this instanceof RegExpWrapper;\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var sticky;\n\n if (!thisIsRegExp && patternIsRegExp && pattern.constructor === RegExpWrapper && flagsAreUndefined) {\n return pattern;\n }\n\n if (CORRECT_NEW) {\n if (patternIsRegExp && !flagsAreUndefined) pattern = pattern.source;\n } else if (pattern instanceof RegExpWrapper) {\n if (flagsAreUndefined) flags = getFlags.call(pattern);\n pattern = pattern.source;\n }\n\n if (UNSUPPORTED_Y) {\n sticky = !!flags && flags.indexOf('y') > -1;\n if (sticky) flags = flags.replace(/y/g, '');\n }\n\n var result = inheritIfRequired(\n CORRECT_NEW ? new NativeRegExp(pattern, flags) : NativeRegExp(pattern, flags),\n thisIsRegExp ? this : RegExpPrototype,\n RegExpWrapper\n );\n\n if (UNSUPPORTED_Y && sticky) setInternalState(result, { sticky: sticky });\n\n return result;\n };\n var proxy = function (key) {\n key in RegExpWrapper || defineProperty(RegExpWrapper, key, {\n configurable: true,\n get: function () { return NativeRegExp[key]; },\n set: function (it) { NativeRegExp[key] = it; }\n });\n };\n var keys = getOwnPropertyNames(NativeRegExp);\n var index = 0;\n while (keys.length > index) proxy(keys[index++]);\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n redefine(global, 'RegExp', RegExpWrapper);\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectDefinePropertyModule = require('../internals/object-define-property');\nvar regExpFlags = require('../internals/regexp-flags');\nvar UNSUPPORTED_Y = require('../internals/regexp-sticky-helpers').UNSUPPORTED_Y;\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (DESCRIPTORS && (/./g.flags != 'g' || UNSUPPORTED_Y)) {\n objectDefinePropertyModule.f(RegExp.prototype, 'flags', {\n configurable: true,\n get: regExpFlags\n });\n}\n","'use strict';\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\nvar flags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = String(R.source);\n var rf = R.flags;\n var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\nmodule.exports = collection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar $ = require('../internals/export');\nvar codeAt = require('../internals/string-multibyte').codeAt;\n\n// `String.prototype.codePointAt` method\n// https://tc39.es/ecma262/#sec-string.prototype.codepointat\n$({ target: 'String', proto: true }, {\n codePointAt: function codePointAt(pos) {\n return codeAt(this, pos);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\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\nvar nativeEndsWith = ''.endsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\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, 'endsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = String(requireObjectCoercible(this));\n notARegExp(searchString);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n var search = String(searchString);\n return nativeEndsWith\n ? nativeEndsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","var $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\nvar fromCharCode = String.fromCharCode;\nvar nativeFromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\nvar INCORRECT_LENGTH = !!nativeFromCodePoint && nativeFromCodePoint.length != 1;\n\n// `String.fromCodePoint` method\n// https://tc39.es/ecma262/#sec-string.fromcodepoint\n$({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var elements = [];\n var length = arguments.length;\n var i = 0;\n var code;\n while (length > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point');\n elements.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00)\n );\n } return elements.join('');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\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 !!~String(requireObjectCoercible(this))\n .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', 1, 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 : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative(nativeMatch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\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 = String(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","'use strict';\nvar $ = require('../internals/export');\nvar $padEnd = require('../internals/string-pad').end;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padEnd` method\n// https://tc39.es/ecma262/#sec-string.prototype.padend\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $ = require('../internals/export');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\n\n// `String.raw` method\n// https://tc39.es/ecma262/#sec-string.raw\n$({ target: 'String', stat: true }, {\n raw: function raw(template) {\n var rawTemplate = toIndexedObject(template.raw);\n var literalSegments = toLength(rawTemplate.length);\n var argumentsLength = arguments.length;\n var elements = [];\n var i = 0;\n while (literalSegments > i) {\n elements.push(String(rawTemplate[i++]));\n if (i < argumentsLength) elements.push(String(arguments[i]));\n } return elements.join('');\n }\n});\n","var $ = require('../internals/export');\nvar repeat = require('../internals/string-repeat');\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n repeat: repeat\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\nvar max = Math.max;\nvar min = Math.min;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\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 : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n if (\n (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n ) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n }\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(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 results.push(result);\n if (!global) break;\n\n var matchStr = String(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 = String(result[0]);\n var position = max(min(toInteger(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++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n});\n","var toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar replace = ''.replace;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\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.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(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 ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.es/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = requireObjectCoercible(this);\n var searcher = regexp == undefined ? undefined : regexp[SEARCH];\n return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative(nativeSearch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\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 callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\n\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\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 = String(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 nativeSplit.call(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 = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(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 || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(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 ? [] : nativeSplit.call(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 : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(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 (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\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 (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', 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 = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SUPPORTS_Y);\n","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\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\nvar nativeStartsWith = ''.startsWith;\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 = String(requireObjectCoercible(this));\n notARegExp(searchString);\n var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return nativeStartsWith\n ? nativeStartsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\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","'use strict';\nvar $ = require('../internals/export');\nvar $trimEnd = require('../internals/string-trim').end;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\nvar FORCED = forcedStringTrimMethod('trimEnd');\n\nvar trimEnd = FORCED ? function trimEnd() {\n return $trimEnd(this);\n} : ''.trimEnd;\n\n// `String.prototype.{ trimEnd, trimRight }` methods\n// https://tc39.es/ecma262/#sec-string.prototype.trimend\n// https://tc39.es/ecma262/#String.prototype.trimright\n$({ target: 'String', proto: true, forced: FORCED }, {\n trimEnd: trimEnd,\n trimRight: trimEnd\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trimStart = require('../internals/string-trim').start;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\nvar FORCED = forcedStringTrimMethod('trimStart');\n\nvar trimStart = FORCED ? function trimStart() {\n return $trimStart(this);\n} : ''.trimStart;\n\n// `String.prototype.{ trimStart, trimLeft }` methods\n// https://tc39.es/ecma262/#sec-string.prototype.trimstart\n// https://tc39.es/ecma262/#String.prototype.trimleft\n$({ target: 'String', proto: true, forced: FORCED }, {\n trimStart: trimStart,\n trimLeft: trimStart\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","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.big` method\n// https://tc39.es/ecma262/#sec-string.prototype.big\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('big') }, {\n big: function big() {\n return createHTML(this, 'big', '', '');\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.blink` method\n// https://tc39.es/ecma262/#sec-string.prototype.blink\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('blink') }, {\n blink: function blink() {\n return createHTML(this, 'blink', '', '');\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.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.fixed` method\n// https://tc39.es/ecma262/#sec-string.prototype.fixed\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fixed') }, {\n fixed: function fixed() {\n return createHTML(this, 'tt', '', '');\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.fontcolor` method\n// https://tc39.es/ecma262/#sec-string.prototype.fontcolor\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fontcolor') }, {\n fontcolor: function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\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.fontsize` method\n// https://tc39.es/ecma262/#sec-string.prototype.fontsize\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fontsize') }, {\n fontsize: function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\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.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n link: function link(url) {\n return createHTML(this, 'a', 'href', url);\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.small` method\n// https://tc39.es/ecma262/#sec-string.prototype.small\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('small') }, {\n small: function small() {\n return createHTML(this, 'small', '', '');\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.strike` method\n// https://tc39.es/ecma262/#sec-string.prototype.strike\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('strike') }, {\n strike: function strike() {\n return createHTML(this, 'strike', '', '');\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","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Float32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float32', function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var toInteger = require('../internals/to-integer');\n\nmodule.exports = function (it) {\n var result = toInteger(it);\n if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n return result;\n};\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Float64Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float64', function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int8', function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int16', function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int32', function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8ClampedArray` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint16', function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint32', function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $copyWithin = require('../internals/array-copy-within');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n return $copyWithin.call(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $every = require('../internals/array-iteration').every;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $fill = require('../internals/array-fill');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\n// eslint-disable-next-line no-unused-vars\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n return $fill.apply(aTypedArray(this), arguments);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $filter = require('../internals/array-iteration').filter;\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var C = speciesConstructor(this, this.constructor);\n var index = 0;\n var length = list.length;\n var result = new (aTypedArrayConstructor(C))(length);\n while (length > index) result[index] = list[index++];\n return result;\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $find = require('../internals/array-iteration').find;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findIndex = require('../internals/array-iteration').findIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar exportTypedArrayStaticMethod = require('../internals/array-buffer-view-core').exportTypedArrayStaticMethod;\nvar typedArrayFrom = require('../internals/typed-array-from');\n\n// `%TypedArray%.from` method\n// https://tc39.es/ecma262/#sec-%typedarray%.from\nexportTypedArrayStaticMethod('from', typedArrayFrom, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $includes = require('../internals/array-includes').includes;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $indexOf = require('../internals/array-includes').indexOf;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar global = require('../internals/global');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayIterators = require('../modules/es.array.iterator');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = ArrayIterators.values;\nvar arrayKeys = ArrayIterators.keys;\nvar arrayEntries = ArrayIterators.entries;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR];\n\nvar CORRECT_ITER_NAME = !!nativeTypedArrayIterator\n && (nativeTypedArrayIterator.name == 'values' || nativeTypedArrayIterator.name == undefined);\n\nvar typedArrayValues = function values() {\n return arrayValues.call(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n return arrayEntries.call(aTypedArray(this));\n});\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n return arrayKeys.call(aTypedArray(this));\n});\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, !CORRECT_ITER_NAME);\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, !CORRECT_ITER_NAME);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = [].join;\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\n// eslint-disable-next-line no-unused-vars\nexportTypedArrayMethod('join', function join(separator) {\n return $join.apply(aTypedArray(this), arguments);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $lastIndexOf = require('../internals/array-last-index-of');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\n// eslint-disable-next-line no-unused-vars\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n return $lastIndexOf.apply(aTypedArray(this), arguments);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $map = require('../internals/array-iteration').map;\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n return new (aTypedArrayConstructor(speciesConstructor(O, O.constructor)))(length);\n });\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\n\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayStaticMethod = ArrayBufferViewCore.exportTypedArrayStaticMethod;\n\n// `%TypedArray%.of` method\n// https://tc39.es/ecma262/#sec-%typedarray%.of\nexportTypedArrayStaticMethod('of', function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = new (aTypedArrayConstructor(this))(length);\n while (length > index) result[index] = arguments[index++];\n return result;\n}, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduce = require('../internals/array-reduce').left;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n return $reduce(aTypedArray(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduceRight = require('../internals/array-reduce').right;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n return $reduceRight(aTypedArray(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n var that = this;\n var length = aTypedArray(that).length;\n var middle = floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar toLength = require('../internals/to-length');\nvar toOffset = require('../internals/to-offset');\nvar toObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line no-undef\n new Int8Array(1).set({});\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, FORCED);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar speciesConstructor = require('../internals/species-constructor');\nvar fails = require('../internals/fails');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $slice = [].slice;\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line no-undef\n new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n var list = $slice.call(aTypedArray(this), start, end);\n var C = speciesConstructor(this, this.constructor);\n var index = 0;\n var length = list.length;\n var result = new (aTypedArrayConstructor(C))(length);\n while (length > index) result[index] = list[index++];\n return result;\n}, FORCED);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $some = require('../internals/array-iteration').some;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $sort = [].sort;\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n return $sort.call(aTypedArray(this), comparefn);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n var O = aTypedArray(this);\n var length = O.length;\n var beginIndex = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O.constructor))(\n O.buffer,\n O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n );\n});\n","'use strict';\nvar global = require('../internals/global');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar fails = require('../internals/fails');\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\nvar $slice = [].slice;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n return $toLocaleString.apply(TO_LOCALE_STRING_BUG ? $slice.call(aTypedArray(this)) : aTypedArray(this), arguments);\n}, FORCED);\n","'use strict';\nvar exportTypedArrayMethod = require('../internals/array-buffer-view-core').exportTypedArrayMethod;\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar arrayJoin = [].join;\n\nif (fails(function () { arrayToString.call({}); })) {\n arrayToString = function toString() {\n return arrayJoin.call(this);\n };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n","'use strict';\nvar global = require('../internals/global');\nvar redefineAll = require('../internals/redefine-all');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar enforceIternalState = require('../internals/internal-state').enforce;\nvar NATIVE_WEAK_MAP = require('../internals/native-weak-map');\n\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar isExtensible = Object.isExtensible;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n return function WeakMap() {\n return init(this, arguments.length ? arguments[0] : undefined);\n };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap = module.exports = collection('WeakMap', wrapper, collectionWeak);\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n InternalMetadataModule.REQUIRED = true;\n var WeakMapPrototype = $WeakMap.prototype;\n var nativeDelete = WeakMapPrototype['delete'];\n var nativeHas = WeakMapPrototype.has;\n var nativeGet = WeakMapPrototype.get;\n var nativeSet = WeakMapPrototype.set;\n redefineAll(WeakMapPrototype, {\n 'delete': function (key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeDelete.call(this, key) || state.frozen['delete'](key);\n } return nativeDelete.call(this, key);\n },\n has: function has(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas.call(this, key) || state.frozen.has(key);\n } return nativeHas.call(this, key);\n },\n get: function get(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key);\n } return nativeGet.call(this, key);\n },\n set: function set(key, value) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceIternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value);\n } else nativeSet.call(this, key, value);\n return this;\n }\n });\n}\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\n\n// `WeakSet` constructor\n// https://tc39.es/ecma262/#sec-weakset-constructor\ncollection('WeakSet', function (init) {\n return function WeakSet() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionWeak);\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\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","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\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\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\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","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar task = require('../internals/task');\n\nvar FORCED = !global.setImmediate || !global.clearImmediate;\n\n// http://w3c.github.io/setImmediate/\n$({ global: true, bind: true, enumerable: true, forced: FORCED }, {\n // `setImmediate` method\n // http://w3c.github.io/setImmediate/#si-setImmediate\n setImmediate: task.set,\n // `clearImmediate` method\n // http://w3c.github.io/setImmediate/#si-clearImmediate\n clearImmediate: task.clear\n});\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar microtask = require('../internals/microtask');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar process = global.process;\n\n// `queueMicrotask` method\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-queuemicrotask\n$({ global: true, enumerable: true, noTargetGet: true }, {\n queueMicrotask: function queueMicrotask(fn) {\n var domain = IS_NODE && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\n\nvar wrap = function (scheduler) {\n return function (handler, timeout /* , ...arguments */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : undefined;\n return scheduler(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof handler == 'function' ? handler : Function(handler)).apply(this, args);\n } : handler, timeout);\n };\n};\n\n// ie9- setTimeout & setInterval additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n$({ global: true, bind: true, forced: MSIE }, {\n // `setTimeout` method\n // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout\n setTimeout: wrap(global.setTimeout),\n // `setInterval` method\n // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval\n setInterval: wrap(global.setInterval)\n});\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar defineProperties = require('../internals/object-define-properties');\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar has = require('../internals/has');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar URLSearchParamsModule = require('../modules/web.url-search-params');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^(0x|0X)/;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\u0009\\u000A\\u000D #%/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\u0009\\u000A\\u000D #/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\n// eslint-disable-next-line no-control-regex\nvar TAB_AND_NEW_LINE = /[\\u0009\\u000A\\u000D]/g;\nvar EOF;\n\nvar parseHost = function (url, input) {\n var result, codePoints, index;\n if (input.charAt(0) == '[') {\n if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(input.slice(1, -1));\n if (!result) return INVALID_HOST;\n url.host = result;\n // opaque host\n } else if (!isSpecial(url)) {\n if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n url.host = result;\n } else {\n input = toASCII(input);\n if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n url.host = result;\n }\n};\n\nvar parseIPv4 = function (input) {\n var parts = input.split('.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.pop();\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && part.charAt(0) == '0') {\n radix = HEX_START.test(part) ? 16 : 8;\n part = part.slice(radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n number = parseInt(part, radix);\n }\n numbers.push(number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = numbers.pop();\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// eslint-disable-next-line max-statements\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var char = function () {\n return input.charAt(pointer);\n };\n\n if (char() == ':') {\n if (input.charAt(1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (char()) {\n if (pieceIndex == 8) return;\n if (char() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && HEX.test(char())) {\n value = value * 16 + parseInt(char(), 16);\n pointer++;\n length++;\n }\n if (char() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (char()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (char() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!DIGIT.test(char())) return;\n while (DIGIT.test(char())) {\n number = parseInt(char(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (char() == ':') {\n pointer++;\n if (!char()) return;\n } else if (char()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n result.unshift(host % 256);\n host = floor(host / 256);\n } return result.join('.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += host[index].toString(16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n var code = codeAt(char, 0);\n return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\nvar isSpecial = function (url) {\n return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && ALPHA.test(string.charAt(0))\n && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n string.length == 2 ||\n ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\nvar shortenURLsPath = function (url) {\n var path = url.path;\n var pathSize = path.length;\n if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.pop();\n }\n};\n\nvar isSingleDot = function (segment) {\n return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n segment = segment.toLowerCase();\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements\nvar parseURL = function (url, input, stateOverride, base) {\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, char, bufferCodePoints, failure;\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = input.replace(TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n char = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (char && ALPHA.test(char)) {\n buffer += char.toLowerCase();\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n buffer += char.toLowerCase();\n } else if (char == ':') {\n if (stateOverride && (\n (isSpecial(url) != has(specialSchemes, buffer)) ||\n (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (isSpecial(url)) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n url.path.push('');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && char == '#') {\n url.scheme = base.scheme;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (char == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (char == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (char == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n state = RELATIVE_SLASH;\n } else if (char == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.path.pop();\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (char == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (char != '/' && char != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (char == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += char;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (char == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (isSpecial(url) && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (char == '[') seenBracket = true;\n else if (char == ']') seenBracket = false;\n buffer += char;\n } break;\n\n case PORT:\n if (DIGIT.test(char)) {\n buffer += char;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url)) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (char == '/' || char == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (char == EOF) {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '?') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n url.host = base.host;\n url.path = base.path.slice();\n shortenURLsPath(url);\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (char == '/' || char == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = parseHost(url, buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += char;\n break;\n\n case PATH_START:\n if (isSpecial(url)) {\n state = PATH;\n if (char != '/' && char != '\\\\') continue;\n } else if (!stateOverride && char == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n state = PATH;\n if (char != '/') continue;\n } break;\n\n case PATH:\n if (\n char == EOF || char == '/' ||\n (char == '\\\\' && isSpecial(url)) ||\n (!stateOverride && (char == '?' || char == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n shortenURLsPath(url);\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else if (isSingleDot(buffer)) {\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n }\n url.path.push(buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n url.path.shift();\n }\n }\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(char, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n if (char == \"'\" && isSpecial(url)) url.query += '%27';\n else if (char == '#') url.query += '%23';\n else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLConstructor, 'URL');\n var base = arguments.length > 1 ? arguments[1] : undefined;\n var urlString = String(url);\n var state = setInternalState(that, { type: 'URL' });\n var baseState, failure;\n if (base !== undefined) {\n if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n else {\n failure = parseURL(baseState = {}, String(base));\n if (failure) throw TypeError(failure);\n }\n }\n failure = parseURL(state, urlString, null, baseState);\n if (failure) throw TypeError(failure);\n var searchParams = state.searchParams = new URLSearchParams();\n var searchParamsState = getInternalSearchParamsState(searchParams);\n searchParamsState.updateSearchParams(state.query);\n searchParamsState.updateURL = function () {\n state.query = String(searchParams) || null;\n };\n if (!DESCRIPTORS) {\n that.href = serializeURL.call(that);\n that.origin = getOrigin.call(that);\n that.protocol = getProtocol.call(that);\n that.username = getUsername.call(that);\n that.password = getPassword.call(that);\n that.host = getHost.call(that);\n that.hostname = getHostname.call(that);\n that.port = getPort.call(that);\n that.pathname = getPathname.call(that);\n that.search = getSearch.call(that);\n that.searchParams = getSearchParams.call(that);\n that.hash = getHash.call(that);\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (includesCredentials(url)) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n};\n\nvar getOrigin = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var port = url.port;\n if (scheme == 'blob') try {\n return new URL(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !isSpecial(url)) return 'null';\n return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n var url = getInternalURLState(this);\n var host = url.host;\n var port = url.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n var host = getInternalURLState(this).host;\n return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n var port = getInternalURLState(this).port;\n return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n var url = getInternalURLState(this);\n var path = url.path;\n return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n var query = getInternalURLState(this).query;\n return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n var fragment = getInternalURLState(this).fragment;\n return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor(serializeURL, function (href) {\n var url = getInternalURLState(this);\n var urlString = String(href);\n var failure = parseURL(url, urlString);\n if (failure) throw TypeError(failure);\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor(getOrigin),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor(getProtocol, function (protocol) {\n var url = getInternalURLState(this);\n parseURL(url, String(protocol) + ':', SCHEME_START);\n }),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor(getUsername, function (username) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(username));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor(getPassword, function (password) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(password));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor(getHost, function (host) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(host), HOST);\n }),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor(getHostname, function (hostname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(hostname), HOSTNAME);\n }),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor(getPort, function (port) {\n var url = getInternalURLState(this);\n if (cannotHaveUsernamePasswordPort(url)) return;\n port = String(port);\n if (port == '') url.port = null;\n else parseURL(url, port, PORT);\n }),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor(getPathname, function (pathname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n url.path = [];\n parseURL(url, pathname + '', PATH_START);\n }),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor(getSearch, function (search) {\n var url = getInternalURLState(this);\n search = String(search);\n if (search == '') {\n url.query = null;\n } else {\n if ('?' == search.charAt(0)) search = search.slice(1);\n url.query = '';\n parseURL(url, search, QUERY);\n }\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor(getSearchParams),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor(getHash, function (hash) {\n var url = getInternalURLState(this);\n hash = String(hash);\n if (hash == '') {\n url.fragment = null;\n return;\n }\n if ('#' == hash.charAt(0)) hash = hash.slice(1);\n url.fragment = '';\n parseURL(url, hash, FRAGMENT);\n })\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n // eslint-disable-next-line no-unused-vars\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n return nativeCreateObjectURL.apply(NativeURL, arguments);\n });\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n // eslint-disable-next-line no-unused-vars\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n return nativeRevokeObjectURL.apply(NativeURL, arguments);\n });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line max-statements\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n for (var k = base; /* no condition */; k += base) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n return output.join('');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n }\n return encoded.join('.');\n};\n","var anObject = require('../internals/an-object');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = function (it) {\n var iteratorMethod = getIteratorMethod(it);\n if (typeof iteratorMethod != 'function') {\n throw TypeError(String(it) + ' is not iterable');\n } return anObject(iteratorMethod.call(it));\n};\n","'use strict';\nvar $ = require('../internals/export');\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n toJSON: function toJSON() {\n return URL.prototype.toString.call(this);\n }\n});\n","var scope = typeof global !== \"undefined\" && global || typeof self !== \"undefined\" && self || window;\nvar apply = Function.prototype.apply; // DOM APIs, for completeness\n\nexports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\n\nexports.setInterval = function () {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\n\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\n\nTimeout.prototype.unref = Timeout.prototype.ref = function () {};\n\nTimeout.prototype.close = function () {\n this._clearFn.call(scope, this._id);\n}; // Does not start the time, just sets up the members needed.\n\n\nexports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout) item._onTimeout();\n }, msecs);\n }\n}; // setimmediate attaches itself to the global object\n\n\nrequire(\"setimmediate\"); // On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\n\n\nexports.setImmediate = typeof self !== \"undefined\" && self.setImmediate || typeof global !== \"undefined\" && global.setImmediate || this && this.setImmediate;\nexports.clearImmediate = typeof self !== \"undefined\" && self.clearImmediate || typeof global !== \"undefined\" && global.clearImmediate || this && this.clearImmediate;","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n } // Copy function arguments\n\n\n var args = new Array(arguments.length - 1);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n } // Store and register the task\n\n\n var task = {\n callback: callback,\n args: args\n };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n\n switch (args.length) {\n case 0:\n callback();\n break;\n\n case 1:\n callback(args[0]);\n break;\n\n case 2:\n callback(args[0], args[1]);\n break;\n\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n\n if (task) {\n currentlyRunningATask = true;\n\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function registerImmediate(handle) {\n process.nextTick(function () {\n runIfPresent(handle);\n });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n\n global.onmessage = function () {\n postMessageIsAsynchronous = false;\n };\n\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n\n var onGlobalMessage = function onGlobalMessage(event) {\n if (event.source === global && typeof event.data === \"string\" && event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function registerImmediate(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n\n channel.port1.onmessage = function (event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function registerImmediate(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n\n registerImmediate = function registerImmediate(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function registerImmediate(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n } // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n\n\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global; // Don't get fooled by e.g. browserify environments.\n\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 68\n installReadyStateChangeImplementation();\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n})(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self);","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (root, factory) {\n 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n})(this, function () {\n 'use strict';\n\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function () {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n var objectProps = ['evalOrigin'];\n var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n\n function StackFrame(obj) {\n if (!obj) return;\n\n for (var i = 0; i < props.length; i++) {\n if (obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function getArgs() {\n return this.args;\n },\n setArgs: function setArgs(v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n\n this.args = v;\n },\n getEvalOrigin: function getEvalOrigin() {\n return this.evalOrigin;\n },\n setEvalOrigin: function setEvalOrigin(v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n toString: function toString() {\n var fileName = this.getFileName() || '';\n var lineNumber = this.getLineNumber() || '';\n var columnNumber = this.getColumnNumber() || '';\n var functionName = this.getFunctionName() || '';\n\n if (this.getIsEval()) {\n if (fileName) {\n return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n\n return '[eval]:' + lineNumber + ':' + columnNumber;\n }\n\n if (functionName) {\n return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n\n return fileName + ':' + lineNumber + ':' + columnNumber;\n }\n };\n\n StackFrame.fromString = function StackFrame$$fromString(str) {\n var argsStartIndex = str.indexOf('(');\n var argsEndIndex = str.lastIndexOf(')');\n var functionName = str.substring(0, argsStartIndex);\n var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n var locationString = str.substring(argsEndIndex + 1);\n\n if (locationString.indexOf('@') === 0) {\n var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n var fileName = parts[1];\n var lineNumber = parts[2];\n var columnNumber = parts[3];\n }\n\n return new StackFrame({\n functionName: functionName,\n args: args || undefined,\n fileName: fileName,\n lineNumber: lineNumber || undefined,\n columnNumber: columnNumber || undefined\n });\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = function (p) {\n return function (v) {\n this[p] = Boolean(v);\n };\n }(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = function (p) {\n return function (v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n\n this[p] = Number(v);\n };\n }(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = function (p) {\n return function (v) {\n this[p] = String(v);\n };\n }(stringProps[k]);\n }\n\n return StackFrame;\n});","//\n// TDigest:\n//\n// approximate distribution percentiles from a stream of reals\n//\nvar RBTree = require('bintrees').RBTree;\n\nfunction TDigest(delta, K, CX) {\n // allocate a TDigest structure.\n //\n // delta is the compression factor, the max fraction of mass that\n // can be owned by one centroid (bigger, up to 1.0, means more\n // compression). delta=false switches off TDigest behavior and treats\n // the distribution as discrete, with no merging and exact values\n // reported.\n //\n // K is a size threshold that triggers recompression as the TDigest\n // grows during input. (Set it to 0 to disable automatic recompression)\n //\n // CX specifies how often to update cached cumulative totals used\n // for quantile estimation during ingest (see cumulate()). Set to\n // 0 to use exact quantiles for each new point.\n //\n this.discrete = delta === false;\n this.delta = delta || 0.01;\n this.K = K === undefined ? 25 : K;\n this.CX = CX === undefined ? 1.1 : CX;\n this.centroids = new RBTree(compare_centroid_means);\n this.nreset = 0;\n this.reset();\n}\n\nTDigest.prototype.reset = function () {\n // prepare to digest new points.\n //\n this.centroids.clear();\n this.n = 0;\n this.nreset += 1;\n this.last_cumulate = 0;\n};\n\nTDigest.prototype.size = function () {\n return this.centroids.size;\n};\n\nTDigest.prototype.toArray = function (everything) {\n // return {mean,n} of centroids as an array ordered by mean.\n //\n var result = [];\n\n if (everything) {\n this._cumulate(true); // be sure cumns are exact\n\n\n this.centroids.each(function (c) {\n result.push(c);\n });\n } else {\n this.centroids.each(function (c) {\n result.push({\n mean: c.mean,\n n: c.n\n });\n });\n }\n\n return result;\n};\n\nTDigest.prototype.summary = function () {\n var approx = this.discrete ? \"exact \" : \"approximating \";\n var s = [approx + this.n + \" samples using \" + this.size() + \" centroids\", \"min = \" + this.percentile(0), \"Q1 = \" + this.percentile(0.25), \"Q2 = \" + this.percentile(0.5), \"Q3 = \" + this.percentile(0.75), \"max = \" + this.percentile(1.0)];\n return s.join('\\n');\n};\n\nfunction compare_centroid_means(a, b) {\n // order two centroids by mean.\n //\n return a.mean > b.mean ? 1 : a.mean < b.mean ? -1 : 0;\n}\n\nfunction compare_centroid_mean_cumns(a, b) {\n // order two centroids by mean_cumn.\n //\n return a.mean_cumn - b.mean_cumn;\n}\n\nTDigest.prototype.push = function (x, n) {\n // incorporate value or array of values x, having count n into the\n // TDigest. n defaults to 1.\n //\n n = n || 1;\n x = Array.isArray(x) ? x : [x];\n\n for (var i = 0; i < x.length; i++) {\n this._digest(x[i], n);\n }\n};\n\nTDigest.prototype.push_centroid = function (c) {\n // incorporate centroid or array of centroids c\n //\n c = Array.isArray(c) ? c : [c];\n\n for (var i = 0; i < c.length; i++) {\n this._digest(c[i].mean, c[i].n);\n }\n};\n\nTDigest.prototype._cumulate = function (exact) {\n // update cumulative counts for each centroid\n //\n // exact: falsey means only cumulate after sufficient\n // growth. During ingest, these counts are used as quantile\n // estimates, and they work well even when somewhat out of\n // date. (this is a departure from the publication, you may set CX\n // to 0 to disable).\n //\n if (this.n === this.last_cumulate || !exact && this.CX && this.CX > this.n / this.last_cumulate) {\n return;\n }\n\n var cumn = 0;\n var self = this;\n this.centroids.each(function (c) {\n c.mean_cumn = cumn + c.n / 2; // half of n at the mean\n\n cumn = c.cumn = cumn + c.n;\n });\n this.n = this.last_cumulate = cumn;\n};\n\nTDigest.prototype.find_nearest = function (x) {\n // find the centroid closest to x. The assumption of\n // unique means and a unique nearest centroid departs from the\n // paper, see _digest() below\n //\n if (this.size() === 0) {\n return null;\n }\n\n var iter = this.centroids.lowerBound({\n mean: x\n }); // x <= iter || iter==null\n\n var c = iter.data() === null ? iter.prev() : iter.data();\n\n if (c.mean === x || this.discrete) {\n return c; // c is either x or a neighbor (discrete: no distance func)\n }\n\n var prev = iter.prev();\n\n if (prev && Math.abs(prev.mean - x) < Math.abs(c.mean - x)) {\n return prev;\n } else {\n return c;\n }\n};\n\nTDigest.prototype._new_centroid = function (x, n, cumn) {\n // create and insert a new centroid into the digest (don't update\n // cumulatives).\n //\n var c = {\n mean: x,\n n: n,\n cumn: cumn\n };\n this.centroids.insert(c);\n this.n += n;\n return c;\n};\n\nTDigest.prototype._addweight = function (nearest, x, n) {\n // add weight at location x to nearest centroid. adding x to\n // nearest will not shift its relative position in the tree and\n // require reinsertion.\n //\n if (x !== nearest.mean) {\n nearest.mean += n * (x - nearest.mean) / (nearest.n + n);\n }\n\n nearest.cumn += n;\n nearest.mean_cumn += n / 2;\n nearest.n += n;\n this.n += n;\n};\n\nTDigest.prototype._digest = function (x, n) {\n // incorporate value x, having count n into the TDigest.\n //\n var min = this.centroids.min();\n var max = this.centroids.max();\n var nearest = this.find_nearest(x);\n\n if (nearest && nearest.mean === x) {\n // accumulate exact matches into the centroid without\n // limit. this is a departure from the paper, made so\n // centroids remain unique and code can be simple.\n this._addweight(nearest, x, n);\n } else if (nearest === min) {\n this._new_centroid(x, n, 0); // new point around min boundary\n\n } else if (nearest === max) {\n this._new_centroid(x, n, this.n); // new point around max boundary\n\n } else if (this.discrete) {\n this._new_centroid(x, n, nearest.cumn); // never merge\n\n } else {\n // conider a merge based on nearest centroid's capacity. if\n // there's not room for all of n, don't bother merging any of\n // it into nearest, as we'll have to make a new centroid\n // anyway for the remainder (departure from the paper).\n var p = nearest.mean_cumn / this.n;\n var max_n = Math.floor(4 * this.n * this.delta * p * (1 - p));\n\n if (max_n - nearest.n >= n) {\n this._addweight(nearest, x, n);\n } else {\n this._new_centroid(x, n, nearest.cumn);\n }\n }\n\n this._cumulate(false);\n\n if (!this.discrete && this.K && this.size() > this.K / this.delta) {\n // re-process the centroids and hope for some compression.\n this.compress();\n }\n};\n\nTDigest.prototype.bound_mean = function (x) {\n // find centroids lower and upper such that lower.mean < x <\n // upper.mean or lower.mean === x === upper.mean. Don't call\n // this for x out of bounds.\n //\n var iter = this.centroids.upperBound({\n mean: x\n }); // x < iter\n\n var lower = iter.prev(); // lower <= x\n\n var upper = lower.mean === x ? lower : iter.next();\n return [lower, upper];\n};\n\nTDigest.prototype.p_rank = function (x_or_xlist) {\n // return approximate percentile-ranks (0..1) for data value x.\n // or list of x. calculated according to\n // https://en.wikipedia.org/wiki/Percentile_rank\n //\n // (Note that in continuous mode, boundary sample values will\n // report half their centroid weight inward from 0/1 as the\n // percentile-rank. X values outside the observed range return\n // 0/1)\n //\n // this triggers cumulate() if cumn's are out of date.\n //\n var xs = Array.isArray(x_or_xlist) ? x_or_xlist : [x_or_xlist];\n var ps = xs.map(this._p_rank, this);\n return Array.isArray(x_or_xlist) ? ps : ps[0];\n};\n\nTDigest.prototype._p_rank = function (x) {\n if (this.size() === 0) {\n return undefined;\n } else if (x < this.centroids.min().mean) {\n return 0.0;\n } else if (x > this.centroids.max().mean) {\n return 1.0;\n } // find centroids that bracket x and interpolate x's cumn from\n // their cumn's.\n\n\n this._cumulate(true); // be sure cumns are exact\n\n\n var bound = this.bound_mean(x);\n var lower = bound[0],\n upper = bound[1];\n\n if (this.discrete) {\n return lower.cumn / this.n;\n } else {\n var cumn = lower.mean_cumn;\n\n if (lower !== upper) {\n cumn += (x - lower.mean) * (upper.mean_cumn - lower.mean_cumn) / (upper.mean - lower.mean);\n }\n\n return cumn / this.n;\n }\n};\n\nTDigest.prototype.bound_mean_cumn = function (cumn) {\n // find centroids lower and upper such that lower.mean_cumn < x <\n // upper.mean_cumn or lower.mean_cumn === x === upper.mean_cumn. Don't call\n // this for cumn out of bounds.\n //\n // XXX because mean and mean_cumn give rise to the same sort order\n // (up to identical means), use the mean rbtree for our search.\n this.centroids._comparator = compare_centroid_mean_cumns;\n var iter = this.centroids.upperBound({\n mean_cumn: cumn\n }); // cumn < iter\n\n this.centroids._comparator = compare_centroid_means;\n var lower = iter.prev(); // lower <= cumn\n\n var upper = lower && lower.mean_cumn === cumn ? lower : iter.next();\n return [lower, upper];\n};\n\nTDigest.prototype.percentile = function (p_or_plist) {\n // for percentage p (0..1), or for each p in a list of ps, return\n // the smallest data value q at which at least p percent of the\n // observations <= q.\n //\n // for discrete distributions, this selects q using the Nearest\n // Rank Method\n // (https://en.wikipedia.org/wiki/Percentile#The_Nearest_Rank_method)\n // (in scipy, same as percentile(...., interpolation='higher')\n //\n // for continuous distributions, interpolates data values between\n // count-weighted bracketing means.\n //\n // this triggers cumulate() if cumn's are out of date.\n //\n var ps = Array.isArray(p_or_plist) ? p_or_plist : [p_or_plist];\n var qs = ps.map(this._percentile, this);\n return Array.isArray(p_or_plist) ? qs : qs[0];\n};\n\nTDigest.prototype._percentile = function (p) {\n if (this.size() === 0) {\n return undefined;\n }\n\n this._cumulate(true); // be sure cumns are exact\n\n\n var min = this.centroids.min();\n var max = this.centroids.max();\n var h = this.n * p;\n var bound = this.bound_mean_cumn(h);\n var lower = bound[0],\n upper = bound[1];\n\n if (upper === lower || lower === null || upper === null) {\n return (lower || upper).mean;\n } else if (!this.discrete) {\n return lower.mean + (h - lower.mean_cumn) * (upper.mean - lower.mean) / (upper.mean_cumn - lower.mean_cumn);\n } else if (h <= lower.cumn) {\n return lower.mean;\n } else {\n return upper.mean;\n }\n};\n\nfunction pop_random(choices) {\n // remove and return an item randomly chosen from the array of choices\n // (mutates choices)\n //\n var idx = Math.floor(Math.random() * choices.length);\n return choices.splice(idx, 1)[0];\n}\n\nTDigest.prototype.compress = function () {\n // TDigests experience worst case compression (none) when input\n // increases monotonically. Improve on any bad luck by\n // reconsuming digest centroids as if they were weighted points\n // while shuffling their order (and hope for the best).\n //\n if (this.compressing) {\n return;\n }\n\n var points = this.toArray();\n this.reset();\n this.compressing = true;\n\n while (points.length > 0) {\n this.push_centroid(pop_random(points));\n }\n\n this._cumulate(true);\n\n this.compressing = false;\n};\n\nfunction Digest(config) {\n // allocate a distribution digest structure. This is an extension\n // of a TDigest structure that starts in exact histogram (discrete)\n // mode, and automatically switches to TDigest mode for large\n // samples that appear to be from a continuous distribution.\n //\n this.config = config || {};\n this.mode = this.config.mode || 'auto'; // disc, cont, auto\n\n TDigest.call(this, this.mode === 'cont' ? config.delta : false);\n this.digest_ratio = this.config.ratio || 0.9;\n this.digest_thresh = this.config.thresh || 1000;\n this.n_unique = 0;\n}\n\nDigest.prototype = Object.create(TDigest.prototype);\nDigest.prototype.constructor = Digest;\n\nDigest.prototype.push = function (x_or_xlist) {\n TDigest.prototype.push.call(this, x_or_xlist);\n this.check_continuous();\n};\n\nDigest.prototype._new_centroid = function (x, n, cumn) {\n this.n_unique += 1;\n\n TDigest.prototype._new_centroid.call(this, x, n, cumn);\n};\n\nDigest.prototype._addweight = function (nearest, x, n) {\n if (nearest.n === 1) {\n this.n_unique -= 1;\n }\n\n TDigest.prototype._addweight.call(this, nearest, x, n);\n};\n\nDigest.prototype.check_continuous = function () {\n // while in 'auto' mode, if there are many unique elements, assume\n // they are from a continuous distribution and switch to 'cont'\n // mode (tdigest behavior). Return true on transition from\n // disctete to continuous.\n if (this.mode !== 'auto' || this.size() < this.digest_thresh) {\n return false;\n }\n\n if (this.n_unique / this.size() > this.digest_ratio) {\n this.mode = 'cont';\n this.discrete = false;\n this.delta = this.config.delta || 0.01;\n this.compress();\n return true;\n }\n\n return false;\n};\n\nmodule.exports = {\n 'TDigest': TDigest,\n 'Digest': Digest\n};","module.exports = {\n RBTree: require('./lib/rbtree'),\n BinTree: require('./lib/bintree')\n};","var TreeBase = require('./treebase');\n\nfunction Node(data) {\n this.data = data;\n this.left = null;\n this.right = null;\n this.red = true;\n}\n\nNode.prototype.get_child = function (dir) {\n return dir ? this.right : this.left;\n};\n\nNode.prototype.set_child = function (dir, val) {\n if (dir) {\n this.right = val;\n } else {\n this.left = val;\n }\n};\n\nfunction RBTree(comparator) {\n this._root = null;\n this._comparator = comparator;\n this.size = 0;\n}\n\nRBTree.prototype = new TreeBase(); // returns true if inserted, false if duplicate\n\nRBTree.prototype.insert = function (data) {\n var ret = false;\n\n if (this._root === null) {\n // empty tree\n this._root = new Node(data);\n ret = true;\n this.size++;\n } else {\n var head = new Node(undefined); // fake tree root\n\n var dir = 0;\n var last = 0; // setup\n\n var gp = null; // grandparent\n\n var ggp = head; // grand-grand-parent\n\n var p = null; // parent\n\n var node = this._root;\n ggp.right = this._root; // search down\n\n while (true) {\n if (node === null) {\n // insert new node at the bottom\n node = new Node(data);\n p.set_child(dir, node);\n ret = true;\n this.size++;\n } else if (is_red(node.left) && is_red(node.right)) {\n // color flip\n node.red = true;\n node.left.red = false;\n node.right.red = false;\n } // fix red violation\n\n\n if (is_red(node) && is_red(p)) {\n var dir2 = ggp.right === gp;\n\n if (node === p.get_child(last)) {\n ggp.set_child(dir2, single_rotate(gp, !last));\n } else {\n ggp.set_child(dir2, double_rotate(gp, !last));\n }\n }\n\n var cmp = this._comparator(node.data, data); // stop if found\n\n\n if (cmp === 0) {\n break;\n }\n\n last = dir;\n dir = cmp < 0; // update helpers\n\n if (gp !== null) {\n ggp = gp;\n }\n\n gp = p;\n p = node;\n node = node.get_child(dir);\n } // update root\n\n\n this._root = head.right;\n } // make root black\n\n\n this._root.red = false;\n return ret;\n}; // returns true if removed, false if not found\n\n\nRBTree.prototype.remove = function (data) {\n if (this._root === null) {\n return false;\n }\n\n var head = new Node(undefined); // fake tree root\n\n var node = head;\n node.right = this._root;\n var p = null; // parent\n\n var gp = null; // grand parent\n\n var found = null; // found item\n\n var dir = 1;\n\n while (node.get_child(dir) !== null) {\n var last = dir; // update helpers\n\n gp = p;\n p = node;\n node = node.get_child(dir);\n\n var cmp = this._comparator(data, node.data);\n\n dir = cmp > 0; // save found node\n\n if (cmp === 0) {\n found = node;\n } // push the red node down\n\n\n if (!is_red(node) && !is_red(node.get_child(dir))) {\n if (is_red(node.get_child(!dir))) {\n var sr = single_rotate(node, dir);\n p.set_child(last, sr);\n p = sr;\n } else if (!is_red(node.get_child(!dir))) {\n var sibling = p.get_child(!last);\n\n if (sibling !== null) {\n if (!is_red(sibling.get_child(!last)) && !is_red(sibling.get_child(last))) {\n // color flip\n p.red = false;\n sibling.red = true;\n node.red = true;\n } else {\n var dir2 = gp.right === p;\n\n if (is_red(sibling.get_child(last))) {\n gp.set_child(dir2, double_rotate(p, last));\n } else if (is_red(sibling.get_child(!last))) {\n gp.set_child(dir2, single_rotate(p, last));\n } // ensure correct coloring\n\n\n var gpc = gp.get_child(dir2);\n gpc.red = true;\n node.red = true;\n gpc.left.red = false;\n gpc.right.red = false;\n }\n }\n }\n }\n } // replace and remove if found\n\n\n if (found !== null) {\n found.data = node.data;\n p.set_child(p.right === node, node.get_child(node.left === null));\n this.size--;\n } // update root and make it black\n\n\n this._root = head.right;\n\n if (this._root !== null) {\n this._root.red = false;\n }\n\n return found !== null;\n};\n\nfunction is_red(node) {\n return node !== null && node.red;\n}\n\nfunction single_rotate(root, dir) {\n var save = root.get_child(!dir);\n root.set_child(!dir, save.get_child(dir));\n save.set_child(dir, root);\n root.red = true;\n save.red = false;\n return save;\n}\n\nfunction double_rotate(root, dir) {\n root.set_child(!dir, single_rotate(root.get_child(!dir), !dir));\n return single_rotate(root, dir);\n}\n\nmodule.exports = RBTree;","var TreeBase = require('./treebase');\n\nfunction Node(data) {\n this.data = data;\n this.left = null;\n this.right = null;\n}\n\nNode.prototype.get_child = function (dir) {\n return dir ? this.right : this.left;\n};\n\nNode.prototype.set_child = function (dir, val) {\n if (dir) {\n this.right = val;\n } else {\n this.left = val;\n }\n};\n\nfunction BinTree(comparator) {\n this._root = null;\n this._comparator = comparator;\n this.size = 0;\n}\n\nBinTree.prototype = new TreeBase(); // returns true if inserted, false if duplicate\n\nBinTree.prototype.insert = function (data) {\n if (this._root === null) {\n // empty tree\n this._root = new Node(data);\n this.size++;\n return true;\n }\n\n var dir = 0; // setup\n\n var p = null; // parent\n\n var node = this._root; // search down\n\n while (true) {\n if (node === null) {\n // insert new node at the bottom\n node = new Node(data);\n p.set_child(dir, node);\n ret = true;\n this.size++;\n return true;\n } // stop if found\n\n\n if (this._comparator(node.data, data) === 0) {\n return false;\n }\n\n dir = this._comparator(node.data, data) < 0; // update helpers\n\n p = node;\n node = node.get_child(dir);\n }\n}; // returns true if removed, false if not found\n\n\nBinTree.prototype.remove = function (data) {\n if (this._root === null) {\n return false;\n }\n\n var head = new Node(undefined); // fake tree root\n\n var node = head;\n node.right = this._root;\n var p = null; // parent\n\n var found = null; // found item\n\n var dir = 1;\n\n while (node.get_child(dir) !== null) {\n p = node;\n node = node.get_child(dir);\n\n var cmp = this._comparator(data, node.data);\n\n dir = cmp > 0;\n\n if (cmp === 0) {\n found = node;\n }\n }\n\n if (found !== null) {\n found.data = node.data;\n p.set_child(p.right === node, node.get_child(node.left === null));\n this._root = head.right;\n this.size--;\n return true;\n } else {\n return false;\n }\n};\n\nmodule.exports = BinTree;","var map = {\n\t\"./geo_controller.js\": 411,\n\t\"./non_geo_controller.js\": 412,\n\t\"./reorder_controller.js\": 413\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 410;","import { Controller } from 'stimulus'\n\nrequire(\"leaflet/dist/leaflet.css\")\nimport L from 'leaflet'\ndelete L.Icon.Default.prototype._getIconUrl\n\nL.Icon.Default.mergeOptions({\n iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),\n iconUrl: require('leaflet/dist/images/marker-icon.png'),\n shadowUrl: require('leaflet/dist/images/marker-shadow.png'),\n})\n\nexport default class extends Controller {\n static targets = [ 'lat', 'lng', 'map' ]\n\n connect () {\n this.marker()\n\n this.latTarget.addEventListener('change', event => this.marker())\n this.lngTarget.addEventListener('change', event => this.marker())\n window.addEventListener('resize', event => this.map.invalidateSize())\n\n this.map.on('click', event => {\n this.latTarget.value = event.latlng.lat\n this.lngTarget.value = event.latlng.lng\n\n this.latTarget.dispatchEvent(new Event('change'))\n })\n }\n\n marker () {\n if (this._marker) this.map.removeLayer(this._marker)\n\n this._marker = L.marker(this.coords).addTo(this.map)\n\n return this._marker\n }\n\n get lat () {\n const lat = parseFloat(this.latTarget.value)\n\n return isNaN(lat) ? 0 : lat\n }\n\n get lng () {\n const lng = parseFloat(this.lngTarget.value)\n\n return isNaN(lng) ? 0 : lng\n }\n\n get coords () {\n return [this.lat, this.lng]\n }\n\n get map () {\n if (!this._map) {\n this._map = L.map(this.mapTarget).setView(this.coords, 13)\n\n L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n maxZoom: 19,\n attribution: '&copy; <a href=\"https://openstreetmap.org/copyright\">OpenStreetMap contributors</a>'\n }).addTo(this._map)\n }\n\n return this._map\n }\n}\n","import { Controller } from 'stimulus'\n\nrequire(\"leaflet/dist/leaflet.css\")\nimport L from 'leaflet'\ndelete L.Icon.Default.prototype._getIconUrl\n\nL.Icon.Default.mergeOptions({\n iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),\n iconUrl: require('leaflet/dist/images/marker-icon.png'),\n shadowUrl: require('leaflet/dist/images/marker-shadow.png'),\n})\n\nexport default class extends Controller {\n static targets = [ 'lat', 'lng', 'map', 'overlay' ]\n\n async connect () {\n this.marker()\n\n this.latTarget.addEventListener('change', event => this.marker())\n this.lngTarget.addEventListener('change', event => this.marker())\n window.addEventListener('resize', event => this.map.invalidateSize())\n\n this.map.on('click', event => {\n this.latTarget.value = event.latlng.lat\n this.lngTarget.value = event.latlng.lng\n\n this.latTarget.dispatchEvent(new Event('change'))\n })\n }\n\n marker () {\n if (this._marker) this.map.removeLayer(this._marker)\n\n this._marker = L.marker(this.coords).addTo(this.map)\n\n return this._marker\n }\n\n get lat () {\n const lat = parseFloat(this.latTarget.value)\n\n return isNaN(lat) ? 0 : lat\n }\n\n get lng () {\n const lng = parseFloat(this.lngTarget.value)\n\n return isNaN(lng) ? 0 : lng\n }\n\n get coords () {\n return [this.lat, this.lng]\n }\n\n get bounds () {\n return [\n [0, 0],\n [\n this.svgOverlay.viewBox.baseVal.height,\n this.svgOverlay.viewBox.baseVal.width,\n ]\n ];\n }\n\n get map () {\n if (!this._map) {\n this._map = L.map(this.mapTarget, {\n minZoom: 0,\n maxZoom: 5\n }).setView(this.coords, 0);\n\n this._layer = L.tileLayer(`${this.element.dataset.site}public/map/{z}/{y}/{x}.png`, {\n minNativeZoom: 0,\n maxNativeZoom: 5,\n noWrap: true\n }).addTo(this._map);\n }\n\n return this._map\n }\n}\n","import { Controller } from 'stimulus'\n\n/*\n * Permite reordenar las filas de una tabla.\n *\n * Cada fila tiene un selector que permite decidir si la fila se\n * mantiene en su lugar o se mueve al presionar las teclas de subir y\n * bajar.\n *\n * Se pueden mover varias juntas.\n *\n * El controlador está en la tabla y cada fila es un objetivo. Dentro\n * de cada fila tiene que haber un input[type=checkbox] que determina si\n * está seleccionada o no y un input[type=hidden] que contiene la\n * posición actual que luego será guardada.\n *\n * La tabla tiene que estar rodeada de un formulario para poder enviar\n * los datos.\n *\n * El objetivo es poder mover filas en tablas de miles de elementos.\n */\nexport default class extends Controller {\n static targets = [ 'row', 'counter' ]\n\n connect () {\n // Lo asociamos al documento porque en la tabla se pierde el foco\n // luego del primer evento.\n document.addEventListener('keydown', event => {\n if (!this.codes.includes(event.keyCode)) return\n if (this.empty) return\n\n event.preventDefault()\n\n this.move(event.keyCode === 38 ? 'up' : 'down')\n })\n }\n\n get selected_rows () {\n if (!this._selected_rows) this._selected_rows = {}\n\n return this._selected_rows\n }\n\n // Arriba, abajo\n get codes () {\n if (!this._codes) this._codes = [ 38, 40 ]\n\n return this._codes\n }\n\n get empty () {\n return (Object.keys(this.selected_rows).length === 0)\n }\n\n /*\n * Las filas siempre ordenadas\n */\n get sorted_rows () {\n return Object.values(this.selected_rows).sort((a,b) => a.order - b.order)\n }\n\n /*\n * Aplica el nuevo orden en las filas y sus campos\n */\n reorder () {\n for (const r of Object.values(this.selected_rows)) {\n this.selected_rows[r.row.id].order = this.rowTargets.indexOf(r.row)\n }\n\n const length = this.rowTargets.length\n\n this.rowTargets.forEach((row, i) => {\n row.querySelector('[data-reorder]').value = length - i\n })\n }\n\n move (direction) {\n if (this.empty) return\n\n const up = direction === 'up'\n const down = !up\n const direction_sibling = up ? 'previousElementSibling' : 'nextElementSibling'\n\n // Los movemos en orden\n const rows = this.sorted_rows\n if (down) rows.reverse()\n\n for (const r of rows) {\n const row = r.row\n const sibling = row[direction_sibling]\n\n // Estamos en el tope?\n if (!sibling || sibling.tagName !== row.tagName) continue\n\n if (up) {\n row.parentElement.insertBefore(row, sibling)\n } else {\n row.parentElement.insertBefore(sibling, row)\n }\n }\n\n // Reacomodamos el orden\n this.reorder()\n\n // Mantenemos el primero a la vista\n rows[0].row.scrollIntoView({ block: \"center\" });\n }\n\n counter () {\n this.counterTarget.innerText = Object.keys(this.selected_rows).length\n }\n\n // Deseleccionar todos\n unselect (event) {\n event.preventDefault()\n event.stopPropagation()\n\n for (const r of Object.values(this.selected_rows)) {\n r.row.querySelector('[data-action=\"reorder#select\"]').click()\n }\n }\n\n // Enviar arriba de todo\n top (event) {\n event.preventDefault()\n event.stopPropagation()\n\n if (this.empty) return\n\n const rows = this.sorted_rows\n const first = rows[0].row.parentElement.firstElementChild\n\n for (const r of rows) {\n const row = r.row\n\n if (row === first) continue\n\n row.parentElement.insertBefore(row, first)\n }\n\n // Reacomodamos el orden\n this.reorder()\n\n // Mantenemos el primero a la vista\n rows[0].row.scrollIntoView({ block: \"center\" });\n }\n\n bottom (event) {\n event.preventDefault()\n event.stopPropagation()\n\n if (this.empty) return\n\n const rows = this.sorted_rows\n\n for (const r of rows) {\n const row = r.row\n\n row.parentElement.appendChild(row)\n }\n\n // Reacomodamos el orden\n this.reorder()\n\n // Mantenemos el primero a la vista\n rows[0].row.scrollIntoView({ block: \"center\" });\n }\n\n /*\n * Al cambiar los inputs, mantener la lista de filas actualizadas.\n * Necesitamos saber la posición para poder mover las filas en orden\n * en lugar del orden en que fueron seleccionadas.\n */\n select (event) {\n const row = event.target.closest('tr')\n\n if (event.target.checked) {\n this.selected_rows[row.id] = {\n row,\n order: this.rowTargets.indexOf(row)\n }\n } else {\n delete this.selected_rows[row.id]\n }\n\n this.counter()\n }\n\n /*\n * Mover hacia arriba\n */\n up (event) {\n event.preventDefault()\n event.stopPropagation()\n if (this.empty) return\n\n this.move('up')\n }\n\n /*\n * Mover hacia abajo\n */\n down (event) {\n event.preventDefault()\n event.stopPropagation()\n if (this.empty) return\n\n this.move('down')\n }\n}\n","document.addEventListener('turbolinks:load', () => {\n document.querySelectorAll(\"a[href^='http://'],a[href^='https://'],a[href^='//']\").forEach(a => {\n a.rel = \"noopener\"\n a.target = \"_blank\"\n })\n})\n","document.addEventListener('turbolinks:load', () => {\n document.querySelectorAll('input[type=file]').forEach(file => {\n if (!file.dataset.preview) return\n\n file.addEventListener('change', event => {\n if (file.files.length === 0) return\n\n document.querySelector('#' + file.dataset.preview).src = window.URL.createObjectURL(file.files[0])\n })\n })\n})\n","// Validar fechas en navegadores que no soportan date, como\n// Webkit/Safari\ndocument.addEventListener('turbolinks:load', () => {\n document.querySelectorAll('input[type=\"date\"]').forEach(date => {\n if (date.type === 'date') return\n\n date.addEventListener('change', event => {\n date.setCustomValidity(date.validity.patternMismatch ? date.dataset.patternMismatch : '')\n })\n })\n})\n","// Main parser class\n'use strict';\n\nvar utils = require('./common/utils');\n\nvar helpers = require('./helpers');\n\nvar Renderer = require('./renderer');\n\nvar ParserCore = require('./parser_core');\n\nvar ParserBlock = require('./parser_block');\n\nvar ParserInline = require('./parser_inline');\n\nvar LinkifyIt = require('linkify-it');\n\nvar mdurl = require('mdurl');\n\nvar punycode = require('punycode');\n\nvar config = {\n 'default': require('./presets/default'),\n zero: require('./presets/zero'),\n commonmark: require('./presets/commonmark')\n}; ////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n // url should be normalized at this point, and existing entities are decoded\n var str = url.trim().toLowerCase();\n return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) ? true : false : true;\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = ['http:', 'https:', 'mailto:'];\n\nfunction normalizeLink(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname);\n } catch (er) {\n /**/\n }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n var parsed = mdurl.parse(url, true);\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname);\n } catch (er) {\n /**/\n }\n }\n }\n\n return mdurl.decode(mdurl.format(parsed));\n}\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n * `['«\\xA0', '\\xA0»', '\\xA0', '\\xA0']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(lang, str, true).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre class=\"hljs\"><code>' +\n * hljs.highlight(lang, str, true).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\n\n\nfunction MarkdownIt(presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options);\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {};\n presetName = 'default';\n }\n }\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n\n\n this.inline = new ParserInline();\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n\n this.block = new ParserBlock();\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n\n this.core = new ParserCore();\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n **/\n\n this.renderer = new Renderer();\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n * rule.\n **/\n\n this.linkify = new LinkifyIt();\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n\n this.validateLink = validateLink;\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n\n this.normalizeLink = normalizeLink;\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n\n this.normalizeLinkText = normalizeLinkText; // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n **/\n\n this.utils = utils;\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n\n this.helpers = utils.assign({}, helpers);\n this.options = {};\n this.configure(presetName);\n\n if (options) {\n this.set(options);\n }\n}\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\n\n\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options);\n return this;\n};\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you with - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\n\n\nMarkdownIt.prototype.configure = function (presets) {\n var self = this,\n presetName;\n\n if (utils.isString(presets)) {\n presetName = presets;\n presets = config[presetName];\n\n if (!presets) {\n throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name');\n }\n }\n\n if (!presets) {\n throw new Error('Wrong `markdown-it` preset, can\\'t be empty');\n }\n\n if (presets.options) {\n self.set(presets.options);\n }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules);\n }\n\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2);\n }\n });\n }\n\n return this;\n};\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\n\n\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) {\n list = [list];\n }\n\n ['core', 'block', 'inline'].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true));\n }, this);\n result = result.concat(this.inline.ruler2.enable(list, true));\n var missed = list.filter(function (name) {\n return result.indexOf(name) < 0;\n });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\n\n\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n var result = [];\n\n if (!Array.isArray(list)) {\n list = [list];\n }\n\n ['core', 'block', 'inline'].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true));\n }, this);\n result = result.concat(this.inline.ruler2.disable(list, true));\n var missed = list.filter(function (name) {\n return result.indexOf(name) < 0;\n });\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n }\n\n return this;\n};\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\n\n\nMarkdownIt.prototype.use = function (plugin\n/*, params, ... */\n) {\n var args = [this].concat(Array.prototype.slice.call(arguments, 1));\n plugin.apply(plugin, args);\n return this;\n};\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and returns list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\n\n\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String');\n }\n\n var state = new this.core.State(src, this, env);\n this.core.process(state);\n return state.tokens;\n};\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\n\n\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {};\n return this.renderer.render(this.parse(src, env), this.options, env);\n};\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\n\n\nMarkdownIt.prototype.parseInline = function (src, env) {\n var state = new this.core.State(src, this, env);\n state.inlineMode = true;\n this.core.process(state);\n return state.tokens;\n};\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\n\n\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {};\n return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\nmodule.exports = MarkdownIt;","'use strict';\n\nvar encodeCache = {}; // Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\n\nfunction getEncodeCache(exclude) {\n var i,\n ch,\n cache = encodeCache[exclude];\n\n if (cache) {\n return cache;\n }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n} // Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\n\n\nfunction encode(string, exclude, keepEscaped) {\n var i,\n l,\n code,\n nextCode,\n cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25\n /* % */\n && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\nmodule.exports = encode;","'use strict';\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n var i,\n ch,\n cache = decodeCache[exclude];\n\n if (cache) {\n return cache;\n }\n\n cache = decodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n cache.push(ch);\n }\n\n for (i = 0; i < exclude.length; i++) {\n ch = exclude.charCodeAt(i);\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n }\n\n return cache;\n} // Decode percent-encoded string.\n//\n\n\nfunction decode(string, exclude) {\n var cache;\n\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars;\n }\n\n cache = getDecodeCache(exclude);\n return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n var i,\n l,\n b1,\n b2,\n b3,\n b4,\n chr,\n result = '';\n\n for (i = 0, l = seq.length; i < l; i += 3) {\n b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n if (b1 < 0x80) {\n result += cache[b1];\n continue;\n }\n\n if ((b1 & 0xE0) === 0xC0 && i + 3 < l) {\n // 110xxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n if ((b2 & 0xC0) === 0x80) {\n chr = b1 << 6 & 0x7C0 | b2 & 0x3F;\n\n if (chr < 0x80) {\n result += \"\\uFFFD\\uFFFD\";\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 3;\n continue;\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && i + 6 < l) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n chr = b1 << 12 & 0xF000 | b2 << 6 & 0xFC0 | b3 & 0x3F;\n\n if (chr < 0x800 || chr >= 0xD800 && chr <= 0xDFFF) {\n result += \"\\uFFFD\\uFFFD\\uFFFD\";\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 6;\n continue;\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && i + 9 < l) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n chr = b1 << 18 & 0x1C0000 | b2 << 12 & 0x3F000 | b3 << 6 & 0xFC0 | b4 & 0x3F;\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += \"\\uFFFD\\uFFFD\\uFFFD\\uFFFD\";\n } else {\n chr -= 0x10000;\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n }\n\n i += 9;\n continue;\n }\n }\n\n result += \"\\uFFFD\";\n }\n\n return result;\n });\n}\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\nmodule.exports = decode;","'use strict';\n\nmodule.exports = function format(url) {\n var result = '';\n result += url.protocol || '';\n result += url.slashes ? '//' : '';\n result += url.auth ? url.auth + '@' : '';\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']';\n } else {\n result += url.hostname || '';\n }\n\n result += url.port ? ':' + url.port : '';\n result += url.pathname || '';\n result += url.search || '';\n result += url.hash || '';\n return result;\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict'; //\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n} // Reference: RFC 3986, RFC 1808, RFC 2396\n// define these here so at least they only have to be\n// compiled once on the first module load.\n\n\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n // Special case for a simple path URL\nsimplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n // RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\ndelims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n // RFC 2396: characters not allowed for various reasons.\nunwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\nautoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nnonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n\n/* eslint-disable no-script-url */\n// protocols that never have a hostname.\nhostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n},\n // protocols that always contain a // bit.\nslashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n};\n/* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n if (url && url instanceof Url) {\n return url;\n }\n\n var u = new Url();\n u.parse(url, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n var i,\n l,\n lowerProto,\n hec,\n slashes,\n rest = url; // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n\n if (simplePath) {\n this.pathname = simplePath[1];\n\n if (simplePath[2]) {\n this.search = simplePath[2];\n }\n\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n\n if (proto) {\n proto = proto[0];\n lowerProto = proto.toLowerCase();\n this.protocol = proto;\n rest = rest.substr(proto.length);\n } // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n\n\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//';\n\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] && (slashes || proto && !slashedProtocol[proto])) {\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n } // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n\n\n var auth, atSign;\n\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n } // Now we have a portion which is definitely the auth.\n // Pull that off.\n\n\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = auth;\n } // the host is the remaining to the left of the first non-host char\n\n\n hostEnd = -1;\n\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n } // if we still have not hit it, then the entire thing is a host.\n\n\n if (hostEnd === -1) {\n hostEnd = rest.length;\n }\n\n if (rest[hostEnd - 1] === ':') {\n hostEnd--;\n }\n\n var host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd); // pull out port.\n\n this.parseHost(host); // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n\n this.hostname = this.hostname || ''; // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n\n var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; // validate a little.\n\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n\n if (!part) {\n continue;\n }\n\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n } // we test again with ASCII char only\n\n\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n\n if (notHost.length) {\n rest = notHost.join('.') + rest;\n }\n\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } // strip [ and ] from the hostname\n // the host field still retains them, though\n\n\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n }\n } // chop off from the tail first.\n\n\n var hash = rest.indexOf('#');\n\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n\n var qm = rest.indexOf('?');\n\n if (qm !== -1) {\n this.search = rest.substr(qm);\n rest = rest.slice(0, qm);\n }\n\n if (rest) {\n this.pathname = rest;\n }\n\n if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n this.pathname = '';\n }\n\n return this;\n};\n\nUrl.prototype.parseHost = function (host) {\n var port = portPattern.exec(host);\n\n if (port) {\n port = port[0];\n\n if (port !== ':') {\n this.port = port.substr(1);\n }\n\n host = host.substr(0, host.length - port.length);\n }\n\n if (host) {\n this.hostname = host;\n }\n};\n\nmodule.exports = urlParse;","'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');","module.exports = /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/;","// Just a shortcut for bulk export\n'use strict';\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n var level,\n found,\n marker,\n prevPos,\n labelEnd = -1,\n max = state.posMax,\n oldPos = state.pos;\n state.pos = start + 1;\n level = 1;\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos);\n\n if (marker === 0x5D\n /* ] */\n ) {\n level--;\n\n if (level === 0) {\n found = true;\n break;\n }\n }\n\n prevPos = state.pos;\n state.md.inline.skipToken(state);\n\n if (marker === 0x5B\n /* [ */\n ) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++;\n } else if (disableNested) {\n state.pos = oldPos;\n return -1;\n }\n }\n }\n\n if (found) {\n labelEnd = state.pos;\n } // restore old state\n\n\n state.pos = oldPos;\n return labelEnd;\n};","// Parse link destination\n//\n'use strict';\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n var code,\n level,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (str.charCodeAt(pos) === 0x3C\n /* < */\n ) {\n pos++;\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x0A\n /* \\n */\n ) {\n return result;\n }\n\n if (code === 0x3E\n /* > */\n ) {\n result.pos = pos + 1;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n }\n\n if (code === 0x5C\n /* \\ */\n && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n pos++;\n } // no closing '>'\n\n\n return result;\n } // this should be ... } else { ... branch\n\n\n level = 0;\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === 0x20) {\n break;\n } // ascii control characters\n\n\n if (code < 0x20 || code === 0x7F) {\n break;\n }\n\n if (code === 0x5C\n /* \\ */\n && pos + 1 < max) {\n pos += 2;\n continue;\n }\n\n if (code === 0x28\n /* ( */\n ) {\n level++;\n }\n\n if (code === 0x29\n /* ) */\n ) {\n if (level === 0) {\n break;\n }\n\n level--;\n }\n\n pos++;\n }\n\n if (start === pos) {\n return result;\n }\n\n if (level !== 0) {\n return result;\n }\n\n result.str = unescapeAll(str.slice(start, pos));\n result.lines = lines;\n result.pos = pos;\n result.ok = true;\n return result;\n};","// Parse link title\n//\n'use strict';\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n var code,\n marker,\n lines = 0,\n start = pos,\n result = {\n ok: false,\n pos: 0,\n lines: 0,\n str: ''\n };\n\n if (pos >= max) {\n return result;\n }\n\n marker = str.charCodeAt(pos);\n\n if (marker !== 0x22\n /* \" */\n && marker !== 0x27\n /* ' */\n && marker !== 0x28\n /* ( */\n ) {\n return result;\n }\n\n pos++; // if opening marker is \"(\", switch it to closing marker \")\"\n\n if (marker === 0x28) {\n marker = 0x29;\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos);\n\n if (code === marker) {\n result.pos = pos + 1;\n result.lines = lines;\n result.str = unescapeAll(str.slice(start + 1, pos));\n result.ok = true;\n return result;\n } else if (code === 0x0A) {\n lines++;\n } else if (code === 0x5C\n /* \\ */\n && pos + 1 < max) {\n pos++;\n\n if (str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n\n pos++;\n }\n\n return result;\n};","/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\nvar assign = require('./common/utils').assign;\n\nvar unescapeAll = require('./common/utils').unescapeAll;\n\nvar escapeHtml = require('./common/utils').escapeHtml; ////////////////////////////////////////////////////////////////////////////////\n\n\nvar default_rules = {};\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n return '<code' + slf.renderAttrs(token) + '>' + escapeHtml(tokens[idx].content) + '</code>';\n};\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n var token = tokens[idx];\n return '<pre' + slf.renderAttrs(token) + '><code>' + escapeHtml(tokens[idx].content) + '</code></pre>\\n';\n};\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n var token = tokens[idx],\n info = token.info ? unescapeAll(token.info).trim() : '',\n langName = '',\n highlighted,\n i,\n tmpAttrs,\n tmpToken;\n\n if (info) {\n langName = info.split(/\\s+/g)[0];\n }\n\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName) || escapeHtml(token.content);\n } else {\n highlighted = escapeHtml(token.content);\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n';\n } // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .clone() for token and simplify this part, but\n // now we prefer to keep things local.\n\n\n if (info) {\n i = token.attrIndex('class');\n tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n if (i < 0) {\n tmpAttrs.push(['class', options.langPrefix + langName]);\n } else {\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n } // Fake token just to render attributes\n\n\n tmpToken = {\n attrs: tmpAttrs\n };\n return '<pre><code' + slf.renderAttrs(tmpToken) + '>' + highlighted + '</code></pre>\\n';\n }\n\n return '<pre><code' + slf.renderAttrs(token) + '>' + highlighted + '</code></pre>\\n';\n};\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n var token = tokens[idx]; // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] = slf.renderInlineAsText(token.children, options, env);\n return slf.renderToken(tokens, idx, options);\n};\n\ndefault_rules.hardbreak = function (tokens, idx, options\n/*, env */\n) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\n\ndefault_rules.softbreak = function (tokens, idx, options\n/*, env */\n) {\n return options.breaks ? options.xhtmlOut ? '<br />\\n' : '<br>\\n' : '\\n';\n};\n\ndefault_rules.text = function (tokens, idx\n/*, options, env */\n) {\n return escapeHtml(tokens[idx].content);\n};\n\ndefault_rules.html_block = function (tokens, idx\n/*, options, env */\n) {\n return tokens[idx].content;\n};\n\ndefault_rules.html_inline = function (tokens, idx\n/*, options, env */\n) {\n return tokens[idx].content;\n};\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\n\n\nfunction Renderer() {\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules);\n}\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\n\n\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n var i, l, result;\n\n if (!token.attrs) {\n return '';\n }\n\n result = '';\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n }\n\n return result;\n};\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\n\n\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n var nextToken,\n result = '',\n needLf = false,\n token = tokens[idx]; // Tight list paragraphs\n\n if (token.hidden) {\n return '';\n } // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n\n\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n';\n } // Add token name, e.g. `<img`\n\n\n result += (token.nesting === -1 ? '</' : '<') + token.tag; // Encode attributes, e.g. `<img src=\"foo\"`\n\n result += this.renderAttrs(token); // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /';\n } // Check if we need to add a newline after this tag\n\n\n if (token.block) {\n needLf = true;\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n nextToken = tokens[idx + 1];\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false;\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false;\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>';\n return result;\n};\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to renter\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\n\n\nRenderer.prototype.renderInline = function (tokens, options, env) {\n var type,\n result = '',\n rules = this.rules;\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options);\n }\n }\n\n return result;\n};\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to renter\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\n\n\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n var result = '';\n\n for (var i = 0, len = tokens.length; i < len; i++) {\n if (tokens[i].type === 'text') {\n result += tokens[i].content;\n } else if (tokens[i].type === 'image') {\n result += this.renderInlineAsText(tokens[i].children, options, env);\n }\n }\n\n return result;\n};\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to renter\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\n\n\nRenderer.prototype.render = function (tokens, options, env) {\n var i,\n len,\n type,\n result = '',\n rules = this.rules;\n\n for (i = 0, len = tokens.length; i < len; i++) {\n type = tokens[i].type;\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env);\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[tokens[i].type](tokens, i, options, env, this);\n } else {\n result += this.renderToken(tokens, i, options, env);\n }\n }\n\n return result;\n};\n\nmodule.exports = Renderer;","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\nvar Ruler = require('./ruler');\n\nvar _rules = [['normalize', require('./rules_core/normalize')], ['block', require('./rules_core/block')], ['inline', require('./rules_core/inline')], ['linkify', require('./rules_core/linkify')], ['replacements', require('./rules_core/replacements')], ['smartquotes', require('./rules_core/smartquotes')]];\n/**\n * new Core()\n **/\n\nfunction Core() {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n}\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\n\n\nCore.prototype.process = function (state) {\n var i, l, rules;\n rules = this.ruler.getRules('');\n\n for (i = 0, l = rules.length; i < l; i++) {\n rules[i](state);\n }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\nmodule.exports = Core;","// Normalize input string\n'use strict'; // https://spec.commonmark.org/0.29/#line-ending\n\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\nmodule.exports = function normalize(state) {\n var str; // Normalize newlines\n\n str = state.src.replace(NEWLINES_RE, '\\n'); // Replace NULL characters\n\n str = str.replace(NULL_RE, \"\\uFFFD\");\n state.src = str;\n};","'use strict';\n\nmodule.exports = function block(state) {\n var token;\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0);\n token.content = state.src;\n token.map = [0, 1];\n token.children = [];\n state.tokens.push(token);\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens);\n }\n};","'use strict';\n\nmodule.exports = function inline(state) {\n var tokens = state.tokens,\n tok,\n i,\n l; // Parse inlines\n\n for (i = 0, l = tokens.length; i < l; i++) {\n tok = tokens[i];\n\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n }\n }\n};","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\nfunction isLinkOpen(str) {\n return /^<a[>\\s]/i.test(str);\n}\n\nfunction isLinkClose(str) {\n return /^<\\/a\\s*>/i.test(str);\n}\n\nmodule.exports = function linkify(state) {\n var i,\n j,\n l,\n tokens,\n token,\n currentToken,\n nodes,\n ln,\n text,\n pos,\n lastPos,\n level,\n htmlLinkLevel,\n url,\n fullUrl,\n urlText,\n blockTokens = state.tokens,\n links;\n\n if (!state.md.options.linkify) {\n return;\n }\n\n for (j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' || !state.md.linkify.pretest(blockTokens[j].content)) {\n continue;\n }\n\n tokens = blockTokens[j].children;\n htmlLinkLevel = 0; // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n\n for (i = tokens.length - 1; i >= 0; i--) {\n currentToken = tokens[i]; // Skip content of markdown links\n\n if (currentToken.type === 'link_close') {\n i--;\n\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--;\n }\n\n continue;\n } // Skip content of html tag links\n\n\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--;\n }\n\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++;\n }\n }\n\n if (htmlLinkLevel > 0) {\n continue;\n }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n text = currentToken.content;\n links = state.md.linkify.match(text); // Now split string to nodes\n\n nodes = [];\n level = currentToken.level;\n lastPos = 0;\n\n for (ln = 0; ln < links.length; ln++) {\n url = links[ln].url;\n fullUrl = state.md.normalizeLink(url);\n\n if (!state.md.validateLink(fullUrl)) {\n continue;\n }\n\n urlText = links[ln].text; // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n } else {\n urlText = state.md.normalizeLinkText(urlText);\n }\n\n pos = links[ln].index;\n\n if (pos > lastPos) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos, pos);\n token.level = level;\n nodes.push(token);\n }\n\n token = new state.Token('link_open', 'a', 1);\n token.attrs = [['href', fullUrl]];\n token.level = level++;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n token = new state.Token('text', '', 0);\n token.content = urlText;\n token.level = level;\n nodes.push(token);\n token = new state.Token('link_close', 'a', -1);\n token.level = --level;\n token.markup = 'linkify';\n token.info = 'auto';\n nodes.push(token);\n lastPos = links[ln].lastIndex;\n }\n\n if (lastPos < text.length) {\n token = new state.Token('text', '', 0);\n token.content = text.slice(lastPos);\n token.level = level;\n nodes.push(token);\n } // replace current node\n\n\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n }\n }\n }\n};","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// (p) (P) -> §\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → &ndash;, --- → &mdash;\n//\n'use strict'; // TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - miltiplication 2 x 4 -> 2 × 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/; // Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\n\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n c: '©',\n r: '®',\n p: '§',\n tm: '™'\n};\n\nfunction replaceFn(match, name) {\n return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n var i,\n token,\n inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nfunction replace_rare(inlineTokens) {\n var i,\n token,\n inside_autolink = 0;\n\n for (i = inlineTokens.length - 1; i >= 0; i--) {\n token = inlineTokens[i];\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content.replace(/\\+-/g, '±') // .., ..., ....... -> …\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..').replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',') // em-dash\n .replace(/(^|[^-])---([^-]|$)/mg, \"$1\\u2014$2\") // en-dash\n .replace(/(^|\\s)--(\\s|$)/mg, \"$1\\u2013$2\").replace(/(^|[^-\\s])--([^-\\s]|$)/mg, \"$1\\u2013$2\");\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--;\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++;\n }\n }\n}\n\nmodule.exports = function replace(state) {\n var blkIdx;\n\n if (!state.md.options.typographer) {\n return;\n }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n if (state.tokens[blkIdx].type !== 'inline') {\n continue;\n }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children);\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children);\n }\n }\n};","// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\n\nvar isPunctChar = require('../common/utils').isPunctChar;\n\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = \"\\u2019\";\n/* */\n\nfunction replaceAt(str, index, ch) {\n return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar, isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace, canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n stack = [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n thisLevel = tokens[i].level;\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) {\n break;\n }\n }\n\n stack.length = j + 1;\n\n if (token.type !== 'text') {\n continue;\n }\n\n text = token.content;\n pos = 0;\n max = text.length;\n /*eslint no-labels:0,block-scoped-var:0*/\n\n OUTER: while (pos < max) {\n QUOTE_RE.lastIndex = pos;\n t = QUOTE_RE.exec(text);\n\n if (!t) {\n break;\n }\n\n canOpen = canClose = true;\n pos = t.index + 1;\n isSingle = t[0] === \"'\"; // Find previous character,\n // default to space if it's the beginning of the line\n //\n\n lastChar = 0x20;\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1);\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n\n if (tokens[j].type !== 'text') continue;\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n break;\n }\n } // Find next character,\n // default to space if it's the end of the line\n //\n\n\n nextChar = 0x20;\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos);\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n\n if (tokens[j].type !== 'text') continue;\n nextChar = tokens[j].content.charCodeAt(0);\n break;\n }\n }\n\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n canOpen = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false;\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false;\n }\n }\n\n if (nextChar === 0x22\n /* \" */\n && t[0] === '\"') {\n if (lastChar >= 0x30\n /* 0 */\n && lastChar <= 0x39\n /* 9 */\n ) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false;\n }\n }\n\n if (canOpen && canClose) {\n // treat this as the middle of the word\n canOpen = false;\n canClose = isNextPunctChar;\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n\n continue;\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n item = stack[j];\n\n if (stack[j].level < thisLevel) {\n break;\n }\n\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j];\n\n if (isSingle) {\n openQuote = state.md.options.quotes[2];\n closeQuote = state.md.options.quotes[3];\n } else {\n openQuote = state.md.options.quotes[0];\n closeQuote = state.md.options.quotes[1];\n } // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n\n\n token.content = replaceAt(token.content, t.index, closeQuote);\n tokens[item.token].content = replaceAt(tokens[item.token].content, item.pos, openQuote);\n pos += closeQuote.length - 1;\n\n if (item.token === i) {\n pos += openQuote.length - 1;\n }\n\n text = token.content;\n max = text.length;\n stack.length = j;\n continue OUTER;\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n });\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE);\n }\n }\n }\n}\n\nmodule.exports = function smartquotes(state) {\n /*eslint max-depth:0*/\n var blkIdx;\n\n if (!state.md.options.typographer) {\n return;\n }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n if (state.tokens[blkIdx].type !== 'inline' || !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue;\n }\n\n process_inlines(state.tokens[blkIdx].children, state);\n }\n};","// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\nfunction StateCore(src, md, env) {\n this.src = src;\n this.env = env;\n this.tokens = [];\n this.inlineMode = false;\n this.md = md; // link to parser instance\n} // re-export Token class to use in core rules\n\n\nStateCore.prototype.Token = Token;\nmodule.exports = StateCore;","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\nvar Ruler = require('./ruler');\n\nvar _rules = [// First 2 params - rule name & source. Secondary array - list of rules,\n// which can be terminated by this one.\n['table', require('./rules_block/table'), ['paragraph', 'reference']], ['code', require('./rules_block/code')], ['fence', require('./rules_block/fence'), ['paragraph', 'reference', 'blockquote', 'list']], ['blockquote', require('./rules_block/blockquote'), ['paragraph', 'reference', 'blockquote', 'list']], ['hr', require('./rules_block/hr'), ['paragraph', 'reference', 'blockquote', 'list']], ['list', require('./rules_block/list'), ['paragraph', 'reference', 'blockquote']], ['reference', require('./rules_block/reference')], ['heading', require('./rules_block/heading'), ['paragraph', 'reference', 'blockquote']], ['lheading', require('./rules_block/lheading')], ['html_block', require('./rules_block/html_block'), ['paragraph', 'reference', 'blockquote']], ['paragraph', require('./rules_block/paragraph')]];\n/**\n * new ParserBlock()\n **/\n\nfunction ParserBlock() {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler();\n\n for (var i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], {\n alt: (_rules[i][2] || []).slice()\n });\n }\n} // Generate tokens for input range\n//\n\n\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n var ok,\n i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n line = startLine,\n hasEmptyLines = false,\n maxNesting = state.md.options.maxNesting;\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line);\n\n if (line >= endLine) {\n break;\n } // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n\n\n if (state.sCount[line] < state.blkIndent) {\n break;\n } // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n\n\n if (state.level >= maxNesting) {\n state.line = endLine;\n break;\n } // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n\n\n for (i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false);\n\n if (ok) {\n break;\n }\n } // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n\n\n state.tight = !hasEmptyLines; // paragraph might \"eat\" one newline after it in nested lists\n\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true;\n }\n\n line = state.line;\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true;\n line++;\n state.line = line;\n }\n }\n};\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\n\n\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n var state;\n\n if (!src) {\n return;\n }\n\n state = new this.State(src, md, env, outTokens);\n this.tokenize(state, state.line, state.lineMax);\n};\n\nParserBlock.prototype.State = require('./rules_block/state_block');\nmodule.exports = ParserBlock;","// GFM table, non-standard\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nfunction getLine(state, line) {\n var pos = state.bMarks[line] + state.blkIndent,\n max = state.eMarks[line];\n return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n var result = [],\n pos = 0,\n max = str.length,\n ch,\n escapes = 0,\n lastPos = 0,\n backTicked = false,\n lastBackTick = 0;\n ch = str.charCodeAt(pos);\n\n while (pos < max) {\n if (ch === 0x60\n /* ` */\n ) {\n if (backTicked) {\n // make \\` close code sequence, but not open it;\n // the reason is: `\\` is correct code block\n backTicked = false;\n lastBackTick = pos;\n } else if (escapes % 2 === 0) {\n backTicked = true;\n lastBackTick = pos;\n }\n } else if (ch === 0x7c\n /* | */\n && escapes % 2 === 0 && !backTicked) {\n result.push(str.substring(lastPos, pos));\n lastPos = pos + 1;\n }\n\n if (ch === 0x5c\n /* \\ */\n ) {\n escapes++;\n } else {\n escapes = 0;\n }\n\n pos++; // If there was an un-closed backtick, go back to just after\n // the last backtick, but as if it was a normal character\n\n if (pos === max && backTicked) {\n backTicked = false;\n pos = lastBackTick + 1;\n }\n\n ch = str.charCodeAt(pos);\n }\n\n result.push(str.substring(lastPos));\n return result;\n}\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n var ch, lineText, pos, i, nextLine, columns, columnCount, token, aligns, t, tableLines, tbodyLines; // should have at least two lines\n\n if (startLine + 2 > endLine) {\n return false;\n }\n\n nextLine = startLine + 1;\n\n if (state.sCount[nextLine] < state.blkIndent) {\n return false;\n } // if it's indented more than 3 spaces, it should be a code block\n\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n return false;\n } // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n\n if (pos >= state.eMarks[nextLine]) {\n return false;\n }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch !== 0x7C\n /* | */\n && ch !== 0x2D\n /* - */\n && ch !== 0x3A\n /* : */\n ) {\n return false;\n }\n\n while (pos < state.eMarks[nextLine]) {\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x7C\n /* | */\n && ch !== 0x2D\n /* - */\n && ch !== 0x3A\n /* : */\n && !isSpace(ch)) {\n return false;\n }\n\n pos++;\n }\n\n lineText = getLine(state, startLine + 1);\n columns = lineText.split('|');\n aligns = [];\n\n for (i = 0; i < columns.length; i++) {\n t = columns[i].trim();\n\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue;\n } else {\n return false;\n }\n }\n\n if (!/^:?-+:?$/.test(t)) {\n return false;\n }\n\n if (t.charCodeAt(t.length - 1) === 0x3A\n /* : */\n ) {\n aligns.push(t.charCodeAt(0) === 0x3A\n /* : */\n ? 'center' : 'right');\n } else if (t.charCodeAt(0) === 0x3A\n /* : */\n ) {\n aligns.push('left');\n } else {\n aligns.push('');\n }\n }\n\n lineText = getLine(state, startLine).trim();\n\n if (lineText.indexOf('|') === -1) {\n return false;\n }\n\n if (state.sCount[startLine] - state.blkIndent >= 4) {\n return false;\n }\n\n columns = escapedSplit(lineText.replace(/^\\||\\|$/g, '')); // header row will define an amount of columns in the entire table,\n // and align row shouldn't be smaller than that (the rest of the rows can)\n\n columnCount = columns.length;\n\n if (columnCount > aligns.length) {\n return false;\n }\n\n if (silent) {\n return true;\n }\n\n token = state.push('table_open', 'table', 1);\n token.map = tableLines = [startLine, 0];\n token = state.push('thead_open', 'thead', 1);\n token.map = [startLine, startLine + 1];\n token = state.push('tr_open', 'tr', 1);\n token.map = [startLine, startLine + 1];\n\n for (i = 0; i < columns.length; i++) {\n token = state.push('th_open', 'th', 1);\n token.map = [startLine, startLine + 1];\n\n if (aligns[i]) {\n token.attrs = [['style', 'text-align:' + aligns[i]]];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i].trim();\n token.map = [startLine, startLine + 1];\n token.children = [];\n token = state.push('th_close', 'th', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n token = state.push('thead_close', 'thead', -1);\n token = state.push('tbody_open', 'tbody', 1);\n token.map = tbodyLines = [startLine + 2, 0];\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) {\n break;\n }\n\n lineText = getLine(state, nextLine).trim();\n\n if (lineText.indexOf('|') === -1) {\n break;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n break;\n }\n\n columns = escapedSplit(lineText.replace(/^\\||\\|$/g, ''));\n token = state.push('tr_open', 'tr', 1);\n\n for (i = 0; i < columnCount; i++) {\n token = state.push('td_open', 'td', 1);\n\n if (aligns[i]) {\n token.attrs = [['style', 'text-align:' + aligns[i]]];\n }\n\n token = state.push('inline', '', 0);\n token.content = columns[i] ? columns[i].trim() : '';\n token.children = [];\n token = state.push('td_close', 'td', -1);\n }\n\n token = state.push('tr_close', 'tr', -1);\n }\n\n token = state.push('tbody_close', 'tbody', -1);\n token = state.push('table_close', 'table', -1);\n tableLines[1] = tbodyLines[1] = nextLine;\n state.line = nextLine;\n return true;\n};","// Code block (4 spaces padded)\n'use strict';\n\nmodule.exports = function code(state, startLine, endLine\n/*, silent*/\n) {\n var nextLine, last, token;\n\n if (state.sCount[startLine] - state.blkIndent < 4) {\n return false;\n }\n\n last = nextLine = startLine + 1;\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++;\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++;\n last = nextLine;\n continue;\n }\n\n break;\n }\n\n state.line = last;\n token = state.push('code_block', 'code', 0);\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, true);\n token.map = [startLine, state.line];\n return true;\n};","// fences (``` lang, ~~~ lang)\n'use strict';\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n var marker,\n len,\n params,\n nextLine,\n mem,\n token,\n markup,\n haveEndMarker = false,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine]; // if it's indented more than 3 spaces, it should be a code block\n\n if (state.sCount[startLine] - state.blkIndent >= 4) {\n return false;\n }\n\n if (pos + 3 > max) {\n return false;\n }\n\n marker = state.src.charCodeAt(pos);\n\n if (marker !== 0x7E\n /* ~ */\n && marker !== 0x60\n /* ` */\n ) {\n return false;\n } // scan marker length\n\n\n mem = pos;\n pos = state.skipChars(pos, marker);\n len = pos - mem;\n\n if (len < 3) {\n return false;\n }\n\n markup = state.src.slice(mem, pos);\n params = state.src.slice(pos, max);\n\n if (marker === 0x60\n /* ` */\n ) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false;\n }\n } // Since start is found, we can report success here in validation mode\n\n\n if (silent) {\n return true;\n } // search end of block\n\n\n nextLine = startLine;\n\n for (;;) {\n nextLine++;\n\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break;\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break;\n }\n\n if (state.src.charCodeAt(pos) !== marker) {\n continue;\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue;\n }\n\n pos = state.skipChars(pos, marker); // closing code fence must be at least as long as the opening one\n\n if (pos - mem < len) {\n continue;\n } // make sure tail has spaces only\n\n\n pos = state.skipSpaces(pos);\n\n if (pos < max) {\n continue;\n }\n\n haveEndMarker = true; // found!\n\n break;\n } // If a fence has heading spaces, they should be removed from its inner block\n\n\n len = state.sCount[startLine];\n state.line = nextLine + (haveEndMarker ? 1 : 0);\n token = state.push('fence', 'code', 0);\n token.info = params;\n token.content = state.getLines(startLine + 1, nextLine, len, true);\n token.markup = markup;\n token.map = [startLine, state.line];\n return true;\n};","// Block quotes\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n var adjustTab,\n ch,\n i,\n initial,\n l,\n lastLineEmpty,\n lines,\n nextLine,\n offset,\n oldBMarks,\n oldBSCount,\n oldIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n spaceAfterMarker,\n terminate,\n terminatorRules,\n token,\n wasOutdented,\n oldLineMax = state.lineMax,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine]; // if it's indented more than 3 spaces, it should be a code block\n\n if (state.sCount[startLine] - state.blkIndent >= 4) {\n return false;\n } // check the block quote marker\n\n\n if (state.src.charCodeAt(pos++) !== 0x3E\n /* > */\n ) {\n return false;\n } // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n\n\n if (silent) {\n return true;\n } // skip spaces after \">\" and re-calculate offset\n\n\n initial = offset = state.sCount[startLine] + pos - (state.bMarks[startLine] + state.tShift[startLine]); // skip one optional space after '>'\n\n if (state.src.charCodeAt(pos) === 0x20\n /* space */\n ) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09\n /* tab */\n ) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[startLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks = [state.bMarks[startLine]];\n state.bMarks[startLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n oldBSCount = [state.bsCount[startLine]];\n state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n lastLineEmpty = pos >= max;\n oldSCount = [state.sCount[startLine]];\n state.sCount[startLine] = offset - initial;\n oldTShift = [state.tShift[startLine]];\n state.tShift[startLine] = pos - state.bMarks[startLine];\n terminatorRules = state.md.block.ruler.getRules('blockquote');\n oldParentType = state.parentType;\n state.parentType = 'blockquote';\n wasOutdented = false; // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n\n for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n if (state.sCount[nextLine] < state.blkIndent) wasOutdented = true;\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break;\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E\n /* > */\n && !wasOutdented) {\n // This line is inside the blockquote.\n // skip spaces after \">\" and re-calculate offset\n initial = offset = state.sCount[nextLine] + pos - (state.bMarks[nextLine] + state.tShift[nextLine]); // skip one optional space after '>'\n\n if (state.src.charCodeAt(pos) === 0x20\n /* space */\n ) {\n // ' > test '\n // ^ -- position start of line here:\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n spaceAfterMarker = true;\n } else if (state.src.charCodeAt(pos) === 0x09\n /* tab */\n ) {\n spaceAfterMarker = true;\n\n if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++;\n initial++;\n offset++;\n adjustTab = false;\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true;\n }\n } else {\n spaceAfterMarker = false;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n state.bMarks[nextLine] = pos;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n } else {\n offset++;\n }\n } else {\n break;\n }\n\n pos++;\n }\n\n lastLineEmpty = pos >= max;\n oldBSCount.push(state.bsCount[nextLine]);\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] = offset - initial;\n oldTShift.push(state.tShift[nextLine]);\n state.tShift[nextLine] = pos - state.bMarks[nextLine];\n continue;\n } // Case 2: line is not inside the blockquote, and the last line was empty.\n\n\n if (lastLineEmpty) {\n break;\n } // Case 3: another tag found.\n\n\n terminate = false;\n\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine;\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]);\n state.sCount[nextLine] -= state.blkIndent;\n }\n\n break;\n }\n\n oldBMarks.push(state.bMarks[nextLine]);\n oldBSCount.push(state.bsCount[nextLine]);\n oldTShift.push(state.tShift[nextLine]);\n oldSCount.push(state.sCount[nextLine]); // A negative indentation means that this is a paragraph continuation\n //\n\n state.sCount[nextLine] = -1;\n }\n\n oldIndent = state.blkIndent;\n state.blkIndent = 0;\n token = state.push('blockquote_open', 'blockquote', 1);\n token.markup = '>';\n token.map = lines = [startLine, 0];\n state.md.block.tokenize(state, startLine, nextLine);\n token = state.push('blockquote_close', 'blockquote', -1);\n token.markup = '>';\n state.lineMax = oldLineMax;\n state.parentType = oldParentType;\n lines[1] = state.line; // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n\n for (i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i];\n state.tShift[i + startLine] = oldTShift[i];\n state.sCount[i + startLine] = oldSCount[i];\n state.bsCount[i + startLine] = oldBSCount[i];\n }\n\n state.blkIndent = oldIndent;\n return true;\n};","// Horizontal rule\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n var marker,\n cnt,\n ch,\n token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine]; // if it's indented more than 3 spaces, it should be a code block\n\n if (state.sCount[startLine] - state.blkIndent >= 4) {\n return false;\n }\n\n marker = state.src.charCodeAt(pos++); // Check hr marker\n\n if (marker !== 0x2A\n /* * */\n && marker !== 0x2D\n /* - */\n && marker !== 0x5F\n /* _ */\n ) {\n return false;\n } // markers can be mixed with spaces, but there should be at least 3 of them\n\n\n cnt = 1;\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos++);\n\n if (ch !== marker && !isSpace(ch)) {\n return false;\n }\n\n if (ch === marker) {\n cnt++;\n }\n }\n\n if (cnt < 3) {\n return false;\n }\n\n if (silent) {\n return true;\n }\n\n state.line = startLine + 1;\n token = state.push('hr', 'hr', 0);\n token.map = [startLine, state.line];\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n return true;\n};","// Lists\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace; // Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\n\n\nfunction skipBulletListMarker(state, startLine) {\n var marker, pos, max, ch;\n pos = state.bMarks[startLine] + state.tShift[startLine];\n max = state.eMarks[startLine];\n marker = state.src.charCodeAt(pos++); // Check bullet\n\n if (marker !== 0x2A\n /* * */\n && marker !== 0x2D\n /* - */\n && marker !== 0x2B\n /* + */\n ) {\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n} // Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\n\n\nfunction skipOrderedListMarker(state, startLine) {\n var ch,\n start = state.bMarks[startLine] + state.tShift[startLine],\n pos = start,\n max = state.eMarks[startLine]; // List marker should have at least 2 chars (digit + dot)\n\n if (pos + 1 >= max) {\n return -1;\n }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch < 0x30\n /* 0 */\n || ch > 0x39\n /* 9 */\n ) {\n return -1;\n }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) {\n return -1;\n }\n\n ch = state.src.charCodeAt(pos++);\n\n if (ch >= 0x30\n /* 0 */\n && ch <= 0x39\n /* 9 */\n ) {\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) {\n return -1;\n }\n\n continue;\n } // found valid marker\n\n\n if (ch === 0x29\n /* ) */\n || ch === 0x2e\n /* . */\n ) {\n break;\n }\n\n return -1;\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1;\n }\n }\n\n return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n var i,\n l,\n level = state.level + 2;\n\n for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true;\n state.tokens[i].hidden = true;\n i += 2;\n }\n }\n}\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n var ch,\n contentStart,\n i,\n indent,\n indentAfterMarker,\n initial,\n isOrdered,\n itemLines,\n l,\n listLines,\n listTokIdx,\n markerCharCode,\n markerValue,\n max,\n nextLine,\n offset,\n oldListIndent,\n oldParentType,\n oldSCount,\n oldTShift,\n oldTight,\n pos,\n posAfterMarker,\n prevEmptyEnd,\n start,\n terminate,\n terminatorRules,\n token,\n isTerminatingParagraph = false,\n tight = true; // if it's indented more than 3 spaces, it should be a code block\n\n if (state.sCount[startLine] - state.blkIndent >= 4) {\n return false;\n } // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n\n\n if (state.listIndent >= 0 && state.sCount[startLine] - state.listIndent >= 4 && state.sCount[startLine] < state.blkIndent) {\n return false;\n } // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n\n\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.tShift[startLine] >= state.blkIndent) {\n isTerminatingParagraph = true;\n }\n } // Detect list type and position after marker\n\n\n if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n isOrdered = true;\n start = state.bMarks[startLine] + state.tShift[startLine];\n markerValue = Number(state.src.substr(start, posAfterMarker - start - 1)); // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n\n if (isTerminatingParagraph && markerValue !== 1) return false;\n } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n isOrdered = false;\n } else {\n return false;\n } // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n\n\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n } // We should terminate list on style change. Remember first one to compare.\n\n\n markerCharCode = state.src.charCodeAt(posAfterMarker - 1); // For validation mode we can terminate immediately\n\n if (silent) {\n return true;\n } // Start list\n\n\n listTokIdx = state.tokens.length;\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1);\n\n if (markerValue !== 1) {\n token.attrs = [['start', markerValue]];\n }\n } else {\n token = state.push('bullet_list_open', 'ul', 1);\n }\n\n token.map = listLines = [startLine, 0];\n token.markup = String.fromCharCode(markerCharCode); //\n // Iterate list items\n //\n\n nextLine = startLine;\n prevEmptyEnd = false;\n terminatorRules = state.md.block.ruler.getRules('list');\n oldParentType = state.parentType;\n state.parentType = 'list';\n\n while (nextLine < endLine) {\n pos = posAfterMarker;\n max = state.eMarks[nextLine];\n initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n } else if (ch === 0x20) {\n offset++;\n } else {\n break;\n }\n\n pos++;\n }\n\n contentStart = pos;\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1;\n } else {\n indentAfterMarker = offset - initial;\n } // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n\n\n if (indentAfterMarker > 4) {\n indentAfterMarker = 1;\n } // \" - test\"\n // ^^^^^ - calculating total length of this thing\n\n\n indent = initial + indentAfterMarker; // Run subparser & write tokens\n\n token = state.push('list_item_open', 'li', 1);\n token.markup = String.fromCharCode(markerCharCode);\n token.map = itemLines = [startLine, 0]; // change current state, then restore it after parser subcall\n\n oldTight = state.tight;\n oldTShift = state.tShift[startLine];\n oldSCount = state.sCount[startLine]; // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n\n oldListIndent = state.listIndent;\n state.listIndent = state.blkIndent;\n state.blkIndent = indent;\n state.tight = true;\n state.tShift[startLine] = contentStart - state.bMarks[startLine];\n state.sCount[startLine] = offset;\n\n if (contentStart >= max && state.isEmpty(startLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine);\n } else {\n state.md.block.tokenize(state, startLine, endLine, true);\n } // If any of list item is tight, mark list as tight\n\n\n if (!state.tight || prevEmptyEnd) {\n tight = false;\n } // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n\n\n prevEmptyEnd = state.line - startLine > 1 && state.isEmpty(state.line - 1);\n state.blkIndent = state.listIndent;\n state.listIndent = oldListIndent;\n state.tShift[startLine] = oldTShift;\n state.sCount[startLine] = oldSCount;\n state.tight = oldTight;\n token = state.push('list_item_close', 'li', -1);\n token.markup = String.fromCharCode(markerCharCode);\n nextLine = startLine = state.line;\n itemLines[1] = nextLine;\n contentStart = state.bMarks[startLine];\n\n if (nextLine >= endLine) {\n break;\n } //\n // Try to check if list is terminated or continued.\n //\n\n\n if (state.sCount[nextLine] < state.blkIndent) {\n break;\n } // if it's indented more than 3 spaces, it should be a code block\n\n\n if (state.sCount[startLine] - state.blkIndent >= 4) {\n break;\n } // fail if terminating block found\n\n\n terminate = false;\n\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n break;\n } // fail if list has another type\n\n\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine);\n\n if (posAfterMarker < 0) {\n break;\n }\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine);\n\n if (posAfterMarker < 0) {\n break;\n }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) {\n break;\n }\n } // Finalize list\n\n\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1);\n } else {\n token = state.push('bullet_list_close', 'ul', -1);\n }\n\n token.markup = String.fromCharCode(markerCharCode);\n listLines[1] = nextLine;\n state.line = nextLine;\n state.parentType = oldParentType; // mark paragraphs tight if needed\n\n if (tight) {\n markTightParagraphs(state, listTokIdx);\n }\n\n return true;\n};","'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n var ch,\n destEndPos,\n destEndLineNo,\n endLine,\n href,\n i,\n l,\n label,\n labelEnd,\n oldParentType,\n res,\n start,\n str,\n terminate,\n terminatorRules,\n title,\n lines = 0,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine],\n nextLine = startLine + 1; // if it's indented more than 3 spaces, it should be a code block\n\n if (state.sCount[startLine] - state.blkIndent >= 4) {\n return false;\n }\n\n if (state.src.charCodeAt(pos) !== 0x5B\n /* [ */\n ) {\n return false;\n } // Simple check to quickly interrupt scan on [link](url) at the start of line.\n // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n\n\n while (++pos < max) {\n if (state.src.charCodeAt(pos) === 0x5D\n /* ] */\n && state.src.charCodeAt(pos - 1) !== 0x5C\n /* \\ */\n ) {\n if (pos + 1 === max) {\n return false;\n }\n\n if (state.src.charCodeAt(pos + 1) !== 0x3A\n /* : */\n ) {\n return false;\n }\n\n break;\n }\n }\n\n endLine = state.lineMax; // jump line-by-line until empty one or EOF\n\n terminatorRules = state.md.block.ruler.getRules('reference');\n oldParentType = state.parentType;\n state.parentType = 'reference';\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) {\n continue;\n } // quirk for blockquotes, this line should already be checked by that rule\n\n\n if (state.sCount[nextLine] < 0) {\n continue;\n } // Some tags can terminate paragraph without empty line.\n\n\n terminate = false;\n\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n break;\n }\n }\n\n str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n max = str.length;\n\n for (pos = 1; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n\n if (ch === 0x5B\n /* [ */\n ) {\n return false;\n } else if (ch === 0x5D\n /* ] */\n ) {\n labelEnd = pos;\n break;\n } else if (ch === 0x0A\n /* \\n */\n ) {\n lines++;\n } else if (ch === 0x5C\n /* \\ */\n ) {\n pos++;\n\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n lines++;\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A\n /* : */\n ) {\n return false;\n } // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n\n\n for (pos = labelEnd + 2; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n } // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n\n\n res = state.md.helpers.parseLinkDestination(str, pos, max);\n\n if (!res.ok) {\n return false;\n }\n\n href = state.md.normalizeLink(res.str);\n\n if (!state.md.validateLink(href)) {\n return false;\n }\n\n pos = res.pos;\n lines += res.lines; // save cursor state, we could require to rollback later\n\n destEndPos = pos;\n destEndLineNo = lines; // [label]: destination 'title'\n // ^^^ skipping those spaces\n\n start = pos;\n\n for (; pos < max; pos++) {\n ch = str.charCodeAt(pos);\n\n if (ch === 0x0A) {\n lines++;\n } else if (isSpace(ch)) {\n /*eslint no-empty:0*/\n } else {\n break;\n }\n } // [label]: destination 'title'\n // ^^^^^^^ parse this\n\n\n res = state.md.helpers.parseLinkTitle(str, pos, max);\n\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos;\n lines += res.lines;\n } else {\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n } // skip trailing spaces until the rest of the line\n\n\n while (pos < max) {\n ch = str.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n break;\n }\n\n pos++;\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = '';\n pos = destEndPos;\n lines = destEndLineNo;\n\n while (pos < max) {\n ch = str.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n break;\n }\n\n pos++;\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false;\n }\n\n label = normalizeReference(str.slice(1, labelEnd));\n\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false;\n } // Reference can not terminate anything. This check is for safety only.\n\n /*istanbul ignore if*/\n\n\n if (silent) {\n return true;\n }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {};\n }\n\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = {\n title: title,\n href: href\n };\n }\n\n state.parentType = oldParentType;\n state.line = startLine + lines + 1;\n return true;\n};","// heading (#, ##, ...)\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n var ch,\n level,\n tmp,\n token,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine]; // if it's indented more than 3 spaces, it should be a code block\n\n if (state.sCount[startLine] - state.blkIndent >= 4) {\n return false;\n }\n\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x23\n /* # */\n || pos >= max) {\n return false;\n } // count heading level\n\n\n level = 1;\n ch = state.src.charCodeAt(++pos);\n\n while (ch === 0x23\n /* # */\n && pos < max && level <= 6) {\n level++;\n ch = state.src.charCodeAt(++pos);\n }\n\n if (level > 6 || pos < max && !isSpace(ch)) {\n return false;\n }\n\n if (silent) {\n return true;\n } // Let's cut tails like ' ### ' from the end of string\n\n\n max = state.skipSpacesBack(max, pos);\n tmp = state.skipCharsBack(max, 0x23, pos); // #\n\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp;\n }\n\n state.line = startLine + 1;\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = '########'.slice(0, level);\n token.map = [startLine, state.line];\n token = state.push('inline', '', 0);\n token.content = state.src.slice(pos, max).trim();\n token.map = [startLine, state.line];\n token.children = [];\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = '########'.slice(0, level);\n return true;\n};","// lheading (---, ===)\n'use strict';\n\nmodule.exports = function lheading(state, startLine, endLine\n/*, silent*/\n) {\n var content,\n terminate,\n i,\n l,\n token,\n pos,\n max,\n level,\n marker,\n nextLine = startLine + 1,\n oldParentType,\n terminatorRules = state.md.block.ruler.getRules('paragraph'); // if it's indented more than 3 spaces, it should be a code block\n\n if (state.sCount[startLine] - state.blkIndent >= 4) {\n return false;\n }\n\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n // jump line-by-line until empty one or EOF\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) {\n continue;\n } //\n // Check for underline in setext header\n //\n\n\n if (state.sCount[nextLine] >= state.blkIndent) {\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos);\n\n if (marker === 0x2D\n /* - */\n || marker === 0x3D\n /* = */\n ) {\n pos = state.skipChars(pos, marker);\n pos = state.skipSpaces(pos);\n\n if (pos >= max) {\n level = marker === 0x3D\n /* = */\n ? 1 : 2;\n break;\n }\n }\n }\n } // quirk for blockquotes, this line should already be checked by that rule\n\n\n if (state.sCount[nextLine] < 0) {\n continue;\n } // Some tags can terminate paragraph without empty line.\n\n\n terminate = false;\n\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n break;\n }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false;\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n state.line = nextLine + 1;\n token = state.push('heading_open', 'h' + String(level), 1);\n token.markup = String.fromCharCode(marker);\n token.map = [startLine, state.line];\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [startLine, state.line - 1];\n token.children = [];\n token = state.push('heading_close', 'h' + String(level), -1);\n token.markup = String.fromCharCode(marker);\n state.parentType = oldParentType;\n return true;\n};","// HTML block\n'use strict';\n\nvar block_names = require('../common/html_blocks');\n\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE; // An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\n\n\nvar HTML_SEQUENCES = [[/^<(script|pre|style)(?=(\\s|>|$))/i, /<\\/(script|pre|style)>/i, true], [/^<!--/, /-->/, true], [/^<\\?/, /\\?>/, true], [/^<![A-Z]/, />/, true], [/^<!\\[CDATA\\[/, /\\]\\]>/, true], [new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true], [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false]];\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n var i,\n nextLine,\n token,\n lineText,\n pos = state.bMarks[startLine] + state.tShift[startLine],\n max = state.eMarks[startLine]; // if it's indented more than 3 spaces, it should be a code block\n\n if (state.sCount[startLine] - state.blkIndent >= 4) {\n return false;\n }\n\n if (!state.md.options.html) {\n return false;\n }\n\n if (state.src.charCodeAt(pos) !== 0x3C\n /* < */\n ) {\n return false;\n }\n\n lineText = state.src.slice(pos, max);\n\n for (i = 0; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) {\n break;\n }\n }\n\n if (i === HTML_SEQUENCES.length) {\n return false;\n }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2];\n }\n\n nextLine = startLine + 1; // If we are here - we detected HTML block.\n // Let's roll down till block end.\n\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) {\n break;\n }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine];\n max = state.eMarks[nextLine];\n lineText = state.src.slice(pos, max);\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) {\n nextLine++;\n }\n\n break;\n }\n }\n }\n\n state.line = nextLine;\n token = state.push('html_block', '', 0);\n token.map = [startLine, nextLine];\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n return true;\n};","// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n'use strict';\n\nmodule.exports = ['address', 'article', 'aside', 'base', 'basefont', 'blockquote', 'body', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dialog', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hr', 'html', 'iframe', 'legend', 'li', 'link', 'main', 'menu', 'menuitem', 'meta', 'nav', 'noframes', 'ol', 'optgroup', 'option', 'p', 'param', 'section', 'source', 'summary', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul'];","// Paragraph\n'use strict';\n\nmodule.exports = function paragraph(state, startLine\n/*, endLine*/\n) {\n var content,\n terminate,\n i,\n l,\n token,\n oldParentType,\n nextLine = startLine + 1,\n terminatorRules = state.md.block.ruler.getRules('paragraph'),\n endLine = state.lineMax;\n oldParentType = state.parentType;\n state.parentType = 'paragraph'; // jump line-by-line until empty one or EOF\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) {\n continue;\n } // quirk for blockquotes, this line should already be checked by that rule\n\n\n if (state.sCount[nextLine] < 0) {\n continue;\n } // Some tags can terminate paragraph without empty line.\n\n\n terminate = false;\n\n for (i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true;\n break;\n }\n }\n\n if (terminate) {\n break;\n }\n }\n\n content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n state.line = nextLine;\n token = state.push('paragraph_open', 'p', 1);\n token.map = [startLine, state.line];\n token = state.push('inline', '', 0);\n token.content = content;\n token.map = [startLine, state.line];\n token.children = [];\n token = state.push('paragraph_close', 'p', -1);\n state.parentType = oldParentType;\n return true;\n};","// Parser state class\n'use strict';\n\nvar Token = require('../token');\n\nvar isSpace = require('../common/utils').isSpace;\n\nfunction StateBlock(src, md, env, tokens) {\n var ch, s, start, pos, len, indent, offset, indent_found;\n this.src = src; // link to parser instance\n\n this.md = md;\n this.env = env; //\n // Internal state vartiables\n //\n\n this.tokens = tokens;\n this.bMarks = []; // line begin offsets for fast jumps\n\n this.eMarks = []; // line end offsets for fast jumps\n\n this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n\n this.sCount = []; // indents for each line (tabs expanded)\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n\n this.bsCount = []; // block parser variables\n\n this.blkIndent = 0; // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n\n this.line = 0; // line index in src\n\n this.lineMax = 0; // lines count\n\n this.tight = false; // loose/tight mode for lists\n\n this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n\n this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n\n this.parentType = 'root';\n this.level = 0; // renderer\n\n this.result = ''; // Create caches\n // Generate markers.\n\n s = this.src;\n indent_found = false;\n\n for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n ch = s.charCodeAt(pos);\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++;\n\n if (ch === 0x09) {\n offset += 4 - offset % 4;\n } else {\n offset++;\n }\n\n continue;\n } else {\n indent_found = true;\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) {\n pos++;\n }\n\n this.bMarks.push(start);\n this.eMarks.push(pos);\n this.tShift.push(indent);\n this.sCount.push(offset);\n this.bsCount.push(0);\n indent_found = false;\n indent = 0;\n offset = 0;\n start = pos + 1;\n }\n } // Push fake entry to simplify cache bounds checks\n\n\n this.bMarks.push(s.length);\n this.eMarks.push(s.length);\n this.tShift.push(0);\n this.sCount.push(0);\n this.bsCount.push(0);\n this.lineMax = this.bMarks.length - 1; // don't count last fake line\n} // Push new token to \"stream\".\n//\n\n\nStateBlock.prototype.push = function (type, tag, nesting) {\n var token = new Token(type, tag, nesting);\n token.block = true;\n if (nesting < 0) this.level--; // closing tag\n\n token.level = this.level;\n if (nesting > 0) this.level++; // opening tag\n\n this.tokens.push(token);\n return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n for (var max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break;\n }\n }\n\n return from;\n}; // Skip spaces from given position.\n\n\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n var ch;\n\n for (var max = this.src.length; pos < max; pos++) {\n ch = this.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n break;\n }\n }\n\n return pos;\n}; // Skip spaces from given position in reverse.\n\n\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n if (pos <= min) {\n return pos;\n }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) {\n return pos + 1;\n }\n }\n\n return pos;\n}; // Skip char codes from given position\n\n\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n for (var max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) {\n break;\n }\n }\n\n return pos;\n}; // Skip char codes reverse from given position - 1\n\n\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n if (pos <= min) {\n return pos;\n }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) {\n return pos + 1;\n }\n }\n\n return pos;\n}; // cut lines range from source.\n\n\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n var i,\n lineIndent,\n ch,\n first,\n last,\n queue,\n lineStart,\n line = begin;\n\n if (begin >= end) {\n return '';\n }\n\n queue = new Array(end - begin);\n\n for (i = 0; line < end; line++, i++) {\n lineIndent = 0;\n lineStart = first = this.bMarks[line];\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1;\n } else {\n last = this.eMarks[line];\n }\n\n while (first < last && lineIndent < indent) {\n ch = this.src.charCodeAt(first);\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n } else {\n lineIndent++;\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++;\n } else {\n break;\n }\n\n first++;\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n } else {\n queue[i] = this.src.slice(first, last);\n }\n }\n\n return queue.join('');\n}; // re-export Token class to use in block rules\n\n\nStateBlock.prototype.Token = Token;\nmodule.exports = StateBlock;","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\nvar Ruler = require('./ruler'); ////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\n\nvar _rules = [['text', require('./rules_inline/text')], ['newline', require('./rules_inline/newline')], ['escape', require('./rules_inline/escape')], ['backticks', require('./rules_inline/backticks')], ['strikethrough', require('./rules_inline/strikethrough').tokenize], ['emphasis', require('./rules_inline/emphasis').tokenize], ['link', require('./rules_inline/link')], ['image', require('./rules_inline/image')], ['autolink', require('./rules_inline/autolink')], ['html_inline', require('./rules_inline/html_inline')], ['entity', require('./rules_inline/entity')]];\nvar _rules2 = [['balance_pairs', require('./rules_inline/balance_pairs')], ['strikethrough', require('./rules_inline/strikethrough').postProcess], ['emphasis', require('./rules_inline/emphasis').postProcess], ['text_collapse', require('./rules_inline/text_collapse')]];\n/**\n * new ParserInline()\n **/\n\nfunction ParserInline() {\n var i;\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n\n this.ruler = new Ruler();\n\n for (i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1]);\n }\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n\n\n this.ruler2 = new Ruler();\n\n for (i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n }\n} // Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\n\n\nParserInline.prototype.skipToken = function (state) {\n var ok,\n i,\n pos = state.pos,\n rules = this.ruler.getRules(''),\n len = rules.length,\n maxNesting = state.md.options.maxNesting,\n cache = state.cache;\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos];\n return;\n }\n\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++;\n ok = rules[i](state, true);\n state.level--;\n\n if (ok) {\n break;\n }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax;\n }\n\n if (!ok) {\n state.pos++;\n }\n\n cache[pos] = state.pos;\n}; // Generate tokens for input range\n//\n\n\nParserInline.prototype.tokenize = function (state) {\n var ok,\n i,\n rules = this.ruler.getRules(''),\n len = rules.length,\n end = state.posMax,\n maxNesting = state.md.options.maxNesting;\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n if (state.level < maxNesting) {\n for (i = 0; i < len; i++) {\n ok = rules[i](state, false);\n\n if (ok) {\n break;\n }\n }\n }\n\n if (ok) {\n if (state.pos >= end) {\n break;\n }\n\n continue;\n }\n\n state.pending += state.src[state.pos++];\n }\n\n if (state.pending) {\n state.pushPending();\n }\n};\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\n\n\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n var i, rules, len;\n var state = new this.State(str, md, env, outTokens);\n this.tokenize(state);\n rules = this.ruler2.getRules('');\n len = rules.length;\n\n for (i = 0; i < len; i++) {\n rules[i](state);\n }\n};\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\nmodule.exports = ParserInline;","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n'use strict'; // Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n\nfunction isTerminatorChar(ch) {\n switch (ch) {\n case 0x0A\n /* \\n */\n :\n case 0x21\n /* ! */\n :\n case 0x23\n /* # */\n :\n case 0x24\n /* $ */\n :\n case 0x25\n /* % */\n :\n case 0x26\n /* & */\n :\n case 0x2A\n /* * */\n :\n case 0x2B\n /* + */\n :\n case 0x2D\n /* - */\n :\n case 0x3A\n /* : */\n :\n case 0x3C\n /* < */\n :\n case 0x3D\n /* = */\n :\n case 0x3E\n /* > */\n :\n case 0x40\n /* @ */\n :\n case 0x5B\n /* [ */\n :\n case 0x5C\n /* \\ */\n :\n case 0x5D\n /* ] */\n :\n case 0x5E\n /* ^ */\n :\n case 0x5F\n /* _ */\n :\n case 0x60\n /* ` */\n :\n case 0x7B\n /* { */\n :\n case 0x7D\n /* } */\n :\n case 0x7E\n /* ~ */\n :\n return true;\n\n default:\n return false;\n }\n}\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos;\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n if (pos === state.pos) {\n return false;\n }\n\n if (!silent) {\n state.pending += state.src.slice(state.pos, pos);\n }\n\n state.pos = pos;\n return true;\n}; // Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n};*/","// Proceess '\\n'\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function newline(state, silent) {\n var pmax,\n max,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x0A\n /* \\n */\n ) {\n return false;\n }\n\n pmax = state.pending.length - 1;\n max = state.posMax; // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n state.pending = state.pending.replace(/ +$/, '');\n state.push('hardbreak', 'br', 0);\n } else {\n state.pending = state.pending.slice(0, -1);\n state.push('softbreak', 'br', 0);\n }\n } else {\n state.push('softbreak', 'br', 0);\n }\n }\n\n pos++; // skip heading spaces for next line\n\n while (pos < max && isSpace(state.src.charCodeAt(pos))) {\n pos++;\n }\n\n state.pos = pos;\n return true;\n};","// Process escaped chars and hardbreaks\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) {\n ESCAPED.push(0);\n}\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'.split('').forEach(function (ch) {\n ESCAPED[ch.charCodeAt(0)] = 1;\n});\n\nmodule.exports = function escape(state, silent) {\n var ch,\n pos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x5C\n /* \\ */\n ) {\n return false;\n }\n\n pos++;\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (ch < 256 && ESCAPED[ch] !== 0) {\n if (!silent) {\n state.pending += state.src[pos];\n }\n\n state.pos += 2;\n return true;\n }\n\n if (ch === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0);\n }\n\n pos++; // skip leading whitespaces from next line\n\n while (pos < max) {\n ch = state.src.charCodeAt(pos);\n\n if (!isSpace(ch)) {\n break;\n }\n\n pos++;\n }\n\n state.pos = pos;\n return true;\n }\n }\n\n if (!silent) {\n state.pending += '\\\\';\n }\n\n state.pos++;\n return true;\n};","// Parse backticks\n'use strict';\n\nmodule.exports = function backtick(state, silent) {\n var start,\n max,\n marker,\n matchStart,\n matchEnd,\n token,\n pos = state.pos,\n ch = state.src.charCodeAt(pos);\n\n if (ch !== 0x60\n /* ` */\n ) {\n return false;\n }\n\n start = pos;\n pos++;\n max = state.posMax;\n\n while (pos < max && state.src.charCodeAt(pos) === 0x60\n /* ` */\n ) {\n pos++;\n }\n\n marker = state.src.slice(start, pos);\n matchStart = matchEnd = pos;\n\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1;\n\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60\n /* ` */\n ) {\n matchEnd++;\n }\n\n if (matchEnd - matchStart === marker.length) {\n if (!silent) {\n token = state.push('code_inline', 'code', 0);\n token.markup = marker;\n token.content = state.src.slice(pos, matchStart).replace(/\\n/g, ' ').replace(/^ (.+) $/, '$1');\n }\n\n state.pos = matchEnd;\n return true;\n }\n }\n\n if (!silent) {\n state.pending += marker;\n }\n\n state.pos += marker.length;\n return true;\n};","// Process [link](<to> \"stuff\")\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function link(state, silent) {\n var attrs,\n code,\n label,\n labelEnd,\n labelStart,\n pos,\n res,\n ref,\n title,\n token,\n href = '',\n oldPos = state.pos,\n max = state.posMax,\n start = state.pos,\n parseReference = true;\n\n if (state.src.charCodeAt(state.pos) !== 0x5B\n /* [ */\n ) {\n return false;\n }\n\n labelStart = state.pos + 1;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true); // parser failed to find ']', so it's not a valid link\n\n if (labelEnd < 0) {\n return false;\n }\n\n pos = labelEnd + 1;\n\n if (pos < max && state.src.charCodeAt(pos) === 0x28\n /* ( */\n ) {\n //\n // Inline link\n //\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false; // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n\n pos++;\n\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n\n if (!isSpace(code) && code !== 0x0A) {\n break;\n }\n }\n\n if (pos >= max) {\n return false;\n } // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n\n\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n } // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n\n\n start = pos;\n\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n\n if (!isSpace(code) && code !== 0x0A) {\n break;\n }\n } // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n\n\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos; // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n\n if (!isSpace(code) && code !== 0x0A) {\n break;\n }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29\n /* ) */\n ) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true;\n }\n\n pos++;\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') {\n return false;\n }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B\n /* [ */\n ) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n } // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n\n\n if (!label) {\n label = state.src.slice(labelStart, labelEnd);\n }\n\n ref = state.env.references[normalizeReference(label)];\n\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n\n href = ref.href;\n title = ref.title;\n } //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n\n\n if (!silent) {\n state.pos = labelStart;\n state.posMax = labelEnd;\n token = state.push('link_open', 'a', 1);\n token.attrs = attrs = [['href', href]];\n\n if (title) {\n attrs.push(['title', title]);\n }\n\n state.md.inline.tokenize(state);\n token = state.push('link_close', 'a', -1);\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};","// Process ![image](<src> \"title\")\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function image(state, silent) {\n var attrs,\n code,\n content,\n label,\n labelEnd,\n labelStart,\n pos,\n ref,\n res,\n title,\n token,\n tokens,\n start,\n href = '',\n oldPos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(state.pos) !== 0x21\n /* ! */\n ) {\n return false;\n }\n\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B\n /* [ */\n ) {\n return false;\n }\n\n labelStart = state.pos + 2;\n labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false); // parser failed to find ']', so it's not a valid link\n\n if (labelEnd < 0) {\n return false;\n }\n\n pos = labelEnd + 1;\n\n if (pos < max && state.src.charCodeAt(pos) === 0x28\n /* ( */\n ) {\n //\n // Inline link\n //\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++;\n\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n\n if (!isSpace(code) && code !== 0x0A) {\n break;\n }\n }\n\n if (pos >= max) {\n return false;\n } // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n\n\n start = pos;\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n\n if (res.ok) {\n href = state.md.normalizeLink(res.str);\n\n if (state.md.validateLink(href)) {\n pos = res.pos;\n } else {\n href = '';\n }\n } // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n\n\n start = pos;\n\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n\n if (!isSpace(code) && code !== 0x0A) {\n break;\n }\n } // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n\n\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n\n if (pos < max && start !== pos && res.ok) {\n title = res.str;\n pos = res.pos; // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos);\n\n if (!isSpace(code) && code !== 0x0A) {\n break;\n }\n }\n } else {\n title = '';\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29\n /* ) */\n ) {\n state.pos = oldPos;\n return false;\n }\n\n pos++;\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') {\n return false;\n }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B\n /* [ */\n ) {\n start = pos + 1;\n pos = state.md.helpers.parseLinkLabel(state, pos);\n\n if (pos >= 0) {\n label = state.src.slice(start, pos++);\n } else {\n pos = labelEnd + 1;\n }\n } else {\n pos = labelEnd + 1;\n } // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n\n\n if (!label) {\n label = state.src.slice(labelStart, labelEnd);\n }\n\n ref = state.env.references[normalizeReference(label)];\n\n if (!ref) {\n state.pos = oldPos;\n return false;\n }\n\n href = ref.href;\n title = ref.title;\n } //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n\n\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd);\n state.md.inline.parse(content, state.md, state.env, tokens = []);\n token = state.push('image', 'img', 0);\n token.attrs = attrs = [['src', href], ['alt', '']];\n token.children = tokens;\n token.content = content;\n\n if (title) {\n attrs.push(['title', title]);\n }\n }\n\n state.pos = pos;\n state.posMax = max;\n return true;\n};","// Process autolinks '<protocol:...>'\n'use strict';\n/*eslint max-len:0*/\n\nvar EMAIL_RE = /^<([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/;\nvar AUTOLINK_RE = /^<([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)>/;\n\nmodule.exports = function autolink(state, silent) {\n var tail,\n linkMatch,\n emailMatch,\n url,\n fullUrl,\n token,\n pos = state.pos;\n\n if (state.src.charCodeAt(pos) !== 0x3C\n /* < */\n ) {\n return false;\n }\n\n tail = state.src.slice(pos);\n\n if (tail.indexOf('>') < 0) {\n return false;\n }\n\n if (AUTOLINK_RE.test(tail)) {\n linkMatch = tail.match(AUTOLINK_RE);\n url = linkMatch[0].slice(1, -1);\n fullUrl = state.md.normalizeLink(url);\n\n if (!state.md.validateLink(fullUrl)) {\n return false;\n }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [['href', fullUrl]];\n token.markup = 'autolink';\n token.info = 'auto';\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += linkMatch[0].length;\n return true;\n }\n\n if (EMAIL_RE.test(tail)) {\n emailMatch = tail.match(EMAIL_RE);\n url = emailMatch[0].slice(1, -1);\n fullUrl = state.md.normalizeLink('mailto:' + url);\n\n if (!state.md.validateLink(fullUrl)) {\n return false;\n }\n\n if (!silent) {\n token = state.push('link_open', 'a', 1);\n token.attrs = [['href', fullUrl]];\n token.markup = 'autolink';\n token.info = 'auto';\n token = state.push('text', '', 0);\n token.content = state.md.normalizeLinkText(url);\n token = state.push('link_close', 'a', -1);\n token.markup = 'autolink';\n token.info = 'auto';\n }\n\n state.pos += emailMatch[0].length;\n return true;\n }\n\n return false;\n};","// Process html tags\n'use strict';\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\nfunction isLetter(ch) {\n /*eslint no-bitwise:0*/\n var lc = ch | 0x20; // to lower case\n\n return lc >= 0x61\n /* a */\n && lc <= 0x7a\n /* z */\n ;\n}\n\nmodule.exports = function html_inline(state, silent) {\n var ch,\n match,\n max,\n token,\n pos = state.pos;\n\n if (!state.md.options.html) {\n return false;\n } // Check start\n\n\n max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x3C\n /* < */\n || pos + 2 >= max) {\n return false;\n } // Quick fail on second char\n\n\n ch = state.src.charCodeAt(pos + 1);\n\n if (ch !== 0x21\n /* ! */\n && ch !== 0x3F\n /* ? */\n && ch !== 0x2F\n /* / */\n && !isLetter(ch)) {\n return false;\n }\n\n match = state.src.slice(pos).match(HTML_TAG_RE);\n\n if (!match) {\n return false;\n }\n\n if (!silent) {\n token = state.push('html_inline', '', 0);\n token.content = state.src.slice(pos, pos + match[0].length);\n }\n\n state.pos += match[0].length;\n return true;\n};","// Process html entity - &#123;, &#xAF;, &quot;, ...\n'use strict';\n\nvar entities = require('../common/entities');\n\nvar has = require('../common/utils').has;\n\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\n\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\nmodule.exports = function entity(state, silent) {\n var ch,\n code,\n match,\n pos = state.pos,\n max = state.posMax;\n\n if (state.src.charCodeAt(pos) !== 0x26\n /* & */\n ) {\n return false;\n }\n\n if (pos + 1 < max) {\n ch = state.src.charCodeAt(pos + 1);\n\n if (ch === 0x23\n /* # */\n ) {\n match = state.src.slice(pos).match(DIGITAL_RE);\n\n if (match) {\n if (!silent) {\n code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n }\n\n state.pos += match[0].length;\n return true;\n }\n } else {\n match = state.src.slice(pos).match(NAMED_RE);\n\n if (match) {\n if (has(entities, match[1])) {\n if (!silent) {\n state.pending += entities[match[1]];\n }\n\n state.pos += match[0].length;\n return true;\n }\n }\n }\n }\n\n if (!silent) {\n state.pending += '&';\n }\n\n state.pos++;\n return true;\n};","// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\nfunction processDelimiters(state, delimiters) {\n var closerIdx,\n openerIdx,\n closer,\n opener,\n minOpenerIdx,\n newMinOpenerIdx,\n isOddMatch,\n lastJump,\n openersBottom = {},\n max = delimiters.length;\n\n for (closerIdx = 0; closerIdx < max; closerIdx++) {\n closer = delimiters[closerIdx]; // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n\n closer.length = closer.length || 0;\n if (!closer.close) continue; // Previously calculated lower bounds (previous fails)\n // for each marker and each delimiter length modulo 3.\n\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [-1, -1, -1];\n }\n\n minOpenerIdx = openersBottom[closer.marker][closer.length % 3];\n newMinOpenerIdx = -1;\n openerIdx = closerIdx - closer.jump - 1;\n\n for (; openerIdx > minOpenerIdx; openerIdx -= opener.jump + 1) {\n opener = delimiters[openerIdx];\n if (opener.marker !== closer.marker) continue;\n if (newMinOpenerIdx === -1) newMinOpenerIdx = openerIdx;\n\n if (opener.open && opener.end < 0 && opener.level === closer.level) {\n isOddMatch = false; // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true;\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? delimiters[openerIdx - 1].jump + 1 : 0;\n closer.jump = closerIdx - openerIdx + lastJump;\n closer.open = false;\n opener.end = closerIdx;\n opener.jump = lastJump;\n opener.close = false;\n newMinOpenerIdx = -1;\n break;\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.length || 0) % 3] = newMinOpenerIdx;\n }\n }\n}\n\nmodule.exports = function link_pairs(state) {\n var curr,\n tokens_meta = state.tokens_meta,\n max = state.tokens_meta.length;\n processDelimiters(state, state.delimiters);\n\n for (curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(state, tokens_meta[curr].delimiters);\n }\n }\n};","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\nmodule.exports = function text_collapse(state) {\n var curr,\n last,\n level = 0,\n tokens = state.tokens,\n max = state.tokens.length;\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level--; // closing tag\n\n tokens[curr].level = level;\n if (tokens[curr].nesting > 0) level++; // opening tag\n\n if (tokens[curr].type === 'text' && curr + 1 < max && tokens[curr + 1].type === 'text') {\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n } else {\n if (curr !== last) {\n tokens[last] = tokens[curr];\n }\n\n last++;\n }\n }\n\n if (curr !== last) {\n tokens.length = last;\n }\n};","// Inline parser state\n'use strict';\n\nvar Token = require('../token');\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\n\nvar isPunctChar = require('../common/utils').isPunctChar;\n\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nfunction StateInline(src, md, env, outTokens) {\n this.src = src;\n this.env = env;\n this.md = md;\n this.tokens = outTokens;\n this.tokens_meta = Array(outTokens.length);\n this.pos = 0;\n this.posMax = this.src.length;\n this.level = 0;\n this.pending = '';\n this.pendingLevel = 0; // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n\n this.cache = {}; // List of emphasis-like delimiters for current tag\n\n this.delimiters = []; // Stack of delimiter lists for upper level tags\n\n this._prev_delimiters = [];\n} // Flush pending text\n//\n\n\nStateInline.prototype.pushPending = function () {\n var token = new Token('text', '', 0);\n token.content = this.pending;\n token.level = this.pendingLevel;\n this.tokens.push(token);\n this.pending = '';\n return token;\n}; // Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\n\n\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending();\n }\n\n var token = new Token(type, tag, nesting);\n var token_meta = null;\n\n if (nesting < 0) {\n // closing tag\n this.level--;\n this.delimiters = this._prev_delimiters.pop();\n }\n\n token.level = this.level;\n\n if (nesting > 0) {\n // opening tag\n this.level++;\n\n this._prev_delimiters.push(this.delimiters);\n\n this.delimiters = [];\n token_meta = {\n delimiters: this.delimiters\n };\n }\n\n this.pendingLevel = this.level;\n this.tokens.push(token);\n this.tokens_meta.push(token_meta);\n return token;\n}; // Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\n\n\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n var pos = start,\n lastChar,\n nextChar,\n count,\n can_open,\n can_close,\n isLastWhiteSpace,\n isLastPunctChar,\n isNextWhiteSpace,\n isNextPunctChar,\n left_flanking = true,\n right_flanking = true,\n max = this.posMax,\n marker = this.src.charCodeAt(start); // treat beginning of the line as a whitespace\n\n lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n while (pos < max && this.src.charCodeAt(pos) === marker) {\n pos++;\n }\n\n count = pos - start; // treat end of the line as a whitespace\n\n nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n isLastWhiteSpace = isWhiteSpace(lastChar);\n isNextWhiteSpace = isWhiteSpace(nextChar);\n\n if (isNextWhiteSpace) {\n left_flanking = false;\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n left_flanking = false;\n }\n }\n\n if (isLastWhiteSpace) {\n right_flanking = false;\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n right_flanking = false;\n }\n }\n\n if (!canSplitWord) {\n can_open = left_flanking && (!right_flanking || isLastPunctChar);\n can_close = right_flanking && (!left_flanking || isNextPunctChar);\n } else {\n can_open = left_flanking;\n can_close = right_flanking;\n }\n\n return {\n can_open: can_open,\n can_close: can_close,\n length: count\n };\n}; // re-export Token class to use in block rules\n\n\nStateInline.prototype.Token = Token;\nmodule.exports = StateInline;","'use strict'; ////////////////////////////////////////////////////////////////////////////////\n// Helpers\n// Merge objects\n//\n\nfunction assign(obj\n/*from1, from2, from3, ...*/\n) {\n var sources = Array.prototype.slice.call(arguments, 1);\n sources.forEach(function (source) {\n if (!source) {\n return;\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n return obj;\n}\n\nfunction _class(obj) {\n return Object.prototype.toString.call(obj);\n}\n\nfunction isString(obj) {\n return _class(obj) === '[object String]';\n}\n\nfunction isObject(obj) {\n return _class(obj) === '[object Object]';\n}\n\nfunction isRegExp(obj) {\n return _class(obj) === '[object RegExp]';\n}\n\nfunction isFunction(obj) {\n return _class(obj) === '[object Function]';\n}\n\nfunction escapeRE(str) {\n return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&');\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n};\n\nfunction isOptionsObj(obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n return acc || defaultOptions.hasOwnProperty(k);\n }, false);\n}\n\nvar defaultSchemas = {\n 'http:': {\n validate: function validate(text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp('^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i');\n }\n\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length;\n }\n\n return 0;\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function validate(text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp('^' + self.re.src_auth + // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' + self.re.src_port + self.re.src_host_terminator + self.re.src_path, 'i');\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') {\n return 0;\n }\n\n if (pos >= 3 && text[pos - 3] === '/') {\n return 0;\n }\n\n return tail.match(self.re.no_http)[0].length;\n }\n\n return 0;\n }\n },\n 'mailto:': {\n validate: function validate(text, pos, self) {\n var tail = text.slice(pos);\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp('^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i');\n }\n\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length;\n }\n\n return 0;\n }\n }\n};\n/*eslint-disable max-len*/\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\n\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]'; // DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\n\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');\n/*eslint-enable max-len*/\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n self.__index__ = -1;\n self.__text_cache__ = '';\n}\n\nfunction createValidator(re) {\n return function (text, pos) {\n var tail = text.slice(pos);\n\n if (re.test(tail)) {\n return tail.match(re)[0].length;\n }\n\n return 0;\n };\n}\n\nfunction createNormalizer() {\n return function (match, self) {\n self.normalize(match);\n };\n} // Schemas compiler. Build regexps.\n//\n\n\nfunction compile(self) {\n // Load & clone RE patterns.\n var re = self.re = require('./lib/re')(self.__opts__); // Define dynamic patterns\n\n\n var tlds = self.__tlds__.slice();\n\n self.onCompile();\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re);\n }\n\n tlds.push(re.src_xn);\n re.src_tlds = tlds.join('|');\n\n function untpl(tpl) {\n return tpl.replace('%TLDS%', re.src_tlds);\n }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i'); //\n // Compile each schema\n //\n\n var aliases = [];\n self.__compiled__ = {}; // Reset compiled data\n\n function schemaError(name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n var val = self.__schemas__[name]; // skip disabled methods\n\n if (val === null) {\n return;\n }\n\n var compiled = {\n validate: null,\n link: null\n };\n self.__compiled__[name] = compiled;\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate);\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate;\n } else {\n schemaError(name, val);\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize;\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer();\n } else {\n schemaError(name, val);\n }\n\n return;\n }\n\n if (isString(val)) {\n aliases.push(name);\n return;\n }\n\n schemaError(name, val);\n }); //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return;\n }\n\n self.__compiled__[alias].validate = self.__compiled__[self.__schemas__[alias]].validate;\n self.__compiled__[alias].normalize = self.__compiled__[self.__schemas__[alias]].normalize;\n }); //\n // Fake record for guessed links\n //\n\n self.__compiled__[''] = {\n validate: null,\n normalize: createNormalizer()\n }; //\n // Build schema condition\n //\n\n var slist = Object.keys(self.__compiled__).filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name];\n }).map(escapeRE).join('|'); // (?!_) cause 1.5x slowdown\n\n self.re.schema_test = RegExp(\"(^|(?!_)(?:[><\\uFF5C]|\" + re.src_ZPCc + '))(' + slist + ')', 'i');\n self.re.schema_search = RegExp(\"(^|(?!_)(?:[><\\uFF5C]|\" + re.src_ZPCc + '))(' + slist + ')', 'ig');\n self.re.pretest = RegExp('(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@', 'i'); //\n // Cleanup\n //\n\n resetScanCache(self);\n}\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\n\n\nfunction Match(self, shift) {\n var start = self.__index__,\n end = self.__last_index__,\n text = self.__text_cache__.slice(start, end);\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n\n\n this.schema = self.__schema__.toLowerCase();\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n\n this.index = start + shift;\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n\n this.lastIndex = end + shift;\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n\n this.raw = text;\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n\n this.text = text;\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n\n this.url = text;\n}\n\nfunction createMatch(self, shift) {\n var match = new Match(self, shift);\n\n self.__compiled__[match.schema].normalize(match, self);\n\n return match;\n}\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\n\n\nfunction LinkifyIt(schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options);\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas;\n schemas = {};\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options); // Cache last tested result. Used to skip repeating steps on next `match` call.\n\n this.__index__ = -1;\n this.__last_index__ = -1; // Next scan position\n\n this.__schema__ = '';\n this.__text_cache__ = '';\n this.__schemas__ = assign({}, defaultSchemas, schemas);\n this.__compiled__ = {};\n this.__tlds__ = tlds_default;\n this.__tlds_replaced__ = false;\n this.re = {};\n compile(this);\n}\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\n\n\nLinkifyIt.prototype.add = function add(schema, definition) {\n this.__schemas__[schema] = definition;\n compile(this);\n return this;\n};\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\n\n\nLinkifyIt.prototype.set = function set(options) {\n this.__opts__ = assign(this.__opts__, options);\n return this;\n};\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\n\n\nLinkifyIt.prototype.test = function test(text) {\n // Reset scan cache\n this.__text_cache__ = text;\n this.__index__ = -1;\n\n if (!text.length) {\n return false;\n }\n\n var m, ml, me, len, shift, next, re, tld_pos, at_pos; // try to scan for link with schema - that's the most simple rule\n\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search;\n re.lastIndex = 0;\n\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex);\n\n if (len) {\n this.__schema__ = m[2];\n this.__index__ = m.index + m[1].length;\n this.__last_index__ = m.index + m[0].length + len;\n break;\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test);\n\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n shift = ml.index + ml[1].length;\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = '';\n this.__index__ = shift;\n this.__last_index__ = ml.index + ml[0].length;\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@');\n\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n shift = me.index + me[1].length;\n next = me.index + me[0].length;\n\n if (this.__index__ < 0 || shift < this.__index__ || shift === this.__index__ && next > this.__last_index__) {\n this.__schema__ = 'mailto:';\n this.__index__ = shift;\n this.__last_index__ = next;\n }\n }\n }\n }\n\n return this.__index__ >= 0;\n};\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\n\n\nLinkifyIt.prototype.pretest = function pretest(text) {\n return this.re.pretest.test(text);\n};\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\n\n\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0;\n }\n\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\n\n\nLinkifyIt.prototype.match = function match(text) {\n var shift = 0,\n result = []; // Try to take previous element from cache, if .test() called before\n\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift));\n shift = this.__last_index__;\n } // Cut head if cache was used\n\n\n var tail = shift ? text.slice(shift) : text; // Scan string until end reached\n\n while (this.test(tail)) {\n result.push(createMatch(this, shift));\n tail = tail.slice(this.__last_index__);\n shift += this.__last_index__;\n }\n\n if (result.length) {\n return result;\n }\n\n return null;\n};\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\n\n\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n list = Array.isArray(list) ? list : [list];\n\n if (!keepOld) {\n this.__tlds__ = list.slice();\n this.__tlds_replaced__ = true;\n compile(this);\n return this;\n }\n\n this.__tlds__ = this.__tlds__.concat(list).sort().filter(function (el, idx, arr) {\n return el !== arr[idx - 1];\n }).reverse();\n compile(this);\n return this;\n};\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\n\n\nLinkifyIt.prototype.normalize = function normalize(match) {\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n if (!match.schema) {\n match.url = 'http://' + match.url;\n }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url;\n }\n};\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\n\n\nLinkifyIt.prototype.onCompile = function onCompile() {};\n\nmodule.exports = LinkifyIt;","'use strict';\n\nmodule.exports = function (opts) {\n var re = {}; // Use direct extract instead of `regenerate` to reduse browserified size\n\n re.src_Any = require('uc.micro/properties/Any/regex').source;\n re.src_Cc = require('uc.micro/categories/Cc/regex').source;\n re.src_Z = require('uc.micro/categories/Z/regex').source;\n re.src_P = require('uc.micro/categories/P/regex').source; // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n\n re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join('|'); // \\p{\\Z\\Cc} (white spaces + control)\n\n re.src_ZCc = [re.src_Z, re.src_Cc].join('|'); // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n\n var text_separators = \"[><\\uFF5C]\"; // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')'; // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n ////////////////////////////////////////////////////////////////////////////////\n\n re.src_ip4 = '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'; // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n re.src_port = '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n re.src_host_terminator = '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n re.src_path = '(?:' + '[/?#]' + '(?:' + '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-]).|' + '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' + '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' + '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' + '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' + \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" + \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' + // allow `I'm_king` if no pair found\n '\\\\.{2,4}[a-zA-Z0-9%/]|' + // github has ... in commit range links,\n // google has .... in links (issue #66)\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // until more examples found.\n '\\\\.(?!' + re.src_ZCc + '|[.]).|' + (opts && opts['---'] ? '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n : '\\\\-+|') + '\\\\,(?!' + re.src_ZCc + ').|' + // allow `,,,` in paths\n '\\\\!(?!' + re.src_ZCc + '|[!]).|' + '\\\\?(?!' + re.src_ZCc + '|[?]).' + ')+' + '|\\\\/' + ')?'; // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n\n re.src_email_name = '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n re.src_xn = 'xn--[a-z0-9\\\\-]{1,59}'; // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root = // Allow letters & digits (http://test1)\n '(?:' + re.src_xn + '|' + re.src_pseudo_letter + '{1,63}' + ')';\n re.src_domain = '(?:' + re.src_xn + '|' + '(?:' + re.src_pseudo_letter + ')' + '|' + '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' + ')';\n re.src_host = '(?:' + // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain\n /*_root*/\n + ')' + ')';\n re.tpl_host_fuzzy = '(?:' + re.src_ip4 + '|' + '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' + ')';\n re.tpl_host_no_ip_fuzzy = '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n re.src_host_strict = re.src_host + re.src_host_terminator;\n re.tpl_host_fuzzy_strict = re.tpl_host_fuzzy + re.src_host_terminator;\n re.src_host_port_strict = re.src_host + re.src_port + re.src_host_terminator;\n re.tpl_host_port_fuzzy_strict = re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n re.tpl_host_port_no_ip_fuzzy_strict = re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator; ////////////////////////////////////////////////////////////////////////////////\n // Main rules\n // Rude test fuzzy links by host, for quick deny\n\n re.tpl_host_fuzzy_test = 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n re.tpl_email_fuzzy = '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' + '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n re.tpl_link_fuzzy = // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n \"(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uFF5C]|\" + re.src_ZPCc + '))' + \"((?![$+<=>^`|\\uFF5C])\" + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n re.tpl_link_no_ip_fuzzy = // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n \"(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uFF5C]|\" + re.src_ZPCc + '))' + \"((?![$+<=>^`|\\uFF5C])\" + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n return re;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*! https://mths.be/punycode v1.4.1 by @mathias */\n;\n\n(function (root) {\n /** Detect free variables */\n var freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n var freeModule = (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n var freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global;\n\n if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal) {\n root = freeGlobal;\n }\n /**\n * The `punycode` object.\n * @name punycode\n * @type Object\n */\n\n\n var punycode,\n\n /** Highest positive signed 32-bit float value */\n maxInt = 2147483647,\n // aka. 0x7FFFFFFF or 2^31-1\n\n /** Bootstring parameters */\n base = 36,\n tMin = 1,\n tMax = 26,\n skew = 38,\n damp = 700,\n initialBias = 72,\n initialN = 128,\n // 0x80\n delimiter = '-',\n // '\\x2D'\n\n /** Regular expressions */\n regexPunycode = /^xn--/,\n regexNonASCII = /[^\\x20-\\x7E]/,\n // unprintable ASCII chars + non-ASCII chars\n regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g,\n // RFC 3490 separators\n\n /** Error messages */\n errors = {\n 'overflow': 'Overflow: input needs wider integers to process',\n 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n 'invalid-input': 'Invalid input'\n },\n\n /** Convenience shortcuts */\n baseMinusTMin = base - tMin,\n floor = Math.floor,\n stringFromCharCode = String.fromCharCode,\n\n /** Temporary variable */\n key;\n /*--------------------------------------------------------------------------*/\n\n /**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\n\n function error(type) {\n throw new RangeError(errors[type]);\n }\n /**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\n\n\n function map(array, fn) {\n var length = array.length;\n var result = [];\n\n while (length--) {\n result[length] = fn(array[length]);\n }\n\n return result;\n }\n /**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\n\n\n function mapDomain(string, fn) {\n var parts = string.split('@');\n var result = '';\n\n if (parts.length > 1) {\n // In email addresses, only the domain name should be punycoded. Leave\n // the local part (i.e. everything up to `@`) intact.\n result = parts[0] + '@';\n string = parts[1];\n } // Avoid `split(regex)` for IE8 compatibility. See #17.\n\n\n string = string.replace(regexSeparators, '\\x2E');\n var labels = string.split('.');\n var encoded = map(labels, fn).join('.');\n return result + encoded;\n }\n /**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\n\n\n function ucs2decode(string) {\n var output = [],\n counter = 0,\n length = string.length,\n value,\n extra;\n\n while (counter < length) {\n value = string.charCodeAt(counter++);\n\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // high surrogate, and there is a next character\n extra = string.charCodeAt(counter++);\n\n if ((extra & 0xFC00) == 0xDC00) {\n // low surrogate\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // unmatched surrogate; only append this code unit, in case the next\n // code unit is the high surrogate of a surrogate pair\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n\n return output;\n }\n /**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\n\n\n function ucs2encode(array) {\n return map(array, function (value) {\n var output = '';\n\n if (value > 0xFFFF) {\n value -= 0x10000;\n output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n value = 0xDC00 | value & 0x3FF;\n }\n\n output += stringFromCharCode(value);\n return output;\n }).join('');\n }\n /**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\n\n\n function basicToDigit(codePoint) {\n if (codePoint - 48 < 10) {\n return codePoint - 22;\n }\n\n if (codePoint - 65 < 26) {\n return codePoint - 65;\n }\n\n if (codePoint - 97 < 26) {\n return codePoint - 97;\n }\n\n return base;\n }\n /**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\n\n\n function digitToBasic(digit, flag) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n }\n /**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\n\n\n function adapt(delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n\n for (;\n /* no initialization */\n delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n }\n /**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\n\n\n function decode(input) {\n // Don't use UCS-2\n var output = [],\n inputLength = input.length,\n out,\n i = 0,\n n = initialN,\n bias = initialBias,\n basic,\n j,\n index,\n oldi,\n w,\n k,\n digit,\n t,\n\n /** Cached calculation results */\n baseMinusT; // Handle the basic code points: let `basic` be the number of input code\n // points before the last delimiter, or `0` if there is none, then copy\n // the first basic code points to the output.\n\n basic = input.lastIndexOf(delimiter);\n\n if (basic < 0) {\n basic = 0;\n }\n\n for (j = 0; j < basic; ++j) {\n // if it's not a basic code point\n if (input.charCodeAt(j) >= 0x80) {\n error('not-basic');\n }\n\n output.push(input.charCodeAt(j));\n } // Main decoding loop: start just after the last delimiter if any basic code\n // points were copied; start at the beginning otherwise.\n\n\n for (index = basic > 0 ? basic + 1 : 0; index < inputLength;)\n /* no final expression */\n {\n // `index` is the index of the next character to be consumed.\n // Decode a generalized variable-length integer into `delta`,\n // which gets added to `i`. The overflow checking is easier\n // if we increase `i` as we go, then subtract off its starting\n // value at the end to obtain `delta`.\n for (oldi = i, w = 1, k = base;;\n /* no condition */\n k += base) {\n if (index >= inputLength) {\n error('invalid-input');\n }\n\n digit = basicToDigit(input.charCodeAt(index++));\n\n if (digit >= base || digit > floor((maxInt - i) / w)) {\n error('overflow');\n }\n\n i += digit * w;\n t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n if (digit < t) {\n break;\n }\n\n baseMinusT = base - t;\n\n if (w > floor(maxInt / baseMinusT)) {\n error('overflow');\n }\n\n w *= baseMinusT;\n }\n\n out = output.length + 1;\n bias = adapt(i - oldi, out, oldi == 0); // `i` was supposed to wrap around from `out` to `0`,\n // incrementing `n` each time, so we'll fix that now:\n\n if (floor(i / out) > maxInt - n) {\n error('overflow');\n }\n\n n += floor(i / out);\n i %= out; // Insert `n` at position `i` of the output\n\n output.splice(i++, 0, n);\n }\n\n return ucs2encode(output);\n }\n /**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\n\n\n function encode(input) {\n var n,\n delta,\n handledCPCount,\n basicLength,\n bias,\n j,\n m,\n q,\n k,\n t,\n currentValue,\n output = [],\n\n /** `inputLength` will hold the number of code points in `input`. */\n inputLength,\n\n /** Cached calculation results */\n handledCPCountPlusOne,\n baseMinusT,\n qMinusT; // Convert the input in UCS-2 to Unicode\n\n input = ucs2decode(input); // Cache the length\n\n inputLength = input.length; // Initialize the state\n\n n = initialN;\n delta = 0;\n bias = initialBias; // Handle the basic code points\n\n for (j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n handledCPCount = basicLength = output.length; // `handledCPCount` is the number of code points that have been handled;\n // `basicLength` is the number of basic code points.\n // Finish the basic string - if it is not empty - with a delimiter\n\n if (basicLength) {\n output.push(delimiter);\n } // Main encoding loop:\n\n\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next\n // larger one:\n for (m = maxInt, j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n } // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n // but guard against overflow\n\n\n handledCPCountPlusOne = handledCPCount + 1;\n\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n error('overflow');\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n\n if (currentValue < n && ++delta > maxInt) {\n error('overflow');\n }\n\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer\n for (q = delta, k = base;;\n /* no condition */\n k += base) {\n t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n if (q < t) {\n break;\n }\n\n qMinusT = q - t;\n baseMinusT = base - t;\n output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q, 0)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n\n return output.join('');\n }\n /**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\n\n\n function toUnicode(input) {\n return mapDomain(input, function (string) {\n return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n });\n }\n /**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\n\n\n function toASCII(input) {\n return mapDomain(input, function (string) {\n return regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n });\n }\n /*--------------------------------------------------------------------------*/\n\n /** Define the public API */\n\n\n punycode = {\n /**\n * A string representing the current Punycode.js version number.\n * @memberOf punycode\n * @type String\n */\n 'version': '1.4.1',\n\n /**\n * An object of methods to convert from JavaScript's internal character\n * representation (UCS-2) to Unicode code points, and back.\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode\n * @type Object\n */\n 'ucs2': {\n 'decode': ucs2decode,\n 'encode': ucs2encode\n },\n 'decode': decode,\n 'encode': encode,\n 'toASCII': toASCII,\n 'toUnicode': toUnicode\n };\n /** Expose `punycode` */\n // Some AMD build optimizers, like r.js, check for specific condition patterns\n // like the following:\n\n if (typeof define == 'function' && _typeof(define.amd) == 'object' && define.amd) {\n define('punycode', function () {\n return punycode;\n });\n } else if (freeExports && freeModule) {\n if (module.exports == freeExports) {\n // in Node.js, io.js, or RingoJS v0.8.0+\n freeModule.exports = punycode;\n } else {\n // in Narwhal or RingoJS v0.7.0-\n for (key in punycode) {\n punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n }\n }\n } else {\n // in Rhino or a web browser\n root.punycode = punycode;\n }\n})(this);","// markdown-it default options\n'use strict';\n\nmodule.exports = {\n options: {\n html: false,\n // Enable HTML tags in source\n xhtmlOut: false,\n // Use '/' to close single tags (<br />)\n breaks: false,\n // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-',\n // CSS language prefix for fenced blocks\n linkify: false,\n // autoconvert URL-like texts to links\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '\\xA0', '\\xA0'] for French (including nbsp).\n quotes: \"\\u201C\\u201D\\u2018\\u2019\",\n\n /* “”‘’ */\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n maxNesting: 100 // Internal protection, recursion limit\n\n },\n components: {\n core: {},\n block: {},\n inline: {}\n }\n};","// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n'use strict';\n\nmodule.exports = {\n options: {\n html: false,\n // Enable HTML tags in source\n xhtmlOut: false,\n // Use '/' to close single tags (<br />)\n breaks: false,\n // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-',\n // CSS language prefix for fenced blocks\n linkify: false,\n // autoconvert URL-like texts to links\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '\\xA0', '\\xA0'] for French (including nbsp).\n quotes: \"\\u201C\\u201D\\u2018\\u2019\",\n\n /* “”‘’ */\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n maxNesting: 20 // Internal protection, recursion limit\n\n },\n components: {\n core: {\n rules: ['normalize', 'block', 'inline']\n },\n block: {\n rules: ['paragraph']\n },\n inline: {\n rules: ['text'],\n rules2: ['balance_pairs', 'text_collapse']\n }\n }\n};","// Commonmark default options\n'use strict';\n\nmodule.exports = {\n options: {\n html: true,\n // Enable HTML tags in source\n xhtmlOut: true,\n // Use '/' to close single tags (<br />)\n breaks: false,\n // Convert '\\n' in paragraphs into <br>\n langPrefix: 'language-',\n // CSS language prefix for fenced blocks\n linkify: false,\n // autoconvert URL-like texts to links\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '\\xA0', '\\xA0'] for French (including nbsp).\n quotes: \"\\u201C\\u201D\\u2018\\u2019\",\n\n /* “”‘’ */\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n maxNesting: 20 // Internal protection, recursion limit\n\n },\n components: {\n core: {\n rules: ['normalize', 'block', 'inline']\n },\n block: {\n rules: ['blockquote', 'code', 'fence', 'heading', 'hr', 'html_block', 'lheading', 'list', 'reference', 'paragraph']\n },\n inline: {\n rules: ['autolink', 'backticks', 'emphasis', 'entity', 'escape', 'html_inline', 'image', 'link', 'newline', 'text'],\n rules2: ['balance_pairs', 'emphasis', 'text_collapse']\n }\n }\n};","// Lista de equivalencias entre Date#getTimezoneOffset de JS y\n// MetadataEvent\nconst timeZoneOffsets = {\n '720': '-12:00',\n '660': '-11:00',\n '600': '-10:00',\n '570': '-09:30',\n '540': '-09:00',\n '480': '-08:00',\n '420': '-07:00',\n '360': '-06:00',\n '300': '-05:00',\n '240': '-04:00',\n '210': '-03:30',\n '180': '-03:00',\n '120': '-02:00',\n '60': '-01:00',\n '0': '00:00',\n '-60': '+01:00',\n '-120': '+02:00',\n '-180': '+03:00',\n '-210': '+03:30',\n '-240': '+04:00',\n '-270': '+04:30',\n '-300': '+05:00',\n '-330': '+05:30',\n '-345': '+05:45',\n '-360': '+06:00',\n '-390': '+06:30',\n '-420': '+07:00',\n '-480': '+08:00',\n '-525': '+08:45',\n '-540': '+09:00',\n '-570': '+09:30',\n '-600': '+10:00',\n '-630': '+10:30',\n '-660': '+11:00',\n '-720': '+12:00',\n '-765': '+12:45',\n '-780': '+13:00',\n '-840': '+14:00'\n};\n\n// Obtiene el huso horario local \nconst timeZoneOffset = timeZoneOffsets[(new Date).getTimezoneOffset().toString()];\n\ndocument.addEventListener('turbolinks:load', () => {\n // Aplicar el huso horario descubierto en los campos de evento solo\n // cuando estamos creando un artículo.\n document.querySelectorAll('.new .event .zone select').forEach(zone => zone.value = timeZoneOffset);\n})\n","document.addEventListener('turbolinks:load', () => {\n document.querySelectorAll('a[href^=\"#\"]').forEach(a => a.dataset.turbolinks = false)\n})\n","document.addEventListener('turbolinks:load', () => {\n // Al enviar el formulario del artículo, aplicar la validación\n // localmente y actualizar los comentarios para lectores de pantalla.\n document.querySelectorAll('form').forEach(form => {\n form.addEventListener('submit', event => {\n const invalid_help = form.querySelectorAll('.invalid-help')\n const sending_help = form.querySelectorAll('.sending-help')\n\n invalid_help.forEach(i => i.classList.add('d-none'))\n sending_help.forEach(i => i.classList.add('d-none'))\n\n form.querySelectorAll('[aria-invalid=\"true\"]').forEach(aria => {\n aria.setAttribute('aria-invalid', false)\n aria.setAttribute('aria-describedby', aria.parentElement.querySelector('.feedback').id)\n })\n\n if (form.checkValidity() === false) {\n event.preventDefault()\n event.stopPropagation()\n\n invalid_help.forEach(i => i.classList.remove('d-none'))\n\n form.querySelectorAll(':invalid').forEach(invalid => {\n invalid.setAttribute('aria-invalid', true)\n invalid.setAttribute('aria-describedby', invalid.parentElement.querySelector('.invalid-feedback').id)\n })\n } else {\n sending_help.forEach(i => i.classList.remove('d-none'))\n }\n\n form.classList.add('was-validated')\n })\n })\n})\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar FILTERED = '[Filtered]';\nvar MAX_OBJ_LENGTH = 128; // jsonifyNotice serializes notice to JSON and truncates params,\n// environment and session keys.\n\nexport function jsonifyNotice(notice, _a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.maxLength,\n maxLength = _c === void 0 ? 64000 : _c,\n _d = _b.keysBlocklist,\n keysBlocklist = _d === void 0 ? [] : _d;\n\n if (notice.errors) {\n for (var i = 0; i < notice.errors.length; i++) {\n var t = new Truncator({\n keysBlocklist: keysBlocklist\n });\n notice.errors[i] = t.truncate(notice.errors[i]);\n }\n }\n\n var s = '';\n var keys = ['context', 'params', 'environment', 'session'];\n\n for (var level = 0; level < 8; level++) {\n var opts = {\n level: level,\n keysBlocklist: keysBlocklist\n };\n\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var obj = notice[key];\n\n if (obj) {\n notice[key] = truncate(obj, opts);\n }\n }\n\n s = JSON.stringify(notice);\n\n if (s.length < maxLength) {\n return s;\n }\n }\n\n var params = {\n json: s.slice(0, Math.floor(maxLength / 2)) + '...'\n };\n keys.push('errors');\n\n for (var _e = 0, keys_2 = keys; _e < keys_2.length; _e++) {\n var key = keys_2[_e];\n var obj = notice[key];\n\n if (!obj) {\n continue;\n }\n\n s = JSON.stringify(obj);\n params[key] = s.length;\n }\n\n var err = new Error(\"airbrake: notice exceeds max length and can't be truncated\");\n err.params = params;\n throw err;\n}\n\nfunction scale(num, level) {\n return num >> level || 1;\n}\n\nvar Truncator =\n/** @class */\nfunction () {\n function Truncator(opts) {\n this.maxStringLength = 1024;\n this.maxObjectLength = MAX_OBJ_LENGTH;\n this.maxArrayLength = MAX_OBJ_LENGTH;\n this.maxDepth = 8;\n this.keys = [];\n this.keysBlocklist = [];\n this.seen = [];\n var level = opts.level || 0;\n this.keysBlocklist = opts.keysBlocklist || [];\n this.maxStringLength = scale(this.maxStringLength, level);\n this.maxObjectLength = scale(this.maxObjectLength, level);\n this.maxArrayLength = scale(this.maxArrayLength, level);\n this.maxDepth = scale(this.maxDepth, level);\n }\n\n Truncator.prototype.truncate = function (value, key, depth) {\n if (key === void 0) {\n key = '';\n }\n\n if (depth === void 0) {\n depth = 0;\n }\n\n if (value === null || value === undefined) {\n return value;\n }\n\n switch (_typeof(value)) {\n case 'boolean':\n case 'number':\n case 'function':\n return value;\n\n case 'string':\n return this.truncateString(value);\n\n case 'object':\n break;\n\n default:\n return this.truncateString(String(value));\n }\n\n if (value instanceof String) {\n return this.truncateString(value.toString());\n }\n\n if (value instanceof Boolean || value instanceof Number || value instanceof Date || value instanceof RegExp) {\n return value;\n }\n\n if (value instanceof Error) {\n return this.truncateString(value.toString());\n }\n\n if (this.seen.indexOf(value) >= 0) {\n return \"[Circular \" + this.getPath(value) + \"]\";\n }\n\n var type = objectType(value);\n depth++;\n\n if (depth > this.maxDepth) {\n return \"[Truncated \" + type + \"]\";\n }\n\n this.keys.push(key);\n this.seen.push(value);\n\n switch (type) {\n case 'Array':\n return this.truncateArray(value, depth);\n\n case 'Object':\n return this.truncateObject(value, depth);\n\n default:\n var saved = this.maxDepth;\n this.maxDepth = 0;\n var obj = this.truncateObject(value, depth);\n obj.__type = type;\n this.maxDepth = saved;\n return obj;\n }\n };\n\n Truncator.prototype.getPath = function (value) {\n var index = this.seen.indexOf(value);\n var path = [this.keys[index]];\n\n for (var i = index; i >= 0; i--) {\n var sub = this.seen[i];\n\n if (sub && getAttr(sub, path[0]) === value) {\n value = sub;\n path.unshift(this.keys[i]);\n }\n }\n\n return '~' + path.join('.');\n };\n\n Truncator.prototype.truncateString = function (s) {\n if (s.length > this.maxStringLength) {\n return s.slice(0, this.maxStringLength) + '...';\n }\n\n return s;\n };\n\n Truncator.prototype.truncateArray = function (arr, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n\n var length = 0;\n var dst = [];\n\n for (var i = 0; i < arr.length; i++) {\n var el = arr[i];\n dst.push(this.truncate(el, i.toString(), depth));\n length++;\n\n if (length >= this.maxArrayLength) {\n break;\n }\n }\n\n return dst;\n };\n\n Truncator.prototype.truncateObject = function (obj, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n\n var length = 0;\n var dst = {};\n\n for (var key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n continue;\n }\n\n if (isBlocklisted(key, this.keysBlocklist)) {\n dst[key] = FILTERED;\n continue;\n }\n\n var value = getAttr(obj, key);\n\n if (value === undefined || typeof value === 'function') {\n continue;\n }\n\n dst[key] = this.truncate(value, key, depth);\n length++;\n\n if (length >= this.maxObjectLength) {\n break;\n }\n }\n\n return dst;\n };\n\n return Truncator;\n}();\n\nexport function truncate(value, opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n var t = new Truncator(opts);\n return t.truncate(value);\n}\n\nfunction getAttr(obj, attr) {\n // Ignore browser specific exception trying to read an attribute (#79).\n try {\n return obj[attr];\n } catch (_) {\n return;\n }\n}\n\nfunction objectType(obj) {\n var s = Object.prototype.toString.apply(obj);\n return s.slice('[object '.length, -1);\n}\n\nfunction isBlocklisted(key, keysBlocklist) {\n for (var _i = 0, keysBlocklist_1 = keysBlocklist; _i < keysBlocklist_1.length; _i++) {\n var v = keysBlocklist_1[_i];\n\n if (v === key) {\n return true;\n }\n\n if (v instanceof RegExp) {\n if (key.match(v)) {\n return true;\n }\n }\n }\n\n return false;\n}","var Span =\n/** @class */\nfunction () {\n function Span(metric, name, startTime) {\n this._dur = 0;\n this._level = 0;\n this._metric = metric;\n this.name = name;\n this.startTime = startTime || new Date();\n }\n\n Span.prototype.end = function (endTime) {\n this.endTime = endTime ? endTime : new Date();\n this._dur += this.endTime.getTime() - this.startTime.getTime();\n\n this._metric._incGroup(this.name, this._dur);\n\n this._metric = null;\n };\n\n Span.prototype._pause = function () {\n if (this._paused()) {\n return;\n }\n\n var now = new Date();\n this._dur += now.getTime() - this.startTime.getTime();\n this.startTime = null;\n };\n\n Span.prototype._resume = function () {\n if (!this._paused()) {\n return;\n }\n\n this.startTime = new Date();\n };\n\n Span.prototype._paused = function () {\n return this.startTime == null;\n };\n\n return Span;\n}();\n\nexport { Span };\n\nvar BaseMetric =\n/** @class */\nfunction () {\n function BaseMetric() {\n this._spans = {};\n this._groups = {};\n this.startTime = new Date();\n }\n\n BaseMetric.prototype.end = function (endTime) {\n if (!this.endTime) {\n this.endTime = endTime || new Date();\n }\n };\n\n BaseMetric.prototype.isRecording = function () {\n return true;\n };\n\n BaseMetric.prototype.startSpan = function (name, startTime) {\n var span = this._spans[name];\n\n if (span) {\n span._level++;\n } else {\n span = new Span(this, name, startTime);\n this._spans[name] = span;\n }\n };\n\n BaseMetric.prototype.endSpan = function (name, endTime) {\n var span = this._spans[name];\n\n if (!span) {\n console.error('airbrake: span=%s does not exist', name);\n return;\n }\n\n if (span._level > 0) {\n span._level--;\n } else {\n span.end(endTime);\n delete this._spans[span.name];\n }\n };\n\n BaseMetric.prototype._incGroup = function (name, ms) {\n this._groups[name] = (this._groups[name] || 0) + ms;\n };\n\n BaseMetric.prototype._duration = function () {\n if (!this.endTime) {\n this.endTime = new Date();\n }\n\n return this.endTime.getTime() - this.startTime.getTime();\n };\n\n return BaseMetric;\n}();\n\nexport { BaseMetric };\n\nvar NoopMetric =\n/** @class */\nfunction () {\n function NoopMetric() {}\n\n NoopMetric.prototype.isRecording = function () {\n return false;\n };\n\n NoopMetric.prototype.startSpan = function (_name, _startTime) {};\n\n NoopMetric.prototype.endSpan = function (_name, _startTime) {};\n\n NoopMetric.prototype._incGroup = function (_name, _ms) {};\n\n return NoopMetric;\n}();\n\nexport { NoopMetric };","var __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nimport { NoopMetric } from './metrics';\n\nvar Scope =\n/** @class */\nfunction () {\n function Scope() {\n this._noopMetric = new NoopMetric();\n this._context = {};\n this._historyMaxLen = 20;\n this._history = [];\n }\n\n Scope.prototype.clone = function () {\n var clone = new Scope();\n clone._context = __assign({}, this._context);\n clone._history = this._history.slice();\n return clone;\n };\n\n Scope.prototype.setContext = function (context) {\n this._context = __assign(__assign({}, this._context), context);\n };\n\n Scope.prototype.context = function () {\n var ctx = __assign({}, this._context);\n\n if (this._history.length > 0) {\n ctx.history = this._history.slice();\n }\n\n return ctx;\n };\n\n Scope.prototype.pushHistory = function (state) {\n if (this._isDupState(state)) {\n if (this._lastRecord.num) {\n this._lastRecord.num++;\n } else {\n this._lastRecord.num = 2;\n }\n\n return;\n }\n\n if (!state.date) {\n state.date = new Date();\n }\n\n this._history.push(state);\n\n this._lastRecord = state;\n\n if (this._history.length > this._historyMaxLen) {\n this._history = this._history.slice(-this._historyMaxLen);\n }\n };\n\n Scope.prototype._isDupState = function (state) {\n if (!this._lastRecord) {\n return false;\n }\n\n for (var key in state) {\n if (!state.hasOwnProperty(key) || key === 'date') {\n continue;\n }\n\n if (state[key] !== this._lastRecord[key]) {\n return false;\n }\n }\n\n return true;\n };\n\n Scope.prototype.routeMetric = function () {\n return this._routeMetric || this._noopMetric;\n };\n\n Scope.prototype.setRouteMetric = function (metric) {\n this._routeMetric = metric;\n };\n\n Scope.prototype.queueMetric = function () {\n return this._queueMetric || this._noopMetric;\n };\n\n Scope.prototype.setQueueMetric = function (metric) {\n this._queueMetric = metric;\n };\n\n return Scope;\n}();\n\nexport { Scope };","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport ErrorStackParser from 'error-stack-parser';\nvar hasConsole = (typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) === 'object' && console.warn;\n\nfunction parse(err) {\n try {\n return ErrorStackParser.parse(err);\n } catch (parseErr) {\n if (hasConsole && err.stack) {\n console.warn('ErrorStackParser:', parseErr.toString(), err.stack);\n }\n }\n\n if (err.fileName) {\n return [err];\n }\n\n return [];\n}\n\nexport function espProcessor(err) {\n var backtrace = [];\n\n if (err.noStack) {\n backtrace.push({\n \"function\": err.functionName || '',\n file: err.fileName || '',\n line: err.lineNumber || 0,\n column: err.columnNumber || 0\n });\n } else {\n var frames_2 = parse(err);\n\n if (frames_2.length === 0) {\n try {\n throw new Error('fake');\n } catch (fakeErr) {\n frames_2 = parse(fakeErr);\n frames_2.shift();\n frames_2.shift();\n }\n }\n\n for (var _i = 0, frames_1 = frames_2; _i < frames_1.length; _i++) {\n var frame = frames_1[_i];\n backtrace.push({\n \"function\": frame.functionName || '',\n file: frame.fileName || '',\n line: frame.lineNumber || 0,\n column: frame.columnNumber || 0\n });\n }\n }\n\n var type = err.name ? err.name : '';\n var msg = err.message ? String(err.message) : String(err);\n return {\n type: type,\n message: msg,\n backtrace: backtrace\n };\n}","var re = new RegExp(['^', '\\\\[(\\\\$.+)\\\\]', '\\\\s', '([\\\\s\\\\S]+)', '$'].join(''));\nexport function angularMessageFilter(notice) {\n var err = notice.errors[0];\n\n if (err.type !== '' && err.type !== 'Error') {\n return notice;\n }\n\n var m = err.message.match(re);\n\n if (m !== null) {\n err.type = m[1];\n err.message = m[2];\n }\n\n return notice;\n}","var IGNORED_MESSAGES = ['Script error', 'Script error.', 'InvalidAccessError'];\nexport function ignoreNoiseFilter(notice) {\n var err = notice.errors[0];\n\n if (err.type === '' && IGNORED_MESSAGES.indexOf(err.message) !== -1) {\n return null;\n }\n\n if (err.backtrace && err.backtrace.length > 0) {\n var frame = err.backtrace[0];\n\n if (frame.file === '<anonymous>') {\n return null;\n }\n }\n\n return notice;\n}","var re = new RegExp(['^', 'Uncaught\\\\s', '(.+?)', ':\\\\s', '(.+)', '$'].join(''));\nexport function uncaughtMessageFilter(notice) {\n var err = notice.errors[0];\n\n if (err.type !== '' && err.type !== 'Error') {\n return notice;\n }\n\n var m = err.message.match(re);\n\n if (m !== null) {\n err.type = m[1];\n err.message = m[2];\n }\n\n return notice;\n}","export var errors = {\n unauthorized: new Error('airbrake: unauthorized: project id or key are wrong'),\n ipRateLimited: new Error('airbrake: IP is rate limited')\n};","import fetch from 'cross-fetch';\nimport Promise from 'promise-polyfill';\nimport { errors } from './api';\nvar rateLimitReset = 0;\nexport function request(req) {\n var utime = Date.now() / 1000;\n\n if (utime < rateLimitReset) {\n return Promise.reject(errors.ipRateLimited);\n }\n\n var opt = {\n method: req.method,\n body: req.body\n };\n return fetch(req.url, opt).then(function (resp) {\n if (resp.status === 401) {\n throw errors.unauthorized;\n }\n\n if (resp.status === 429) {\n var s = resp.headers.get('X-RateLimit-Delay');\n\n if (!s) {\n throw errors.ipRateLimited;\n }\n\n var n = parseInt(s, 10);\n\n if (n > 0) {\n rateLimitReset = Date.now() / 1000 + n;\n }\n\n throw errors.ipRateLimited;\n }\n\n if (resp.status === 204) {\n return {\n json: null\n };\n }\n\n if (resp.status === 404) {\n throw new Error('404 Not Found');\n }\n\n if (resp.status >= 200 && resp.status < 300) {\n return resp.json().then(function (json) {\n return {\n json: json\n };\n });\n }\n\n if (resp.status >= 400 && resp.status < 500) {\n return resp.json().then(function (json) {\n var err = new Error(json.message);\n throw err;\n });\n }\n\n return resp.text().then(function (body) {\n var err = new Error(\"airbrake: fetch: unexpected response: code=\" + resp.status + \" body='\" + body + \"'\");\n throw err;\n });\n });\n}","import Promise from 'promise-polyfill';\nimport { errors } from './api';\nexport function makeRequester(api) {\n return function (req) {\n return request(req, api);\n };\n}\nvar rateLimitReset = 0;\n\nfunction request(req, api) {\n var utime = Date.now() / 1000;\n\n if (utime < rateLimitReset) {\n return Promise.reject(errors.ipRateLimited);\n }\n\n return new Promise(function (resolve, reject) {\n api({\n url: req.url,\n method: req.method,\n body: req.body,\n headers: {\n 'content-type': 'application/json'\n },\n timeout: req.timeout\n }, function (error, resp, body) {\n if (error) {\n reject(error);\n return;\n }\n\n if (!resp.statusCode) {\n error = new Error(\"airbrake: request: response statusCode is \" + resp.statusCode);\n reject(error);\n return;\n }\n\n if (resp.statusCode === 401) {\n reject(errors.unauthorized);\n return;\n }\n\n if (resp.statusCode === 429) {\n reject(errors.ipRateLimited);\n var h = resp.headers['x-ratelimit-delay'];\n\n if (!h) {\n return;\n }\n\n var s = void 0;\n\n if (typeof h === 'string') {\n s = h;\n } else if (h instanceof Array) {\n s = h[0];\n } else {\n return;\n }\n\n var n = parseInt(s, 10);\n\n if (n > 0) {\n rateLimitReset = Date.now() / 1000 + n;\n }\n\n return;\n }\n\n if (resp.statusCode === 204) {\n resolve({\n json: null\n });\n return;\n }\n\n if (resp.statusCode >= 200 && resp.statusCode < 300) {\n var json = void 0;\n\n try {\n json = JSON.parse(body);\n } catch (err) {\n reject(err);\n return;\n }\n\n resolve(json);\n return;\n }\n\n if (resp.statusCode >= 400 && resp.statusCode < 500) {\n var json = void 0;\n\n try {\n json = JSON.parse(body);\n } catch (err) {\n reject(err);\n return;\n }\n\n error = new Error(json.message);\n reject(error);\n return;\n }\n\n body = body.trim();\n error = new Error(\"airbrake: node: unexpected response: code=\" + resp.statusCode + \" body='\" + body + \"'\");\n reject(error);\n });\n });\n}","import { request as fetchRequest } from './fetch';\nimport { makeRequester as makeNodeRequester } from './node';\nexport function makeRequester(opts) {\n if (opts.request) {\n return makeNodeRequester(opts.request);\n }\n\n return fetchRequest;\n}","var __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar tdigest;\nexport var hasTdigest = false;\n\ntry {\n tdigest = require('tdigest');\n hasTdigest = true;\n} catch (err) {}\n\nvar TDigestStat =\n/** @class */\nfunction () {\n function TDigestStat() {\n this.count = 0;\n this.sum = 0;\n this.sumsq = 0;\n this._td = new tdigest.Digest();\n }\n\n TDigestStat.prototype.add = function (ms) {\n if (ms === 0) {\n ms = 0.00001;\n }\n\n this.count += 1;\n this.sum += ms;\n this.sumsq += ms * ms;\n\n if (this._td) {\n this._td.push(ms);\n }\n };\n\n TDigestStat.prototype.toJSON = function () {\n return {\n count: this.count,\n sum: this.sum,\n sumsq: this.sumsq,\n tdigestCentroids: tdigestCentroids(this._td)\n };\n };\n\n return TDigestStat;\n}();\n\nexport { TDigestStat };\n\nvar TDigestStatGroups =\n/** @class */\nfunction (_super) {\n __extends(TDigestStatGroups, _super);\n\n function TDigestStatGroups() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.groups = {};\n return _this;\n }\n\n TDigestStatGroups.prototype.addGroups = function (totalMs, groups) {\n this.add(totalMs);\n\n for (var name_1 in groups) {\n if (groups.hasOwnProperty(name_1)) {\n this.addGroup(name_1, groups[name_1]);\n }\n }\n };\n\n TDigestStatGroups.prototype.addGroup = function (name, ms) {\n var stat = this.groups[name];\n\n if (!stat) {\n stat = new TDigestStat();\n this.groups[name] = stat;\n }\n\n stat.add(ms);\n };\n\n TDigestStatGroups.prototype.toJSON = function () {\n return {\n count: this.count,\n sum: this.sum,\n sumsq: this.sumsq,\n tdigestCentroids: tdigestCentroids(this._td),\n groups: this.groups\n };\n };\n\n return TDigestStatGroups;\n}(TDigestStat);\n\nexport { TDigestStatGroups };\n\nfunction tdigestCentroids(td) {\n var means = [];\n var counts = [];\n td.centroids.each(function (c) {\n means.push(c.mean);\n counts.push(c.n);\n });\n return {\n mean: means,\n count: counts\n };\n}","var __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nimport { makeRequester } from './http_req';\nimport { hasTdigest, TDigestStat } from './tdshared';\nvar FLUSH_INTERVAL = 15000; // 15 seconds\n\nvar QueryInfo =\n/** @class */\nfunction () {\n function QueryInfo(query) {\n if (query === void 0) {\n query = '';\n }\n\n this.method = '';\n this.route = '';\n this.query = '';\n this.func = '';\n this.file = '';\n this.line = 0;\n this.startTime = new Date();\n this.query = query;\n }\n\n QueryInfo.prototype._duration = function () {\n if (!this.endTime) {\n this.endTime = new Date();\n }\n\n return this.endTime.getTime() - this.startTime.getTime();\n };\n\n return QueryInfo;\n}();\n\nexport { QueryInfo };\n\nvar QueriesStats =\n/** @class */\nfunction () {\n function QueriesStats(opt) {\n this._m = {};\n this._opt = opt;\n this._url = opt.host + \"/api/v5/projects/\" + opt.projectId + \"/queries-stats?key=\" + opt.projectKey;\n this._requester = makeRequester(opt);\n }\n\n QueriesStats.prototype.start = function (query) {\n if (query === void 0) {\n query = '';\n }\n\n return new QueryInfo(query);\n };\n\n QueriesStats.prototype.notify = function (q) {\n var _this = this;\n\n if (!hasTdigest) {\n return;\n }\n\n var ms = q._duration();\n\n var minute = 60 * 1000;\n var startTime = new Date(Math.floor(q.startTime.getTime() / minute) * minute);\n var key = {\n method: q.method,\n route: q.route,\n query: q.query,\n func: q.func,\n file: q.file,\n line: q.line,\n time: startTime\n };\n var keyStr = JSON.stringify(key);\n var stat = this._m[keyStr];\n\n if (!stat) {\n stat = new TDigestStat();\n this._m[keyStr] = stat;\n }\n\n stat.add(ms);\n\n if (this._timer) {\n return;\n }\n\n this._timer = setTimeout(function () {\n _this._flush();\n }, FLUSH_INTERVAL);\n };\n\n QueriesStats.prototype._flush = function () {\n var queries = [];\n\n for (var keyStr in this._m) {\n if (!this._m.hasOwnProperty(keyStr)) {\n continue;\n }\n\n var key = JSON.parse(keyStr);\n\n var v = __assign(__assign({}, key), this._m[keyStr].toJSON());\n\n queries.push(v);\n }\n\n this._m = {};\n this._timer = null;\n var outJSON = JSON.stringify({\n environment: this._opt.environment,\n queries: queries\n });\n var req = {\n method: 'POST',\n url: this._url,\n body: outJSON\n };\n\n this._requester(req).then(function (_resp) {// nothing\n })[\"catch\"](function (err) {\n if (console.error) {\n console.error('can not report queries stats', err);\n }\n });\n };\n\n return QueriesStats;\n}();\n\nexport { QueriesStats };","var __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nimport { makeRequester } from './http_req';\nimport { BaseMetric } from './metrics';\nimport { hasTdigest, TDigestStatGroups } from './tdshared';\nvar FLUSH_INTERVAL = 15000; // 15 seconds\n\nvar QueueMetric =\n/** @class */\nfunction (_super) {\n __extends(QueueMetric, _super);\n\n function QueueMetric(queue) {\n var _this = _super.call(this) || this;\n\n _this.queue = queue;\n _this.startTime = new Date();\n return _this;\n }\n\n return QueueMetric;\n}(BaseMetric);\n\nexport { QueueMetric };\n\nvar QueuesStats =\n/** @class */\nfunction () {\n function QueuesStats(opt) {\n this._m = {};\n this._opt = opt;\n this._url = opt.host + \"/api/v5/projects/\" + opt.projectId + \"/queues-stats?key=\" + opt.projectKey;\n this._requester = makeRequester(opt);\n }\n\n QueuesStats.prototype.notify = function (q) {\n var _this = this;\n\n if (!hasTdigest) {\n return;\n }\n\n var ms = q._duration();\n\n if (ms === 0) {\n ms = 0.00001;\n }\n\n var minute = 60 * 1000;\n var startTime = new Date(Math.floor(q.startTime.getTime() / minute) * minute);\n var key = {\n queue: q.queue,\n time: startTime\n };\n var keyStr = JSON.stringify(key);\n var stat = this._m[keyStr];\n\n if (!stat) {\n stat = new TDigestStatGroups();\n this._m[keyStr] = stat;\n }\n\n stat.addGroups(ms, q._groups);\n\n if (this._timer) {\n return;\n }\n\n this._timer = setTimeout(function () {\n _this._flush();\n }, FLUSH_INTERVAL);\n };\n\n QueuesStats.prototype._flush = function () {\n var queues = [];\n\n for (var keyStr in this._m) {\n if (!this._m.hasOwnProperty(keyStr)) {\n continue;\n }\n\n var key = JSON.parse(keyStr);\n\n var v = __assign(__assign({}, key), this._m[keyStr].toJSON());\n\n queues.push(v);\n }\n\n this._m = {};\n this._timer = null;\n var outJSON = JSON.stringify({\n environment: this._opt.environment,\n queues: queues\n });\n var req = {\n method: 'POST',\n url: this._url,\n body: outJSON\n };\n\n this._requester(req).then(function (_resp) {// nothing\n })[\"catch\"](function (err) {\n if (console.error) {\n console.error('can not report queues breakdowns', err);\n }\n });\n };\n\n return QueuesStats;\n}();\n\nexport { QueuesStats };","var __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nimport { makeRequester } from './http_req';\nimport { BaseMetric } from './metrics';\nimport { hasTdigest, TDigestStat, TDigestStatGroups } from './tdshared';\nvar FLUSH_INTERVAL = 15000; // 15 seconds\n\nvar RouteMetric =\n/** @class */\nfunction (_super) {\n __extends(RouteMetric, _super);\n\n function RouteMetric(method, route, statusCode, contentType) {\n if (method === void 0) {\n method = '';\n }\n\n if (route === void 0) {\n route = '';\n }\n\n if (statusCode === void 0) {\n statusCode = 0;\n }\n\n if (contentType === void 0) {\n contentType = '';\n }\n\n var _this = _super.call(this) || this;\n\n _this.method = method;\n _this.route = route;\n _this.statusCode = statusCode;\n _this.contentType = contentType;\n _this.startTime = new Date();\n return _this;\n }\n\n return RouteMetric;\n}(BaseMetric);\n\nexport { RouteMetric };\n\nvar RoutesStats =\n/** @class */\nfunction () {\n function RoutesStats(opt) {\n this._m = {};\n this._opt = opt;\n this._url = opt.host + \"/api/v5/projects/\" + opt.projectId + \"/routes-stats?key=\" + opt.projectKey;\n this._requester = makeRequester(opt);\n }\n\n RoutesStats.prototype.notify = function (req) {\n var _this = this;\n\n if (!hasTdigest) {\n return;\n }\n\n var ms = req._duration();\n\n var minute = 60 * 1000;\n var startTime = new Date(Math.floor(req.startTime.getTime() / minute) * minute);\n var key = {\n method: req.method,\n route: req.route,\n statusCode: req.statusCode,\n time: startTime\n };\n var keyStr = JSON.stringify(key);\n var stat = this._m[keyStr];\n\n if (!stat) {\n stat = new TDigestStat();\n this._m[keyStr] = stat;\n }\n\n stat.add(ms);\n\n if (this._timer) {\n return;\n }\n\n this._timer = setTimeout(function () {\n _this._flush();\n }, FLUSH_INTERVAL);\n };\n\n RoutesStats.prototype._flush = function () {\n var routes = [];\n\n for (var keyStr in this._m) {\n if (!this._m.hasOwnProperty(keyStr)) {\n continue;\n }\n\n var key = JSON.parse(keyStr);\n\n var v = __assign(__assign({}, key), this._m[keyStr].toJSON());\n\n routes.push(v);\n }\n\n this._m = {};\n this._timer = null;\n var outJSON = JSON.stringify({\n environment: this._opt.environment,\n routes: routes\n });\n var req = {\n method: 'POST',\n url: this._url,\n body: outJSON\n };\n\n this._requester(req).then(function (_resp) {// nothing\n })[\"catch\"](function (err) {\n if (console.error) {\n console.error('can not report routes stats', err);\n }\n });\n };\n\n return RoutesStats;\n}();\n\nexport { RoutesStats };\n\nvar RoutesBreakdowns =\n/** @class */\nfunction () {\n function RoutesBreakdowns(opt) {\n this._m = {};\n this._opt = opt;\n this._url = opt.host + \"/api/v5/projects/\" + opt.projectId + \"/routes-breakdowns?key=\" + opt.projectKey;\n this._requester = makeRequester(opt);\n }\n\n RoutesBreakdowns.prototype.notify = function (req) {\n var _this = this;\n\n if (!hasTdigest) {\n return;\n }\n\n if (req.statusCode < 200 || req.statusCode >= 300 && req.statusCode < 400 || req.statusCode === 404 || Object.keys(req._groups).length === 0) {\n return;\n }\n\n var ms = req._duration();\n\n if (ms === 0) {\n ms = 0.00001;\n }\n\n var minute = 60 * 1000;\n var startTime = new Date(Math.floor(req.startTime.getTime() / minute) * minute);\n var key = {\n method: req.method,\n route: req.route,\n responseType: this._responseType(req),\n time: startTime\n };\n var keyStr = JSON.stringify(key);\n var stat = this._m[keyStr];\n\n if (!stat) {\n stat = new TDigestStatGroups();\n this._m[keyStr] = stat;\n }\n\n stat.addGroups(ms, req._groups);\n\n if (this._timer) {\n return;\n }\n\n this._timer = setTimeout(function () {\n _this._flush();\n }, FLUSH_INTERVAL);\n };\n\n RoutesBreakdowns.prototype._flush = function () {\n var routes = [];\n\n for (var keyStr in this._m) {\n if (!this._m.hasOwnProperty(keyStr)) {\n continue;\n }\n\n var key = JSON.parse(keyStr);\n\n var v = __assign(__assign({}, key), this._m[keyStr].toJSON());\n\n routes.push(v);\n }\n\n this._m = {};\n this._timer = null;\n var outJSON = JSON.stringify({\n environment: this._opt.environment,\n routes: routes\n });\n var req = {\n method: 'POST',\n url: this._url,\n body: outJSON\n };\n\n this._requester(req).then(function (_resp) {// nothing\n })[\"catch\"](function (err) {\n if (console.error) {\n console.error('can not report routes breakdowns', err);\n }\n });\n };\n\n RoutesBreakdowns.prototype._responseType = function (req) {\n if (req.statusCode >= 500) {\n return '5xx';\n }\n\n if (req.statusCode >= 400) {\n return '4xx';\n }\n\n if (!req.contentType) {\n return '';\n }\n\n return req.contentType.split(';')[0].split('/')[-1];\n };\n\n return RoutesBreakdowns;\n}();\n\nexport { RoutesBreakdowns };","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nimport Promise from 'promise-polyfill';\nimport { jsonifyNotice } from './jsonify_notice';\nimport { Scope } from './scope';\nimport { espProcessor } from './processor/esp';\nimport { angularMessageFilter } from './filter/angular_message';\nimport { makeDebounceFilter } from './filter/debounce';\nimport { ignoreNoiseFilter } from './filter/ignore_noise';\nimport { uncaughtMessageFilter } from './filter/uncaught_message';\nimport { makeRequester } from './http_req';\nimport { QueriesStats } from './queries';\nimport { QueueMetric, QueuesStats } from './queues';\nimport { RouteMetric, RoutesBreakdowns, RoutesStats } from './routes';\nimport { NOTIFIER_NAME, NOTIFIER_VERSION, NOTIFIER_URL } from './version';\n\nvar BaseNotifier =\n/** @class */\nfunction () {\n function BaseNotifier(opt) {\n var _this = this;\n\n this._filters = [];\n this._performanceFilters = [];\n this._scope = new Scope();\n this._onClose = [];\n\n if (!opt.projectId || !opt.projectKey) {\n throw new Error('airbrake: projectId and projectKey are required');\n }\n\n this._opt = opt;\n this._opt.host = this._opt.host || 'https://api.airbrake.io';\n this._opt.timeout = this._opt.timeout || 10000;\n this._opt.keysBlocklist = this._opt.keysBlocklist || this._opt.keysBlacklist || [/password/, /secret/];\n this._url = this._opt.host + \"/api/v3/projects/\" + this._opt.projectId + \"/notices?key=\" + this._opt.projectKey;\n this._processor = this._opt.processor || espProcessor;\n this._requester = makeRequester(this._opt);\n this.addFilter(ignoreNoiseFilter);\n this.addFilter(makeDebounceFilter());\n this.addFilter(uncaughtMessageFilter);\n this.addFilter(angularMessageFilter);\n this.addFilter(function (notice) {\n notice.context.notifier = {\n name: NOTIFIER_NAME,\n version: NOTIFIER_VERSION,\n url: NOTIFIER_URL\n };\n\n if (_this._opt.environment) {\n notice.context.environment = _this._opt.environment;\n }\n\n return notice;\n });\n this.routes = new Routes(this);\n this.queues = new Queues(this);\n this.queries = new QueriesStats(this._opt);\n }\n\n BaseNotifier.prototype.close = function () {\n for (var _i = 0, _a = this._onClose; _i < _a.length; _i++) {\n var fn = _a[_i];\n fn();\n }\n };\n\n BaseNotifier.prototype.scope = function () {\n return this._scope;\n };\n\n BaseNotifier.prototype.setActiveScope = function (scope) {\n this._scope = scope;\n };\n\n BaseNotifier.prototype.addFilter = function (filter) {\n this._filters.push(filter);\n };\n\n BaseNotifier.prototype.addPerformanceFilter = function (performanceFilter) {\n this._performanceFilters.push(performanceFilter);\n };\n\n BaseNotifier.prototype.notify = function (err) {\n var notice = {\n errors: [],\n context: __assign(__assign({\n severity: 'error'\n }, this.scope().context()), err.context),\n params: err.params || {},\n environment: err.environment || {},\n session: err.session || {}\n };\n\n if (_typeof(err) !== 'object' || err.error === undefined) {\n err = {\n error: err\n };\n }\n\n if (!err.error) {\n notice.error = new Error(\"airbrake: got err=\" + JSON.stringify(err.error) + \", wanted an Error\");\n return Promise.resolve(notice);\n }\n\n var error = this._processor(err.error);\n\n notice.errors.push(error);\n\n for (var _i = 0, _a = this._filters; _i < _a.length; _i++) {\n var filter = _a[_i];\n var r = filter(notice);\n\n if (r === null) {\n notice.error = new Error('airbrake: error is filtered');\n return Promise.resolve(notice);\n }\n\n notice = r;\n }\n\n if (!notice.context) {\n notice.context = {};\n }\n\n notice.context.language = 'JavaScript';\n return this._sendNotice(notice);\n };\n\n BaseNotifier.prototype._sendNotice = function (notice) {\n var body = jsonifyNotice(notice, {\n keysBlocklist: this._opt.keysBlocklist\n });\n\n if (this._opt.reporter) {\n if (typeof this._opt.reporter === 'function') {\n return this._opt.reporter(notice);\n } else {\n console.warn('airbrake: options.reporter must be a function');\n }\n }\n\n var req = {\n method: 'POST',\n url: this._url,\n body: body\n };\n return this._requester(req).then(function (resp) {\n notice.id = resp.json.id;\n notice.url = resp.json.url;\n return notice;\n })[\"catch\"](function (err) {\n notice.error = err;\n return notice;\n });\n };\n\n BaseNotifier.prototype.wrap = function (fn, props) {\n if (props === void 0) {\n props = [];\n }\n\n if (fn._airbrake) {\n return fn;\n } // tslint:disable-next-line:no-this-assignment\n\n\n var client = this;\n\n var airbrakeWrapper = function airbrakeWrapper() {\n var fnArgs = Array.prototype.slice.call(arguments);\n\n var wrappedArgs = client._wrapArguments(fnArgs);\n\n try {\n return fn.apply(this, wrappedArgs);\n } catch (err) {\n client.notify({\n error: err,\n params: {\n arguments: fnArgs\n }\n });\n\n this._ignoreNextWindowError();\n\n throw err;\n }\n };\n\n for (var prop in fn) {\n if (fn.hasOwnProperty(prop)) {\n airbrakeWrapper[prop] = fn[prop];\n }\n }\n\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n\n if (fn.hasOwnProperty(prop)) {\n airbrakeWrapper[prop] = fn[prop];\n }\n }\n\n airbrakeWrapper._airbrake = true;\n airbrakeWrapper.inner = fn;\n return airbrakeWrapper;\n };\n\n BaseNotifier.prototype._wrapArguments = function (args) {\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n\n if (typeof arg === 'function') {\n args[i] = this.wrap(arg);\n }\n }\n\n return args;\n };\n\n BaseNotifier.prototype._ignoreNextWindowError = function () {};\n\n BaseNotifier.prototype.call = function (fn) {\n var _args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n _args[_i - 1] = arguments[_i];\n }\n\n var wrapper = this.wrap(fn);\n return wrapper.apply(this, Array.prototype.slice.call(arguments, 1));\n };\n\n return BaseNotifier;\n}();\n\nexport { BaseNotifier };\n\nvar Routes =\n/** @class */\nfunction () {\n function Routes(notifier) {\n this._notifier = notifier;\n this._routes = new RoutesStats(notifier._opt);\n this._breakdowns = new RoutesBreakdowns(notifier._opt);\n }\n\n Routes.prototype.start = function (method, route, statusCode, contentType) {\n if (method === void 0) {\n method = '';\n }\n\n if (route === void 0) {\n route = '';\n }\n\n if (statusCode === void 0) {\n statusCode = 0;\n }\n\n if (contentType === void 0) {\n contentType = '';\n }\n\n var metric = new RouteMetric(method, route, statusCode, contentType);\n\n var scope = this._notifier.scope().clone();\n\n scope.setContext({\n httpMethod: method,\n route: route\n });\n scope.setRouteMetric(metric);\n\n this._notifier.setActiveScope(scope);\n\n return metric;\n };\n\n Routes.prototype.notify = function (req) {\n req.end();\n\n for (var _i = 0, _a = this._notifier._performanceFilters; _i < _a.length; _i++) {\n var performanceFilter = _a[_i];\n\n if (performanceFilter(req) === null) {\n return;\n }\n }\n\n this._routes.notify(req);\n\n this._breakdowns.notify(req);\n };\n\n return Routes;\n}();\n\nvar Queues =\n/** @class */\nfunction () {\n function Queues(notifier) {\n this._notifier = notifier;\n this._queues = new QueuesStats(notifier._opt);\n }\n\n Queues.prototype.start = function (queue) {\n var metric = new QueueMetric(queue);\n\n var scope = this._notifier.scope().clone();\n\n scope.setContext({\n queue: queue\n });\n scope.setQueueMetric(metric);\n\n this._notifier.setActiveScope(scope);\n\n return metric;\n };\n\n Queues.prototype.notify = function (q) {\n q.end();\n\n this._queues.notify(q);\n };\n\n return Queues;\n}();","export function makeDebounceFilter() {\n var lastNoticeJSON;\n var timeout;\n return function (notice) {\n var s = JSON.stringify(notice.errors);\n\n if (s === lastNoticeJSON) {\n return null;\n }\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n lastNoticeJSON = s;\n timeout = setTimeout(function () {\n lastNoticeJSON = '';\n }, 1000);\n return notice;\n };\n}","export var NOTIFIER_NAME = 'airbrake-js/browser';\nexport var NOTIFIER_VERSION = '1.4.2';\nexport var NOTIFIER_URL = 'https://github.com/airbrake/airbrake-js/tree/master/packages/browser';","export function windowFilter(notice) {\n if (window.navigator && window.navigator.userAgent) {\n notice.context.userAgent = window.navigator.userAgent;\n }\n\n if (window.location) {\n notice.context.url = String(window.location); // Set root directory to group errors on different subdomains together.\n\n notice.context.rootDirectory = window.location.protocol + '//' + window.location.host;\n }\n\n return notice;\n}","var CONSOLE_METHODS = ['debug', 'log', 'info', 'warn', 'error'];\nexport function instrumentConsole(notifier) {\n var _loop_1 = function _loop_1(m) {\n if (!(m in console)) {\n return \"continue\";\n }\n\n var oldFn = console[m];\n\n var newFn = function newFn() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n oldFn.apply(console, args);\n notifier.scope().pushHistory({\n type: 'log',\n severity: m,\n arguments: args\n });\n };\n\n newFn.inner = oldFn;\n console[m] = newFn;\n }; // tslint:disable-next-line:no-this-assignment\n\n\n for (var _i = 0, CONSOLE_METHODS_1 = CONSOLE_METHODS; _i < CONSOLE_METHODS_1.length; _i++) {\n var m = CONSOLE_METHODS_1[_i];\n\n _loop_1(m);\n }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar elemAttrs = ['type', 'name', 'src'];\nexport function instrumentDOM(notifier) {\n var handler = makeEventHandler(notifier);\n\n if (window.addEventListener) {\n window.addEventListener('load', handler);\n window.addEventListener('error', function (event) {\n if (getProp(event, 'error')) {\n return;\n }\n\n handler(event);\n }, true);\n }\n\n if ((typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) === 'object' && document.addEventListener) {\n document.addEventListener('DOMContentLoaded', handler);\n document.addEventListener('click', handler);\n document.addEventListener('keypress', handler);\n }\n}\n\nfunction makeEventHandler(notifier) {\n return function (event) {\n var target = getProp(event, 'target');\n\n if (!target) {\n return;\n }\n\n var state = {\n type: event.type\n };\n\n try {\n state.target = elemPath(target);\n } catch (err) {\n state.target = \"<\" + String(err) + \">\";\n }\n\n notifier.scope().pushHistory(state);\n };\n}\n\nfunction elemName(elem) {\n if (!elem) {\n return '';\n }\n\n var s = [];\n\n if (elem.tagName) {\n s.push(elem.tagName.toLowerCase());\n }\n\n if (elem.id) {\n s.push('#');\n s.push(elem.id);\n }\n\n if (elem.classList && Array.from) {\n s.push('.');\n s.push(Array.from(elem.classList).join('.'));\n } else if (elem.className) {\n var str = classNameString(elem.className);\n\n if (str !== '') {\n s.push('.');\n s.push(str);\n }\n }\n\n if (elem.getAttribute) {\n for (var _i = 0, elemAttrs_1 = elemAttrs; _i < elemAttrs_1.length; _i++) {\n var attr = elemAttrs_1[_i];\n var value = elem.getAttribute(attr);\n\n if (value) {\n s.push(\"[\" + attr + \"=\\\"\" + value + \"\\\"]\");\n }\n }\n }\n\n return s.join('');\n}\n\nfunction classNameString(name) {\n if (name.split) {\n return name.split(' ').join('.');\n }\n\n if (name.baseVal && name.baseVal.split) {\n // SVGAnimatedString\n return name.baseVal.split(' ').join('.');\n }\n\n console.error('unsupported HTMLElement.className type', _typeof(name));\n return '';\n}\n\nfunction elemPath(elem) {\n var maxLen = 10;\n var path = [];\n var parent = elem;\n\n while (parent) {\n var name_1 = elemName(parent);\n\n if (name_1 !== '') {\n path.push(name_1);\n\n if (path.length > maxLen) {\n break;\n }\n }\n\n parent = parent.parentNode;\n }\n\n if (path.length === 0) {\n return String(elem);\n }\n\n return path.reverse().join(' > ');\n}\n\nfunction getProp(obj, prop) {\n try {\n return obj[prop];\n } catch (_) {\n // Permission denied to access property\n return null;\n }\n}","var lastLocation = ''; // In some environments (i.e. Cypress) document.location may sometimes be null\n\nfunction getCurrentLocation() {\n return document.location && document.location.pathname;\n}\n\nexport function instrumentLocation(notifier) {\n lastLocation = getCurrentLocation();\n var oldFn = window.onpopstate;\n\n window.onpopstate = function abOnpopstate(_event) {\n var url = getCurrentLocation();\n\n if (url) {\n recordLocation(notifier, url);\n }\n\n if (oldFn) {\n return oldFn.apply(this, arguments);\n }\n };\n\n var oldPushState = history.pushState;\n\n history.pushState = function abPushState(_state, _title, url) {\n if (url) {\n recordLocation(notifier, url.toString());\n }\n\n oldPushState.apply(this, arguments);\n };\n}\n\nfunction recordLocation(notifier, url) {\n var index = url.indexOf('://');\n\n if (index >= 0) {\n url = url.slice(index + 3);\n index = url.indexOf('/');\n url = index >= 0 ? url.slice(index) : '/';\n } else if (url.charAt(0) !== '/') {\n url = '/' + url;\n }\n\n notifier.scope().pushHistory({\n type: 'location',\n from: lastLocation,\n to: url\n });\n lastLocation = url;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nimport Promise from 'promise-polyfill';\nimport { BaseNotifier } from './base_notifier';\nimport { windowFilter } from './filter/window';\nimport { instrumentConsole } from './instrumentation/console';\nimport { instrumentDOM } from './instrumentation/dom';\nimport { instrumentFetch } from './instrumentation/fetch';\nimport { instrumentLocation } from './instrumentation/location';\nimport { instrumentXHR } from './instrumentation/xhr';\n\nvar Notifier =\n/** @class */\nfunction (_super) {\n __extends(Notifier, _super);\n\n function Notifier(opt) {\n var _this = _super.call(this, opt) || this;\n\n _this.offline = false;\n _this.todo = [];\n _this._ignoreWindowError = 0;\n _this._ignoreNextXHR = 0;\n\n if (typeof window === 'undefined') {\n return _this;\n }\n\n _this.addFilter(windowFilter);\n\n if (window.addEventListener) {\n _this.onOnline = _this.onOnline.bind(_this);\n window.addEventListener('online', _this.onOnline);\n _this.onOffline = _this.onOffline.bind(_this);\n window.addEventListener('offline', _this.onOffline);\n _this.onUnhandledrejection = _this.onUnhandledrejection.bind(_this);\n window.addEventListener('unhandledrejection', _this.onUnhandledrejection);\n\n _this._onClose.push(function () {\n window.removeEventListener('online', _this.onOnline);\n window.removeEventListener('offline', _this.onOffline);\n window.removeEventListener('unhandledrejection', _this.onUnhandledrejection);\n });\n } // TODO: deprecated\n\n\n if (_this._opt.ignoreWindowError) {\n opt.instrumentation.onerror = false;\n }\n\n _this._instrument(opt.instrumentation);\n\n return _this;\n }\n\n Notifier.prototype._instrument = function (opt) {\n if (opt === void 0) {\n opt = {};\n }\n\n if (opt.console === undefined) {\n opt.console = !isDevEnv(this._opt.environment);\n }\n\n if (enabled(opt.onerror)) {\n // tslint:disable-next-line:no-this-assignment\n var self_1 = this;\n var oldHandler_1 = window.onerror;\n\n window.onerror = function abOnerror() {\n if (oldHandler_1) {\n oldHandler_1.apply(this, arguments);\n }\n\n self_1.onerror.apply(self_1, arguments);\n };\n }\n\n instrumentDOM(this);\n\n if (enabled(opt.fetch) && typeof fetch === 'function') {\n instrumentFetch(this);\n }\n\n if (enabled(opt.history) && (typeof history === \"undefined\" ? \"undefined\" : _typeof(history)) === 'object') {\n instrumentLocation(this);\n }\n\n if (enabled(opt.console) && (typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) === 'object') {\n instrumentConsole(this);\n }\n\n if (enabled(opt.xhr) && typeof XMLHttpRequest !== 'undefined') {\n instrumentXHR(this);\n }\n };\n\n Notifier.prototype.notify = function (err) {\n var _this = this;\n\n if (this.offline) {\n return new Promise(function (resolve, reject) {\n _this.todo.push({\n err: err,\n resolve: resolve,\n reject: reject\n });\n\n while (_this.todo.length > 100) {\n var j = _this.todo.shift();\n\n if (j === undefined) {\n break;\n }\n\n j.resolve({\n error: new Error('airbrake: offline queue is too large')\n });\n }\n });\n }\n\n return _super.prototype.notify.call(this, err);\n };\n\n Notifier.prototype.onOnline = function () {\n this.offline = false;\n\n var _loop_1 = function _loop_1(j) {\n this_1.notify(j.err).then(function (notice) {\n j.resolve(notice);\n });\n };\n\n var this_1 = this;\n\n for (var _i = 0, _a = this.todo; _i < _a.length; _i++) {\n var j = _a[_i];\n\n _loop_1(j);\n }\n\n this.todo = [];\n };\n\n Notifier.prototype.onOffline = function () {\n this.offline = true;\n };\n\n Notifier.prototype.onUnhandledrejection = function (e) {\n // Handle native or bluebird Promise rejections\n // https://developer.mozilla.org/en-US/docs/Web/Events/unhandledrejection\n // http://bluebirdjs.com/docs/api/error-management-configuration.html\n var reason = e.reason || e.detail && e.detail.reason;\n\n if (!reason) {\n return;\n }\n\n var msg = reason.message || String(reason);\n\n if (msg.indexOf && msg.indexOf('airbrake: ') === 0) {\n return;\n }\n\n if (_typeof(reason) !== 'object' || reason.error === undefined) {\n this.notify({\n error: reason,\n context: {\n unhandledRejection: true\n }\n });\n return;\n }\n\n this.notify(__assign(__assign({}, reason), {\n context: {\n unhandledRejection: true\n }\n }));\n };\n\n Notifier.prototype.onerror = function (message, filename, line, column, err) {\n if (this._ignoreWindowError > 0) {\n return;\n }\n\n if (err) {\n this.notify({\n error: err,\n context: {\n windowError: true\n }\n });\n return;\n } // Ignore errors without file or line.\n\n\n if (!filename || !line) {\n return;\n }\n\n this.notify({\n error: {\n message: message,\n fileName: filename,\n lineNumber: line,\n columnNumber: column,\n noStack: true\n },\n context: {\n windowError: true\n }\n });\n };\n\n Notifier.prototype._ignoreNextWindowError = function () {\n var _this = this;\n\n this._ignoreWindowError++;\n setTimeout(function () {\n return _this._ignoreWindowError--;\n });\n };\n\n return Notifier;\n}(BaseNotifier);\n\nexport { Notifier };\n\nfunction isDevEnv(env) {\n return env && env.startsWith && env.startsWith('dev');\n}\n\nfunction enabled(v) {\n return v === undefined || v === true;\n}","export function instrumentFetch(notifier) {\n // tslint:disable-next-line:no-this-assignment\n var oldFetch = window.fetch;\n\n window.fetch = function (req, options) {\n var state = {\n type: 'xhr',\n date: new Date()\n };\n state.method = options && options.method ? options.method : 'GET';\n\n if (typeof req === 'string') {\n state.url = req;\n } else {\n state.method = req.method;\n state.url = req.url;\n } // Some platforms (e.g. react-native) implement fetch via XHR.\n\n\n notifier._ignoreNextXHR++;\n setTimeout(function () {\n return notifier._ignoreNextXHR--;\n });\n return oldFetch.apply(this, arguments).then(function (resp) {\n state.statusCode = resp.status;\n state.duration = new Date().getTime() - state.date.getTime();\n notifier.scope().pushHistory(state);\n return resp;\n })[\"catch\"](function (err) {\n state.error = err;\n state.duration = new Date().getTime() - state.date.getTime();\n notifier.scope().pushHistory(state);\n throw err;\n });\n };\n}","export function instrumentXHR(notifier) {\n function recordReq(req) {\n var state = req.__state;\n state.statusCode = req.status;\n state.duration = new Date().getTime() - state.date.getTime();\n notifier.scope().pushHistory(state);\n }\n\n var oldOpen = XMLHttpRequest.prototype.open;\n\n XMLHttpRequest.prototype.open = function abOpen(method, url, _async, _user, _password) {\n if (notifier._ignoreNextXHR === 0) {\n this.__state = {\n type: 'xhr',\n method: method,\n url: url\n };\n }\n\n oldOpen.apply(this, arguments);\n };\n\n var oldSend = XMLHttpRequest.prototype.send;\n\n XMLHttpRequest.prototype.send = function abSend(_data) {\n var oldFn = this.onreadystatechange;\n\n this.onreadystatechange = function (_ev) {\n if (this.readyState === 4 && this.__state) {\n recordReq(this);\n }\n\n if (oldFn) {\n return oldFn.apply(this, arguments);\n }\n };\n\n if (this.__state) {\n this.__state.date = new Date();\n }\n\n return oldSend.apply(this, arguments);\n };\n}","// Load all the controllers within this directory and all subdirectories. \n// Controller files must be named *_controller.js.\n\nimport { Application } from \"stimulus\"\nimport { definitionsFromContext } from \"stimulus/webpack-helpers\"\n\nconst application = Application.start()\nconst context = require.context(\"controllers\", true, /_controller\\.js$/)\napplication.load(definitionsFromContext(context))\n","export function definitionsFromContext(context) {\n return context.keys().map(function (key) {\n return definitionForModuleWithContextAndKey(context, key);\n }).filter(function (value) {\n return value;\n });\n}\n\nfunction definitionForModuleWithContextAndKey(context, key) {\n var identifier = identifierForContextKey(key);\n\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\n\nfunction definitionForModuleAndIdentifier(module, identifier) {\n var controllerConstructor = module[\"default\"];\n\n if (typeof controllerConstructor == \"function\") {\n return {\n identifier: identifier,\n controllerConstructor: controllerConstructor\n };\n }\n}\n\nexport function identifierForContextKey(key) {\n var logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}","import { Editor } from \"editor/editor\";\n\n/*\n * Guarda una copia local de los cambios para poder recuperarlos\n * después.\n *\n * Usamos la URL completa sin anchors.\n */\nfunction getStorageKey(editor: Editor): string {\n const keyEl = editor.editorEl.querySelector<HTMLInputElement>(\n '[data-target=\"storage-key\"]'\n );\n if (!keyEl)\n throw new Error(\"No encuentro la llave para guardar los artículos\");\n return keyEl.value;\n}\n\nexport function forgetContent(storedKey: string): void {\n window.localStorage.removeItem(storedKey);\n}\n\nexport function storeContent(editor: Editor): void {\n if (editor.contentEl.innerText.trim().length === 0) return;\n\n window.localStorage.setItem(\n getStorageKey(editor),\n editor.contentEl.innerHTML\n );\n}\n\nexport function restoreContent(editor: Editor): void {\n const content = window.localStorage.getItem(getStorageKey(editor));\n\n if (!content) return;\n if (content.trim().length === 0) return;\n\n editor.contentEl.innerHTML = content;\n}\n","import { Editor } from \"editor/editor\";\n\nexport const blockNames = [\n \"paragraph\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"unordered_list\",\n \"ordered_list\",\n \"blockquote\",\n];\nexport const markNames = [\n \"bold\",\n \"italic\",\n \"deleted\",\n \"underline\",\n \"sub\",\n \"super\",\n \"mark\",\n \"link\",\n \"small\",\n];\nexport const parentBlockNames = [\"left\", \"center\", \"right\"];\n\nexport function moveChildren(from: Element, to: Element, toRef: Node | null) {\n while (from.firstChild) to.insertBefore(from.firstChild, toRef);\n}\n\nexport function isDirectChild(node: Node, supposedChild: Node): boolean {\n for (const child of node.childNodes) {\n if (child == supposedChild) return true;\n }\n return false;\n}\n\nexport function safeGetSelection(editor: Editor): Selection | null {\n const sel = window.getSelection();\n if (!sel) return null;\n // XXX: no damos la selección si esta fuera o _es_ el contentEl, ¿quizás\n // deberíamos mostrar un error?\n if (\n !editor.contentEl.contains(sel.anchorNode) ||\n !editor.contentEl.contains(sel.focusNode) ||\n sel.anchorNode == editor.contentEl ||\n sel.focusNode == editor.contentEl\n )\n return null;\n return sel;\n}\n\nexport function safeGetRangeAt(selection: Selection, num = 0): Range | null {\n try {\n return selection.getRangeAt(num);\n } catch (error) {\n return null;\n }\n}\n\ninterface SplitNode {\n range: Range;\n node: Node;\n}\n\nexport function splitNode(node: Element, range: Range): [SplitNode, SplitNode] {\n const [left, right] = [\n { range: document.createRange(), node: node.cloneNode(false) },\n { range: document.createRange(), node: node.cloneNode(false) },\n ];\n\n if (node.firstChild) left.range.setStartBefore(node.firstChild);\n left.range.setEnd(range.startContainer, range.startOffset);\n left.range.surroundContents(left.node);\n\n right.range.setStart(range.endContainer, range.endOffset);\n if (node.lastChild) right.range.setEndAfter(node.lastChild);\n right.range.surroundContents(right.node);\n\n if (!node.parentElement)\n throw new Error(\"No pude separar los nodos por que no tiene parentNode\");\n\n moveChildren(node, node.parentElement, node);\n node.parentElement.removeChild(node);\n\n return [left, right];\n}\n\nexport function setAuxiliaryToolbar(\n editor: Editor,\n bar: HTMLElement | null\n): void {\n for (const { parentEl } of Object.values(editor.toolbar.auxiliary)) {\n delete parentEl.dataset.editorAuxiliaryActive;\n }\n if (bar) bar.dataset.editorAuxiliaryActive = \"active\";\n}\nexport function clearSelected(editor: Editor): void {\n const selectedEl = editor.contentEl.querySelector(\"[data-editor-selected]\");\n if (selectedEl) delete (selectedEl as HTMLElement).dataset.editorSelected;\n}\n","import { Editor } from \"editor/editor\";\nimport { EditorNode } from \"editor/types\";\nimport { markNames, setAuxiliaryToolbar, clearSelected } from \"editor/utils\";\n\nfunction select(editor: Editor, el: HTMLAnchorElement): void {\n clearSelected(editor);\n el.dataset.editorSelected = \"\";\n editor.toolbar.auxiliary.link.urlEl.value = el.href;\n setAuxiliaryToolbar(editor, editor.toolbar.auxiliary.link.parentEl);\n}\n\nexport const link: EditorNode = {\n selector: \"a\",\n allowedChildren: [...markNames.filter((n) => n !== \"link\"), \"text\"],\n handleEmpty: \"remove\",\n create: () => document.createElement(\"a\"),\n onClick(editor, el) {\n if (!(el instanceof HTMLAnchorElement)) throw new Error(\"oh no\");\n select(editor, el);\n },\n};\n\nexport function setupAuxiliaryToolbar(editor: Editor): void {\n editor.toolbar.auxiliary.link.urlEl.addEventListener(\"input\", (event) => {\n const url = editor.toolbar.auxiliary.link.urlEl.value;\n const selectedEl = editor.contentEl.querySelector<HTMLAnchorElement>(\n \"a[data-editor-selected]\"\n );\n if (!selectedEl)\n throw new Error(\"No pude encontrar el link para setear el enlace\");\n\n selectedEl.href = url;\n });\n editor.toolbar.auxiliary.link.urlEl.addEventListener(\"keydown\", (event) => {\n if (event.keyCode == 13) event.preventDefault();\n });\n}\n","import { Editor } from \"editor/editor\";\nimport { EditorNode } from \"editor/types\";\nimport { markNames, setAuxiliaryToolbar, clearSelected } from \"editor/utils\";\n\nconst hex = (x: string) => (\"0\" + parseInt(x).toString(16)).slice(-2);\n// https://stackoverflow.com/a/3627747\n// TODO: cambiar por una solución más copada\nfunction rgbToHex(rgb: string): string {\n const matches = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\n if (!matches) throw new Error(\"no pude parsear el rgb()\");\n return \"#\" + hex(matches[1]) + hex(matches[2]) + hex(matches[3]);\n}\n\nfunction select(editor: Editor, el: HTMLElement): void {\n clearSelected(editor);\n el.dataset.editorSelected = \"\";\n editor.toolbar.auxiliary.mark.colorEl.value = el.style.backgroundColor\n ? rgbToHex(el.style.backgroundColor)\n : \"#f206f9\";\n editor.toolbar.auxiliary.mark.textColorEl.value = el.style.color\n ? rgbToHex(el.style.color)\n : \"#000000\";\n setAuxiliaryToolbar(editor, editor.toolbar.auxiliary.mark.parentEl);\n}\n\nexport const mark: EditorNode = {\n selector: \"mark\",\n allowedChildren: [...markNames.filter((n) => n !== \"mark\"), \"text\"],\n handleEmpty: \"remove\",\n create: () => document.createElement(\"mark\"),\n onClick(editor, el) {\n if (!(el instanceof HTMLElement)) throw new Error(\"oh no\");\n select(editor, el);\n },\n};\n\nexport function setupAuxiliaryToolbar(editor: Editor): void {\n editor.toolbar.auxiliary.mark.colorEl.addEventListener(\"input\", (event) => {\n const color = editor.toolbar.auxiliary.mark.colorEl.value;\n const selectedEl = editor.contentEl.querySelector<HTMLElement>(\n \"mark[data-editor-selected]\"\n );\n if (!selectedEl)\n throw new Error(\"No pude encontrar el mark para setear el color\");\n\n selectedEl.style.backgroundColor = color;\n });\n editor.toolbar.auxiliary.mark.textColorEl.addEventListener(\n \"input\",\n (event) => {\n const color = editor.toolbar.auxiliary.mark.textColorEl.value;\n const selectedEl = editor.contentEl.querySelector<HTMLElement>(\n \"mark[data-editor-selected]\"\n );\n if (!selectedEl)\n throw new Error(\n \"No pude encontrar el mark para setear el color del text\"\n );\n\n selectedEl.style.color = color;\n }\n );\n editor.toolbar.auxiliary.mark.colorEl.addEventListener(\"keydown\", (event) => {\n if (event.keyCode == 13) event.preventDefault();\n });\n}\n","import { Editor } from \"editor/editor\";\nimport { EditorNode } from \"editor/types\";\nimport {\n safeGetSelection,\n safeGetRangeAt,\n moveChildren,\n markNames,\n} from \"editor/utils\";\nimport { link } from \"editor/types/link\";\nimport { mark } from \"editor/types/mark\";\n\nfunction makeMark(name: string, tag: string): EditorNode {\n return {\n selector: tag,\n allowedChildren: [...markNames.filter((n) => n !== name), \"text\"],\n handleEmpty: \"remove\",\n create: () => document.createElement(tag),\n };\n}\n\n// XXX: si agregás algo acá, agregalo a markNames\nexport const marks: { [propName: string]: EditorNode } = {\n bold: makeMark(\"bold\", \"strong\"),\n italic: makeMark(\"italic\", \"em\"),\n deleted: makeMark(\"deleted\", \"del\"),\n underline: makeMark(\"underline\", \"u\"),\n sub: makeMark(\"sub\", \"sub\"),\n super: makeMark(\"super\", \"sup\"),\n mark,\n link,\n small: makeMark(\"small\", \"small\"),\n};\n\nfunction recursiveFilterSelection(\n node: Element,\n selection: Selection,\n selector: string\n): Element[] {\n let output: Element[] = [];\n for (const child of [...node.children]) {\n if (child.matches(selector) && selection.containsNode(child))\n output.push(child);\n output = [\n ...output,\n ...recursiveFilterSelection(child, selection, selector),\n ];\n }\n return output;\n}\n\nexport function setupButtons(editor: Editor): void {\n for (const [name, type] of Object.entries(marks)) {\n const buttonEl = editor.toolbarEl.querySelector(\n `[data-editor-button=\"mark-${name}\"]`\n );\n if (!buttonEl) continue;\n buttonEl.addEventListener(\"click\", (event) => {\n event.preventDefault();\n\n const sel = safeGetSelection(editor);\n if (!sel) return;\n const range = safeGetRangeAt(sel);\n if (!range) return;\n\n let parentEl = range.commonAncestorContainer;\n while (!(parentEl instanceof Element)) {\n if (!parentEl.parentElement) return;\n parentEl = parentEl.parentElement;\n }\n\n const existingMarks = recursiveFilterSelection(\n parentEl,\n sel,\n type.selector\n );\n console.debug(\"marks encontradas:\", existingMarks);\n\n if (existingMarks.length > 0) {\n const mark = existingMarks[0];\n if (!mark.parentElement) throw new Error(\":/\");\n moveChildren(mark, mark.parentElement, mark);\n mark.parentElement.removeChild(mark);\n } else {\n if (range.commonAncestorContainer === editor.contentEl)\n // TODO: mostrar error\n return console.error(\n \"No puedo marcar cosas a través de distintos bloques!\"\n );\n\n const tagEl = type.create(editor);\n type.onClick && type.onClick(editor, tagEl);\n\n tagEl.appendChild(range.extractContents());\n\n range.insertNode(tagEl);\n range.selectNode(tagEl);\n }\n\n return false;\n });\n }\n}\n","import { Editor } from \"editor/editor\";\nimport {\n safeGetSelection,\n safeGetRangeAt,\n moveChildren,\n markNames,\n blockNames,\n parentBlockNames,\n} from \"editor/utils\";\nimport { EditorNode, getType, getValidParentInSelection } from \"editor/types\";\n\nexport interface EditorBlock extends EditorNode {}\n\nfunction makeBlock(tag: string): EditorBlock {\n return {\n selector: tag,\n allowedChildren: [...markNames, \"text\"],\n handleEmpty: \"do-nothing\",\n create: () => document.createElement(tag),\n };\n}\n\nexport const li: EditorBlock = makeBlock(\"li\");\nconst paragraph: EditorBlock = makeBlock(\"p\");\n\n// XXX: si agregás algo acá, agregalo a blockNames\n// (y probablemente le quieras hacer un botón en app/views/posts/attributes/_content.haml)\nexport const blocks: { [propName: string]: EditorBlock } = {\n paragraph,\n h1: makeBlock(\"h1\"),\n h2: makeBlock(\"h2\"),\n h3: makeBlock(\"h3\"),\n h4: makeBlock(\"h4\"),\n h5: makeBlock(\"h5\"),\n h6: makeBlock(\"h6\"),\n unordered_list: {\n ...makeBlock(\"ul\"),\n allowedChildren: [\"li\"],\n handleEmpty: li,\n },\n ordered_list: {\n ...makeBlock(\"ol\"),\n allowedChildren: [\"li\"],\n handleEmpty: li,\n },\n blockquote: {\n ...makeBlock(\"blockquote\"),\n allowedChildren: blockNames,\n handleEmpty: paragraph,\n },\n};\n\nexport function setupButtons(editor: Editor): void {\n for (const [name, type] of Object.entries(blocks)) {\n const buttonEl = editor.toolbarEl.querySelector(\n `[data-editor-button=\"block-${name}\"]`\n );\n if (!buttonEl) continue;\n buttonEl.addEventListener(\"click\", (event) => {\n event.preventDefault();\n\n const list = getValidParentInSelection({ editor, type: name });\n\n // No borrar cosas como multimedia\n if (blockNames.indexOf(getType(list[1])!.typeName) === -1) {\n return;\n }\n\n let replacementType = list[1].matches(type.selector)\n ? blocks.paragraph\n : type;\n\n const el = replacementType.create(editor);\n replacementType.onClick && replacementType.onClick(editor, el);\n moveChildren(list[1], el, null);\n list[0].replaceChild(el, list[1]);\n window.getSelection()?.collapse(el);\n\n return false;\n });\n }\n}\n","import { Editor } from \"editor/editor\";\nimport {\n safeGetSelection,\n safeGetRangeAt,\n moveChildren,\n blockNames,\n parentBlockNames,\n} from \"editor/utils\";\nimport { EditorNode, getType, getValidParentInSelection } from \"editor/types\";\n\nfunction makeParentBlock(\n tag: string,\n create: EditorNode[\"create\"]\n): EditorNode {\n return {\n selector: tag,\n allowedChildren: [...blockNames, \"multimedia\"],\n handleEmpty: \"remove\",\n create,\n };\n}\n\n// XXX: si agregás algo acá, probablemente le quieras hacer un botón\n// en app/views/posts/attributes/_content.haml\nexport const parentBlocks: { [propName: string]: EditorNode } = {\n left: makeParentBlock(\"div[data-align=left]\", () => {\n const el = document.createElement(\"div\");\n el.dataset.align = \"left\";\n el.style.textAlign = \"left\";\n return el;\n }),\n center: makeParentBlock(\"div[data-align=center]\", () => {\n const el = document.createElement(\"div\");\n el.dataset.align = \"center\";\n el.style.textAlign = \"center\";\n return el;\n }),\n right: makeParentBlock(\"div[data-align=right]\", () => {\n const el = document.createElement(\"div\");\n el.dataset.align = \"right\";\n el.style.textAlign = \"right\";\n return el;\n }),\n};\n\nexport function setupButtons(editor: Editor): void {\n for (const [name, type] of Object.entries(parentBlocks)) {\n const buttonEl = editor.toolbarEl.querySelector(\n `[data-editor-button=\"parentBlock-${name}\"]`\n );\n if (!buttonEl) continue;\n buttonEl.addEventListener(\"click\", (event) => {\n event.preventDefault();\n\n // TODO: Esto solo mueve el bloque en el que está el final de la selección\n // (anchorNode). quizás lo podemos hacer al revés (iterar desde contentEl\n // para encontrar los bloques que están seleccionados y moverlos/cambiarles\n // el parentBlock)\n\n const list = getValidParentInSelection({ editor, type: name });\n\n const replacementEl = type.create(editor);\n if (list[0] == editor.contentEl) {\n // no está en un parentBlock\n editor.contentEl.insertBefore(replacementEl, list[1]);\n replacementEl.appendChild(list[1]);\n } else {\n // está en un parentBlock\n moveChildren(list[0], replacementEl, null);\n editor.contentEl.replaceChild(replacementEl, list[0]);\n }\n window.getSelection()?.collapse(replacementEl);\n\n return false;\n });\n }\n}\n","import * as ActiveStorage from \"@rails/activestorage\";\nimport { Editor } from \"editor/editor\";\nimport { EditorNode, getValidParentInSelection } from \"editor/types\";\nimport {\n safeGetSelection,\n safeGetRangeAt,\n markNames,\n parentBlockNames,\n setAuxiliaryToolbar,\n clearSelected,\n} from \"editor/utils\";\n\nfunction uploadFile(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const upload = new ActiveStorage.DirectUpload(\n file,\n origin + \"/rails/active_storage/direct_uploads\"\n );\n\n upload.create((error: any, blob: any) => {\n if (error) {\n reject(error);\n } else {\n const url = `${origin}/rails/active_storage/blobs/${blob.signed_id}/${blob.filename}`;\n resolve(url);\n }\n });\n });\n}\n\nfunction getAlt(multimediaInnerEl: HTMLElement): string | null {\n switch (multimediaInnerEl.tagName) {\n case \"VIDEO\":\n case \"AUDIO\":\n return multimediaInnerEl.getAttribute(\"aria-label\");\n case \"IMG\":\n return (multimediaInnerEl as HTMLImageElement).alt;\n case \"IFRAME\":\n return multimediaInnerEl.title;\n default:\n throw new Error(\"no pude conseguir el alt\");\n }\n}\nfunction setAlt(multimediaInnerEl: HTMLElement, value: string): void {\n switch (multimediaInnerEl.tagName) {\n case \"VIDEO\":\n case \"AUDIO\":\n multimediaInnerEl.setAttribute(\"aria-label\", value);\n break;\n case \"IMG\":\n (multimediaInnerEl as HTMLImageElement).alt = value;\n break;\n case \"IFRAME\":\n multimediaInnerEl.title = value;\n break;\n default:\n throw new Error(\"no pude setear el alt\");\n }\n}\n\nfunction select(editor: Editor, el: HTMLElement): void {\n clearSelected(editor);\n el.dataset.editorSelected = \"\";\n\n const innerEl = el.querySelector<HTMLElement>(\"[data-multimedia-inner]\");\n if (!innerEl) throw new Error(\"No hay multimedia válida\");\n if (innerEl.tagName === \"P\") {\n editor.toolbar.auxiliary.multimedia.altEl.value = \"\";\n editor.toolbar.auxiliary.multimedia.altEl.disabled = true;\n } else {\n editor.toolbar.auxiliary.multimedia.altEl.value = getAlt(innerEl) || \"\";\n editor.toolbar.auxiliary.multimedia.altEl.disabled = false;\n }\n\n setAuxiliaryToolbar(editor, editor.toolbar.auxiliary.multimedia.parentEl);\n}\n\nexport const multimedia: EditorNode = {\n selector: \"figure[data-multimedia]\",\n allowedChildren: \"ignore-children\",\n handleEmpty: \"remove\",\n create: () => {\n const figureEl = document.createElement(\"figure\");\n figureEl.dataset.multimedia = \"\";\n figureEl.contentEditable = \"false\";\n\n const placeholderEl = document.createElement(\"p\");\n placeholderEl.dataset.multimediaInner = \"\";\n // TODO i18n\n placeholderEl.append(\"¡Clickeame para subir un archivo!\");\n figureEl.appendChild(placeholderEl);\n\n const descriptionEl = document.createElement(\"figcaption\");\n descriptionEl.contentEditable = \"true\";\n // TODO i18n\n descriptionEl.append(\"Escribí acá la descripción del archivo.\");\n figureEl.appendChild(descriptionEl);\n\n return figureEl;\n },\n onClick(editor, el) {\n if (!(el instanceof HTMLElement)) throw new Error(\"oh no\");\n select(editor, el);\n },\n};\nfunction createElementWithFile(url: string, type: string): HTMLElement {\n if (type.match(/^image\\/.+$/)) {\n const el = document.createElement(\"img\");\n el.dataset.multimediaInner = \"\";\n el.src = url;\n return el;\n } else if (type.match(/^video\\/.+$/)) {\n const el = document.createElement(\"video\");\n el.controls = true;\n el.dataset.multimediaInner = \"\";\n el.src = url;\n return el;\n } else if (type.match(/^audio\\/.+$/)) {\n const el = document.createElement(\"audio\");\n el.controls = true;\n el.dataset.multimediaInner = \"\";\n el.src = url;\n return el;\n } else if (type.match(/^application\\/pdf$/)) {\n const el = document.createElement(\"iframe\");\n el.dataset.multimediaInner = \"\";\n el.src = url;\n return el;\n } else {\n // TODO: chequear si el archivo es válido antes de subir\n throw new Error(\"Tipo de archivo no reconocido\");\n }\n}\n\nexport function setupAuxiliaryToolbar(editor: Editor): void {\n editor.toolbar.auxiliary.multimedia.uploadEl.addEventListener(\n \"click\",\n (event) => {\n const files = editor.toolbar.auxiliary.multimedia.fileEl.files;\n if (!files || !files.length) {\n console.info(\"no hay archivos para subir\");\n return;\n }\n const file = files[0];\n\n const selectedEl = editor.contentEl.querySelector<HTMLElement>(\n \"figure[data-editor-selected]\"\n );\n if (!selectedEl)\n throw new Error(\"No pude encontrar el elemento para setear el archivo\");\n\n selectedEl.dataset.editorLoading = \"\";\n uploadFile(file)\n .then((url) => {\n const innerEl = selectedEl.querySelector(\"[data-multimedia-inner]\");\n if (!innerEl) throw new Error(\"No hay multimedia a reemplazar\");\n\n const el = createElementWithFile(url, file.type);\n setAlt(el, editor.toolbar.auxiliary.multimedia.altEl.value);\n selectedEl.replaceChild(el, innerEl);\n\n select(editor, selectedEl);\n\n delete selectedEl.dataset.editorError;\n })\n .catch((err) => {\n console.error(err);\n // TODO: mostrar error\n selectedEl.dataset.editorError = \"\";\n })\n .finally(() => {\n delete selectedEl.dataset.editorLoading;\n });\n }\n );\n\n editor.toolbar.auxiliary.multimedia.removeEl.addEventListener(\n \"click\",\n (event) => {\n const selectedEl = editor.contentEl.querySelector<HTMLElement>(\n \"figure[data-editor-selected]\"\n );\n if (!selectedEl)\n throw new Error(\"No pude encontrar el elemento para borrar\");\n\n selectedEl.parentElement?.removeChild(selectedEl);\n setAuxiliaryToolbar(editor, null);\n }\n );\n\n editor.toolbar.auxiliary.multimedia.altEl.addEventListener(\n \"input\",\n (event) => {\n const selectedEl = editor.contentEl.querySelector<HTMLAnchorElement>(\n \"figure[data-editor-selected]\"\n );\n if (!selectedEl)\n throw new Error(\"No pude encontrar el multimedia para setear el alt\");\n\n const innerEl = selectedEl.querySelector<HTMLElement>(\n \"[data-multimedia-inner]\"\n );\n if (!innerEl) throw new Error(\"No hay multimedia a para setear el alt\");\n\n setAlt(innerEl, editor.toolbar.auxiliary.multimedia.altEl.value);\n }\n );\n editor.toolbar.auxiliary.multimedia.altEl.addEventListener(\n \"keydown\",\n (event) => {\n if (event.keyCode == 13) event.preventDefault();\n }\n );\n}\n\nexport function setupButtons(editor: Editor): void {\n const buttonEl = editor.toolbarEl.querySelector(\n '[data-editor-button=\"multimedia\"]'\n );\n if (!buttonEl) throw new Error(\"No encontre el botón de multimedia\");\n buttonEl.addEventListener(\"click\", (event) => {\n event.preventDefault();\n\n const list = getValidParentInSelection({ editor, type: \"multimedia\" });\n\n const el = multimedia.create(editor);\n list[0].insertBefore(el, list[1].nextElementSibling);\n select(editor, el);\n\n return false;\n });\n}\n","import { Editor } from \"editor/editor\";\nimport { marks } from \"editor/types/marks\";\nimport { blocks, li, EditorBlock } from \"editor/types/blocks\";\nimport { parentBlocks } from \"editor/types/parentBlocks\";\nimport { multimedia } from \"editor/types/multimedia\";\nimport {\n blockNames,\n parentBlockNames,\n safeGetRangeAt,\n safeGetSelection,\n} from \"editor/utils\";\n\nexport interface EditorNode {\n selector: string;\n // la string es el nombre en la gran lista de types O 'text'\n // XXX: esto es un hack para no poner EditorNode dentro de EditorNode,\n // quizás podemos hacer que esto sea una función que retorna bool\n allowedChildren: string[] | \"ignore-children\";\n\n // * si es 'do-nothing', no hace nada si está vacío (esto es para cuando\n // permitís 'text' entonces se puede tipear adentro, ej: párrafo vacío)\n // * si es 'remove', sacamos el coso si está vacío.\n // ej: strong: { handleNothing: 'remove' }\n // * si es un block, insertamos el bloque y movemos la selección ahí\n // ej: ul: { handleNothing: li }\n handleEmpty: \"do-nothing\" | \"remove\" | EditorBlock;\n\n // esta función puede ser llamada para cosas que no necesariamente sea la\n // creación del nodo con el botón; por ejemplo, al intentar recuperar\n // el formato. esto es importante por que, por ejemplo, no deberíamos\n // cambiar la selección acá.\n create: (editor: Editor) => HTMLElement;\n\n onClick?: (editor: Editor, target: Element) => void;\n}\n\nexport const types: { [propName: string]: EditorNode } = {\n ...marks,\n ...blocks,\n li,\n ...parentBlocks,\n contentEl: {\n selector: \".editor-content\",\n allowedChildren: [...blockNames, ...parentBlockNames, \"multimedia\"],\n handleEmpty: blocks.paragraph,\n create: () => {\n throw new Error(\"se intentó crear contentEl\");\n },\n },\n br: {\n selector: \"br\",\n allowedChildren: [],\n handleEmpty: \"do-nothing\",\n create: () => {\n throw new Error(\"se intentó crear br\");\n },\n },\n multimedia,\n};\n\nexport function getType(\n node: Element\n): { typeName: string; type: EditorNode } | null {\n for (let [typeName, type] of Object.entries(types)) {\n if (node.matches(type.selector)) {\n return { typeName, type };\n }\n }\n\n return null;\n}\n\n// encuentra el primer pariente que pueda tener al type, y retorna un array\n// donde\n// array[0] = elemento que matchea el type\n// array[array.len - 1] = primer elemento seleccionado\nexport function getValidParentInSelection(args: {\n editor: Editor;\n type: string;\n}): Element[] {\n const sel = safeGetSelection(args.editor);\n if (!sel) throw new Error(\"No se donde insertar esto\");\n const range = safeGetRangeAt(sel);\n if (!range) throw new Error(\"No se donde insertar esto\");\n\n let list: Element[] = [];\n\n if (!sel.anchorNode) {\n throw new Error(\"No se donde insertar esto\");\n } else if (sel.anchorNode instanceof Element) {\n list = [sel.anchorNode];\n } else if (sel.anchorNode.parentElement) {\n list = [sel.anchorNode.parentElement];\n } else {\n throw new Error(\"No se donde insertar esto\");\n }\n\n while (true) {\n const el = list[0];\n if (!args.editor.contentEl.contains(el) && el != args.editor.contentEl)\n throw new Error(\"No se donde insertar esto\");\n const type = getType(el);\n\n if (type) {\n //if (type.typeName === 'contentEl') break\n //if (parentBlockNames.includes(type.typeName)) break\n if (\n type.type.allowedChildren instanceof Array &&\n type.type.allowedChildren.includes(args.type)\n )\n break;\n }\n if (el.parentElement) {\n list = [el.parentElement, ...list];\n } else {\n throw new Error(\"No se donde insertar esto\");\n }\n }\n\n return list;\n}\n\nexport function getValidChildren(node: Element, type: EditorNode): Node[] {\n if (type.allowedChildren === \"ignore-children\")\n throw new Error(\n \"se llamó a getValidChildren con un type que no lo permite!\"\n );\n return [...node.childNodes].filter((n) => {\n // si permite texto y esto es un texto, es válido\n if (n.nodeType === Node.TEXT_NODE)\n return type.allowedChildren.includes(\"text\") && n.textContent?.length;\n\n // si no es un elemento, no es válido\n if (!(n instanceof Element)) return false;\n\n const t = getType(n);\n if (!t) return false;\n return type.allowedChildren.includes(t.typeName);\n });\n}\n","import { storeContent, restoreContent, forgetContent } from \"editor/storage\";\nimport {\n isDirectChild,\n moveChildren,\n safeGetSelection,\n safeGetRangeAt,\n setAuxiliaryToolbar,\n parentBlockNames,\n clearSelected,\n} from \"editor/utils\";\nimport { types, getValidChildren, getType } from \"editor/types\";\nimport { setupButtons as setupMarksButtons } from \"editor/types/marks\";\nimport { setupButtons as setupBlocksButtons } from \"editor/types/blocks\";\nimport { setupButtons as setupParentBlocksButtons } from \"editor/types/parentBlocks\";\nimport { setupAuxiliaryToolbar as setupLinkAuxiliaryToolbar } from \"editor/types/link\";\nimport {\n setupAuxiliaryToolbar as setupMultimediaAuxiliaryToolbar,\n setupButtons as setupMultimediaButtons,\n} from \"editor/types/multimedia\";\nimport { setupAuxiliaryToolbar as setupMarkAuxiliaryToolbar } from \"editor/types/mark\";\n\n// Esta funcion corrije errores que pueden haber como:\n// * que un nodo que no tiene 'text' permitido no tenga children (se les\n// inserta un allowedChildren[0])\n// * TODO: que haya una imágen sin <figure> o que no esté como bloque (se ponen\n// después del bloque en el que están como bloque de por si)\n// * convierte <i> y <b> en <em> y <strong>\n// Lo hace para que siga la estructura del documento y que no se borren por\n// cleanContent luego.\nfunction fixContent(editor: Editor, node: Element = editor.contentEl): void {\n if (node.tagName === \"SCRIPT\" || node.tagName === \"STYLE\") {\n node.parentElement?.removeChild(node);\n return;\n }\n\n if (node.tagName === \"I\") {\n const el = document.createElement(\"em\");\n moveChildren(node, el, null);\n node.parentElement?.replaceChild(el, node);\n node = el;\n }\n if (node.tagName === \"B\") {\n const el = document.createElement(\"strong\");\n moveChildren(node, el, null);\n node.parentElement?.replaceChild(el, node);\n node = el;\n }\n\n if (node instanceof HTMLImageElement) {\n node.dataset.multimediaInner = \"\";\n const figureEl = types.multimedia.create(editor);\n\n let targetEl = node.parentElement;\n if (!targetEl) throw new Error(\"No encontré lx objetivo\");\n while (true) {\n const type = getType(targetEl);\n if (!type) throw new Error(\"lx objetivo tiene tipo\");\n if (type.type.allowedChildren.includes(\"multimedia\")) break;\n if (!targetEl.parentElement) throw new Error(\"No encontré lx objetivo\");\n targetEl = targetEl.parentElement;\n }\n\n let parentEl = [...targetEl.childNodes].find((el) => el.contains(node));\n if (!parentEl) throw new Error(\"no encontré lx pariente\");\n targetEl.insertBefore(figureEl, parentEl);\n\n const innerEl = figureEl.querySelector(\"[data-multimedia-inner]\");\n if (!innerEl) throw new Error(\"Raro.\");\n figureEl.replaceChild(node, innerEl);\n\n node = figureEl;\n }\n\n const _type = getType(node);\n if (!_type) return;\n\n const { typeName, type } = _type;\n\n if (type.allowedChildren !== \"ignore-children\") {\n const sel = safeGetSelection(editor);\n const range = sel && safeGetRangeAt(sel);\n\n if (getValidChildren(node, type).length == 0) {\n if (typeof type.handleEmpty !== \"string\") {\n const el = type.handleEmpty.create(editor);\n // mover cosas que pueden haber\n // por ejemplo: cuando convertís a un <ul>, queda texto fuera del li que\n // creamos acá\n moveChildren(node, el, null);\n node.appendChild(el);\n if (range?.intersectsNode(node)) sel?.collapse(el);\n }\n }\n\n for (const child of node.childNodes) {\n if (!(child instanceof Element)) continue;\n fixContent(editor, child);\n }\n }\n}\n\n// Esta funcion hace que los elementos del editor sigan la estructura.\n// TODO: nos falta borrar atributos (style, y básicamente cualquier otra cosa)\n// Edge cases:\n// * no borramos los <br> por que se requieren para que los navegadores\n// funcionen bien al escribir. no se deberían mostrar de todas maneras\nfunction cleanContent(editor: Editor, node: Element = editor.contentEl): void {\n const _type = getType(node);\n if (!_type) {\n node.parentElement?.removeChild(node);\n return;\n }\n\n const { type } = _type;\n\n if (type.allowedChildren !== \"ignore-children\") {\n for (const child of node.childNodes) {\n if (\n child.nodeType === Node.TEXT_NODE &&\n !type.allowedChildren.includes(\"text\")\n ) {\n node.removeChild(child);\n continue;\n }\n\n if (!(child instanceof Element)) continue;\n\n const childType = getType(child);\n if (childType?.typeName === \"br\") continue;\n if (!childType || !type.allowedChildren.includes(childType.typeName)) {\n // XXX: esto extrae las cosas de adentro para que no sea destructivo\n moveChildren(child, node, child);\n node.removeChild(child);\n return;\n }\n\n cleanContent(editor, child);\n }\n\n // solo contar children válido para ese nodo\n const validChildrenLength = getValidChildren(node, type).length;\n\n const sel = safeGetSelection(editor);\n const range = sel && safeGetRangeAt(sel);\n if (\n type.handleEmpty === \"remove\" &&\n validChildrenLength == 0\n //&& (!range || !range.intersectsNode(node))\n ) {\n node.parentNode?.removeChild(node);\n return;\n }\n }\n}\n\nfunction routine(editor: Editor): void {\n try {\n fixContent(editor);\n cleanContent(editor);\n storeContent(editor);\n\n editor.htmlEl.value = editor.contentEl.innerHTML;\n } catch (error) {\n console.error(\"Hubo un problema corriendo la rutina\", editor, error);\n }\n}\n\nexport interface Editor {\n editorEl: HTMLElement;\n toolbarEl: HTMLElement;\n toolbar: {\n auxiliary: {\n mark: {\n parentEl: HTMLElement;\n colorEl: HTMLInputElement;\n textColorEl: HTMLInputElement;\n };\n multimedia: {\n parentEl: HTMLElement;\n fileEl: HTMLInputElement;\n uploadEl: HTMLButtonElement;\n altEl: HTMLInputElement;\n removeEl: HTMLButtonElement;\n };\n link: {\n parentEl: HTMLElement;\n urlEl: HTMLInputElement;\n };\n };\n };\n contentEl: HTMLElement;\n wordAlertEl: HTMLElement;\n htmlEl: HTMLTextAreaElement;\n}\n\nfunction getSel<T extends Element>(parentEl: HTMLElement, selector: string): T {\n const el = parentEl.querySelector<T>(selector);\n if (!el) throw new Error(`No pude encontrar un componente \\`${selector}\\``);\n return el;\n}\n\nfunction setupEditor(editorEl: HTMLElement): void {\n // XXX: ¡Esto afecta a todo el documento! ¿Quizás usar un iframe para el editor?\n document.execCommand(\"defaultParagraphSeparator\", false, \"p\");\n\n const editor: Editor = {\n editorEl,\n toolbarEl: getSel(editorEl, \".editor-toolbar\"),\n toolbar: {\n auxiliary: {\n mark: {\n parentEl: getSel(editorEl, \"[data-editor-auxiliary=mark]\"),\n colorEl: getSel(\n editorEl,\n \"[data-editor-auxiliary=mark] [name=mark-color]\"\n ),\n textColorEl: getSel(\n editorEl,\n \"[data-editor-auxiliary=mark] [name=mark-text-color]\"\n ),\n },\n multimedia: {\n parentEl: getSel(editorEl, \"[data-editor-auxiliary=multimedia]\"),\n fileEl: getSel(\n editorEl,\n \"[data-editor-auxiliary=multimedia] [name=multimedia-file]\"\n ),\n uploadEl: getSel(\n editorEl,\n \"[data-editor-auxiliary=multimedia] [name=multimedia-file-upload]\"\n ),\n altEl: getSel(\n editorEl,\n \"[data-editor-auxiliary=multimedia] [name=multimedia-alt]\"\n ),\n removeEl: getSel(\n editorEl,\n \"[data-editor-auxiliary=multimedia] [name=multimedia-remove]\"\n ),\n },\n link: {\n parentEl: getSel(editorEl, \"[data-editor-auxiliary=link]\"),\n urlEl: getSel(\n editorEl,\n \"[data-editor-auxiliary=link] [name=link-url]\"\n ),\n },\n },\n },\n contentEl: getSel(editorEl, \".editor-content\"),\n wordAlertEl: getSel(editorEl, \".editor-aviso-word\"),\n htmlEl: getSel(editorEl, \"textarea\"),\n };\n console.debug(\"iniciando editor\", editor);\n\n // Recuperar el contenido si hay algo guardado, si tuviéramos un campo\n // de última edición podríamos saber si el artículo fue editado\n // después o la versión local es la última.\n //\n // TODO: Preguntar si se lo quiere recuperar.\n restoreContent(editor);\n\n // Word alert\n editor.contentEl.addEventListener(\"paste\", () => {\n editor.wordAlertEl.style.display = \"block\";\n });\n\n // Setup routine listeners\n const observer = new MutationObserver(() => routine(editor));\n observer.observe(editor.contentEl, {\n childList: true,\n attributes: true,\n subtree: true,\n characterData: true,\n });\n\n document.addEventListener(\"selectionchange\", () => routine(editor));\n\n // Capture onClick\n editor.contentEl.addEventListener(\n \"click\",\n (event) => {\n const target = event.target! as Element;\n const type = getType(target);\n if (!type || !type.type.onClick) {\n setAuxiliaryToolbar(editor, null);\n clearSelected(editor);\n return true;\n }\n type.type.onClick(editor, target);\n return false;\n },\n true\n );\n\n // Clean seleted\n const selectedEl = editor.contentEl.querySelector(\"[data-editor-selected]\");\n if (selectedEl) delete (selectedEl as HTMLElement).dataset.editorSelected;\n\n // Setup botones\n setupMarksButtons(editor);\n setupBlocksButtons(editor);\n setupParentBlocksButtons(editor);\n setupMultimediaButtons(editor);\n\n setupLinkAuxiliaryToolbar(editor);\n setupMultimediaAuxiliaryToolbar(editor);\n setupMarkAuxiliaryToolbar(editor);\n\n // Finally...\n routine(editor);\n}\n\ndocument.addEventListener(\"turbolinks:load\", () => {\n const flash = document.querySelector<HTMLElement>(\".js-flash\");\n\n if (flash) {\n const keys = JSON.parse(flash.dataset.keys || \"[]\");\n\n switch (flash.dataset.target) {\n case \"editor\":\n switch (flash.dataset.action) {\n case \"forget-content\":\n keys.forEach(forgetContent);\n }\n }\n }\n\n for (const editorEl of document.querySelectorAll<HTMLElement>(\n \".editor[data-editor]\"\n )) {\n try {\n setupEditor(editorEl);\n } catch (error) {\n // TODO: mostrar error\n console.error(\"no se pudo iniciar el editor, error completo\", error);\n }\n }\n});\n","function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction e() {}\n\nfunction t(e) {\n return e();\n}\n\nfunction n() {\n return Object.create(null);\n}\n\nfunction r(e) {\n e.forEach(t);\n}\n\nfunction u(e) {\n return \"function\" == typeof e;\n}\n\nfunction o(e, t) {\n return e != e ? t == t : e !== t || e && \"object\" == _typeof(e) || \"function\" == typeof e;\n}\n\nfunction a(e, t) {\n e.appendChild(t);\n}\n\nfunction d(e, t, n) {\n e.insertBefore(t, n || null);\n}\n\nfunction l(e) {\n e.parentNode.removeChild(e);\n}\n\nfunction i(e) {\n return document.createElement(e);\n}\n\nfunction _c(e) {\n return document.createTextNode(e);\n}\n\nfunction s() {\n return _c(\" \");\n}\n\nfunction f(e, t, n, r) {\n return e.addEventListener(t, n, r), function () {\n return e.removeEventListener(t, n, r);\n };\n}\n\nfunction _p(e, t, n) {\n null == n ? e.removeAttribute(t) : e.setAttribute(t, n);\n}\n\nfunction g(e, t) {\n t = \"\" + t, e.data !== t && (e.data = t);\n}\n\nvar v;\n\nfunction m(e) {\n v = e;\n}\n\nvar b = [],\n h = [],\n $ = [],\n y = [],\n _ = Promise.resolve();\n\nvar x = !1;\n\nfunction k(e) {\n $.push(e);\n}\n\nfunction E() {\n var e = new Set();\n\n do {\n for (; b.length;) {\n var _e = b.shift();\n\n m(_e), V(_e.$$);\n }\n\n for (; h.length;) {\n h.pop()();\n }\n\n for (var _t = 0; _t < $.length; _t += 1) {\n var _n = $[_t];\n e.has(_n) || (_n(), e.add(_n));\n }\n\n $.length = 0;\n } while (b.length);\n\n for (; y.length;) {\n y.pop()();\n }\n\n x = !1;\n}\n\nfunction V(e) {\n e.fragment && (e.update(e.dirty), r(e.before_update), e.fragment.p(e.dirty, e.ctx), e.dirty = null, e.after_update.forEach(k));\n}\n\nvar w = new Set();\n\nfunction A(e, t) {\n e.$$.dirty || (b.push(e), x || (x = !0, _.then(E)), e.$$.dirty = n()), e.$$.dirty[t] = !0;\n}\n\nfunction C(o, a, d, l, i, c) {\n var s = v;\n m(o);\n var f = a.props || {},\n p = o.$$ = {\n fragment: null,\n ctx: null,\n props: c,\n update: e,\n not_equal: i,\n bound: n(),\n on_mount: [],\n on_destroy: [],\n before_update: [],\n after_update: [],\n context: new Map(s ? s.$$.context : []),\n callbacks: n(),\n dirty: null\n };\n var g = !1;\n var b, h;\n p.ctx = d ? d(o, f, function (e, t) {\n p.ctx && i(p.ctx[e], p.ctx[e] = t) && (p.bound[e] && p.bound[e](t), g && A(o, e));\n }) : f, p.update(), g = !0, r(p.before_update), p.fragment = l(p.ctx), a.target && (a.hydrate ? p.fragment.l(function (e) {\n return Array.from(e.childNodes);\n }(a.target)) : p.fragment.c(), a.intro && (b = o.$$.fragment) && b.i && (w[\"delete\"](b), b.i(h)), function (e, n, o) {\n var _e$$$ = e.$$,\n a = _e$$$.fragment,\n d = _e$$$.on_mount,\n l = _e$$$.on_destroy,\n i = _e$$$.after_update;\n a.m(n, o), k(function () {\n var n = d.map(t).filter(u);\n l ? l.push.apply(l, _toConsumableArray(n)) : r(n), e.$$.on_mount = [];\n }), i.forEach(k);\n }(o, a.target, a.anchor), E()), m(s);\n}\n\nvar N = /*#__PURE__*/function () {\n function N() {\n _classCallCheck(this, N);\n }\n\n _createClass(N, [{\n key: \"$destroy\",\n value: function $destroy() {\n var t, n;\n n = 1, (t = this).$$.fragment && (r(t.$$.on_destroy), t.$$.fragment.d(n), t.$$.on_destroy = t.$$.fragment = null, t.$$.ctx = {}), this.$destroy = e;\n }\n }, {\n key: \"$on\",\n value: function $on(e, t) {\n var n = this.$$.callbacks[e] || (this.$$.callbacks[e] = []);\n return n.push(t), function () {\n var e = n.indexOf(t);\n -1 !== e && n.splice(e, 1);\n };\n }\n }, {\n key: \"$set\",\n value: function $set() {}\n }]);\n\n return N;\n}();\n\nfunction O(e, t, n) {\n var r = Object.create(e);\n return r.value = t[n], r;\n}\n\nfunction j(e) {\n var t,\n n,\n r,\n u,\n o,\n v,\n m,\n b = e.value + \"\";\n return {\n c: function c() {\n t = i(\"label\"), n = i(\"input\"), u = s(), o = _c(b), v = s(), _p(n, \"type\", \"checkbox\"), n.checked = \"checked\", _p(n, \"aria-describedby\", e.described), n.value = r = e.value, _p(n, \"name\", e.name), m = f(n, \"change\", e.removeValue);\n },\n m: function m(e, r) {\n d(e, t, r), a(t, n), a(t, u), a(t, o), a(t, v);\n },\n p: function p(e, t) {\n e.described && _p(n, \"aria-describedby\", t.described), e.group && r !== (r = t.value) && (n.value = r), e.name && _p(n, \"name\", t.name), e.group && b !== (b = t.value + \"\") && g(o, b);\n },\n d: function d(e) {\n e && l(t), m();\n }\n };\n}\n\nfunction S(t) {\n for (var n, u, o, v, _m, b, h, $, y, _, x = t.group, k = [], E = 0; E < x.length; E += 1) {\n k[E] = j(O(t, x, E));\n }\n\n return {\n c: function c() {\n n = i(\"div\"), u = i(\"input\"), o = s(), v = i(\"input\"), _m = s(), b = i(\"fieldset\"), h = i(\"legend\"), $ = _c(t.legend), y = s();\n\n for (var e = 0; e < k.length; e += 1) {\n k[e].c();\n }\n\n _p(u, \"type\", \"text\"), _p(u, \"aria-describedby\", t.described), _p(u, \"list\", t.list), _p(v, \"type\", \"button\"), v.value = t.button, _p(n, \"class\", \"input-tag\"), _ = [f(u, \"input\", t.input0_input_handler), f(u, \"keypress\", t.addValue), f(v, \"click\", t.addValue)];\n },\n m: function m(e, r) {\n d(e, n, r), a(n, u), u.value = t.added_value, a(n, o), a(n, v), a(n, _m), a(n, b), a(b, h), a(h, $), a(b, y);\n\n for (var l = 0; l < k.length; l += 1) {\n k[l].m(b, null);\n }\n },\n p: function p(e, t) {\n if (e.added_value && u.value !== t.added_value && (u.value = t.added_value), e.described && _p(u, \"aria-describedby\", t.described), e.list && _p(u, \"list\", t.list), e.button && (v.value = t.button), e.legend && g($, t.legend), e.group || e.described || e.name) {\n x = t.group;\n\n for (var n = 0; n < x.length; n += 1) {\n var _r = O(t, x, n);\n\n k[n] ? k[n].p(e, _r) : (k[n] = j(_r), k[n].c(), k[n].m(b, null));\n }\n\n for (; n < k.length; n += 1) {\n k[n].d(1);\n }\n\n k.length = x.length;\n }\n },\n i: e,\n o: e,\n d: function d(e) {\n e && l(n), function (e, t) {\n for (var _n2 = 0; _n2 < e.length; _n2 += 1) {\n e[_n2] && e[_n2].d(t);\n }\n }(k, e), r(_);\n }\n };\n}\n\nfunction L(e, t, n) {\n var _t$values = t.values,\n r = _t$values === void 0 ? \"[]\" : _t$values,\n _t$button = t.button,\n u = _t$button === void 0 ? \"Agregar\" : _t$button,\n _t$legend = t.legend,\n o = _t$legend === void 0 ? \"\" : _t$legend,\n _t$described = t.described,\n a = _t$described === void 0 ? \"\" : _t$described,\n d = t.name,\n l = t.list,\n _t$remove = t.remove,\n i = _t$remove === void 0 ? !0 : _t$remove,\n c = JSON.parse(r),\n s = \"\";\n return e.$set = function (e) {\n \"values\" in e && n(\"values\", r = e.values), \"button\" in e && n(\"button\", u = e.button), \"legend\" in e && n(\"legend\", o = e.legend), \"described\" in e && n(\"described\", a = e.described), \"name\" in e && n(\"name\", d = e.name), \"list\" in e && n(\"list\", l = e.list), \"remove\" in e && n(\"remove\", i = e.remove);\n }, {\n values: r,\n button: u,\n legend: o,\n described: a,\n name: d,\n list: l,\n remove: i,\n group: c,\n added_value: s,\n addValue: function addValue(e) {\n null != e.keyCode && 13 != e.keyCode || (e.preventDefault(), e.stopPropagation(), 0 != s.length && (c.includes(s) || (n(\"group\", c = [].concat(_toConsumableArray(c), [s.trim()])), n(\"added_value\", s = \"\"))));\n },\n removeValue: function removeValue(e) {\n [!1, \"false\"].includes(i) || (e.target.checked = \"checked\", n(\"group\", c = c.filter(function (t) {\n return t !== e.target.value;\n })));\n },\n input0_input_handler: function input0_input_handler() {\n s = this.value, n(\"added_value\", s);\n }\n };\n}\n\nvar _default = /*#__PURE__*/function (_N) {\n _inherits(_default, _N);\n\n var _super = _createSuper(_default);\n\n function _default(e) {\n var _this;\n\n _classCallCheck(this, _default);\n\n _this = _super.call(this), C(_assertThisInitialized(_this), e, L, S, o, [\"values\", \"button\", \"legend\", \"described\", \"name\", \"list\", \"remove\"]);\n return _this;\n }\n\n return _default;\n}(N);\n\nexport { _default as default };","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction e() {}\n\nfunction t(e) {\n return e();\n}\n\nfunction n() {\n return Object.create(null);\n}\n\nfunction r(e) {\n e.forEach(t);\n}\n\nfunction o(e) {\n return \"function\" == typeof e;\n}\n\nfunction u(e, t) {\n return e != e ? t == t : e !== t || e && \"object\" == _typeof(e) || \"function\" == typeof e;\n}\n\nfunction l(e, t) {\n e.appendChild(t);\n}\n\nfunction c(e, t, n) {\n e.insertBefore(t, n || null);\n}\n\nfunction a(e) {\n e.parentNode.removeChild(e);\n}\n\nfunction i(e) {\n return document.createElement(e);\n}\n\nfunction s(e) {\n return document.createTextNode(e);\n}\n\nfunction f() {\n return s(\" \");\n}\n\nfunction d(e, t, n, r) {\n return e.addEventListener(t, n, r), function () {\n return e.removeEventListener(t, n, r);\n };\n}\n\nfunction _p(e, t, n) {\n null == n ? e.removeAttribute(t) : e.getAttribute(t) !== n && e.setAttribute(t, n);\n}\n\nfunction g(e, t) {\n t = \"\" + t, e.data !== t && (e.data = t);\n}\n\nfunction h(e, t) {\n (null != t || e.value) && (e.value = t);\n}\n\nvar m;\n\nfunction b(e) {\n m = e;\n}\n\nvar $ = [],\n y = [],\n v = [],\n x = [],\n _ = Promise.resolve();\n\nvar k = !1;\n\nfunction E(e) {\n v.push(e);\n}\n\nvar A = new Set();\n\nfunction N() {\n do {\n for (; $.length;) {\n var _e = $.shift();\n\n b(_e), O(_e.$$);\n }\n\n for (; y.length;) {\n y.pop()();\n }\n\n for (var _e2 = 0; _e2 < v.length; _e2 += 1) {\n var _t = v[_e2];\n A.has(_t) || (A.add(_t), _t());\n }\n\n v.length = 0;\n } while ($.length);\n\n for (; x.length;) {\n x.pop()();\n }\n\n k = !1, A.clear();\n}\n\nfunction O(e) {\n if (null !== e.fragment) {\n e.update(), r(e.before_update);\n var _t2 = e.dirty;\n e.dirty = [-1], e.fragment && e.fragment.p(e.ctx, _t2), e.after_update.forEach(E);\n }\n}\n\nvar w = new Set();\n\nfunction C(e, t) {\n -1 === e.$$.dirty[0] && ($.push(e), k || (k = !0, _.then(N)), e.$$.dirty.fill(0)), e.$$.dirty[t / 31 | 0] |= 1 << t % 31;\n}\n\nfunction S(u, l, c, a, i, s) {\n var f = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : [-1];\n var d = m;\n b(u);\n var p = l.props || {},\n g = u.$$ = {\n fragment: null,\n ctx: null,\n props: s,\n update: e,\n not_equal: i,\n bound: n(),\n on_mount: [],\n on_destroy: [],\n before_update: [],\n after_update: [],\n context: new Map(d ? d.$$.context : []),\n callbacks: n(),\n dirty: f\n };\n var h = !1;\n var $, y;\n g.ctx = c ? c(u, p, function (e, t) {\n var r = (arguments.length <= 2 ? 0 : arguments.length - 2) ? arguments.length <= 2 ? undefined : arguments[2] : t;\n return g.ctx && i(g.ctx[e], g.ctx[e] = r) && (g.bound[e] && g.bound[e](r), h && C(u, e)), t;\n }) : [], g.update(), h = !0, r(g.before_update), g.fragment = !!a && a(g.ctx), l.target && (l.hydrate ? g.fragment && g.fragment.l(function (e) {\n return Array.from(e.childNodes);\n }(l.target)) : g.fragment && g.fragment.c(), l.intro && ($ = u.$$.fragment) && $.i && (w[\"delete\"]($), $.i(y)), function (e, n, u) {\n var _e$$$ = e.$$,\n l = _e$$$.fragment,\n c = _e$$$.on_mount,\n a = _e$$$.on_destroy,\n i = _e$$$.after_update;\n l && l.m(n, u), E(function () {\n var n = c.map(t).filter(o);\n a ? a.push.apply(a, _toConsumableArray(n)) : r(n), e.$$.on_mount = [];\n }), i.forEach(E);\n }(u, l.target, l.anchor), N()), b(d);\n}\n\nfunction V(e, t, n) {\n var r = e.slice();\n return r[15] = t[n], r;\n}\n\nfunction j(e) {\n var t,\n n,\n r,\n o,\n u,\n h,\n _m,\n b = e[6][e[15]] + \"\";\n\n return {\n c: function c() {\n t = i(\"label\"), n = i(\"input\"), o = f(), u = s(b), h = f(), _p(n, \"type\", \"checkbox\"), n.checked = \"checked\", _p(n, \"aria-describedby\", e[2]), n.value = r = e[15], _p(n, \"name\", e[3]);\n },\n m: function m(r, a) {\n c(r, t, a), l(t, n), l(t, o), l(t, u), l(t, h), _m = d(n, \"change\", e[9]);\n },\n p: function p(e, t) {\n 4 & t && _p(n, \"aria-describedby\", e[2]), 32 & t && r !== (r = e[15]) && (n.value = r), 8 & t && _p(n, \"name\", e[3]), 96 & t && b !== (b = e[6][e[15]] + \"\") && g(u, b);\n },\n d: function d(e) {\n e && a(t), _m();\n }\n };\n}\n\nfunction J(t) {\n var n,\n o,\n u,\n _m2,\n b,\n $,\n y,\n v,\n x,\n _,\n k = t[5],\n E = [];\n\n for (var _e3 = 0; _e3 < k.length; _e3 += 1) {\n E[_e3] = j(V(t, k, _e3));\n }\n\n return {\n c: function c() {\n n = i(\"div\"), o = i(\"input\"), u = f(), _m2 = i(\"input\"), b = f(), $ = i(\"fieldset\"), y = i(\"legend\"), v = s(t[1]), x = f();\n\n for (var _e4 = 0; _e4 < E.length; _e4 += 1) {\n E[_e4].c();\n }\n\n _p(o, \"type\", \"text\"), _p(o, \"aria-describedby\", t[2]), _p(o, \"list\", t[4]), _p(_m2, \"type\", \"button\"), _m2.value = t[0], _p(n, \"class\", \"input-map\");\n },\n m: function m(e, r) {\n c(e, n, r), l(n, o), h(o, t[7]), l(n, u), l(n, _m2), l(n, b), l(n, $), l($, y), l(y, v), l($, x);\n\n for (var _e5 = 0; _e5 < E.length; _e5 += 1) {\n E[_e5].m($, null);\n }\n\n _ = [d(o, \"keypress\", t[8]), d(o, \"input\", t[14]), d(_m2, \"click\", t[8])];\n },\n p: function p(e, _ref) {\n var _ref2 = _slicedToArray(_ref, 1),\n t = _ref2[0];\n\n if (4 & t && _p(o, \"aria-describedby\", e[2]), 16 & t && _p(o, \"list\", e[4]), 128 & t && o.value !== e[7] && h(o, e[7]), 1 & t && (_m2.value = e[0]), 2 & t && g(v, e[1]), 620 & t) {\n var _n2;\n\n for (k = e[5], _n2 = 0; _n2 < k.length; _n2 += 1) {\n var _r = V(e, k, _n2);\n\n E[_n2] ? E[_n2].p(_r, t) : (E[_n2] = j(_r), E[_n2].c(), E[_n2].m($, null));\n }\n\n for (; _n2 < E.length; _n2 += 1) {\n E[_n2].d(1);\n }\n\n E.length = k.length;\n }\n },\n i: e,\n o: e,\n d: function d(e) {\n e && a(n), function (e, t) {\n for (var _n3 = 0; _n3 < e.length; _n3 += 1) {\n e[_n3] && e[_n3].d(t);\n }\n }(E, e), r(_);\n }\n };\n}\n\nfunction L(e, t, n) {\n var _t$values = t.values,\n r = _t$values === void 0 ? \"[]\" : _t$values,\n _t$defaultValues = t.defaultValues,\n o = _t$defaultValues === void 0 ? \"{}\" : _t$defaultValues,\n _t$button = t.button,\n u = _t$button === void 0 ? \"Agregar\" : _t$button,\n _t$legend = t.legend,\n l = _t$legend === void 0 ? \"\" : _t$legend,\n _t$described = t.described,\n c = _t$described === void 0 ? \"\" : _t$described,\n a = t.name,\n i = t.list,\n _t$remove = t.remove,\n s = _t$remove === void 0 ? !0 : _t$remove,\n f = JSON.parse(o),\n d = JSON.parse(r),\n p = {},\n g = \"\";\n d.forEach(function (e) {\n return n(6, p[e] = Object.keys(f).find(function (t) {\n return f[t] == e;\n }), p);\n });\n return e.$set = function (e) {\n \"values\" in e && n(10, r = e.values), \"defaultValues\" in e && n(11, o = e.defaultValues), \"button\" in e && n(0, u = e.button), \"legend\" in e && n(1, l = e.legend), \"described\" in e && n(2, c = e.described), \"name\" in e && n(3, a = e.name), \"list\" in e && n(4, i = e.list), \"remove\" in e && n(12, s = e.remove);\n }, [u, l, c, a, i, d, p, g, function (e) {\n null != e.keyCode && 13 != e.keyCode || (e.preventDefault(), e.stopPropagation(), 0 != g.length && f[g] && (p[f[g]] || (d.push(f[g]), n(6, p[f[g]] = g, p), n(7, g = \"\"))));\n }, function (e) {\n [!1, \"false\"].includes(s) || (e.target.checked = \"checked\", n(5, d = d.filter(function (t) {\n return t !== e.target.value;\n })), delete p[e.target.value]);\n }, r, o, s, f, function () {\n g = this.value, n(7, g);\n }];\n}\n\nvar _default = /*#__PURE__*/function (_ref3) {\n _inherits(_default, _ref3);\n\n var _super = _createSuper(_default);\n\n function _default(e) {\n var _this;\n\n _classCallCheck(this, _default);\n\n _this = _super.call(this), S(_assertThisInitialized(_this), e, L, J, u, {\n values: 10,\n defaultValues: 11,\n button: 0,\n legend: 1,\n described: 2,\n name: 3,\n list: 4,\n remove: 12\n });\n return _this;\n }\n\n return _default;\n}( /*#__PURE__*/function () {\n function _class() {\n _classCallCheck(this, _class);\n }\n\n _createClass(_class, [{\n key: \"$destroy\",\n value: function $destroy() {\n !function (e, t) {\n var n = e.$$;\n null !== n.fragment && (r(n.on_destroy), n.fragment && n.fragment.d(t), n.on_destroy = n.fragment = null, n.ctx = []);\n }(this, 1), this.$destroy = e;\n }\n }, {\n key: \"$on\",\n value: function $on(e, t) {\n var n = this.$$.callbacks[e] || (this.$$.callbacks[e] = []);\n return n.push(t), function () {\n var e = n.indexOf(t);\n -1 !== e && n.splice(e, 1);\n };\n }\n }, {\n key: \"$set\",\n value: function $set() {}\n }]);\n\n return _class;\n}());\n\nexport { _default as default };","// ::- Persistent data structure representing an ordered mapping from\n// strings to values, with some convenient update methods.\nfunction OrderedMap(content) {\n this.content = content;\n}\n\nOrderedMap.prototype = {\n constructor: OrderedMap,\n find: function find(key) {\n for (var i = 0; i < this.content.length; i += 2) {\n if (this.content[i] === key) return i;\n }\n\n return -1;\n },\n // :: (string) → ?any\n // Retrieve the value stored under `key`, or return undefined when\n // no such key exists.\n get: function get(key) {\n var found = this.find(key);\n return found == -1 ? undefined : this.content[found + 1];\n },\n // :: (string, any, ?string) → OrderedMap\n // Create a new map by replacing the value of `key` with a new\n // value, or adding a binding to the end of the map. If `newKey` is\n // given, the key of the binding will be replaced with that key.\n update: function update(key, value, newKey) {\n var self = newKey && newKey != key ? this.remove(newKey) : this;\n var found = self.find(key),\n content = self.content.slice();\n\n if (found == -1) {\n content.push(newKey || key, value);\n } else {\n content[found + 1] = value;\n if (newKey) content[found] = newKey;\n }\n\n return new OrderedMap(content);\n },\n // :: (string) → OrderedMap\n // Return a map with the given key removed, if it existed.\n remove: function remove(key) {\n var found = this.find(key);\n if (found == -1) return this;\n var content = this.content.slice();\n content.splice(found, 2);\n return new OrderedMap(content);\n },\n // :: (string, any) → OrderedMap\n // Add a new key to the start of the map.\n addToStart: function addToStart(key, value) {\n return new OrderedMap([key, value].concat(this.remove(key).content));\n },\n // :: (string, any) → OrderedMap\n // Add a new key to the end of the map.\n addToEnd: function addToEnd(key, value) {\n var content = this.remove(key).content.slice();\n content.push(key, value);\n return new OrderedMap(content);\n },\n // :: (string, string, any) → OrderedMap\n // Add a key after the given key. If `place` is not found, the new\n // key is added to the end.\n addBefore: function addBefore(place, key, value) {\n var without = this.remove(key),\n content = without.content.slice();\n var found = without.find(place);\n content.splice(found == -1 ? content.length : found, 0, key, value);\n return new OrderedMap(content);\n },\n // :: ((key: string, value: any))\n // Call the given function for each key/value pair in the map, in\n // order.\n forEach: function forEach(f) {\n for (var i = 0; i < this.content.length; i += 2) {\n f(this.content[i], this.content[i + 1]);\n }\n },\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by prepending the keys in this map that don't\n // appear in `map` before the keys in `map`.\n prepend: function prepend(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this;\n return new OrderedMap(map.content.concat(this.subtract(map).content));\n },\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by appending the keys in this map that don't\n // appear in `map` after the keys in `map`.\n append: function append(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this;\n return new OrderedMap(this.subtract(map).content.concat(map.content));\n },\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a map containing all the keys in this map that don't\n // appear in `map`.\n subtract: function subtract(map) {\n var result = this;\n map = OrderedMap.from(map);\n\n for (var i = 0; i < map.content.length; i += 2) {\n result = result.remove(map.content[i]);\n }\n\n return result;\n },\n\n // :: number\n // The amount of keys in this map.\n get size() {\n return this.content.length >> 1;\n }\n\n}; // :: (?union<Object, OrderedMap>) → OrderedMap\n// Return a map with the given content. If null, create an empty\n// map. If given an ordered map, return that map itself. If given an\n// object, create a map from the object's properties.\n\nOrderedMap.from = function (value) {\n if (value instanceof OrderedMap) return value;\n var content = [];\n if (value) for (var prop in value) {\n content.push(prop, value[prop]);\n }\n return new OrderedMap(content);\n};\n\nvar orderedmap = OrderedMap;\nexport default orderedmap;","import InputTag from 'input-tag/input-tag'\nimport InputMap from 'input-map/input-map'\n\ndocument.addEventListener('turbolinks:load', () => {\n document.querySelectorAll('.taggable').forEach(target => {\n target.innerHTML = ''\n\n new InputTag({ target, props: { ...target.dataset } })\n })\n\n document.querySelectorAll('.mapable').forEach(target => {\n target.innerHTML = ''\n\n new InputMap({ target, props: { ...target.dataset } })\n })\n})\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport OrderedMap from 'orderedmap';\n\nfunction findDiffStart(a, b, pos) {\n for (var i = 0;; i++) {\n if (i == a.childCount || i == b.childCount) {\n return a.childCount == b.childCount ? null : pos;\n }\n\n var childA = a.child(i),\n childB = b.child(i);\n\n if (childA == childB) {\n pos += childA.nodeSize;\n continue;\n }\n\n if (!childA.sameMarkup(childB)) {\n return pos;\n }\n\n if (childA.isText && childA.text != childB.text) {\n for (var j = 0; childA.text[j] == childB.text[j]; j++) {\n pos++;\n }\n\n return pos;\n }\n\n if (childA.content.size || childB.content.size) {\n var inner = findDiffStart(childA.content, childB.content, pos + 1);\n\n if (inner != null) {\n return inner;\n }\n }\n\n pos += childA.nodeSize;\n }\n}\n\nfunction findDiffEnd(a, b, posA, posB) {\n for (var iA = a.childCount, iB = b.childCount;;) {\n if (iA == 0 || iB == 0) {\n return iA == iB ? null : {\n a: posA,\n b: posB\n };\n }\n\n var childA = a.child(--iA),\n childB = b.child(--iB),\n size = childA.nodeSize;\n\n if (childA == childB) {\n posA -= size;\n posB -= size;\n continue;\n }\n\n if (!childA.sameMarkup(childB)) {\n return {\n a: posA,\n b: posB\n };\n }\n\n if (childA.isText && childA.text != childB.text) {\n var same = 0,\n minSize = Math.min(childA.text.length, childB.text.length);\n\n while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) {\n same++;\n posA--;\n posB--;\n }\n\n return {\n a: posA,\n b: posB\n };\n }\n\n if (childA.content.size || childB.content.size) {\n var inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1);\n\n if (inner) {\n return inner;\n }\n }\n\n posA -= size;\n posB -= size;\n }\n} // ::- A fragment represents a node's collection of child nodes.\n//\n// Like nodes, fragments are persistent data structures, and you\n// should not mutate them or their content. Rather, you create new\n// instances whenever needed. The API tries to make this easy.\n\n\nvar Fragment = function Fragment(content, size) {\n this.content = content; // :: number\n // The size of the fragment, which is the total of the size of its\n // content nodes.\n\n this.size = size || 0;\n\n if (size == null) {\n for (var i = 0; i < content.length; i++) {\n this.size += content[i].nodeSize;\n }\n }\n};\n\nvar prototypeAccessors = {\n firstChild: {\n configurable: true\n },\n lastChild: {\n configurable: true\n },\n childCount: {\n configurable: true\n }\n}; // :: (number, number, (node: Node, start: number, parent: Node, index: number) → ?bool, ?number)\n// Invoke a callback for all descendant nodes between the given two\n// positions (relative to start of this fragment). Doesn't descend\n// into a node when the callback returns `false`.\n\nFragment.prototype.nodesBetween = function nodesBetween(from, to, f, nodeStart, parent) {\n if (nodeStart === void 0) nodeStart = 0;\n\n for (var i = 0, pos = 0; pos < to; i++) {\n var child = this.content[i],\n end = pos + child.nodeSize;\n\n if (end > from && f(child, nodeStart + pos, parent, i) !== false && child.content.size) {\n var start = pos + 1;\n child.nodesBetween(Math.max(0, from - start), Math.min(child.content.size, to - start), f, nodeStart + start);\n }\n\n pos = end;\n }\n}; // :: ((node: Node, pos: number, parent: Node) → ?bool)\n// Call the given callback for every descendant node. The callback\n// may return `false` to prevent traversal of a given node's children.\n\n\nFragment.prototype.descendants = function descendants(f) {\n this.nodesBetween(0, this.size, f);\n}; // : (number, number, ?string, ?string) → string\n\n\nFragment.prototype.textBetween = function textBetween(from, to, blockSeparator, leafText) {\n var text = \"\",\n separated = true;\n this.nodesBetween(from, to, function (node, pos) {\n if (node.isText) {\n text += node.text.slice(Math.max(from, pos) - pos, to - pos);\n separated = !blockSeparator;\n } else if (node.isLeaf && leafText) {\n text += leafText;\n separated = !blockSeparator;\n } else if (!separated && node.isBlock) {\n text += blockSeparator;\n separated = true;\n }\n }, 0);\n return text;\n}; // :: (Fragment) → Fragment\n// Create a new fragment containing the combined content of this\n// fragment and the other.\n\n\nFragment.prototype.append = function append(other) {\n if (!other.size) {\n return this;\n }\n\n if (!this.size) {\n return other;\n }\n\n var last = this.lastChild,\n first = other.firstChild,\n content = this.content.slice(),\n i = 0;\n\n if (last.isText && last.sameMarkup(first)) {\n content[content.length - 1] = last.withText(last.text + first.text);\n i = 1;\n }\n\n for (; i < other.content.length; i++) {\n content.push(other.content[i]);\n }\n\n return new Fragment(content, this.size + other.size);\n}; // :: (number, ?number) → Fragment\n// Cut out the sub-fragment between the two given positions.\n\n\nFragment.prototype.cut = function cut(from, to) {\n if (to == null) {\n to = this.size;\n }\n\n if (from == 0 && to == this.size) {\n return this;\n }\n\n var result = [],\n size = 0;\n\n if (to > from) {\n for (var i = 0, pos = 0; pos < to; i++) {\n var child = this.content[i],\n end = pos + child.nodeSize;\n\n if (end > from) {\n if (pos < from || end > to) {\n if (child.isText) {\n child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos));\n } else {\n child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1));\n }\n }\n\n result.push(child);\n size += child.nodeSize;\n }\n\n pos = end;\n }\n }\n\n return new Fragment(result, size);\n};\n\nFragment.prototype.cutByIndex = function cutByIndex(from, to) {\n if (from == to) {\n return Fragment.empty;\n }\n\n if (from == 0 && to == this.content.length) {\n return this;\n }\n\n return new Fragment(this.content.slice(from, to));\n}; // :: (number, Node) → Fragment\n// Create a new fragment in which the node at the given index is\n// replaced by the given node.\n\n\nFragment.prototype.replaceChild = function replaceChild(index, node) {\n var current = this.content[index];\n\n if (current == node) {\n return this;\n }\n\n var copy = this.content.slice();\n var size = this.size + node.nodeSize - current.nodeSize;\n copy[index] = node;\n return new Fragment(copy, size);\n}; // : (Node) → Fragment\n// Create a new fragment by prepending the given node to this\n// fragment.\n\n\nFragment.prototype.addToStart = function addToStart(node) {\n return new Fragment([node].concat(this.content), this.size + node.nodeSize);\n}; // : (Node) → Fragment\n// Create a new fragment by appending the given node to this\n// fragment.\n\n\nFragment.prototype.addToEnd = function addToEnd(node) {\n return new Fragment(this.content.concat(node), this.size + node.nodeSize);\n}; // :: (Fragment) → bool\n// Compare this fragment to another one.\n\n\nFragment.prototype.eq = function eq(other) {\n if (this.content.length != other.content.length) {\n return false;\n }\n\n for (var i = 0; i < this.content.length; i++) {\n if (!this.content[i].eq(other.content[i])) {\n return false;\n }\n }\n\n return true;\n}; // :: ?Node\n// The first child of the fragment, or `null` if it is empty.\n\n\nprototypeAccessors.firstChild.get = function () {\n return this.content.length ? this.content[0] : null;\n}; // :: ?Node\n// The last child of the fragment, or `null` if it is empty.\n\n\nprototypeAccessors.lastChild.get = function () {\n return this.content.length ? this.content[this.content.length - 1] : null;\n}; // :: number\n// The number of child nodes in this fragment.\n\n\nprototypeAccessors.childCount.get = function () {\n return this.content.length;\n}; // :: (number) → Node\n// Get the child node at the given index. Raise an error when the\n// index is out of range.\n\n\nFragment.prototype.child = function child(index) {\n var found = this.content[index];\n\n if (!found) {\n throw new RangeError(\"Index \" + index + \" out of range for \" + this);\n }\n\n return found;\n}; // :: (number) → ?Node\n// Get the child node at the given index, if it exists.\n\n\nFragment.prototype.maybeChild = function maybeChild(index) {\n return this.content[index];\n}; // :: ((node: Node, offset: number, index: number))\n// Call `f` for every child node, passing the node, its offset\n// into this parent node, and its index.\n\n\nFragment.prototype.forEach = function forEach(f) {\n for (var i = 0, p = 0; i < this.content.length; i++) {\n var child = this.content[i];\n f(child, p, i);\n p += child.nodeSize;\n }\n}; // :: (Fragment) → ?number\n// Find the first position at which this fragment and another\n// fragment differ, or `null` if they are the same.\n\n\nFragment.prototype.findDiffStart = function findDiffStart$1(other, pos) {\n if (pos === void 0) pos = 0;\n return findDiffStart(this, other, pos);\n}; // :: (Fragment) → ?{a: number, b: number}\n// Find the first position, searching from the end, at which this\n// fragment and the given fragment differ, or `null` if they are the\n// same. Since this position will not be the same in both nodes, an\n// object with two separate positions is returned.\n\n\nFragment.prototype.findDiffEnd = function findDiffEnd$1(other, pos, otherPos) {\n if (pos === void 0) pos = this.size;\n if (otherPos === void 0) otherPos = other.size;\n return findDiffEnd(this, other, pos, otherPos);\n}; // : (number, ?number) → {index: number, offset: number}\n// Find the index and inner offset corresponding to a given relative\n// position in this fragment. The result object will be reused\n// (overwritten) the next time the function is called. (Not public.)\n\n\nFragment.prototype.findIndex = function findIndex(pos, round) {\n if (round === void 0) round = -1;\n\n if (pos == 0) {\n return retIndex(0, pos);\n }\n\n if (pos == this.size) {\n return retIndex(this.content.length, pos);\n }\n\n if (pos > this.size || pos < 0) {\n throw new RangeError(\"Position \" + pos + \" outside of fragment (\" + this + \")\");\n }\n\n for (var i = 0, curPos = 0;; i++) {\n var cur = this.child(i),\n end = curPos + cur.nodeSize;\n\n if (end >= pos) {\n if (end == pos || round > 0) {\n return retIndex(i + 1, end);\n }\n\n return retIndex(i, curPos);\n }\n\n curPos = end;\n }\n}; // :: () → string\n// Return a debugging string that describes this fragment.\n\n\nFragment.prototype.toString = function toString() {\n return \"<\" + this.toStringInner() + \">\";\n};\n\nFragment.prototype.toStringInner = function toStringInner() {\n return this.content.join(\", \");\n}; // :: () → ?Object\n// Create a JSON-serializeable representation of this fragment.\n\n\nFragment.prototype.toJSON = function toJSON() {\n return this.content.length ? this.content.map(function (n) {\n return n.toJSON();\n }) : null;\n}; // :: (Schema, ?Object) → Fragment\n// Deserialize a fragment from its JSON representation.\n\n\nFragment.fromJSON = function fromJSON(schema, value) {\n if (!value) {\n return Fragment.empty;\n }\n\n if (!Array.isArray(value)) {\n throw new RangeError(\"Invalid input for Fragment.fromJSON\");\n }\n\n return new Fragment(value.map(schema.nodeFromJSON));\n}; // :: ([Node]) → Fragment\n// Build a fragment from an array of nodes. Ensures that adjacent\n// text nodes with the same marks are joined together.\n\n\nFragment.fromArray = function fromArray(array) {\n if (!array.length) {\n return Fragment.empty;\n }\n\n var joined,\n size = 0;\n\n for (var i = 0; i < array.length; i++) {\n var node = array[i];\n size += node.nodeSize;\n\n if (i && node.isText && array[i - 1].sameMarkup(node)) {\n if (!joined) {\n joined = array.slice(0, i);\n }\n\n joined[joined.length - 1] = node.withText(joined[joined.length - 1].text + node.text);\n } else if (joined) {\n joined.push(node);\n }\n }\n\n return new Fragment(joined || array, size);\n}; // :: (?union<Fragment, Node, [Node]>) → Fragment\n// Create a fragment from something that can be interpreted as a set\n// of nodes. For `null`, it returns the empty fragment. For a\n// fragment, the fragment itself. For a node or array of nodes, a\n// fragment containing those nodes.\n\n\nFragment.from = function from(nodes) {\n if (!nodes) {\n return Fragment.empty;\n }\n\n if (nodes instanceof Fragment) {\n return nodes;\n }\n\n if (Array.isArray(nodes)) {\n return this.fromArray(nodes);\n }\n\n if (nodes.attrs) {\n return new Fragment([nodes], nodes.nodeSize);\n }\n\n throw new RangeError(\"Can not convert \" + nodes + \" to a Fragment\" + (nodes.nodesBetween ? \" (looks like multiple versions of prosemirror-model were loaded)\" : \"\"));\n};\n\nObject.defineProperties(Fragment.prototype, prototypeAccessors);\nvar found = {\n index: 0,\n offset: 0\n};\n\nfunction retIndex(index, offset) {\n found.index = index;\n found.offset = offset;\n return found;\n} // :: Fragment\n// An empty fragment. Intended to be reused whenever a node doesn't\n// contain anything (rather than allocating a new empty fragment for\n// each leaf node).\n\n\nFragment.empty = new Fragment([], 0);\n\nfunction compareDeep(a, b) {\n if (a === b) {\n return true;\n }\n\n if (!(a && _typeof(a) == \"object\") || !(b && _typeof(b) == \"object\")) {\n return false;\n }\n\n var array = Array.isArray(a);\n\n if (Array.isArray(b) != array) {\n return false;\n }\n\n if (array) {\n if (a.length != b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; i++) {\n if (!compareDeep(a[i], b[i])) {\n return false;\n }\n }\n } else {\n for (var p in a) {\n if (!(p in b) || !compareDeep(a[p], b[p])) {\n return false;\n }\n }\n\n for (var p$1 in b) {\n if (!(p$1 in a)) {\n return false;\n }\n }\n }\n\n return true;\n} // ::- A mark is a piece of information that can be attached to a node,\n// such as it being emphasized, in code font, or a link. It has a type\n// and optionally a set of attributes that provide further information\n// (such as the target of the link). Marks are created through a\n// `Schema`, which controls which types exist and which\n// attributes they have.\n\n\nvar Mark = function Mark(type, attrs) {\n // :: MarkType\n // The type of this mark.\n this.type = type; // :: Object\n // The attributes associated with this mark.\n\n this.attrs = attrs;\n}; // :: ([Mark]) → [Mark]\n// Given a set of marks, create a new set which contains this one as\n// well, in the right position. If this mark is already in the set,\n// the set itself is returned. If any marks that are set to be\n// [exclusive](#model.MarkSpec.excludes) with this mark are present,\n// those are replaced by this one.\n\n\nMark.prototype.addToSet = function addToSet(set) {\n var copy,\n placed = false;\n\n for (var i = 0; i < set.length; i++) {\n var other = set[i];\n\n if (this.eq(other)) {\n return set;\n }\n\n if (this.type.excludes(other.type)) {\n if (!copy) {\n copy = set.slice(0, i);\n }\n } else if (other.type.excludes(this.type)) {\n return set;\n } else {\n if (!placed && other.type.rank > this.type.rank) {\n if (!copy) {\n copy = set.slice(0, i);\n }\n\n copy.push(this);\n placed = true;\n }\n\n if (copy) {\n copy.push(other);\n }\n }\n }\n\n if (!copy) {\n copy = set.slice();\n }\n\n if (!placed) {\n copy.push(this);\n }\n\n return copy;\n}; // :: ([Mark]) → [Mark]\n// Remove this mark from the given set, returning a new set. If this\n// mark is not in the set, the set itself is returned.\n\n\nMark.prototype.removeFromSet = function removeFromSet(set) {\n for (var i = 0; i < set.length; i++) {\n if (this.eq(set[i])) {\n return set.slice(0, i).concat(set.slice(i + 1));\n }\n }\n\n return set;\n}; // :: ([Mark]) → bool\n// Test whether this mark is in the given set of marks.\n\n\nMark.prototype.isInSet = function isInSet(set) {\n for (var i = 0; i < set.length; i++) {\n if (this.eq(set[i])) {\n return true;\n }\n }\n\n return false;\n}; // :: (Mark) → bool\n// Test whether this mark has the same type and attributes as\n// another mark.\n\n\nMark.prototype.eq = function eq(other) {\n return this == other || this.type == other.type && compareDeep(this.attrs, other.attrs);\n}; // :: () → Object\n// Convert this mark to a JSON-serializeable representation.\n\n\nMark.prototype.toJSON = function toJSON() {\n var obj = {\n type: this.type.name\n };\n\n for (var _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n\n return obj;\n}; // :: (Schema, Object) → Mark\n\n\nMark.fromJSON = function fromJSON(schema, json) {\n if (!json) {\n throw new RangeError(\"Invalid input for Mark.fromJSON\");\n }\n\n var type = schema.marks[json.type];\n\n if (!type) {\n throw new RangeError(\"There is no mark type \" + json.type + \" in this schema\");\n }\n\n return type.create(json.attrs);\n}; // :: ([Mark], [Mark]) → bool\n// Test whether two sets of marks are identical.\n\n\nMark.sameSet = function sameSet(a, b) {\n if (a == b) {\n return true;\n }\n\n if (a.length != b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; i++) {\n if (!a[i].eq(b[i])) {\n return false;\n }\n }\n\n return true;\n}; // :: (?union<Mark, [Mark]>) → [Mark]\n// Create a properly sorted mark set from null, a single mark, or an\n// unsorted array of marks.\n\n\nMark.setFrom = function setFrom(marks) {\n if (!marks || marks.length == 0) {\n return Mark.none;\n }\n\n if (marks instanceof Mark) {\n return [marks];\n }\n\n var copy = marks.slice();\n copy.sort(function (a, b) {\n return a.type.rank - b.type.rank;\n });\n return copy;\n}; // :: [Mark] The empty set of marks.\n\n\nMark.none = []; // ReplaceError:: class extends Error\n// Error type raised by [`Node.replace`](#model.Node.replace) when\n// given an invalid replacement.\n\nfunction ReplaceError(message) {\n var err = Error.call(this, message);\n err.__proto__ = ReplaceError.prototype;\n return err;\n}\n\nReplaceError.prototype = Object.create(Error.prototype);\nReplaceError.prototype.constructor = ReplaceError;\nReplaceError.prototype.name = \"ReplaceError\"; // ::- A slice represents a piece cut out of a larger document. It\n// stores not only a fragment, but also the depth up to which nodes on\n// both side are open (cut through).\n\nvar Slice = function Slice(content, openStart, openEnd) {\n // :: Fragment The slice's content.\n this.content = content; // :: number The open depth at the start.\n\n this.openStart = openStart; // :: number The open depth at the end.\n\n this.openEnd = openEnd;\n};\n\nvar prototypeAccessors$1 = {\n size: {\n configurable: true\n }\n}; // :: number\n// The size this slice would add when inserted into a document.\n\nprototypeAccessors$1.size.get = function () {\n return this.content.size - this.openStart - this.openEnd;\n};\n\nSlice.prototype.insertAt = function insertAt(pos, fragment) {\n var content = insertInto(this.content, pos + this.openStart, fragment, null);\n return content && new Slice(content, this.openStart, this.openEnd);\n};\n\nSlice.prototype.removeBetween = function removeBetween(from, to) {\n return new Slice(removeRange(this.content, from + this.openStart, to + this.openStart), this.openStart, this.openEnd);\n}; // :: (Slice) → bool\n// Tests whether this slice is equal to another slice.\n\n\nSlice.prototype.eq = function eq(other) {\n return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd;\n};\n\nSlice.prototype.toString = function toString() {\n return this.content + \"(\" + this.openStart + \",\" + this.openEnd + \")\";\n}; // :: () → ?Object\n// Convert a slice to a JSON-serializable representation.\n\n\nSlice.prototype.toJSON = function toJSON() {\n if (!this.content.size) {\n return null;\n }\n\n var json = {\n content: this.content.toJSON()\n };\n\n if (this.openStart > 0) {\n json.openStart = this.openStart;\n }\n\n if (this.openEnd > 0) {\n json.openEnd = this.openEnd;\n }\n\n return json;\n}; // :: (Schema, ?Object) → Slice\n// Deserialize a slice from its JSON representation.\n\n\nSlice.fromJSON = function fromJSON(schema, json) {\n if (!json) {\n return Slice.empty;\n }\n\n var openStart = json.openStart || 0,\n openEnd = json.openEnd || 0;\n\n if (typeof openStart != \"number\" || typeof openEnd != \"number\") {\n throw new RangeError(\"Invalid input for Slice.fromJSON\");\n }\n\n return new Slice(Fragment.fromJSON(schema, json.content), openStart, openEnd);\n}; // :: (Fragment, ?bool) → Slice\n// Create a slice from a fragment by taking the maximum possible\n// open value on both side of the fragment.\n\n\nSlice.maxOpen = function maxOpen(fragment, openIsolating) {\n if (openIsolating === void 0) openIsolating = true;\n var openStart = 0,\n openEnd = 0;\n\n for (var n = fragment.firstChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.firstChild) {\n openStart++;\n }\n\n for (var n$1 = fragment.lastChild; n$1 && !n$1.isLeaf && (openIsolating || !n$1.type.spec.isolating); n$1 = n$1.lastChild) {\n openEnd++;\n }\n\n return new Slice(fragment, openStart, openEnd);\n};\n\nObject.defineProperties(Slice.prototype, prototypeAccessors$1);\n\nfunction removeRange(content, from, to) {\n var ref = content.findIndex(from);\n var index = ref.index;\n var offset = ref.offset;\n var child = content.maybeChild(index);\n var ref$1 = content.findIndex(to);\n var indexTo = ref$1.index;\n var offsetTo = ref$1.offset;\n\n if (offset == from || child.isText) {\n if (offsetTo != to && !content.child(indexTo).isText) {\n throw new RangeError(\"Removing non-flat range\");\n }\n\n return content.cut(0, from).append(content.cut(to));\n }\n\n if (index != indexTo) {\n throw new RangeError(\"Removing non-flat range\");\n }\n\n return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1)));\n}\n\nfunction insertInto(content, dist, insert, parent) {\n var ref = content.findIndex(dist);\n var index = ref.index;\n var offset = ref.offset;\n var child = content.maybeChild(index);\n\n if (offset == dist || child.isText) {\n if (parent && !parent.canReplace(index, index, insert)) {\n return null;\n }\n\n return content.cut(0, dist).append(insert).append(content.cut(dist));\n }\n\n var inner = insertInto(child.content, dist - offset - 1, insert);\n return inner && content.replaceChild(index, child.copy(inner));\n} // :: Slice\n// The empty slice.\n\n\nSlice.empty = new Slice(Fragment.empty, 0, 0);\n\nfunction replace($from, $to, slice) {\n if (slice.openStart > $from.depth) {\n throw new ReplaceError(\"Inserted content deeper than insertion position\");\n }\n\n if ($from.depth - slice.openStart != $to.depth - slice.openEnd) {\n throw new ReplaceError(\"Inconsistent open depths\");\n }\n\n return replaceOuter($from, $to, slice, 0);\n}\n\nfunction replaceOuter($from, $to, slice, depth) {\n var index = $from.index(depth),\n node = $from.node(depth);\n\n if (index == $to.index(depth) && depth < $from.depth - slice.openStart) {\n var inner = replaceOuter($from, $to, slice, depth + 1);\n return node.copy(node.content.replaceChild(index, inner));\n } else if (!slice.content.size) {\n return close(node, replaceTwoWay($from, $to, depth));\n } else if (!slice.openStart && !slice.openEnd && $from.depth == depth && $to.depth == depth) {\n // Simple, flat case\n var parent = $from.parent,\n content = parent.content;\n return close(parent, content.cut(0, $from.parentOffset).append(slice.content).append(content.cut($to.parentOffset)));\n } else {\n var ref = prepareSliceForReplace(slice, $from);\n var start = ref.start;\n var end = ref.end;\n return close(node, replaceThreeWay($from, start, end, $to, depth));\n }\n}\n\nfunction checkJoin(main, sub) {\n if (!sub.type.compatibleContent(main.type)) {\n throw new ReplaceError(\"Cannot join \" + sub.type.name + \" onto \" + main.type.name);\n }\n}\n\nfunction joinable($before, $after, depth) {\n var node = $before.node(depth);\n checkJoin(node, $after.node(depth));\n return node;\n}\n\nfunction addNode(child, target) {\n var last = target.length - 1;\n\n if (last >= 0 && child.isText && child.sameMarkup(target[last])) {\n target[last] = child.withText(target[last].text + child.text);\n } else {\n target.push(child);\n }\n}\n\nfunction addRange($start, $end, depth, target) {\n var node = ($end || $start).node(depth);\n var startIndex = 0,\n endIndex = $end ? $end.index(depth) : node.childCount;\n\n if ($start) {\n startIndex = $start.index(depth);\n\n if ($start.depth > depth) {\n startIndex++;\n } else if ($start.textOffset) {\n addNode($start.nodeAfter, target);\n startIndex++;\n }\n }\n\n for (var i = startIndex; i < endIndex; i++) {\n addNode(node.child(i), target);\n }\n\n if ($end && $end.depth == depth && $end.textOffset) {\n addNode($end.nodeBefore, target);\n }\n}\n\nfunction close(node, content) {\n if (!node.type.validContent(content)) {\n throw new ReplaceError(\"Invalid content for node \" + node.type.name);\n }\n\n return node.copy(content);\n}\n\nfunction replaceThreeWay($from, $start, $end, $to, depth) {\n var openStart = $from.depth > depth && joinable($from, $start, depth + 1);\n var openEnd = $to.depth > depth && joinable($end, $to, depth + 1);\n var content = [];\n addRange(null, $from, depth, content);\n\n if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {\n checkJoin(openStart, openEnd);\n addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content);\n } else {\n if (openStart) {\n addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content);\n }\n\n addRange($start, $end, depth, content);\n\n if (openEnd) {\n addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content);\n }\n }\n\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\n\nfunction replaceTwoWay($from, $to, depth) {\n var content = [];\n addRange(null, $from, depth, content);\n\n if ($from.depth > depth) {\n var type = joinable($from, $to, depth + 1);\n addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content);\n }\n\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\n\nfunction prepareSliceForReplace(slice, $along) {\n var extra = $along.depth - slice.openStart,\n parent = $along.node(extra);\n var node = parent.copy(slice.content);\n\n for (var i = extra - 1; i >= 0; i--) {\n node = $along.node(i).copy(Fragment.from(node));\n }\n\n return {\n start: node.resolveNoCache(slice.openStart + extra),\n end: node.resolveNoCache(node.content.size - slice.openEnd - extra)\n };\n} // ::- You can [_resolve_](#model.Node.resolve) a position to get more\n// information about it. Objects of this class represent such a\n// resolved position, providing various pieces of context information,\n// and some helper methods.\n//\n// Throughout this interface, methods that take an optional `depth`\n// parameter will interpret undefined as `this.depth` and negative\n// numbers as `this.depth + value`.\n\n\nvar ResolvedPos = function ResolvedPos(pos, path, parentOffset) {\n // :: number The position that was resolved.\n this.pos = pos;\n this.path = path; // :: number\n // The number of levels the parent node is from the root. If this\n // position points directly into the root node, it is 0. If it\n // points into a top-level paragraph, 1, and so on.\n\n this.depth = path.length / 3 - 1; // :: number The offset this position has into its parent node.\n\n this.parentOffset = parentOffset;\n};\n\nvar prototypeAccessors$2 = {\n parent: {\n configurable: true\n },\n doc: {\n configurable: true\n },\n textOffset: {\n configurable: true\n },\n nodeAfter: {\n configurable: true\n },\n nodeBefore: {\n configurable: true\n }\n};\n\nResolvedPos.prototype.resolveDepth = function resolveDepth(val) {\n if (val == null) {\n return this.depth;\n }\n\n if (val < 0) {\n return this.depth + val;\n }\n\n return val;\n}; // :: Node\n// The parent node that the position points into. Note that even if\n// a position points into a text node, that node is not considered\n// the parent—text nodes are flat in this model, and have no content.\n\n\nprototypeAccessors$2.parent.get = function () {\n return this.node(this.depth);\n}; // :: Node\n// The root node in which the position was resolved.\n\n\nprototypeAccessors$2.doc.get = function () {\n return this.node(0);\n}; // :: (?number) → Node\n// The ancestor node at the given level. `p.node(p.depth)` is the\n// same as `p.parent`.\n\n\nResolvedPos.prototype.node = function node(depth) {\n return this.path[this.resolveDepth(depth) * 3];\n}; // :: (?number) → number\n// The index into the ancestor at the given level. If this points at\n// the 3rd node in the 2nd paragraph on the top level, for example,\n// `p.index(0)` is 1 and `p.index(1)` is 2.\n\n\nResolvedPos.prototype.index = function index(depth) {\n return this.path[this.resolveDepth(depth) * 3 + 1];\n}; // :: (?number) → number\n// The index pointing after this position into the ancestor at the\n// given level.\n\n\nResolvedPos.prototype.indexAfter = function indexAfter(depth) {\n depth = this.resolveDepth(depth);\n return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1);\n}; // :: (?number) → number\n// The (absolute) position at the start of the node at the given\n// level.\n\n\nResolvedPos.prototype.start = function start(depth) {\n depth = this.resolveDepth(depth);\n return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n}; // :: (?number) → number\n// The (absolute) position at the end of the node at the given\n// level.\n\n\nResolvedPos.prototype.end = function end(depth) {\n depth = this.resolveDepth(depth);\n return this.start(depth) + this.node(depth).content.size;\n}; // :: (?number) → number\n// The (absolute) position directly before the wrapping node at the\n// given level, or, when `depth` is `this.depth + 1`, the original\n// position.\n\n\nResolvedPos.prototype.before = function before(depth) {\n depth = this.resolveDepth(depth);\n\n if (!depth) {\n throw new RangeError(\"There is no position before the top-level node\");\n }\n\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1];\n}; // :: (?number) → number\n// The (absolute) position directly after the wrapping node at the\n// given level, or the original position when `depth` is `this.depth + 1`.\n\n\nResolvedPos.prototype.after = function after(depth) {\n depth = this.resolveDepth(depth);\n\n if (!depth) {\n throw new RangeError(\"There is no position after the top-level node\");\n }\n\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize;\n}; // :: number\n// When this position points into a text node, this returns the\n// distance between the position and the start of the text node.\n// Will be zero for positions that point between nodes.\n\n\nprototypeAccessors$2.textOffset.get = function () {\n return this.pos - this.path[this.path.length - 1];\n}; // :: ?Node\n// Get the node directly after the position, if any. If the position\n// points into a text node, only the part of that node after the\n// position is returned.\n\n\nprototypeAccessors$2.nodeAfter.get = function () {\n var parent = this.parent,\n index = this.index(this.depth);\n\n if (index == parent.childCount) {\n return null;\n }\n\n var dOff = this.pos - this.path[this.path.length - 1],\n child = parent.child(index);\n return dOff ? parent.child(index).cut(dOff) : child;\n}; // :: ?Node\n// Get the node directly before the position, if any. If the\n// position points into a text node, only the part of that node\n// before the position is returned.\n\n\nprototypeAccessors$2.nodeBefore.get = function () {\n var index = this.index(this.depth);\n var dOff = this.pos - this.path[this.path.length - 1];\n\n if (dOff) {\n return this.parent.child(index).cut(0, dOff);\n }\n\n return index == 0 ? null : this.parent.child(index - 1);\n}; // :: (number, ?number) → number\n// Get the position at the given index in the parent node at the\n// given depth (which defaults to `this.depth`).\n\n\nResolvedPos.prototype.posAtIndex = function posAtIndex(index, depth) {\n depth = this.resolveDepth(depth);\n var node = this.path[depth * 3],\n pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n\n for (var i = 0; i < index; i++) {\n pos += node.child(i).nodeSize;\n }\n\n return pos;\n}; // :: () → [Mark]\n// Get the marks at this position, factoring in the surrounding\n// marks' [`inclusive`](#model.MarkSpec.inclusive) property. If the\n// position is at the start of a non-empty node, the marks of the\n// node after it (if any) are returned.\n\n\nResolvedPos.prototype.marks = function marks() {\n var parent = this.parent,\n index = this.index(); // In an empty parent, return the empty array\n\n if (parent.content.size == 0) {\n return Mark.none;\n } // When inside a text node, just return the text node's marks\n\n\n if (this.textOffset) {\n return parent.child(index).marks;\n }\n\n var main = parent.maybeChild(index - 1),\n other = parent.maybeChild(index); // If the `after` flag is true of there is no node before, make\n // the node after this position the main reference.\n\n if (!main) {\n var tmp = main;\n main = other;\n other = tmp;\n } // Use all marks in the main node, except those that have\n // `inclusive` set to false and are not present in the other node.\n\n\n var marks = main.marks;\n\n for (var i = 0; i < marks.length; i++) {\n if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks))) {\n marks = marks[i--].removeFromSet(marks);\n }\n }\n\n return marks;\n}; // :: (ResolvedPos) → ?[Mark]\n// Get the marks after the current position, if any, except those\n// that are non-inclusive and not present at position `$end`. This\n// is mostly useful for getting the set of marks to preserve after a\n// deletion. Will return `null` if this position is at the end of\n// its parent node or its parent node isn't a textblock (in which\n// case no marks should be preserved).\n\n\nResolvedPos.prototype.marksAcross = function marksAcross($end) {\n var after = this.parent.maybeChild(this.index());\n\n if (!after || !after.isInline) {\n return null;\n }\n\n var marks = after.marks,\n next = $end.parent.maybeChild($end.index());\n\n for (var i = 0; i < marks.length; i++) {\n if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks))) {\n marks = marks[i--].removeFromSet(marks);\n }\n }\n\n return marks;\n}; // :: (number) → number\n// The depth up to which this position and the given (non-resolved)\n// position share the same parent nodes.\n\n\nResolvedPos.prototype.sharedDepth = function sharedDepth(pos) {\n for (var depth = this.depth; depth > 0; depth--) {\n if (this.start(depth) <= pos && this.end(depth) >= pos) {\n return depth;\n }\n }\n\n return 0;\n}; // :: (?ResolvedPos, ?(Node) → bool) → ?NodeRange\n// Returns a range based on the place where this position and the\n// given position diverge around block content. If both point into\n// the same textblock, for example, a range around that textblock\n// will be returned. If they point into different blocks, the range\n// around those blocks in their shared ancestor is returned. You can\n// pass in an optional predicate that will be called with a parent\n// node to see if a range into that parent is acceptable.\n\n\nResolvedPos.prototype.blockRange = function blockRange(other, pred) {\n if (other === void 0) other = this;\n\n if (other.pos < this.pos) {\n return other.blockRange(this);\n }\n\n for (var d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--) {\n if (other.pos <= this.end(d) && (!pred || pred(this.node(d)))) {\n return new NodeRange(this, other, d);\n }\n }\n}; // :: (ResolvedPos) → bool\n// Query whether the given position shares the same parent node.\n\n\nResolvedPos.prototype.sameParent = function sameParent(other) {\n return this.pos - this.parentOffset == other.pos - other.parentOffset;\n}; // :: (ResolvedPos) → ResolvedPos\n// Return the greater of this and the given position.\n\n\nResolvedPos.prototype.max = function max(other) {\n return other.pos > this.pos ? other : this;\n}; // :: (ResolvedPos) → ResolvedPos\n// Return the smaller of this and the given position.\n\n\nResolvedPos.prototype.min = function min(other) {\n return other.pos < this.pos ? other : this;\n};\n\nResolvedPos.prototype.toString = function toString() {\n var str = \"\";\n\n for (var i = 1; i <= this.depth; i++) {\n str += (str ? \"/\" : \"\") + this.node(i).type.name + \"_\" + this.index(i - 1);\n }\n\n return str + \":\" + this.parentOffset;\n};\n\nResolvedPos.resolve = function resolve(doc, pos) {\n if (!(pos >= 0 && pos <= doc.content.size)) {\n throw new RangeError(\"Position \" + pos + \" out of range\");\n }\n\n var path = [];\n var start = 0,\n parentOffset = pos;\n\n for (var node = doc;;) {\n var ref = node.content.findIndex(parentOffset);\n var index = ref.index;\n var offset = ref.offset;\n var rem = parentOffset - offset;\n path.push(node, index, start + offset);\n\n if (!rem) {\n break;\n }\n\n node = node.child(index);\n\n if (node.isText) {\n break;\n }\n\n parentOffset = rem - 1;\n start += offset + 1;\n }\n\n return new ResolvedPos(pos, path, parentOffset);\n};\n\nResolvedPos.resolveCached = function resolveCached(doc, pos) {\n for (var i = 0; i < resolveCache.length; i++) {\n var cached = resolveCache[i];\n\n if (cached.pos == pos && cached.doc == doc) {\n return cached;\n }\n }\n\n var result = resolveCache[resolveCachePos] = ResolvedPos.resolve(doc, pos);\n resolveCachePos = (resolveCachePos + 1) % resolveCacheSize;\n return result;\n};\n\nObject.defineProperties(ResolvedPos.prototype, prototypeAccessors$2);\nvar resolveCache = [],\n resolveCachePos = 0,\n resolveCacheSize = 12; // ::- Represents a flat range of content, i.e. one that starts and\n// ends in the same node.\n\nvar NodeRange = function NodeRange($from, $to, depth) {\n // :: ResolvedPos A resolved position along the start of the\n // content. May have a `depth` greater than this object's `depth`\n // property, since these are the positions that were used to\n // compute the range, not re-resolved positions directly at its\n // boundaries.\n this.$from = $from; // :: ResolvedPos A position along the end of the content. See\n // caveat for [`$from`](#model.NodeRange.$from).\n\n this.$to = $to; // :: number The depth of the node that this range points into.\n\n this.depth = depth;\n};\n\nvar prototypeAccessors$1$1 = {\n start: {\n configurable: true\n },\n end: {\n configurable: true\n },\n parent: {\n configurable: true\n },\n startIndex: {\n configurable: true\n },\n endIndex: {\n configurable: true\n }\n}; // :: number The position at the start of the range.\n\nprototypeAccessors$1$1.start.get = function () {\n return this.$from.before(this.depth + 1);\n}; // :: number The position at the end of the range.\n\n\nprototypeAccessors$1$1.end.get = function () {\n return this.$to.after(this.depth + 1);\n}; // :: Node The parent node that the range points into.\n\n\nprototypeAccessors$1$1.parent.get = function () {\n return this.$from.node(this.depth);\n}; // :: number The start index of the range in the parent node.\n\n\nprototypeAccessors$1$1.startIndex.get = function () {\n return this.$from.index(this.depth);\n}; // :: number The end index of the range in the parent node.\n\n\nprototypeAccessors$1$1.endIndex.get = function () {\n return this.$to.indexAfter(this.depth);\n};\n\nObject.defineProperties(NodeRange.prototype, prototypeAccessors$1$1);\nvar emptyAttrs = Object.create(null); // ::- This class represents a node in the tree that makes up a\n// ProseMirror document. So a document is an instance of `Node`, with\n// children that are also instances of `Node`.\n//\n// Nodes are persistent data structures. Instead of changing them, you\n// create new ones with the content you want. Old ones keep pointing\n// at the old document shape. This is made cheaper by sharing\n// structure between the old and new data as much as possible, which a\n// tree shape like this (without back pointers) makes easy.\n//\n// **Do not** directly mutate the properties of a `Node` object. See\n// [the guide](/docs/guide/#doc) for more information.\n\nvar Node = function Node(type, attrs, content, marks) {\n // :: NodeType\n // The type of node that this is.\n this.type = type; // :: Object\n // An object mapping attribute names to values. The kind of\n // attributes allowed and required are\n // [determined](#model.NodeSpec.attrs) by the node type.\n\n this.attrs = attrs; // :: Fragment\n // A container holding the node's children.\n\n this.content = content || Fragment.empty; // :: [Mark]\n // The marks (things like whether it is emphasized or part of a\n // link) applied to this node.\n\n this.marks = marks || Mark.none;\n};\n\nvar prototypeAccessors$3 = {\n nodeSize: {\n configurable: true\n },\n childCount: {\n configurable: true\n },\n textContent: {\n configurable: true\n },\n firstChild: {\n configurable: true\n },\n lastChild: {\n configurable: true\n },\n isBlock: {\n configurable: true\n },\n isTextblock: {\n configurable: true\n },\n inlineContent: {\n configurable: true\n },\n isInline: {\n configurable: true\n },\n isText: {\n configurable: true\n },\n isLeaf: {\n configurable: true\n },\n isAtom: {\n configurable: true\n }\n}; // text:: ?string\n// For text nodes, this contains the node's text content.\n// :: number\n// The size of this node, as defined by the integer-based [indexing\n// scheme](/docs/guide/#doc.indexing). For text nodes, this is the\n// amount of characters. For other leaf nodes, it is one. For\n// non-leaf nodes, it is the size of the content plus two (the start\n// and end token).\n\nprototypeAccessors$3.nodeSize.get = function () {\n return this.isLeaf ? 1 : 2 + this.content.size;\n}; // :: number\n// The number of children that the node has.\n\n\nprototypeAccessors$3.childCount.get = function () {\n return this.content.childCount;\n}; // :: (number) → Node\n// Get the child node at the given index. Raises an error when the\n// index is out of range.\n\n\nNode.prototype.child = function child(index) {\n return this.content.child(index);\n}; // :: (number) → ?Node\n// Get the child node at the given index, if it exists.\n\n\nNode.prototype.maybeChild = function maybeChild(index) {\n return this.content.maybeChild(index);\n}; // :: ((node: Node, offset: number, index: number))\n// Call `f` for every child node, passing the node, its offset\n// into this parent node, and its index.\n\n\nNode.prototype.forEach = function forEach(f) {\n this.content.forEach(f);\n}; // :: (number, number, (node: Node, pos: number, parent: Node, index: number) → ?bool, ?number)\n// Invoke a callback for all descendant nodes recursively between\n// the given two positions that are relative to start of this node's\n// content. The callback is invoked with the node, its\n// parent-relative position, its parent node, and its child index.\n// When the callback returns false for a given node, that node's\n// children will not be recursed over. The last parameter can be\n// used to specify a starting position to count from.\n\n\nNode.prototype.nodesBetween = function nodesBetween(from, to, f, startPos) {\n if (startPos === void 0) startPos = 0;\n this.content.nodesBetween(from, to, f, startPos, this);\n}; // :: ((node: Node, pos: number, parent: Node) → ?bool)\n// Call the given callback for every descendant node. Doesn't\n// descend into a node when the callback returns `false`.\n\n\nNode.prototype.descendants = function descendants(f) {\n this.nodesBetween(0, this.content.size, f);\n}; // :: string\n// Concatenates all the text nodes found in this fragment and its\n// children.\n\n\nprototypeAccessors$3.textContent.get = function () {\n return this.textBetween(0, this.content.size, \"\");\n}; // :: (number, number, ?string, ?string) → string\n// Get all text between positions `from` and `to`. When\n// `blockSeparator` is given, it will be inserted whenever a new\n// block node is started. When `leafText` is given, it'll be\n// inserted for every non-text leaf node encountered.\n\n\nNode.prototype.textBetween = function textBetween(from, to, blockSeparator, leafText) {\n return this.content.textBetween(from, to, blockSeparator, leafText);\n}; // :: ?Node\n// Returns this node's first child, or `null` if there are no\n// children.\n\n\nprototypeAccessors$3.firstChild.get = function () {\n return this.content.firstChild;\n}; // :: ?Node\n// Returns this node's last child, or `null` if there are no\n// children.\n\n\nprototypeAccessors$3.lastChild.get = function () {\n return this.content.lastChild;\n}; // :: (Node) → bool\n// Test whether two nodes represent the same piece of document.\n\n\nNode.prototype.eq = function eq(other) {\n return this == other || this.sameMarkup(other) && this.content.eq(other.content);\n}; // :: (Node) → bool\n// Compare the markup (type, attributes, and marks) of this node to\n// those of another. Returns `true` if both have the same markup.\n\n\nNode.prototype.sameMarkup = function sameMarkup(other) {\n return this.hasMarkup(other.type, other.attrs, other.marks);\n}; // :: (NodeType, ?Object, ?[Mark]) → bool\n// Check whether this node's markup correspond to the given type,\n// attributes, and marks.\n\n\nNode.prototype.hasMarkup = function hasMarkup(type, attrs, marks) {\n return this.type == type && compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) && Mark.sameSet(this.marks, marks || Mark.none);\n}; // :: (?Fragment) → Node\n// Create a new node with the same markup as this node, containing\n// the given content (or empty, if no content is given).\n\n\nNode.prototype.copy = function copy(content) {\n if (content === void 0) content = null;\n\n if (content == this.content) {\n return this;\n }\n\n return new this.constructor(this.type, this.attrs, content, this.marks);\n}; // :: ([Mark]) → Node\n// Create a copy of this node, with the given set of marks instead\n// of the node's own marks.\n\n\nNode.prototype.mark = function mark(marks) {\n return marks == this.marks ? this : new this.constructor(this.type, this.attrs, this.content, marks);\n}; // :: (number, ?number) → Node\n// Create a copy of this node with only the content between the\n// given positions. If `to` is not given, it defaults to the end of\n// the node.\n\n\nNode.prototype.cut = function cut(from, to) {\n if (from == 0 && to == this.content.size) {\n return this;\n }\n\n return this.copy(this.content.cut(from, to));\n}; // :: (number, ?number) → Slice\n// Cut out the part of the document between the given positions, and\n// return it as a `Slice` object.\n\n\nNode.prototype.slice = function slice(from, to, includeParents) {\n if (to === void 0) to = this.content.size;\n if (includeParents === void 0) includeParents = false;\n\n if (from == to) {\n return Slice.empty;\n }\n\n var $from = this.resolve(from),\n $to = this.resolve(to);\n var depth = includeParents ? 0 : $from.sharedDepth(to);\n var start = $from.start(depth),\n node = $from.node(depth);\n var content = node.content.cut($from.pos - start, $to.pos - start);\n return new Slice(content, $from.depth - depth, $to.depth - depth);\n}; // :: (number, number, Slice) → Node\n// Replace the part of the document between the given positions with\n// the given slice. The slice must 'fit', meaning its open sides\n// must be able to connect to the surrounding content, and its\n// content nodes must be valid children for the node they are placed\n// into. If any of this is violated, an error of type\n// [`ReplaceError`](#model.ReplaceError) is thrown.\n\n\nNode.prototype.replace = function replace$1(from, to, slice) {\n return replace(this.resolve(from), this.resolve(to), slice);\n}; // :: (number) → ?Node\n// Find the node directly after the given position.\n\n\nNode.prototype.nodeAt = function nodeAt(pos) {\n for (var node = this;;) {\n var ref = node.content.findIndex(pos);\n var index = ref.index;\n var offset = ref.offset;\n node = node.maybeChild(index);\n\n if (!node) {\n return null;\n }\n\n if (offset == pos || node.isText) {\n return node;\n }\n\n pos -= offset + 1;\n }\n}; // :: (number) → {node: ?Node, index: number, offset: number}\n// Find the (direct) child node after the given offset, if any,\n// and return it along with its index and offset relative to this\n// node.\n\n\nNode.prototype.childAfter = function childAfter(pos) {\n var ref = this.content.findIndex(pos);\n var index = ref.index;\n var offset = ref.offset;\n return {\n node: this.content.maybeChild(index),\n index: index,\n offset: offset\n };\n}; // :: (number) → {node: ?Node, index: number, offset: number}\n// Find the (direct) child node before the given offset, if any,\n// and return it along with its index and offset relative to this\n// node.\n\n\nNode.prototype.childBefore = function childBefore(pos) {\n if (pos == 0) {\n return {\n node: null,\n index: 0,\n offset: 0\n };\n }\n\n var ref = this.content.findIndex(pos);\n var index = ref.index;\n var offset = ref.offset;\n\n if (offset < pos) {\n return {\n node: this.content.child(index),\n index: index,\n offset: offset\n };\n }\n\n var node = this.content.child(index - 1);\n return {\n node: node,\n index: index - 1,\n offset: offset - node.nodeSize\n };\n}; // :: (number) → ResolvedPos\n// Resolve the given position in the document, returning an\n// [object](#model.ResolvedPos) with information about its context.\n\n\nNode.prototype.resolve = function resolve(pos) {\n return ResolvedPos.resolveCached(this, pos);\n};\n\nNode.prototype.resolveNoCache = function resolveNoCache(pos) {\n return ResolvedPos.resolve(this, pos);\n}; // :: (number, number, union<Mark, MarkType>) → bool\n// Test whether a given mark or mark type occurs in this document\n// between the two given positions.\n\n\nNode.prototype.rangeHasMark = function rangeHasMark(from, to, type) {\n var found = false;\n\n if (to > from) {\n this.nodesBetween(from, to, function (node) {\n if (type.isInSet(node.marks)) {\n found = true;\n }\n\n return !found;\n });\n }\n\n return found;\n}; // :: bool\n// True when this is a block (non-inline node)\n\n\nprototypeAccessors$3.isBlock.get = function () {\n return this.type.isBlock;\n}; // :: bool\n// True when this is a textblock node, a block node with inline\n// content.\n\n\nprototypeAccessors$3.isTextblock.get = function () {\n return this.type.isTextblock;\n}; // :: bool\n// True when this node allows inline content.\n\n\nprototypeAccessors$3.inlineContent.get = function () {\n return this.type.inlineContent;\n}; // :: bool\n// True when this is an inline node (a text node or a node that can\n// appear among text).\n\n\nprototypeAccessors$3.isInline.get = function () {\n return this.type.isInline;\n}; // :: bool\n// True when this is a text node.\n\n\nprototypeAccessors$3.isText.get = function () {\n return this.type.isText;\n}; // :: bool\n// True when this is a leaf node.\n\n\nprototypeAccessors$3.isLeaf.get = function () {\n return this.type.isLeaf;\n}; // :: bool\n// True when this is an atom, i.e. when it does not have directly\n// editable content. This is usually the same as `isLeaf`, but can\n// be configured with the [`atom` property](#model.NodeSpec.atom) on\n// a node's spec (typically used when the node is displayed as an\n// uneditable [node view](#view.NodeView)).\n\n\nprototypeAccessors$3.isAtom.get = function () {\n return this.type.isAtom;\n}; // :: () → string\n// Return a string representation of this node for debugging\n// purposes.\n\n\nNode.prototype.toString = function toString() {\n if (this.type.spec.toDebugString) {\n return this.type.spec.toDebugString(this);\n }\n\n var name = this.type.name;\n\n if (this.content.size) {\n name += \"(\" + this.content.toStringInner() + \")\";\n }\n\n return wrapMarks(this.marks, name);\n}; // :: (number) → ContentMatch\n// Get the content match in this node at the given index.\n\n\nNode.prototype.contentMatchAt = function contentMatchAt(index) {\n var match = this.type.contentMatch.matchFragment(this.content, 0, index);\n\n if (!match) {\n throw new Error(\"Called contentMatchAt on a node with invalid content\");\n }\n\n return match;\n}; // :: (number, number, ?Fragment, ?number, ?number) → bool\n// Test whether replacing the range between `from` and `to` (by\n// child index) with the given replacement fragment (which defaults\n// to the empty fragment) would leave the node's content valid. You\n// can optionally pass `start` and `end` indices into the\n// replacement fragment.\n\n\nNode.prototype.canReplace = function canReplace(from, to, replacement, start, end) {\n if (replacement === void 0) replacement = Fragment.empty;\n if (start === void 0) start = 0;\n if (end === void 0) end = replacement.childCount;\n var one = this.contentMatchAt(from).matchFragment(replacement, start, end);\n var two = one && one.matchFragment(this.content, to);\n\n if (!two || !two.validEnd) {\n return false;\n }\n\n for (var i = start; i < end; i++) {\n if (!this.type.allowsMarks(replacement.child(i).marks)) {\n return false;\n }\n }\n\n return true;\n}; // :: (number, number, NodeType, ?[Mark]) → bool\n// Test whether replacing the range `from` to `to` (by index) with a\n// node of the given type would leave the node's content valid.\n\n\nNode.prototype.canReplaceWith = function canReplaceWith(from, to, type, marks) {\n if (marks && !this.type.allowsMarks(marks)) {\n return false;\n }\n\n var start = this.contentMatchAt(from).matchType(type);\n var end = start && start.matchFragment(this.content, to);\n return end ? end.validEnd : false;\n}; // :: (Node) → bool\n// Test whether the given node's content could be appended to this\n// node. If that node is empty, this will only return true if there\n// is at least one node type that can appear in both nodes (to avoid\n// merging completely incompatible nodes).\n\n\nNode.prototype.canAppend = function canAppend(other) {\n if (other.content.size) {\n return this.canReplace(this.childCount, this.childCount, other.content);\n } else {\n return this.type.compatibleContent(other.type);\n }\n}; // :: ()\n// Check whether this node and its descendants conform to the\n// schema, and raise error when they do not.\n\n\nNode.prototype.check = function check() {\n if (!this.type.validContent(this.content)) {\n throw new RangeError(\"Invalid content for node \" + this.type.name + \": \" + this.content.toString().slice(0, 50));\n }\n\n this.content.forEach(function (node) {\n return node.check();\n });\n}; // :: () → Object\n// Return a JSON-serializeable representation of this node.\n\n\nNode.prototype.toJSON = function toJSON() {\n var obj = {\n type: this.type.name\n };\n\n for (var _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n\n if (this.content.size) {\n obj.content = this.content.toJSON();\n }\n\n if (this.marks.length) {\n obj.marks = this.marks.map(function (n) {\n return n.toJSON();\n });\n }\n\n return obj;\n}; // :: (Schema, Object) → Node\n// Deserialize a node from its JSON representation.\n\n\nNode.fromJSON = function fromJSON(schema, json) {\n if (!json) {\n throw new RangeError(\"Invalid input for Node.fromJSON\");\n }\n\n var marks = null;\n\n if (json.marks) {\n if (!Array.isArray(json.marks)) {\n throw new RangeError(\"Invalid mark data for Node.fromJSON\");\n }\n\n marks = json.marks.map(schema.markFromJSON);\n }\n\n if (json.type == \"text\") {\n if (typeof json.text != \"string\") {\n throw new RangeError(\"Invalid text node in JSON\");\n }\n\n return schema.text(json.text, marks);\n }\n\n var content = Fragment.fromJSON(schema, json.content);\n return schema.nodeType(json.type).create(json.attrs, content, marks);\n};\n\nObject.defineProperties(Node.prototype, prototypeAccessors$3);\n\nvar TextNode = /*@__PURE__*/function (Node) {\n function TextNode(type, attrs, content, marks) {\n Node.call(this, type, attrs, null, marks);\n\n if (!content) {\n throw new RangeError(\"Empty text nodes are not allowed\");\n }\n\n this.text = content;\n }\n\n if (Node) TextNode.__proto__ = Node;\n TextNode.prototype = Object.create(Node && Node.prototype);\n TextNode.prototype.constructor = TextNode;\n var prototypeAccessors$1 = {\n textContent: {\n configurable: true\n },\n nodeSize: {\n configurable: true\n }\n };\n\n TextNode.prototype.toString = function toString() {\n if (this.type.spec.toDebugString) {\n return this.type.spec.toDebugString(this);\n }\n\n return wrapMarks(this.marks, JSON.stringify(this.text));\n };\n\n prototypeAccessors$1.textContent.get = function () {\n return this.text;\n };\n\n TextNode.prototype.textBetween = function textBetween(from, to) {\n return this.text.slice(from, to);\n };\n\n prototypeAccessors$1.nodeSize.get = function () {\n return this.text.length;\n };\n\n TextNode.prototype.mark = function mark(marks) {\n return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks);\n };\n\n TextNode.prototype.withText = function withText(text) {\n if (text == this.text) {\n return this;\n }\n\n return new TextNode(this.type, this.attrs, text, this.marks);\n };\n\n TextNode.prototype.cut = function cut(from, to) {\n if (from === void 0) from = 0;\n if (to === void 0) to = this.text.length;\n\n if (from == 0 && to == this.text.length) {\n return this;\n }\n\n return this.withText(this.text.slice(from, to));\n };\n\n TextNode.prototype.eq = function eq(other) {\n return this.sameMarkup(other) && this.text == other.text;\n };\n\n TextNode.prototype.toJSON = function toJSON() {\n var base = Node.prototype.toJSON.call(this);\n base.text = this.text;\n return base;\n };\n\n Object.defineProperties(TextNode.prototype, prototypeAccessors$1);\n return TextNode;\n}(Node);\n\nfunction wrapMarks(marks, str) {\n for (var i = marks.length - 1; i >= 0; i--) {\n str = marks[i].type.name + \"(\" + str + \")\";\n }\n\n return str;\n} // ::- Instances of this class represent a match state of a node\n// type's [content expression](#model.NodeSpec.content), and can be\n// used to find out whether further content matches here, and whether\n// a given position is a valid end of the node.\n\n\nvar ContentMatch = function ContentMatch(validEnd) {\n // :: bool\n // True when this match state represents a valid end of the node.\n this.validEnd = validEnd;\n this.next = [];\n this.wrapCache = [];\n};\n\nvar prototypeAccessors$4 = {\n inlineContent: {\n configurable: true\n },\n defaultType: {\n configurable: true\n },\n edgeCount: {\n configurable: true\n }\n};\n\nContentMatch.parse = function parse(string, nodeTypes) {\n var stream = new TokenStream(string, nodeTypes);\n\n if (stream.next == null) {\n return ContentMatch.empty;\n }\n\n var expr = parseExpr(stream);\n\n if (stream.next) {\n stream.err(\"Unexpected trailing text\");\n }\n\n var match = dfa(nfa(expr));\n checkForDeadEnds(match, stream);\n return match;\n}; // :: (NodeType) → ?ContentMatch\n// Match a node type, returning a match after that node if\n// successful.\n\n\nContentMatch.prototype.matchType = function matchType(type) {\n for (var i = 0; i < this.next.length; i += 2) {\n if (this.next[i] == type) {\n return this.next[i + 1];\n }\n }\n\n return null;\n}; // :: (Fragment, ?number, ?number) → ?ContentMatch\n// Try to match a fragment. Returns the resulting match when\n// successful.\n\n\nContentMatch.prototype.matchFragment = function matchFragment(frag, start, end) {\n if (start === void 0) start = 0;\n if (end === void 0) end = frag.childCount;\n var cur = this;\n\n for (var i = start; cur && i < end; i++) {\n cur = cur.matchType(frag.child(i).type);\n }\n\n return cur;\n};\n\nprototypeAccessors$4.inlineContent.get = function () {\n var first = this.next[0];\n return first ? first.isInline : false;\n}; // :: ?NodeType\n// Get the first matching node type at this match position that can\n// be generated.\n\n\nprototypeAccessors$4.defaultType.get = function () {\n for (var i = 0; i < this.next.length; i += 2) {\n var type = this.next[i];\n\n if (!(type.isText || type.hasRequiredAttrs())) {\n return type;\n }\n }\n};\n\nContentMatch.prototype.compatible = function compatible(other) {\n for (var i = 0; i < this.next.length; i += 2) {\n for (var j = 0; j < other.next.length; j += 2) {\n if (this.next[i] == other.next[j]) {\n return true;\n }\n }\n }\n\n return false;\n}; // :: (Fragment, bool, ?number) → ?Fragment\n// Try to match the given fragment, and if that fails, see if it can\n// be made to match by inserting nodes in front of it. When\n// successful, return a fragment of inserted nodes (which may be\n// empty if nothing had to be inserted). When `toEnd` is true, only\n// return a fragment if the resulting match goes to the end of the\n// content expression.\n\n\nContentMatch.prototype.fillBefore = function fillBefore(after, toEnd, startIndex) {\n if (toEnd === void 0) toEnd = false;\n if (startIndex === void 0) startIndex = 0;\n var seen = [this];\n\n function search(match, types) {\n var finished = match.matchFragment(after, startIndex);\n\n if (finished && (!toEnd || finished.validEnd)) {\n return Fragment.from(types.map(function (tp) {\n return tp.createAndFill();\n }));\n }\n\n for (var i = 0; i < match.next.length; i += 2) {\n var type = match.next[i],\n next = match.next[i + 1];\n\n if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {\n seen.push(next);\n var found = search(next, types.concat(type));\n\n if (found) {\n return found;\n }\n }\n }\n }\n\n return search(this, []);\n}; // :: (NodeType) → ?[NodeType]\n// Find a set of wrapping node types that would allow a node of the\n// given type to appear at this position. The result may be empty\n// (when it fits directly) and will be null when no such wrapping\n// exists.\n\n\nContentMatch.prototype.findWrapping = function findWrapping(target) {\n for (var i = 0; i < this.wrapCache.length; i += 2) {\n if (this.wrapCache[i] == target) {\n return this.wrapCache[i + 1];\n }\n }\n\n var computed = this.computeWrapping(target);\n this.wrapCache.push(target, computed);\n return computed;\n};\n\nContentMatch.prototype.computeWrapping = function computeWrapping(target) {\n var seen = Object.create(null),\n active = [{\n match: this,\n type: null,\n via: null\n }];\n\n while (active.length) {\n var current = active.shift(),\n match = current.match;\n\n if (match.matchType(target)) {\n var result = [];\n\n for (var obj = current; obj.type; obj = obj.via) {\n result.push(obj.type);\n }\n\n return result.reverse();\n }\n\n for (var i = 0; i < match.next.length; i += 2) {\n var type = match.next[i];\n\n if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || match.next[i + 1].validEnd)) {\n active.push({\n match: type.contentMatch,\n type: type,\n via: current\n });\n seen[type.name] = true;\n }\n }\n }\n}; // :: number\n// The number of outgoing edges this node has in the finite\n// automaton that describes the content expression.\n\n\nprototypeAccessors$4.edgeCount.get = function () {\n return this.next.length >> 1;\n}; // :: (number) → {type: NodeType, next: ContentMatch}\n// Get the _n_th outgoing edge from this node in the finite\n// automaton that describes the content expression.\n\n\nContentMatch.prototype.edge = function edge(n) {\n var i = n << 1;\n\n if (i >= this.next.length) {\n throw new RangeError(\"There's no \" + n + \"th edge in this content match\");\n }\n\n return {\n type: this.next[i],\n next: this.next[i + 1]\n };\n};\n\nContentMatch.prototype.toString = function toString() {\n var seen = [];\n\n function scan(m) {\n seen.push(m);\n\n for (var i = 1; i < m.next.length; i += 2) {\n if (seen.indexOf(m.next[i]) == -1) {\n scan(m.next[i]);\n }\n }\n }\n\n scan(this);\n return seen.map(function (m, i) {\n var out = i + (m.validEnd ? \"*\" : \" \") + \" \";\n\n for (var i$1 = 0; i$1 < m.next.length; i$1 += 2) {\n out += (i$1 ? \", \" : \"\") + m.next[i$1].name + \"->\" + seen.indexOf(m.next[i$1 + 1]);\n }\n\n return out;\n }).join(\"\\n\");\n};\n\nObject.defineProperties(ContentMatch.prototype, prototypeAccessors$4);\nContentMatch.empty = new ContentMatch(true);\n\nvar TokenStream = function TokenStream(string, nodeTypes) {\n this.string = string;\n this.nodeTypes = nodeTypes;\n this.inline = null;\n this.pos = 0;\n this.tokens = string.split(/\\s*(?=\\b|\\W|$)/);\n\n if (this.tokens[this.tokens.length - 1] == \"\") {\n this.tokens.pop();\n }\n\n if (this.tokens[0] == \"\") {\n this.tokens.shift();\n }\n};\n\nvar prototypeAccessors$1$2 = {\n next: {\n configurable: true\n }\n};\n\nprototypeAccessors$1$2.next.get = function () {\n return this.tokens[this.pos];\n};\n\nTokenStream.prototype.eat = function eat(tok) {\n return this.next == tok && (this.pos++ || true);\n};\n\nTokenStream.prototype.err = function err(str) {\n throw new SyntaxError(str + \" (in content expression '\" + this.string + \"')\");\n};\n\nObject.defineProperties(TokenStream.prototype, prototypeAccessors$1$2);\n\nfunction parseExpr(stream) {\n var exprs = [];\n\n do {\n exprs.push(parseExprSeq(stream));\n } while (stream.eat(\"|\"));\n\n return exprs.length == 1 ? exprs[0] : {\n type: \"choice\",\n exprs: exprs\n };\n}\n\nfunction parseExprSeq(stream) {\n var exprs = [];\n\n do {\n exprs.push(parseExprSubscript(stream));\n } while (stream.next && stream.next != \")\" && stream.next != \"|\");\n\n return exprs.length == 1 ? exprs[0] : {\n type: \"seq\",\n exprs: exprs\n };\n}\n\nfunction parseExprSubscript(stream) {\n var expr = parseExprAtom(stream);\n\n for (;;) {\n if (stream.eat(\"+\")) {\n expr = {\n type: \"plus\",\n expr: expr\n };\n } else if (stream.eat(\"*\")) {\n expr = {\n type: \"star\",\n expr: expr\n };\n } else if (stream.eat(\"?\")) {\n expr = {\n type: \"opt\",\n expr: expr\n };\n } else if (stream.eat(\"{\")) {\n expr = parseExprRange(stream, expr);\n } else {\n break;\n }\n }\n\n return expr;\n}\n\nfunction parseNum(stream) {\n if (/\\D/.test(stream.next)) {\n stream.err(\"Expected number, got '\" + stream.next + \"'\");\n }\n\n var result = Number(stream.next);\n stream.pos++;\n return result;\n}\n\nfunction parseExprRange(stream, expr) {\n var min = parseNum(stream),\n max = min;\n\n if (stream.eat(\",\")) {\n if (stream.next != \"}\") {\n max = parseNum(stream);\n } else {\n max = -1;\n }\n }\n\n if (!stream.eat(\"}\")) {\n stream.err(\"Unclosed braced range\");\n }\n\n return {\n type: \"range\",\n min: min,\n max: max,\n expr: expr\n };\n}\n\nfunction resolveName(stream, name) {\n var types = stream.nodeTypes,\n type = types[name];\n\n if (type) {\n return [type];\n }\n\n var result = [];\n\n for (var typeName in types) {\n var type$1 = types[typeName];\n\n if (type$1.groups.indexOf(name) > -1) {\n result.push(type$1);\n }\n }\n\n if (result.length == 0) {\n stream.err(\"No node type or group '\" + name + \"' found\");\n }\n\n return result;\n}\n\nfunction parseExprAtom(stream) {\n if (stream.eat(\"(\")) {\n var expr = parseExpr(stream);\n\n if (!stream.eat(\")\")) {\n stream.err(\"Missing closing paren\");\n }\n\n return expr;\n } else if (!/\\W/.test(stream.next)) {\n var exprs = resolveName(stream, stream.next).map(function (type) {\n if (stream.inline == null) {\n stream.inline = type.isInline;\n } else if (stream.inline != type.isInline) {\n stream.err(\"Mixing inline and block content\");\n }\n\n return {\n type: \"name\",\n value: type\n };\n });\n stream.pos++;\n return exprs.length == 1 ? exprs[0] : {\n type: \"choice\",\n exprs: exprs\n };\n } else {\n stream.err(\"Unexpected token '\" + stream.next + \"'\");\n }\n} // The code below helps compile a regular-expression-like language\n// into a deterministic finite automaton. For a good introduction to\n// these concepts, see https://swtch.com/~rsc/regexp/regexp1.html\n// : (Object) → [[{term: ?any, to: number}]]\n// Construct an NFA from an expression as returned by the parser. The\n// NFA is represented as an array of states, which are themselves\n// arrays of edges, which are `{term, to}` objects. The first state is\n// the entry state and the last node is the success state.\n//\n// Note that unlike typical NFAs, the edge ordering in this one is\n// significant, in that it is used to contruct filler content when\n// necessary.\n\n\nfunction nfa(expr) {\n var nfa = [[]];\n connect(compile(expr, 0), node());\n return nfa;\n\n function node() {\n return nfa.push([]) - 1;\n }\n\n function edge(from, to, term) {\n var edge = {\n term: term,\n to: to\n };\n nfa[from].push(edge);\n return edge;\n }\n\n function connect(edges, to) {\n edges.forEach(function (edge) {\n return edge.to = to;\n });\n }\n\n function compile(expr, from) {\n if (expr.type == \"choice\") {\n return expr.exprs.reduce(function (out, expr) {\n return out.concat(compile(expr, from));\n }, []);\n } else if (expr.type == \"seq\") {\n for (var i = 0;; i++) {\n var next = compile(expr.exprs[i], from);\n\n if (i == expr.exprs.length - 1) {\n return next;\n }\n\n connect(next, from = node());\n }\n } else if (expr.type == \"star\") {\n var loop = node();\n edge(from, loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)];\n } else if (expr.type == \"plus\") {\n var loop$1 = node();\n connect(compile(expr.expr, from), loop$1);\n connect(compile(expr.expr, loop$1), loop$1);\n return [edge(loop$1)];\n } else if (expr.type == \"opt\") {\n return [edge(from)].concat(compile(expr.expr, from));\n } else if (expr.type == \"range\") {\n var cur = from;\n\n for (var i$1 = 0; i$1 < expr.min; i$1++) {\n var next$1 = node();\n connect(compile(expr.expr, cur), next$1);\n cur = next$1;\n }\n\n if (expr.max == -1) {\n connect(compile(expr.expr, cur), cur);\n } else {\n for (var i$2 = expr.min; i$2 < expr.max; i$2++) {\n var next$2 = node();\n edge(cur, next$2);\n connect(compile(expr.expr, cur), next$2);\n cur = next$2;\n }\n }\n\n return [edge(cur)];\n } else if (expr.type == \"name\") {\n return [edge(from, null, expr.value)];\n }\n }\n}\n\nfunction cmp(a, b) {\n return b - a;\n} // Get the set of nodes reachable by null edges from `node`. Omit\n// nodes with only a single null-out-edge, since they may lead to\n// needless duplicated nodes.\n\n\nfunction nullFrom(nfa, node) {\n var result = [];\n scan(node);\n return result.sort(cmp);\n\n function scan(node) {\n var edges = nfa[node];\n\n if (edges.length == 1 && !edges[0].term) {\n return scan(edges[0].to);\n }\n\n result.push(node);\n\n for (var i = 0; i < edges.length; i++) {\n var ref = edges[i];\n var term = ref.term;\n var to = ref.to;\n\n if (!term && result.indexOf(to) == -1) {\n scan(to);\n }\n }\n }\n} // : ([[{term: ?any, to: number}]]) → ContentMatch\n// Compiles an NFA as produced by `nfa` into a DFA, modeled as a set\n// of state objects (`ContentMatch` instances) with transitions\n// between them.\n\n\nfunction dfa(nfa) {\n var labeled = Object.create(null);\n return explore(nullFrom(nfa, 0));\n\n function explore(states) {\n var out = [];\n states.forEach(function (node) {\n nfa[node].forEach(function (ref) {\n var term = ref.term;\n var to = ref.to;\n\n if (!term) {\n return;\n }\n\n var known = out.indexOf(term),\n set = known > -1 && out[known + 1];\n nullFrom(nfa, to).forEach(function (node) {\n if (!set) {\n out.push(term, set = []);\n }\n\n if (set.indexOf(node) == -1) {\n set.push(node);\n }\n });\n });\n });\n var state = labeled[states.join(\",\")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1);\n\n for (var i = 0; i < out.length; i += 2) {\n var states$1 = out[i + 1].sort(cmp);\n state.next.push(out[i], labeled[states$1.join(\",\")] || explore(states$1));\n }\n\n return state;\n }\n}\n\nfunction checkForDeadEnds(match, stream) {\n for (var i = 0, work = [match]; i < work.length; i++) {\n var state = work[i],\n dead = !state.validEnd,\n nodes = [];\n\n for (var j = 0; j < state.next.length; j += 2) {\n var node = state.next[j],\n next = state.next[j + 1];\n nodes.push(node.name);\n\n if (dead && !(node.isText || node.hasRequiredAttrs())) {\n dead = false;\n }\n\n if (work.indexOf(next) == -1) {\n work.push(next);\n }\n }\n\n if (dead) {\n stream.err(\"Only non-generatable nodes (\" + nodes.join(\", \") + \") in a required position (see https://prosemirror.net/docs/guide/#generatable)\");\n }\n }\n} // For node types where all attrs have a default value (or which don't\n// have any attributes), build up a single reusable default attribute\n// object, and use it for all nodes that don't specify specific\n// attributes.\n\n\nfunction defaultAttrs(attrs) {\n var defaults = Object.create(null);\n\n for (var attrName in attrs) {\n var attr = attrs[attrName];\n\n if (!attr.hasDefault) {\n return null;\n }\n\n defaults[attrName] = attr[\"default\"];\n }\n\n return defaults;\n}\n\nfunction computeAttrs(attrs, value) {\n var built = Object.create(null);\n\n for (var name in attrs) {\n var given = value && value[name];\n\n if (given === undefined) {\n var attr = attrs[name];\n\n if (attr.hasDefault) {\n given = attr[\"default\"];\n } else {\n throw new RangeError(\"No value supplied for attribute \" + name);\n }\n }\n\n built[name] = given;\n }\n\n return built;\n}\n\nfunction initAttrs(attrs) {\n var result = Object.create(null);\n\n if (attrs) {\n for (var name in attrs) {\n result[name] = new Attribute(attrs[name]);\n }\n }\n\n return result;\n} // ::- Node types are objects allocated once per `Schema` and used to\n// [tag](#model.Node.type) `Node` instances. They contain information\n// about the node type, such as its name and what kind of node it\n// represents.\n\n\nvar NodeType = function NodeType(name, schema, spec) {\n // :: string\n // The name the node type has in this schema.\n this.name = name; // :: Schema\n // A link back to the `Schema` the node type belongs to.\n\n this.schema = schema; // :: NodeSpec\n // The spec that this type is based on\n\n this.spec = spec;\n this.groups = spec.group ? spec.group.split(\" \") : [];\n this.attrs = initAttrs(spec.attrs);\n this.defaultAttrs = defaultAttrs(this.attrs); // :: ContentMatch\n // The starting match of the node type's content expression.\n\n this.contentMatch = null; // : ?[MarkType]\n // The set of marks allowed in this node. `null` means all marks\n // are allowed.\n\n this.markSet = null; // :: bool\n // True if this node type has inline content.\n\n this.inlineContent = null; // :: bool\n // True if this is a block type\n\n this.isBlock = !(spec.inline || name == \"text\"); // :: bool\n // True if this is the text node type.\n\n this.isText = name == \"text\";\n};\n\nvar prototypeAccessors$5 = {\n isInline: {\n configurable: true\n },\n isTextblock: {\n configurable: true\n },\n isLeaf: {\n configurable: true\n },\n isAtom: {\n configurable: true\n }\n}; // :: bool\n// True if this is an inline type.\n\nprototypeAccessors$5.isInline.get = function () {\n return !this.isBlock;\n}; // :: bool\n// True if this is a textblock type, a block that contains inline\n// content.\n\n\nprototypeAccessors$5.isTextblock.get = function () {\n return this.isBlock && this.inlineContent;\n}; // :: bool\n// True for node types that allow no content.\n\n\nprototypeAccessors$5.isLeaf.get = function () {\n return this.contentMatch == ContentMatch.empty;\n}; // :: bool\n// True when this node is an atom, i.e. when it does not have\n// directly editable content.\n\n\nprototypeAccessors$5.isAtom.get = function () {\n return this.isLeaf || this.spec.atom;\n}; // :: () → bool\n// Tells you whether this node type has any required attributes.\n\n\nNodeType.prototype.hasRequiredAttrs = function hasRequiredAttrs() {\n for (var n in this.attrs) {\n if (this.attrs[n].isRequired) {\n return true;\n }\n }\n\n return false;\n};\n\nNodeType.prototype.compatibleContent = function compatibleContent(other) {\n return this == other || this.contentMatch.compatible(other.contentMatch);\n};\n\nNodeType.prototype.computeAttrs = function computeAttrs$1(attrs) {\n if (!attrs && this.defaultAttrs) {\n return this.defaultAttrs;\n } else {\n return computeAttrs(this.attrs, attrs);\n }\n}; // :: (?Object, ?union<Fragment, Node, [Node]>, ?[Mark]) → Node\n// Create a `Node` of this type. The given attributes are\n// checked and defaulted (you can pass `null` to use the type's\n// defaults entirely, if no required attributes exist). `content`\n// may be a `Fragment`, a node, an array of nodes, or\n// `null`. Similarly `marks` may be `null` to default to the empty\n// set of marks.\n\n\nNodeType.prototype.create = function create(attrs, content, marks) {\n if (this.isText) {\n throw new Error(\"NodeType.create can't construct text nodes\");\n }\n\n return new Node(this, this.computeAttrs(attrs), Fragment.from(content), Mark.setFrom(marks));\n}; // :: (?Object, ?union<Fragment, Node, [Node]>, ?[Mark]) → Node\n// Like [`create`](#model.NodeType.create), but check the given content\n// against the node type's content restrictions, and throw an error\n// if it doesn't match.\n\n\nNodeType.prototype.createChecked = function createChecked(attrs, content, marks) {\n content = Fragment.from(content);\n\n if (!this.validContent(content)) {\n throw new RangeError(\"Invalid content for node \" + this.name);\n }\n\n return new Node(this, this.computeAttrs(attrs), content, Mark.setFrom(marks));\n}; // :: (?Object, ?union<Fragment, Node, [Node]>, ?[Mark]) → ?Node\n// Like [`create`](#model.NodeType.create), but see if it is necessary to\n// add nodes to the start or end of the given fragment to make it\n// fit the node. If no fitting wrapping can be found, return null.\n// Note that, due to the fact that required nodes can always be\n// created, this will always succeed if you pass null or\n// `Fragment.empty` as content.\n\n\nNodeType.prototype.createAndFill = function createAndFill(attrs, content, marks) {\n attrs = this.computeAttrs(attrs);\n content = Fragment.from(content);\n\n if (content.size) {\n var before = this.contentMatch.fillBefore(content);\n\n if (!before) {\n return null;\n }\n\n content = before.append(content);\n }\n\n var after = this.contentMatch.matchFragment(content).fillBefore(Fragment.empty, true);\n\n if (!after) {\n return null;\n }\n\n return new Node(this, attrs, content.append(after), Mark.setFrom(marks));\n}; // :: (Fragment) → bool\n// Returns true if the given fragment is valid content for this node\n// type with the given attributes.\n\n\nNodeType.prototype.validContent = function validContent(content) {\n var result = this.contentMatch.matchFragment(content);\n\n if (!result || !result.validEnd) {\n return false;\n }\n\n for (var i = 0; i < content.childCount; i++) {\n if (!this.allowsMarks(content.child(i).marks)) {\n return false;\n }\n }\n\n return true;\n}; // :: (MarkType) → bool\n// Check whether the given mark type is allowed in this node.\n\n\nNodeType.prototype.allowsMarkType = function allowsMarkType(markType) {\n return this.markSet == null || this.markSet.indexOf(markType) > -1;\n}; // :: ([Mark]) → bool\n// Test whether the given set of marks are allowed in this node.\n\n\nNodeType.prototype.allowsMarks = function allowsMarks(marks) {\n if (this.markSet == null) {\n return true;\n }\n\n for (var i = 0; i < marks.length; i++) {\n if (!this.allowsMarkType(marks[i].type)) {\n return false;\n }\n }\n\n return true;\n}; // :: ([Mark]) → [Mark]\n// Removes the marks that are not allowed in this node from the given set.\n\n\nNodeType.prototype.allowedMarks = function allowedMarks(marks) {\n if (this.markSet == null) {\n return marks;\n }\n\n var copy;\n\n for (var i = 0; i < marks.length; i++) {\n if (!this.allowsMarkType(marks[i].type)) {\n if (!copy) {\n copy = marks.slice(0, i);\n }\n } else if (copy) {\n copy.push(marks[i]);\n }\n }\n\n return !copy ? marks : copy.length ? copy : Mark.empty;\n};\n\nNodeType.compile = function compile(nodes, schema) {\n var result = Object.create(null);\n nodes.forEach(function (name, spec) {\n return result[name] = new NodeType(name, schema, spec);\n });\n var topType = schema.spec.topNode || \"doc\";\n\n if (!result[topType]) {\n throw new RangeError(\"Schema is missing its top node type ('\" + topType + \"')\");\n }\n\n if (!result.text) {\n throw new RangeError(\"Every schema needs a 'text' type\");\n }\n\n for (var _ in result.text.attrs) {\n throw new RangeError(\"The text node type should not have attributes\");\n }\n\n return result;\n};\n\nObject.defineProperties(NodeType.prototype, prototypeAccessors$5); // Attribute descriptors\n\nvar Attribute = function Attribute(options) {\n this.hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n this[\"default\"] = options[\"default\"];\n};\n\nvar prototypeAccessors$1$3 = {\n isRequired: {\n configurable: true\n }\n};\n\nprototypeAccessors$1$3.isRequired.get = function () {\n return !this.hasDefault;\n};\n\nObject.defineProperties(Attribute.prototype, prototypeAccessors$1$3); // Marks\n// ::- Like nodes, marks (which are associated with nodes to signify\n// things like emphasis or being part of a link) are\n// [tagged](#model.Mark.type) with type objects, which are\n// instantiated once per `Schema`.\n\nvar MarkType = function MarkType(name, rank, schema, spec) {\n // :: string\n // The name of the mark type.\n this.name = name; // :: Schema\n // The schema that this mark type instance is part of.\n\n this.schema = schema; // :: MarkSpec\n // The spec on which the type is based.\n\n this.spec = spec;\n this.attrs = initAttrs(spec.attrs);\n this.rank = rank;\n this.excluded = null;\n var defaults = defaultAttrs(this.attrs);\n this.instance = defaults && new Mark(this, defaults);\n}; // :: (?Object) → Mark\n// Create a mark of this type. `attrs` may be `null` or an object\n// containing only some of the mark's attributes. The others, if\n// they have defaults, will be added.\n\n\nMarkType.prototype.create = function create(attrs) {\n if (!attrs && this.instance) {\n return this.instance;\n }\n\n return new Mark(this, computeAttrs(this.attrs, attrs));\n};\n\nMarkType.compile = function compile(marks, schema) {\n var result = Object.create(null),\n rank = 0;\n marks.forEach(function (name, spec) {\n return result[name] = new MarkType(name, rank++, schema, spec);\n });\n return result;\n}; // :: ([Mark]) → [Mark]\n// When there is a mark of this type in the given set, a new set\n// without it is returned. Otherwise, the input set is returned.\n\n\nMarkType.prototype.removeFromSet = function removeFromSet(set) {\n for (var i = 0; i < set.length; i++) {\n if (set[i].type == this) {\n set = set.slice(0, i).concat(set.slice(i + 1));\n i--;\n }\n }\n\n return set;\n}; // :: ([Mark]) → ?Mark\n// Tests whether there is a mark of this type in the given set.\n\n\nMarkType.prototype.isInSet = function isInSet(set) {\n for (var i = 0; i < set.length; i++) {\n if (set[i].type == this) {\n return set[i];\n }\n }\n}; // :: (MarkType) → bool\n// Queries whether a given mark type is\n// [excluded](#model.MarkSpec.excludes) by this one.\n\n\nMarkType.prototype.excludes = function excludes(other) {\n return this.excluded.indexOf(other) > -1;\n}; // SchemaSpec:: interface\n// An object describing a schema, as passed to the [`Schema`](#model.Schema)\n// constructor.\n//\n// nodes:: union<Object<NodeSpec>, OrderedMap<NodeSpec>>\n// The node types in this schema. Maps names to\n// [`NodeSpec`](#model.NodeSpec) objects that describe the node type\n// associated with that name. Their order is significant—it\n// determines which [parse rules](#model.NodeSpec.parseDOM) take\n// precedence by default, and which nodes come first in a given\n// [group](#model.NodeSpec.group).\n//\n// marks:: ?union<Object<MarkSpec>, OrderedMap<MarkSpec>>\n// The mark types that exist in this schema. The order in which they\n// are provided determines the order in which [mark\n// sets](#model.Mark.addToSet) are sorted and in which [parse\n// rules](#model.MarkSpec.parseDOM) are tried.\n//\n// topNode:: ?string\n// The name of the default top-level node for the schema. Defaults\n// to `\"doc\"`.\n// NodeSpec:: interface\n//\n// content:: ?string\n// The content expression for this node, as described in the [schema\n// guide](/docs/guide/#schema.content_expressions). When not given,\n// the node does not allow any content.\n//\n// marks:: ?string\n// The marks that are allowed inside of this node. May be a\n// space-separated string referring to mark names or groups, `\"_\"`\n// to explicitly allow all marks, or `\"\"` to disallow marks. When\n// not given, nodes with inline content default to allowing all\n// marks, other nodes default to not allowing marks.\n//\n// group:: ?string\n// The group or space-separated groups to which this node belongs,\n// which can be referred to in the content expressions for the\n// schema.\n//\n// inline:: ?bool\n// Should be set to true for inline nodes. (Implied for text nodes.)\n//\n// atom:: ?bool\n// Can be set to true to indicate that, though this isn't a [leaf\n// node](#model.NodeType.isLeaf), it doesn't have directly editable\n// content and should be treated as a single unit in the view.\n//\n// attrs:: ?Object<AttributeSpec>\n// The attributes that nodes of this type get.\n//\n// selectable:: ?bool\n// Controls whether nodes of this type can be selected as a [node\n// selection](#state.NodeSelection). Defaults to true for non-text\n// nodes.\n//\n// draggable:: ?bool\n// Determines whether nodes of this type can be dragged without\n// being selected. Defaults to false.\n//\n// code:: ?bool\n// Can be used to indicate that this node contains code, which\n// causes some commands to behave differently.\n//\n// defining:: ?bool\n// Determines whether this node is considered an important parent\n// node during replace operations (such as paste). Non-defining (the\n// default) nodes get dropped when their entire content is replaced,\n// whereas defining nodes persist and wrap the inserted content.\n// Likewise, in _inserted_ content the defining parents of the\n// content are preserved when possible. Typically,\n// non-default-paragraph textblock types, and possibly list items,\n// are marked as defining.\n//\n// isolating:: ?bool\n// When enabled (default is false), the sides of nodes of this type\n// count as boundaries that regular editing operations, like\n// backspacing or lifting, won't cross. An example of a node that\n// should probably have this enabled is a table cell.\n//\n// toDOM:: ?(node: Node) → DOMOutputSpec\n// Defines the default way a node of this type should be serialized\n// to DOM/HTML (as used by\n// [`DOMSerializer.fromSchema`](#model.DOMSerializer^fromSchema)).\n// Should return a DOM node or an [array\n// structure](#model.DOMOutputSpec) that describes one, with an\n// optional number zero (“hole”) in it to indicate where the node's\n// content should be inserted.\n//\n// For text nodes, the default is to create a text DOM node. Though\n// it is possible to create a serializer where text is rendered\n// differently, this is not supported inside the editor, so you\n// shouldn't override that in your text node spec.\n//\n// parseDOM:: ?[ParseRule]\n// Associates DOM parser information with this node, which can be\n// used by [`DOMParser.fromSchema`](#model.DOMParser^fromSchema) to\n// automatically derive a parser. The `node` field in the rules is\n// implied (the name of this node will be filled in automatically).\n// If you supply your own parser, you do not need to also specify\n// parsing rules in your schema.\n//\n// toDebugString:: ?(node: Node) -> string\n// Defines the default way a node of this type should be serialized\n// to a string representation for debugging (e.g. in error messages).\n// MarkSpec:: interface\n//\n// attrs:: ?Object<AttributeSpec>\n// The attributes that marks of this type get.\n//\n// inclusive:: ?bool\n// Whether this mark should be active when the cursor is positioned\n// at its end (or at its start when that is also the start of the\n// parent node). Defaults to true.\n//\n// excludes:: ?string\n// Determines which other marks this mark can coexist with. Should\n// be a space-separated strings naming other marks or groups of marks.\n// When a mark is [added](#model.Mark.addToSet) to a set, all marks\n// that it excludes are removed in the process. If the set contains\n// any mark that excludes the new mark but is not, itself, excluded\n// by the new mark, the mark can not be added an the set. You can\n// use the value `\"_\"` to indicate that the mark excludes all\n// marks in the schema.\n//\n// Defaults to only being exclusive with marks of the same type. You\n// can set it to an empty string (or any string not containing the\n// mark's own name) to allow multiple marks of a given type to\n// coexist (as long as they have different attributes).\n//\n// group:: ?string\n// The group or space-separated groups to which this mark belongs.\n//\n// spanning:: ?bool\n// Determines whether marks of this type can span multiple adjacent\n// nodes when serialized to DOM/HTML. Defaults to true.\n//\n// toDOM:: ?(mark: Mark, inline: bool) → DOMOutputSpec\n// Defines the default way marks of this type should be serialized\n// to DOM/HTML. When the resulting spec contains a hole, that is\n// where the marked content is placed. Otherwise, it is appended to\n// the top node.\n//\n// parseDOM:: ?[ParseRule]\n// Associates DOM parser information with this mark (see the\n// corresponding [node spec field](#model.NodeSpec.parseDOM)). The\n// `mark` field in the rules is implied.\n// AttributeSpec:: interface\n//\n// Used to [define](#model.NodeSpec.attrs) attributes on nodes or\n// marks.\n//\n// default:: ?any\n// The default value for this attribute, to use when no explicit\n// value is provided. Attributes that have no default must be\n// provided whenever a node or mark of a type that has them is\n// created.\n// ::- A document schema. Holds [node](#model.NodeType) and [mark\n// type](#model.MarkType) objects for the nodes and marks that may\n// occur in conforming documents, and provides functionality for\n// creating and deserializing such documents.\n\n\nvar Schema = function Schema(spec) {\n // :: SchemaSpec\n // The [spec](#model.SchemaSpec) on which the schema is based,\n // with the added guarantee that its `nodes` and `marks`\n // properties are\n // [`OrderedMap`](https://github.com/marijnh/orderedmap) instances\n // (not raw objects).\n this.spec = {};\n\n for (var prop in spec) {\n this.spec[prop] = spec[prop];\n }\n\n this.spec.nodes = OrderedMap.from(spec.nodes);\n this.spec.marks = OrderedMap.from(spec.marks); // :: Object<NodeType>\n // An object mapping the schema's node names to node type objects.\n\n this.nodes = NodeType.compile(this.spec.nodes, this); // :: Object<MarkType>\n // A map from mark names to mark type objects.\n\n this.marks = MarkType.compile(this.spec.marks, this);\n var contentExprCache = Object.create(null);\n\n for (var prop$1 in this.nodes) {\n if (prop$1 in this.marks) {\n throw new RangeError(prop$1 + \" can not be both a node and a mark\");\n }\n\n var type = this.nodes[prop$1],\n contentExpr = type.spec.content || \"\",\n markExpr = type.spec.marks;\n type.contentMatch = contentExprCache[contentExpr] || (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes));\n type.inlineContent = type.contentMatch.inlineContent;\n type.markSet = markExpr == \"_\" ? null : markExpr ? gatherMarks(this, markExpr.split(\" \")) : markExpr == \"\" || !type.inlineContent ? [] : null;\n }\n\n for (var prop$2 in this.marks) {\n var type$1 = this.marks[prop$2],\n excl = type$1.spec.excludes;\n type$1.excluded = excl == null ? [type$1] : excl == \"\" ? [] : gatherMarks(this, excl.split(\" \"));\n }\n\n this.nodeFromJSON = this.nodeFromJSON.bind(this);\n this.markFromJSON = this.markFromJSON.bind(this); // :: NodeType\n // The type of the [default top node](#model.SchemaSpec.topNode)\n // for this schema.\n\n this.topNodeType = this.nodes[this.spec.topNode || \"doc\"]; // :: Object\n // An object for storing whatever values modules may want to\n // compute and cache per schema. (If you want to store something\n // in it, try to use property names unlikely to clash.)\n\n this.cached = Object.create(null);\n this.cached.wrappings = Object.create(null);\n}; // :: (union<string, NodeType>, ?Object, ?union<Fragment, Node, [Node]>, ?[Mark]) → Node\n// Create a node in this schema. The `type` may be a string or a\n// `NodeType` instance. Attributes will be extended\n// with defaults, `content` may be a `Fragment`,\n// `null`, a `Node`, or an array of nodes.\n\n\nSchema.prototype.node = function node(type, attrs, content, marks) {\n if (typeof type == \"string\") {\n type = this.nodeType(type);\n } else if (!(type instanceof NodeType)) {\n throw new RangeError(\"Invalid node type: \" + type);\n } else if (type.schema != this) {\n throw new RangeError(\"Node type from different schema used (\" + type.name + \")\");\n }\n\n return type.createChecked(attrs, content, marks);\n}; // :: (string, ?[Mark]) → Node\n// Create a text node in the schema. Empty text nodes are not\n// allowed.\n\n\nSchema.prototype.text = function text(text$1, marks) {\n var type = this.nodes.text;\n return new TextNode(type, type.defaultAttrs, text$1, Mark.setFrom(marks));\n}; // :: (union<string, MarkType>, ?Object) → Mark\n// Create a mark with the given type and attributes.\n\n\nSchema.prototype.mark = function mark(type, attrs) {\n if (typeof type == \"string\") {\n type = this.marks[type];\n }\n\n return type.create(attrs);\n}; // :: (Object) → Node\n// Deserialize a node from its JSON representation. This method is\n// bound.\n\n\nSchema.prototype.nodeFromJSON = function nodeFromJSON(json) {\n return Node.fromJSON(this, json);\n}; // :: (Object) → Mark\n// Deserialize a mark from its JSON representation. This method is\n// bound.\n\n\nSchema.prototype.markFromJSON = function markFromJSON(json) {\n return Mark.fromJSON(this, json);\n};\n\nSchema.prototype.nodeType = function nodeType(name) {\n var found = this.nodes[name];\n\n if (!found) {\n throw new RangeError(\"Unknown node type: \" + name);\n }\n\n return found;\n};\n\nfunction gatherMarks(schema, marks) {\n var found = [];\n\n for (var i = 0; i < marks.length; i++) {\n var name = marks[i],\n mark = schema.marks[name],\n ok = mark;\n\n if (mark) {\n found.push(mark);\n } else {\n for (var prop in schema.marks) {\n var mark$1 = schema.marks[prop];\n\n if (name == \"_\" || mark$1.spec.group && mark$1.spec.group.split(\" \").indexOf(name) > -1) {\n found.push(ok = mark$1);\n }\n }\n }\n\n if (!ok) {\n throw new SyntaxError(\"Unknown mark type: '\" + marks[i] + \"'\");\n }\n }\n\n return found;\n} // ParseOptions:: interface\n// These are the options recognized by the\n// [`parse`](#model.DOMParser.parse) and\n// [`parseSlice`](#model.DOMParser.parseSlice) methods.\n//\n// preserveWhitespace:: ?union<bool, \"full\">\n// By default, whitespace is collapsed as per HTML's rules. Pass\n// `true` to preserve whitespace, but normalize newlines to\n// spaces, and `\"full\"` to preserve whitespace entirely.\n//\n// findPositions:: ?[{node: dom.Node, offset: number}]\n// When given, the parser will, beside parsing the content,\n// record the document positions of the given DOM positions. It\n// will do so by writing to the objects, adding a `pos` property\n// that holds the document position. DOM positions that are not\n// in the parsed content will not be written to.\n//\n// from:: ?number\n// The child node index to start parsing from.\n//\n// to:: ?number\n// The child node index to stop parsing at.\n//\n// topNode:: ?Node\n// By default, the content is parsed into the schema's default\n// [top node type](#model.Schema.topNodeType). You can pass this\n// option to use the type and attributes from a different node\n// as the top container.\n//\n// topMatch:: ?ContentMatch\n// Provide the starting content match that content parsed into the\n// top node is matched against.\n//\n// context:: ?ResolvedPos\n// A set of additional nodes to count as\n// [context](#model.ParseRule.context) when parsing, above the\n// given [top node](#model.ParseOptions.topNode).\n// ParseRule:: interface\n// A value that describes how to parse a given DOM node or inline\n// style as a ProseMirror node or mark.\n//\n// tag:: ?string\n// A CSS selector describing the kind of DOM elements to match. A\n// single rule should have _either_ a `tag` or a `style` property.\n//\n// namespace:: ?string\n// The namespace to match. This should be used with `tag`.\n// Nodes are only matched when the namespace matches or this property\n// is null.\n//\n// style:: ?string\n// A CSS property name to match. When given, this rule matches\n// inline styles that list that property. May also have the form\n// `\"property=value\"`, in which case the rule only matches if the\n// property's value exactly matches the given value. (For more\n// complicated filters, use [`getAttrs`](#model.ParseRule.getAttrs)\n// and return false to indicate that the match failed.) Rules\n// matching styles may only produce [marks](#model.ParseRule.mark),\n// not nodes.\n//\n// priority:: ?number\n// Can be used to change the order in which the parse rules in a\n// schema are tried. Those with higher priority come first. Rules\n// without a priority are counted as having priority 50. This\n// property is only meaningful in a schema—when directly\n// constructing a parser, the order of the rule array is used.\n//\n// consuming:: ?boolean\n// By default, when a rule matches an element or style, no further\n// rules get a chance to match it. By setting this to `false`, you\n// indicate that even when this rule matches, other rules that come\n// after it should also run.\n//\n// context:: ?string\n// When given, restricts this rule to only match when the current\n// context—the parent nodes into which the content is being\n// parsed—matches this expression. Should contain one or more node\n// names or node group names followed by single or double slashes.\n// For example `\"paragraph/\"` means the rule only matches when the\n// parent node is a paragraph, `\"blockquote/paragraph/\"` restricts\n// it to be in a paragraph that is inside a blockquote, and\n// `\"section//\"` matches any position inside a section—a double\n// slash matches any sequence of ancestor nodes. To allow multiple\n// different contexts, they can be separated by a pipe (`|`)\n// character, as in `\"blockquote/|list_item/\"`.\n//\n// node:: ?string\n// The name of the node type to create when this rule matches. Only\n// valid for rules with a `tag` property, not for style rules. Each\n// rule should have one of a `node`, `mark`, or `ignore` property\n// (except when it appears in a [node](#model.NodeSpec.parseDOM) or\n// [mark spec](#model.MarkSpec.parseDOM), in which case the `node`\n// or `mark` property will be derived from its position).\n//\n// mark:: ?string\n// The name of the mark type to wrap the matched content in.\n//\n// ignore:: ?bool\n// When true, ignore content that matches this rule.\n//\n// closeParent:: ?bool\n// When true, finding an element that matches this rule will close\n// the current node.\n//\n// skip:: ?bool\n// When true, ignore the node that matches this rule, but do parse\n// its content.\n//\n// attrs:: ?Object\n// Attributes for the node or mark created by this rule. When\n// `getAttrs` is provided, it takes precedence.\n//\n// getAttrs:: ?(union<dom.Node, string>) → ?union<Object, false>\n// A function used to compute the attributes for the node or mark\n// created by this rule. Can also be used to describe further\n// conditions the DOM element or style must match. When it returns\n// `false`, the rule won't match. When it returns null or undefined,\n// that is interpreted as an empty/default set of attributes.\n//\n// Called with a DOM Element for `tag` rules, and with a string (the\n// style's value) for `style` rules.\n//\n// contentElement:: ?union<string, (dom.Node) → dom.Node>\n// For `tag` rules that produce non-leaf nodes or marks, by default\n// the content of the DOM element is parsed as content of the mark\n// or node. If the child nodes are in a descendent node, this may be\n// a CSS selector string that the parser must use to find the actual\n// content element, or a function that returns the actual content\n// element to the parser.\n//\n// getContent:: ?(dom.Node, schema: Schema) → Fragment\n// Can be used to override the content of a matched node. When\n// present, instead of parsing the node's child nodes, the result of\n// this function is used.\n//\n// preserveWhitespace:: ?union<bool, \"full\">\n// Controls whether whitespace should be preserved when parsing the\n// content inside the matched element. `false` means whitespace may\n// be collapsed, `true` means that whitespace should be preserved\n// but newlines normalized to spaces, and `\"full\"` means that\n// newlines should also be preserved.\n// ::- A DOM parser represents a strategy for parsing DOM content into\n// a ProseMirror document conforming to a given schema. Its behavior\n// is defined by an array of [rules](#model.ParseRule).\n\n\nvar DOMParser = function DOMParser(schema, rules) {\n var this$1 = this; // :: Schema\n // The schema into which the parser parses.\n\n this.schema = schema; // :: [ParseRule]\n // The set of [parse rules](#model.ParseRule) that the parser\n // uses, in order of precedence.\n\n this.rules = rules;\n this.tags = [];\n this.styles = [];\n rules.forEach(function (rule) {\n if (rule.tag) {\n this$1.tags.push(rule);\n } else if (rule.style) {\n this$1.styles.push(rule);\n }\n }); // Only normalize list elements when lists in the schema can't directly contain themselves\n\n this.normalizeLists = !this.tags.some(function (r) {\n if (!/^(ul|ol)\\b/.test(r.tag) || !r.node) {\n return false;\n }\n\n var node = schema.nodes[r.node];\n return node.contentMatch.matchType(node);\n });\n}; // :: (dom.Node, ?ParseOptions) → Node\n// Parse a document from the content of a DOM node.\n\n\nDOMParser.prototype.parse = function parse(dom, options) {\n if (options === void 0) options = {};\n var context = new ParseContext(this, options, false);\n context.addAll(dom, null, options.from, options.to);\n return context.finish();\n}; // :: (dom.Node, ?ParseOptions) → Slice\n// Parses the content of the given DOM node, like\n// [`parse`](#model.DOMParser.parse), and takes the same set of\n// options. But unlike that method, which produces a whole node,\n// this one returns a slice that is open at the sides, meaning that\n// the schema constraints aren't applied to the start of nodes to\n// the left of the input and the end of nodes at the end.\n\n\nDOMParser.prototype.parseSlice = function parseSlice(dom, options) {\n if (options === void 0) options = {};\n var context = new ParseContext(this, options, true);\n context.addAll(dom, null, options.from, options.to);\n return Slice.maxOpen(context.finish());\n};\n\nDOMParser.prototype.matchTag = function matchTag(dom, context, after) {\n for (var i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) {\n var rule = this.tags[i];\n\n if (matches(dom, rule.tag) && (rule.namespace === undefined || dom.namespaceURI == rule.namespace) && (!rule.context || context.matchesContext(rule.context))) {\n if (rule.getAttrs) {\n var result = rule.getAttrs(dom);\n\n if (result === false) {\n continue;\n }\n\n rule.attrs = result;\n }\n\n return rule;\n }\n }\n};\n\nDOMParser.prototype.matchStyle = function matchStyle(prop, value, context, after) {\n for (var i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) {\n var rule = this.styles[i];\n\n if (rule.style.indexOf(prop) != 0 || rule.context && !context.matchesContext(rule.context) || // Test that the style string either precisely matches the prop,\n // or has an '=' sign after the prop, followed by the given\n // value.\n rule.style.length > prop.length && (rule.style.charCodeAt(prop.length) != 61 || rule.style.slice(prop.length + 1) != value)) {\n continue;\n }\n\n if (rule.getAttrs) {\n var result = rule.getAttrs(value);\n\n if (result === false) {\n continue;\n }\n\n rule.attrs = result;\n }\n\n return rule;\n }\n}; // : (Schema) → [ParseRule]\n\n\nDOMParser.schemaRules = function schemaRules(schema) {\n var result = [];\n\n function insert(rule) {\n var priority = rule.priority == null ? 50 : rule.priority,\n i = 0;\n\n for (; i < result.length; i++) {\n var next = result[i],\n nextPriority = next.priority == null ? 50 : next.priority;\n\n if (nextPriority < priority) {\n break;\n }\n }\n\n result.splice(i, 0, rule);\n }\n\n var loop = function loop(name) {\n var rules = schema.marks[name].spec.parseDOM;\n\n if (rules) {\n rules.forEach(function (rule) {\n insert(rule = copy(rule));\n rule.mark = name;\n });\n }\n };\n\n for (var name in schema.marks) {\n loop(name);\n }\n\n var loop$1 = function loop$1(name) {\n var rules$1 = schema.nodes[name$1].spec.parseDOM;\n\n if (rules$1) {\n rules$1.forEach(function (rule) {\n insert(rule = copy(rule));\n rule.node = name$1;\n });\n }\n };\n\n for (var name$1 in schema.nodes) {\n loop$1();\n }\n\n return result;\n}; // :: (Schema) → DOMParser\n// Construct a DOM parser using the parsing rules listed in a\n// schema's [node specs](#model.NodeSpec.parseDOM), reordered by\n// [priority](#model.ParseRule.priority).\n\n\nDOMParser.fromSchema = function fromSchema(schema) {\n return schema.cached.domParser || (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)));\n}; // : Object<bool> The block-level tags in HTML5\n\n\nvar blockTags = {\n address: true,\n article: true,\n aside: true,\n blockquote: true,\n canvas: true,\n dd: true,\n div: true,\n dl: true,\n fieldset: true,\n figcaption: true,\n figure: true,\n footer: true,\n form: true,\n h1: true,\n h2: true,\n h3: true,\n h4: true,\n h5: true,\n h6: true,\n header: true,\n hgroup: true,\n hr: true,\n li: true,\n noscript: true,\n ol: true,\n output: true,\n p: true,\n pre: true,\n section: true,\n table: true,\n tfoot: true,\n ul: true\n}; // : Object<bool> The tags that we normally ignore.\n\nvar ignoreTags = {\n head: true,\n noscript: true,\n object: true,\n script: true,\n style: true,\n title: true\n}; // : Object<bool> List tags.\n\nvar listTags = {\n ol: true,\n ul: true\n}; // Using a bitfield for node context options\n\nvar OPT_PRESERVE_WS = 1,\n OPT_PRESERVE_WS_FULL = 2,\n OPT_OPEN_LEFT = 4;\n\nfunction wsOptionsFor(preserveWhitespace) {\n return (preserveWhitespace ? OPT_PRESERVE_WS : 0) | (preserveWhitespace === \"full\" ? OPT_PRESERVE_WS_FULL : 0);\n}\n\nvar NodeContext = function NodeContext(type, attrs, marks, pendingMarks, solid, match, options) {\n this.type = type;\n this.attrs = attrs;\n this.solid = solid;\n this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch);\n this.options = options;\n this.content = []; // Marks applied to this node itself\n\n this.marks = marks; // Marks applied to its children\n\n this.activeMarks = Mark.none; // Marks that can't apply here, but will be used in children if possible\n\n this.pendingMarks = pendingMarks; // Nested Marks with same type\n\n this.stashMarks = [];\n};\n\nNodeContext.prototype.findWrapping = function findWrapping(node) {\n if (!this.match) {\n if (!this.type) {\n return [];\n }\n\n var fill = this.type.contentMatch.fillBefore(Fragment.from(node));\n\n if (fill) {\n this.match = this.type.contentMatch.matchFragment(fill);\n } else {\n var start = this.type.contentMatch,\n wrap;\n\n if (wrap = start.findWrapping(node.type)) {\n this.match = start;\n return wrap;\n } else {\n return null;\n }\n }\n }\n\n return this.match.findWrapping(node.type);\n};\n\nNodeContext.prototype.finish = function finish(openEnd) {\n if (!(this.options & OPT_PRESERVE_WS)) {\n // Strip trailing whitespace\n var last = this.content[this.content.length - 1],\n m;\n\n if (last && last.isText && (m = /[ \\t\\r\\n\\u000c]+$/.exec(last.text))) {\n if (last.text.length == m[0].length) {\n this.content.pop();\n } else {\n this.content[this.content.length - 1] = last.withText(last.text.slice(0, last.text.length - m[0].length));\n }\n }\n }\n\n var content = Fragment.from(this.content);\n\n if (!openEnd && this.match) {\n content = content.append(this.match.fillBefore(Fragment.empty, true));\n }\n\n return this.type ? this.type.create(this.attrs, content, this.marks) : content;\n};\n\nNodeContext.prototype.popFromStashMark = function popFromStashMark(mark) {\n for (var i = this.stashMarks.length - 1; i >= 0; i--) {\n if (mark.eq(this.stashMarks[i])) {\n return this.stashMarks.splice(i, 1)[0];\n }\n }\n};\n\nNodeContext.prototype.applyPending = function applyPending(nextType) {\n for (var i = 0, pending = this.pendingMarks; i < pending.length; i++) {\n var mark = pending[i];\n\n if ((this.type ? this.type.allowsMarkType(mark.type) : markMayApply(mark.type, nextType)) && !mark.isInSet(this.activeMarks)) {\n this.activeMarks = mark.addToSet(this.activeMarks);\n this.pendingMarks = mark.removeFromSet(this.pendingMarks);\n }\n }\n};\n\nvar ParseContext = function ParseContext(parser, options, open) {\n // : DOMParser The parser we are using.\n this.parser = parser; // : Object The options passed to this parse.\n\n this.options = options;\n this.isOpen = open;\n var topNode = options.topNode,\n topContext;\n var topOptions = wsOptionsFor(options.preserveWhitespace) | (open ? OPT_OPEN_LEFT : 0);\n\n if (topNode) {\n topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, Mark.none, true, options.topMatch || topNode.type.contentMatch, topOptions);\n } else if (open) {\n topContext = new NodeContext(null, null, Mark.none, Mark.none, true, null, topOptions);\n } else {\n topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, Mark.none, true, null, topOptions);\n }\n\n this.nodes = [topContext]; // : [Mark] The current set of marks\n\n this.open = 0;\n this.find = options.findPositions;\n this.needsBlock = false;\n};\n\nvar prototypeAccessors$6 = {\n top: {\n configurable: true\n },\n currentPos: {\n configurable: true\n }\n};\n\nprototypeAccessors$6.top.get = function () {\n return this.nodes[this.open];\n}; // : (dom.Node)\n// Add a DOM node to the content. Text is inserted as text node,\n// otherwise, the node is passed to `addElement` or, if it has a\n// `style` attribute, `addElementWithStyles`.\n\n\nParseContext.prototype.addDOM = function addDOM(dom) {\n if (dom.nodeType == 3) {\n this.addTextNode(dom);\n } else if (dom.nodeType == 1) {\n var style = dom.getAttribute(\"style\");\n var marks = style ? this.readStyles(parseStyles(style)) : null,\n top = this.top;\n\n if (marks != null) {\n for (var i = 0; i < marks.length; i++) {\n this.addPendingMark(marks[i]);\n }\n }\n\n this.addElement(dom);\n\n if (marks != null) {\n for (var i$1 = 0; i$1 < marks.length; i$1++) {\n this.removePendingMark(marks[i$1], top);\n }\n }\n }\n};\n\nParseContext.prototype.addTextNode = function addTextNode(dom) {\n var value = dom.nodeValue;\n var top = this.top;\n\n if ((top.type ? top.type.inlineContent : top.content.length && top.content[0].isInline) || /[^ \\t\\r\\n\\u000c]/.test(value)) {\n if (!(top.options & OPT_PRESERVE_WS)) {\n value = value.replace(/[ \\t\\r\\n\\u000c]+/g, \" \"); // If this starts with whitespace, and there is no node before it, or\n // a hard break, or a text node that ends with whitespace, strip the\n // leading space.\n\n if (/^[ \\t\\r\\n\\u000c]/.test(value) && this.open == this.nodes.length - 1) {\n var nodeBefore = top.content[top.content.length - 1];\n var domNodeBefore = dom.previousSibling;\n\n if (!nodeBefore || domNodeBefore && domNodeBefore.nodeName == 'BR' || nodeBefore.isText && /[ \\t\\r\\n\\u000c]$/.test(nodeBefore.text)) {\n value = value.slice(1);\n }\n }\n } else if (!(top.options & OPT_PRESERVE_WS_FULL)) {\n value = value.replace(/\\r?\\n|\\r/g, \" \");\n }\n\n if (value) {\n this.insertNode(this.parser.schema.text(value));\n }\n\n this.findInText(dom);\n } else {\n this.findInside(dom);\n }\n}; // : (dom.Element, ?ParseRule)\n// Try to find a handler for the given tag and use that to parse. If\n// none is found, the element's content nodes are added directly.\n\n\nParseContext.prototype.addElement = function addElement(dom, matchAfter) {\n var name = dom.nodeName.toLowerCase(),\n ruleID;\n\n if (listTags.hasOwnProperty(name) && this.parser.normalizeLists) {\n normalizeList(dom);\n }\n\n var rule = this.options.ruleFromNode && this.options.ruleFromNode(dom) || (ruleID = this.parser.matchTag(dom, this, matchAfter));\n\n if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {\n this.findInside(dom);\n } else if (!rule || rule.skip || rule.closeParent) {\n if (rule && rule.closeParent) {\n this.open = Math.max(0, this.open - 1);\n } else if (rule && rule.skip.nodeType) {\n dom = rule.skip;\n }\n\n var sync,\n top = this.top,\n oldNeedsBlock = this.needsBlock;\n\n if (blockTags.hasOwnProperty(name)) {\n sync = true;\n\n if (!top.type) {\n this.needsBlock = true;\n }\n } else if (!dom.firstChild) {\n this.leafFallback(dom);\n return;\n }\n\n this.addAll(dom);\n\n if (sync) {\n this.sync(top);\n }\n\n this.needsBlock = oldNeedsBlock;\n } else {\n this.addElementByRule(dom, rule, rule.consuming === false ? ruleID : null);\n }\n}; // Called for leaf DOM nodes that would otherwise be ignored\n\n\nParseContext.prototype.leafFallback = function leafFallback(dom) {\n if (dom.nodeName == \"BR\" && this.top.type && this.top.type.inlineContent) {\n this.addTextNode(dom.ownerDocument.createTextNode(\"\\n\"));\n }\n}; // Run any style parser associated with the node's styles. Either\n// return an array of marks, or null to indicate some of the styles\n// had a rule with `ignore` set.\n\n\nParseContext.prototype.readStyles = function readStyles(styles) {\n var marks = Mark.none;\n\n style: for (var i = 0; i < styles.length; i += 2) {\n for (var after = null;;) {\n var rule = this.parser.matchStyle(styles[i], styles[i + 1], this, after);\n\n if (!rule) {\n continue style;\n }\n\n if (rule.ignore) {\n return null;\n }\n\n marks = this.parser.schema.marks[rule.mark].create(rule.attrs).addToSet(marks);\n\n if (rule.consuming === false) {\n after = rule;\n } else {\n break;\n }\n }\n }\n\n return marks;\n}; // : (dom.Element, ParseRule) → bool\n// Look up a handler for the given node. If none are found, return\n// false. Otherwise, apply it, use its return value to drive the way\n// the node's content is wrapped, and return true.\n\n\nParseContext.prototype.addElementByRule = function addElementByRule(dom, rule, continueAfter) {\n var this$1 = this;\n var sync, nodeType, markType, mark;\n\n if (rule.node) {\n nodeType = this.parser.schema.nodes[rule.node];\n\n if (!nodeType.isLeaf) {\n sync = this.enter(nodeType, rule.attrs, rule.preserveWhitespace);\n } else if (!this.insertNode(nodeType.create(rule.attrs))) {\n this.leafFallback(dom);\n }\n } else {\n markType = this.parser.schema.marks[rule.mark];\n mark = markType.create(rule.attrs);\n this.addPendingMark(mark);\n }\n\n var startIn = this.top;\n\n if (nodeType && nodeType.isLeaf) {\n this.findInside(dom);\n } else if (continueAfter) {\n this.addElement(dom, continueAfter);\n } else if (rule.getContent) {\n this.findInside(dom);\n rule.getContent(dom, this.parser.schema).forEach(function (node) {\n return this$1.insertNode(node);\n });\n } else {\n var contentDOM = rule.contentElement;\n\n if (typeof contentDOM == \"string\") {\n contentDOM = dom.querySelector(contentDOM);\n } else if (typeof contentDOM == \"function\") {\n contentDOM = contentDOM(dom);\n }\n\n if (!contentDOM) {\n contentDOM = dom;\n }\n\n this.findAround(dom, contentDOM, true);\n this.addAll(contentDOM, sync);\n }\n\n if (sync) {\n this.sync(startIn);\n this.open--;\n }\n\n if (mark) {\n this.removePendingMark(mark, startIn);\n }\n}; // : (dom.Node, ?NodeBuilder, ?number, ?number)\n// Add all child nodes between `startIndex` and `endIndex` (or the\n// whole node, if not given). If `sync` is passed, use it to\n// synchronize after every block element.\n\n\nParseContext.prototype.addAll = function addAll(parent, sync, startIndex, endIndex) {\n var index = startIndex || 0;\n\n for (var dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild, end = endIndex == null ? null : parent.childNodes[endIndex]; dom != end; dom = dom.nextSibling, ++index) {\n this.findAtPoint(parent, index);\n this.addDOM(dom);\n\n if (sync && blockTags.hasOwnProperty(dom.nodeName.toLowerCase())) {\n this.sync(sync);\n }\n }\n\n this.findAtPoint(parent, index);\n}; // Try to find a way to fit the given node type into the current\n// context. May add intermediate wrappers and/or leave non-solid\n// nodes that we're in.\n\n\nParseContext.prototype.findPlace = function findPlace(node) {\n var route, sync;\n\n for (var depth = this.open; depth >= 0; depth--) {\n var cx = this.nodes[depth];\n var found = cx.findWrapping(node);\n\n if (found && (!route || route.length > found.length)) {\n route = found;\n sync = cx;\n\n if (!found.length) {\n break;\n }\n }\n\n if (cx.solid) {\n break;\n }\n }\n\n if (!route) {\n return false;\n }\n\n this.sync(sync);\n\n for (var i = 0; i < route.length; i++) {\n this.enterInner(route[i], null, false);\n }\n\n return true;\n}; // : (Node) → ?Node\n// Try to insert the given node, adjusting the context when needed.\n\n\nParseContext.prototype.insertNode = function insertNode(node) {\n if (node.isInline && this.needsBlock && !this.top.type) {\n var block = this.textblockFromContext();\n\n if (block) {\n this.enterInner(block);\n }\n }\n\n if (this.findPlace(node)) {\n this.closeExtra();\n var top = this.top;\n top.applyPending(node.type);\n\n if (top.match) {\n top.match = top.match.matchType(node.type);\n }\n\n var marks = top.activeMarks;\n\n for (var i = 0; i < node.marks.length; i++) {\n if (!top.type || top.type.allowsMarkType(node.marks[i].type)) {\n marks = node.marks[i].addToSet(marks);\n }\n }\n\n top.content.push(node.mark(marks));\n return true;\n }\n\n return false;\n}; // : (NodeType, ?Object) → bool\n// Try to start a node of the given type, adjusting the context when\n// necessary.\n\n\nParseContext.prototype.enter = function enter(type, attrs, preserveWS) {\n var ok = this.findPlace(type.create(attrs));\n\n if (ok) {\n this.enterInner(type, attrs, true, preserveWS);\n }\n\n return ok;\n}; // Open a node of the given type\n\n\nParseContext.prototype.enterInner = function enterInner(type, attrs, solid, preserveWS) {\n this.closeExtra();\n var top = this.top;\n top.applyPending(type);\n top.match = top.match && top.match.matchType(type, attrs);\n var options = preserveWS == null ? top.options & ~OPT_OPEN_LEFT : wsOptionsFor(preserveWS);\n\n if (top.options & OPT_OPEN_LEFT && top.content.length == 0) {\n options |= OPT_OPEN_LEFT;\n }\n\n this.nodes.push(new NodeContext(type, attrs, top.activeMarks, top.pendingMarks, solid, null, options));\n this.open++;\n}; // Make sure all nodes above this.open are finished and added to\n// their parents\n\n\nParseContext.prototype.closeExtra = function closeExtra(openEnd) {\n var i = this.nodes.length - 1;\n\n if (i > this.open) {\n for (; i > this.open; i--) {\n this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd));\n }\n\n this.nodes.length = this.open + 1;\n }\n};\n\nParseContext.prototype.finish = function finish() {\n this.open = 0;\n this.closeExtra(this.isOpen);\n return this.nodes[0].finish(this.isOpen || this.options.topOpen);\n};\n\nParseContext.prototype.sync = function sync(to) {\n for (var i = this.open; i >= 0; i--) {\n if (this.nodes[i] == to) {\n this.open = i;\n return;\n }\n }\n};\n\nprototypeAccessors$6.currentPos.get = function () {\n this.closeExtra();\n var pos = 0;\n\n for (var i = this.open; i >= 0; i--) {\n var content = this.nodes[i].content;\n\n for (var j = content.length - 1; j >= 0; j--) {\n pos += content[j].nodeSize;\n }\n\n if (i) {\n pos++;\n }\n }\n\n return pos;\n};\n\nParseContext.prototype.findAtPoint = function findAtPoint(parent, offset) {\n if (this.find) {\n for (var i = 0; i < this.find.length; i++) {\n if (this.find[i].node == parent && this.find[i].offset == offset) {\n this.find[i].pos = this.currentPos;\n }\n }\n }\n};\n\nParseContext.prototype.findInside = function findInside(parent) {\n if (this.find) {\n for (var i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n this.find[i].pos = this.currentPos;\n }\n }\n }\n};\n\nParseContext.prototype.findAround = function findAround(parent, content, before) {\n if (parent != content && this.find) {\n for (var i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n var pos = content.compareDocumentPosition(this.find[i].node);\n\n if (pos & (before ? 2 : 4)) {\n this.find[i].pos = this.currentPos;\n }\n }\n }\n }\n};\n\nParseContext.prototype.findInText = function findInText(textNode) {\n if (this.find) {\n for (var i = 0; i < this.find.length; i++) {\n if (this.find[i].node == textNode) {\n this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset);\n }\n }\n }\n}; // : (string) → bool\n// Determines whether the given [context\n// string](#ParseRule.context) matches this context.\n\n\nParseContext.prototype.matchesContext = function matchesContext(context) {\n var this$1 = this;\n\n if (context.indexOf(\"|\") > -1) {\n return context.split(/\\s*\\|\\s*/).some(this.matchesContext, this);\n }\n\n var parts = context.split(\"/\");\n var option = this.options.context;\n var useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type);\n var minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1);\n\n var match = function match(i, depth) {\n for (; i >= 0; i--) {\n var part = parts[i];\n\n if (part == \"\") {\n if (i == parts.length - 1 || i == 0) {\n continue;\n }\n\n for (; depth >= minDepth; depth--) {\n if (match(i - 1, depth)) {\n return true;\n }\n }\n\n return false;\n } else {\n var next = depth > 0 || depth == 0 && useRoot ? this$1.nodes[depth].type : option && depth >= minDepth ? option.node(depth - minDepth).type : null;\n\n if (!next || next.name != part && next.groups.indexOf(part) == -1) {\n return false;\n }\n\n depth--;\n }\n }\n\n return true;\n };\n\n return match(parts.length - 1, this.open);\n};\n\nParseContext.prototype.textblockFromContext = function textblockFromContext() {\n var $context = this.options.context;\n\n if ($context) {\n for (var d = $context.depth; d >= 0; d--) {\n var deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType;\n\n if (deflt && deflt.isTextblock && deflt.defaultAttrs) {\n return deflt;\n }\n }\n }\n\n for (var name in this.parser.schema.nodes) {\n var type = this.parser.schema.nodes[name];\n\n if (type.isTextblock && type.defaultAttrs) {\n return type;\n }\n }\n};\n\nParseContext.prototype.addPendingMark = function addPendingMark(mark) {\n var found = findSameMarkInSet(mark, this.top.pendingMarks);\n\n if (found) {\n this.top.stashMarks.push(found);\n }\n\n this.top.pendingMarks = mark.addToSet(this.top.pendingMarks);\n};\n\nParseContext.prototype.removePendingMark = function removePendingMark(mark, upto) {\n for (var depth = this.open; depth >= 0; depth--) {\n var level = this.nodes[depth];\n var found = level.pendingMarks.lastIndexOf(mark);\n\n if (found > -1) {\n level.pendingMarks = mark.removeFromSet(level.pendingMarks);\n } else {\n level.activeMarks = mark.removeFromSet(level.activeMarks);\n var stashMark = level.popFromStashMark(mark);\n\n if (stashMark && level.type && level.type.allowsMarkType(stashMark.type)) {\n level.activeMarks = stashMark.addToSet(level.activeMarks);\n }\n }\n\n if (level == upto) {\n break;\n }\n }\n};\n\nObject.defineProperties(ParseContext.prototype, prototypeAccessors$6); // Kludge to work around directly nested list nodes produced by some\n// tools and allowed by browsers to mean that the nested list is\n// actually part of the list item above it.\n\nfunction normalizeList(dom) {\n for (var child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {\n var name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null;\n\n if (name && listTags.hasOwnProperty(name) && prevItem) {\n prevItem.appendChild(child);\n child = prevItem;\n } else if (name == \"li\") {\n prevItem = child;\n } else if (name) {\n prevItem = null;\n }\n }\n} // Apply a CSS selector.\n\n\nfunction matches(dom, selector) {\n return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector);\n} // : (string) → [string]\n// Tokenize a style attribute into property/value pairs.\n\n\nfunction parseStyles(style) {\n var re = /\\s*([\\w-]+)\\s*:\\s*([^;]+)/g,\n m,\n result = [];\n\n while (m = re.exec(style)) {\n result.push(m[1], m[2].trim());\n }\n\n return result;\n}\n\nfunction copy(obj) {\n var copy = {};\n\n for (var prop in obj) {\n copy[prop] = obj[prop];\n }\n\n return copy;\n} // Used when finding a mark at the top level of a fragment parse.\n// Checks whether it would be reasonable to apply a given mark type to\n// a given node, by looking at the way the mark occurs in the schema.\n\n\nfunction markMayApply(markType, nodeType) {\n var nodes = nodeType.schema.nodes;\n\n var loop = function loop(name) {\n var parent = nodes[name];\n\n if (!parent.allowsMarkType(markType)) {\n return;\n }\n\n var seen = [],\n scan = function scan(match) {\n seen.push(match);\n\n for (var i = 0; i < match.edgeCount; i++) {\n var ref = match.edge(i);\n var type = ref.type;\n var next = ref.next;\n\n if (type == nodeType) {\n return true;\n }\n\n if (seen.indexOf(next) < 0 && scan(next)) {\n return true;\n }\n }\n };\n\n if (scan(parent.contentMatch)) {\n return {\n v: true\n };\n }\n };\n\n for (var name in nodes) {\n var returned = loop(name);\n if (returned) return returned.v;\n }\n}\n\nfunction findSameMarkInSet(mark, set) {\n for (var i = 0; i < set.length; i++) {\n if (mark.eq(set[i])) {\n return set[i];\n }\n }\n} // DOMOutputSpec:: interface\n// A description of a DOM structure. Can be either a string, which is\n// interpreted as a text node, a DOM node, which is interpreted as\n// itself, a `{dom: Node, contentDOM: ?Node}` object, or an array.\n//\n// An array describes a DOM element. The first value in the array\n// should be a string—the name of the DOM element, optionally prefixed\n// by a namespace URL and a space. If the second element is plain\n// object, it is interpreted as a set of attributes for the element.\n// Any elements after that (including the 2nd if it's not an attribute\n// object) are interpreted as children of the DOM elements, and must\n// either be valid `DOMOutputSpec` values, or the number zero.\n//\n// The number zero (pronounced “hole”) is used to indicate the place\n// where a node's child nodes should be inserted. If it occurs in an\n// output spec, it should be the only child element in its parent\n// node.\n// ::- A DOM serializer knows how to convert ProseMirror nodes and\n// marks of various types to DOM nodes.\n\n\nvar DOMSerializer = function DOMSerializer(nodes, marks) {\n // :: Object<(node: Node) → DOMOutputSpec>\n // The node serialization functions.\n this.nodes = nodes || {}; // :: Object<?(mark: Mark, inline: bool) → DOMOutputSpec>\n // The mark serialization functions.\n\n this.marks = marks || {};\n}; // :: (Fragment, ?Object) → dom.DocumentFragment\n// Serialize the content of this fragment to a DOM fragment. When\n// not in the browser, the `document` option, containing a DOM\n// document, should be passed so that the serializer can create\n// nodes.\n\n\nDOMSerializer.prototype.serializeFragment = function serializeFragment(fragment, options, target) {\n var this$1 = this;\n if (options === void 0) options = {};\n\n if (!target) {\n target = doc(options).createDocumentFragment();\n }\n\n var top = target,\n active = null;\n fragment.forEach(function (node) {\n if (active || node.marks.length) {\n if (!active) {\n active = [];\n }\n\n var keep = 0,\n rendered = 0;\n\n while (keep < active.length && rendered < node.marks.length) {\n var next = node.marks[rendered];\n\n if (!this$1.marks[next.type.name]) {\n rendered++;\n continue;\n }\n\n if (!next.eq(active[keep]) || next.type.spec.spanning === false) {\n break;\n }\n\n keep += 2;\n rendered++;\n }\n\n while (keep < active.length) {\n top = active.pop();\n active.pop();\n }\n\n while (rendered < node.marks.length) {\n var add = node.marks[rendered++];\n var markDOM = this$1.serializeMark(add, node.isInline, options);\n\n if (markDOM) {\n active.push(add, top);\n top.appendChild(markDOM.dom);\n top = markDOM.contentDOM || markDOM.dom;\n }\n }\n }\n\n top.appendChild(this$1.serializeNode(node, options));\n });\n return target;\n}; // :: (Node, ?Object) → dom.Node\n// Serialize this node to a DOM node. This can be useful when you\n// need to serialize a part of a document, as opposed to the whole\n// document. To serialize a whole document, use\n// [`serializeFragment`](#model.DOMSerializer.serializeFragment) on\n// its [content](#model.Node.content).\n\n\nDOMSerializer.prototype.serializeNode = function serializeNode(node, options) {\n if (options === void 0) options = {};\n var ref = DOMSerializer.renderSpec(doc(options), this.nodes[node.type.name](node));\n var dom = ref.dom;\n var contentDOM = ref.contentDOM;\n\n if (contentDOM) {\n if (node.isLeaf) {\n throw new RangeError(\"Content hole not allowed in a leaf node spec\");\n }\n\n if (options.onContent) {\n options.onContent(node, contentDOM, options);\n } else {\n this.serializeFragment(node.content, options, contentDOM);\n }\n }\n\n return dom;\n};\n\nDOMSerializer.prototype.serializeNodeAndMarks = function serializeNodeAndMarks(node, options) {\n if (options === void 0) options = {};\n var dom = this.serializeNode(node, options);\n\n for (var i = node.marks.length - 1; i >= 0; i--) {\n var wrap = this.serializeMark(node.marks[i], node.isInline, options);\n\n if (wrap) {\n (wrap.contentDOM || wrap.dom).appendChild(dom);\n dom = wrap.dom;\n }\n }\n\n return dom;\n};\n\nDOMSerializer.prototype.serializeMark = function serializeMark(mark, inline, options) {\n if (options === void 0) options = {};\n var toDOM = this.marks[mark.type.name];\n return toDOM && DOMSerializer.renderSpec(doc(options), toDOM(mark, inline));\n}; // :: (dom.Document, DOMOutputSpec) → {dom: dom.Node, contentDOM: ?dom.Node}\n// Render an [output spec](#model.DOMOutputSpec) to a DOM node. If\n// the spec has a hole (zero) in it, `contentDOM` will point at the\n// node with the hole.\n\n\nDOMSerializer.renderSpec = function renderSpec(doc, structure, xmlNS) {\n if (xmlNS === void 0) xmlNS = null;\n\n if (typeof structure == \"string\") {\n return {\n dom: doc.createTextNode(structure)\n };\n }\n\n if (structure.nodeType != null) {\n return {\n dom: structure\n };\n }\n\n if (structure.dom && structure.dom.nodeType != null) {\n return structure;\n }\n\n var tagName = structure[0],\n space = tagName.indexOf(\" \");\n\n if (space > 0) {\n xmlNS = tagName.slice(0, space);\n tagName = tagName.slice(space + 1);\n }\n\n var contentDOM = null,\n dom = xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName);\n var attrs = structure[1],\n start = 1;\n\n if (attrs && _typeof(attrs) == \"object\" && attrs.nodeType == null && !Array.isArray(attrs)) {\n start = 2;\n\n for (var name in attrs) {\n if (attrs[name] != null) {\n var space$1 = name.indexOf(\" \");\n\n if (space$1 > 0) {\n dom.setAttributeNS(name.slice(0, space$1), name.slice(space$1 + 1), attrs[name]);\n } else {\n dom.setAttribute(name, attrs[name]);\n }\n }\n }\n }\n\n for (var i = start; i < structure.length; i++) {\n var child = structure[i];\n\n if (child === 0) {\n if (i < structure.length - 1 || i > start) {\n throw new RangeError(\"Content hole must be the only child of its parent node\");\n }\n\n return {\n dom: dom,\n contentDOM: dom\n };\n } else {\n var ref = DOMSerializer.renderSpec(doc, child, xmlNS);\n var inner = ref.dom;\n var innerContent = ref.contentDOM;\n dom.appendChild(inner);\n\n if (innerContent) {\n if (contentDOM) {\n throw new RangeError(\"Multiple content holes\");\n }\n\n contentDOM = innerContent;\n }\n }\n }\n\n return {\n dom: dom,\n contentDOM: contentDOM\n };\n}; // :: (Schema) → DOMSerializer\n// Build a serializer using the [`toDOM`](#model.NodeSpec.toDOM)\n// properties in a schema's node and mark specs.\n\n\nDOMSerializer.fromSchema = function fromSchema(schema) {\n return schema.cached.domSerializer || (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)));\n}; // : (Schema) → Object<(node: Node) → DOMOutputSpec>\n// Gather the serializers in a schema's node specs into an object.\n// This can be useful as a base to build a custom serializer from.\n\n\nDOMSerializer.nodesFromSchema = function nodesFromSchema(schema) {\n var result = gatherToDOM(schema.nodes);\n\n if (!result.text) {\n result.text = function (node) {\n return node.text;\n };\n }\n\n return result;\n}; // : (Schema) → Object<(mark: Mark) → DOMOutputSpec>\n// Gather the serializers in a schema's mark specs into an object.\n\n\nDOMSerializer.marksFromSchema = function marksFromSchema(schema) {\n return gatherToDOM(schema.marks);\n};\n\nfunction gatherToDOM(obj) {\n var result = {};\n\n for (var name in obj) {\n var toDOM = obj[name].spec.toDOM;\n\n if (toDOM) {\n result[name] = toDOM;\n }\n }\n\n return result;\n}\n\nfunction doc(options) {\n // declare global: window\n return options.document || window.document;\n}\n\nexport { ContentMatch, DOMParser, DOMSerializer, Fragment, Mark, MarkType, Node, NodeRange, NodeType, ReplaceError, ResolvedPos, Schema, Slice };","import { ReplaceError, Slice, Fragment, MarkType } from 'prosemirror-model'; // Mappable:: interface\n// There are several things that positions can be mapped through.\n// Such objects conform to this interface.\n//\n// map:: (pos: number, assoc: ?number) → number\n// Map a position through this object. When given, `assoc` (should\n// be -1 or 1, defaults to 1) determines with which side the\n// position is associated, which determines in which direction to\n// move when a chunk of content is inserted at the mapped position.\n//\n// mapResult:: (pos: number, assoc: ?number) → MapResult\n// Map a position, and return an object containing additional\n// information about the mapping. The result's `deleted` field tells\n// you whether the position was deleted (completely enclosed in a\n// replaced range) during the mapping. When content on only one side\n// is deleted, the position itself is only considered deleted when\n// `assoc` points in the direction of the deleted content.\n// Recovery values encode a range index and an offset. They are\n// represented as numbers, because tons of them will be created when\n// mapping, for example, a large number of decorations. The number's\n// lower 16 bits provide the index, the remaining bits the offset.\n//\n// Note: We intentionally don't use bit shift operators to en- and\n// decode these, since those clip to 32 bits, which we might in rare\n// cases want to overflow. A 64-bit float can represent 48-bit\n// integers precisely.\n\nvar lower16 = 0xffff;\nvar factor16 = Math.pow(2, 16);\n\nfunction makeRecover(index, offset) {\n return index + offset * factor16;\n}\n\nfunction recoverIndex(value) {\n return value & lower16;\n}\n\nfunction recoverOffset(value) {\n return (value - (value & lower16)) / factor16;\n} // ::- An object representing a mapped position with extra\n// information.\n\n\nvar MapResult = function MapResult(pos, deleted, recover) {\n if (deleted === void 0) deleted = false;\n if (recover === void 0) recover = null; // :: number The mapped version of the position.\n\n this.pos = pos; // :: bool Tells you whether the position was deleted, that is,\n // whether the step removed its surroundings from the document.\n\n this.deleted = deleted;\n this.recover = recover;\n}; // :: class extends Mappable\n// A map describing the deletions and insertions made by a step, which\n// can be used to find the correspondence between positions in the\n// pre-step version of a document and the same position in the\n// post-step version.\n\n\nvar StepMap = function StepMap(ranges, inverted) {\n if (inverted === void 0) inverted = false;\n this.ranges = ranges;\n this.inverted = inverted;\n};\n\nStepMap.prototype.recover = function recover(value) {\n var diff = 0,\n index = recoverIndex(value);\n\n if (!this.inverted) {\n for (var i = 0; i < index; i++) {\n diff += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1];\n }\n }\n\n return this.ranges[index * 3] + diff + recoverOffset(value);\n}; // : (number, ?number) → MapResult\n\n\nStepMap.prototype.mapResult = function mapResult(pos, assoc) {\n if (assoc === void 0) assoc = 1;\n return this._map(pos, assoc, false);\n}; // : (number, ?number) → number\n\n\nStepMap.prototype.map = function map(pos, assoc) {\n if (assoc === void 0) assoc = 1;\n return this._map(pos, assoc, true);\n};\n\nStepMap.prototype._map = function _map(pos, assoc, simple) {\n var diff = 0,\n oldIndex = this.inverted ? 2 : 1,\n newIndex = this.inverted ? 1 : 2;\n\n for (var i = 0; i < this.ranges.length; i += 3) {\n var start = this.ranges[i] - (this.inverted ? diff : 0);\n\n if (start > pos) {\n break;\n }\n\n var oldSize = this.ranges[i + oldIndex],\n newSize = this.ranges[i + newIndex],\n end = start + oldSize;\n\n if (pos <= end) {\n var side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc;\n var result = start + diff + (side < 0 ? 0 : newSize);\n\n if (simple) {\n return result;\n }\n\n var recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i / 3, pos - start);\n return new MapResult(result, assoc < 0 ? pos != start : pos != end, recover);\n }\n\n diff += newSize - oldSize;\n }\n\n return simple ? pos + diff : new MapResult(pos + diff);\n};\n\nStepMap.prototype.touches = function touches(pos, recover) {\n var diff = 0,\n index = recoverIndex(recover);\n var oldIndex = this.inverted ? 2 : 1,\n newIndex = this.inverted ? 1 : 2;\n\n for (var i = 0; i < this.ranges.length; i += 3) {\n var start = this.ranges[i] - (this.inverted ? diff : 0);\n\n if (start > pos) {\n break;\n }\n\n var oldSize = this.ranges[i + oldIndex],\n end = start + oldSize;\n\n if (pos <= end && i == index * 3) {\n return true;\n }\n\n diff += this.ranges[i + newIndex] - oldSize;\n }\n\n return false;\n}; // :: ((oldStart: number, oldEnd: number, newStart: number, newEnd: number))\n// Calls the given function on each of the changed ranges included in\n// this map.\n\n\nStepMap.prototype.forEach = function forEach(f) {\n var oldIndex = this.inverted ? 2 : 1,\n newIndex = this.inverted ? 1 : 2;\n\n for (var i = 0, diff = 0; i < this.ranges.length; i += 3) {\n var start = this.ranges[i],\n oldStart = start - (this.inverted ? diff : 0),\n newStart = start + (this.inverted ? 0 : diff);\n var oldSize = this.ranges[i + oldIndex],\n newSize = this.ranges[i + newIndex];\n f(oldStart, oldStart + oldSize, newStart, newStart + newSize);\n diff += newSize - oldSize;\n }\n}; // :: () → StepMap\n// Create an inverted version of this map. The result can be used to\n// map positions in the post-step document to the pre-step document.\n\n\nStepMap.prototype.invert = function invert() {\n return new StepMap(this.ranges, !this.inverted);\n};\n\nStepMap.prototype.toString = function toString() {\n return (this.inverted ? \"-\" : \"\") + JSON.stringify(this.ranges);\n}; // :: (n: number) → StepMap\n// Create a map that moves all positions by offset `n` (which may be\n// negative). This can be useful when applying steps meant for a\n// sub-document to a larger document, or vice-versa.\n\n\nStepMap.offset = function offset(n) {\n return n == 0 ? StepMap.empty : new StepMap(n < 0 ? [0, -n, 0] : [0, 0, n]);\n};\n\nStepMap.empty = new StepMap([]); // :: class extends Mappable\n// A mapping represents a pipeline of zero or more [step\n// maps](#transform.StepMap). It has special provisions for losslessly\n// handling mapping positions through a series of steps in which some\n// steps are inverted versions of earlier steps. (This comes up when\n// [rebasing](/docs/guide/#transform.rebasing) steps for\n// collaboration or history management.)\n\nvar Mapping = function Mapping(maps, mirror, from, to) {\n // :: [StepMap]\n // The step maps in this mapping.\n this.maps = maps || []; // :: number\n // The starting position in the `maps` array, used when `map` or\n // `mapResult` is called.\n\n this.from = from || 0; // :: number\n // The end position in the `maps` array.\n\n this.to = to == null ? this.maps.length : to;\n this.mirror = mirror;\n}; // :: (?number, ?number) → Mapping\n// Create a mapping that maps only through a part of this one.\n\n\nMapping.prototype.slice = function slice(from, to) {\n if (from === void 0) from = 0;\n if (to === void 0) to = this.maps.length;\n return new Mapping(this.maps, this.mirror, from, to);\n};\n\nMapping.prototype.copy = function copy() {\n return new Mapping(this.maps.slice(), this.mirror && this.mirror.slice(), this.from, this.to);\n}; // :: (StepMap, ?number)\n// Add a step map to the end of this mapping. If `mirrors` is\n// given, it should be the index of the step map that is the mirror\n// image of this one.\n\n\nMapping.prototype.appendMap = function appendMap(map, mirrors) {\n this.to = this.maps.push(map);\n\n if (mirrors != null) {\n this.setMirror(this.maps.length - 1, mirrors);\n }\n}; // :: (Mapping)\n// Add all the step maps in a given mapping to this one (preserving\n// mirroring information).\n\n\nMapping.prototype.appendMapping = function appendMapping(mapping) {\n for (var i = 0, startSize = this.maps.length; i < mapping.maps.length; i++) {\n var mirr = mapping.getMirror(i);\n this.appendMap(mapping.maps[i], mirr != null && mirr < i ? startSize + mirr : null);\n }\n}; // :: (number) → ?number\n// Finds the offset of the step map that mirrors the map at the\n// given offset, in this mapping (as per the second argument to\n// `appendMap`).\n\n\nMapping.prototype.getMirror = function getMirror(n) {\n if (this.mirror) {\n for (var i = 0; i < this.mirror.length; i++) {\n if (this.mirror[i] == n) {\n return this.mirror[i + (i % 2 ? -1 : 1)];\n }\n }\n }\n};\n\nMapping.prototype.setMirror = function setMirror(n, m) {\n if (!this.mirror) {\n this.mirror = [];\n }\n\n this.mirror.push(n, m);\n}; // :: (Mapping)\n// Append the inverse of the given mapping to this one.\n\n\nMapping.prototype.appendMappingInverted = function appendMappingInverted(mapping) {\n for (var i = mapping.maps.length - 1, totalSize = this.maps.length + mapping.maps.length; i >= 0; i--) {\n var mirr = mapping.getMirror(i);\n this.appendMap(mapping.maps[i].invert(), mirr != null && mirr > i ? totalSize - mirr - 1 : null);\n }\n}; // :: () → Mapping\n// Create an inverted version of this mapping.\n\n\nMapping.prototype.invert = function invert() {\n var inverse = new Mapping();\n inverse.appendMappingInverted(this);\n return inverse;\n}; // : (number, ?number) → number\n// Map a position through this mapping.\n\n\nMapping.prototype.map = function map(pos, assoc) {\n if (assoc === void 0) assoc = 1;\n\n if (this.mirror) {\n return this._map(pos, assoc, true);\n }\n\n for (var i = this.from; i < this.to; i++) {\n pos = this.maps[i].map(pos, assoc);\n }\n\n return pos;\n}; // : (number, ?number) → MapResult\n// Map a position through this mapping, returning a mapping\n// result.\n\n\nMapping.prototype.mapResult = function mapResult(pos, assoc) {\n if (assoc === void 0) assoc = 1;\n return this._map(pos, assoc, false);\n};\n\nMapping.prototype._map = function _map(pos, assoc, simple) {\n var deleted = false;\n\n for (var i = this.from; i < this.to; i++) {\n var map = this.maps[i],\n result = map.mapResult(pos, assoc);\n\n if (result.recover != null) {\n var corr = this.getMirror(i);\n\n if (corr != null && corr > i && corr < this.to) {\n i = corr;\n pos = this.maps[corr].recover(result.recover);\n continue;\n }\n }\n\n if (result.deleted) {\n deleted = true;\n }\n\n pos = result.pos;\n }\n\n return simple ? pos : new MapResult(pos, deleted);\n};\n\nfunction TransformError(message) {\n var err = Error.call(this, message);\n err.__proto__ = TransformError.prototype;\n return err;\n}\n\nTransformError.prototype = Object.create(Error.prototype);\nTransformError.prototype.constructor = TransformError;\nTransformError.prototype.name = \"TransformError\"; // ::- Abstraction to build up and track an array of\n// [steps](#transform.Step) representing a document transformation.\n//\n// Most transforming methods return the `Transform` object itself, so\n// that they can be chained.\n\nvar Transform = function Transform(doc) {\n // :: Node\n // The current document (the result of applying the steps in the\n // transform).\n this.doc = doc; // :: [Step]\n // The steps in this transform.\n\n this.steps = []; // :: [Node]\n // The documents before each of the steps.\n\n this.docs = []; // :: Mapping\n // A mapping with the maps for each of the steps in this transform.\n\n this.mapping = new Mapping();\n};\n\nvar prototypeAccessors = {\n before: {\n configurable: true\n },\n docChanged: {\n configurable: true\n }\n}; // :: Node The starting document.\n\nprototypeAccessors.before.get = function () {\n return this.docs.length ? this.docs[0] : this.doc;\n}; // :: (step: Step) → this\n// Apply a new step in this transform, saving the result. Throws an\n// error when the step fails.\n\n\nTransform.prototype.step = function step(object) {\n var result = this.maybeStep(object);\n\n if (result.failed) {\n throw new TransformError(result.failed);\n }\n\n return this;\n}; // :: (Step) → StepResult\n// Try to apply a step in this transformation, ignoring it if it\n// fails. Returns the step result.\n\n\nTransform.prototype.maybeStep = function maybeStep(step) {\n var result = step.apply(this.doc);\n\n if (!result.failed) {\n this.addStep(step, result.doc);\n }\n\n return result;\n}; // :: bool\n// True when the document has been changed (when there are any\n// steps).\n\n\nprototypeAccessors.docChanged.get = function () {\n return this.steps.length > 0;\n};\n\nTransform.prototype.addStep = function addStep(step, doc) {\n this.docs.push(this.doc);\n this.steps.push(step);\n this.mapping.appendMap(step.getMap());\n this.doc = doc;\n};\n\nObject.defineProperties(Transform.prototype, prototypeAccessors);\n\nfunction mustOverride() {\n throw new Error(\"Override me\");\n}\n\nvar stepsByID = Object.create(null); // ::- A step object represents an atomic change. It generally applies\n// only to the document it was created for, since the positions\n// stored in it will only make sense for that document.\n//\n// New steps are defined by creating classes that extend `Step`,\n// overriding the `apply`, `invert`, `map`, `getMap` and `fromJSON`\n// methods, and registering your class with a unique\n// JSON-serialization identifier using\n// [`Step.jsonID`](#transform.Step^jsonID).\n\nvar Step = function Step() {};\n\nStep.prototype.apply = function apply(_doc) {\n return mustOverride();\n}; // :: () → StepMap\n// Get the step map that represents the changes made by this step,\n// and which can be used to transform between positions in the old\n// and the new document.\n\n\nStep.prototype.getMap = function getMap() {\n return StepMap.empty;\n}; // :: (doc: Node) → Step\n// Create an inverted version of this step. Needs the document as it\n// was before the step as argument.\n\n\nStep.prototype.invert = function invert(_doc) {\n return mustOverride();\n}; // :: (mapping: Mappable) → ?Step\n// Map this step through a mappable thing, returning either a\n// version of that step with its positions adjusted, or `null` if\n// the step was entirely deleted by the mapping.\n\n\nStep.prototype.map = function map(_mapping) {\n return mustOverride();\n}; // :: (other: Step) → ?Step\n// Try to merge this step with another one, to be applied directly\n// after it. Returns the merged step when possible, null if the\n// steps can't be merged.\n\n\nStep.prototype.merge = function merge(_other) {\n return null;\n}; // :: () → Object\n// Create a JSON-serializeable representation of this step. When\n// defining this for a custom subclass, make sure the result object\n// includes the step type's [JSON id](#transform.Step^jsonID) under\n// the `stepType` property.\n\n\nStep.prototype.toJSON = function toJSON() {\n return mustOverride();\n}; // :: (Schema, Object) → Step\n// Deserialize a step from its JSON representation. Will call\n// through to the step class' own implementation of this method.\n\n\nStep.fromJSON = function fromJSON(schema, json) {\n if (!json || !json.stepType) {\n throw new RangeError(\"Invalid input for Step.fromJSON\");\n }\n\n var type = stepsByID[json.stepType];\n\n if (!type) {\n throw new RangeError(\"No step type \" + json.stepType + \" defined\");\n }\n\n return type.fromJSON(schema, json);\n}; // :: (string, constructor<Step>)\n// To be able to serialize steps to JSON, each step needs a string\n// ID to attach to its JSON representation. Use this method to\n// register an ID for your step classes. Try to pick something\n// that's unlikely to clash with steps from other modules.\n\n\nStep.jsonID = function jsonID(id, stepClass) {\n if (id in stepsByID) {\n throw new RangeError(\"Duplicate use of step JSON ID \" + id);\n }\n\n stepsByID[id] = stepClass;\n stepClass.prototype.jsonID = id;\n return stepClass;\n}; // ::- The result of [applying](#transform.Step.apply) a step. Contains either a\n// new document or a failure value.\n\n\nvar StepResult = function StepResult(doc, failed) {\n // :: ?Node The transformed document.\n this.doc = doc; // :: ?string Text providing information about a failed step.\n\n this.failed = failed;\n}; // :: (Node) → StepResult\n// Create a successful step result.\n\n\nStepResult.ok = function ok(doc) {\n return new StepResult(doc, null);\n}; // :: (string) → StepResult\n// Create a failed step result.\n\n\nStepResult.fail = function fail(message) {\n return new StepResult(null, message);\n}; // :: (Node, number, number, Slice) → StepResult\n// Call [`Node.replace`](#model.Node.replace) with the given\n// arguments. Create a successful result if it succeeds, and a\n// failed one if it throws a `ReplaceError`.\n\n\nStepResult.fromReplace = function fromReplace(doc, from, to, slice) {\n try {\n return StepResult.ok(doc.replace(from, to, slice));\n } catch (e) {\n if (e instanceof ReplaceError) {\n return StepResult.fail(e.message);\n }\n\n throw e;\n }\n}; // ::- Replace a part of the document with a slice of new content.\n\n\nvar ReplaceStep = /*@__PURE__*/function (Step) {\n function ReplaceStep(from, to, slice, structure) {\n Step.call(this);\n this.from = from;\n this.to = to;\n this.slice = slice;\n this.structure = !!structure;\n }\n\n if (Step) ReplaceStep.__proto__ = Step;\n ReplaceStep.prototype = Object.create(Step && Step.prototype);\n ReplaceStep.prototype.constructor = ReplaceStep;\n\n ReplaceStep.prototype.apply = function apply(doc) {\n if (this.structure && contentBetween(doc, this.from, this.to)) {\n return StepResult.fail(\"Structure replace would overwrite content\");\n }\n\n return StepResult.fromReplace(doc, this.from, this.to, this.slice);\n };\n\n ReplaceStep.prototype.getMap = function getMap() {\n return new StepMap([this.from, this.to - this.from, this.slice.size]);\n };\n\n ReplaceStep.prototype.invert = function invert(doc) {\n return new ReplaceStep(this.from, this.from + this.slice.size, doc.slice(this.from, this.to));\n };\n\n ReplaceStep.prototype.map = function map(mapping) {\n var from = mapping.mapResult(this.from, 1),\n to = mapping.mapResult(this.to, -1);\n\n if (from.deleted && to.deleted) {\n return null;\n }\n\n return new ReplaceStep(from.pos, Math.max(from.pos, to.pos), this.slice);\n };\n\n ReplaceStep.prototype.merge = function merge(other) {\n if (!(other instanceof ReplaceStep) || other.structure != this.structure) {\n return null;\n }\n\n if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) {\n var slice = this.slice.size + other.slice.size == 0 ? Slice.empty : new Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd);\n return new ReplaceStep(this.from, this.to + (other.to - other.from), slice, this.structure);\n } else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) {\n var slice$1 = this.slice.size + other.slice.size == 0 ? Slice.empty : new Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd);\n return new ReplaceStep(other.from, this.to, slice$1, this.structure);\n } else {\n return null;\n }\n };\n\n ReplaceStep.prototype.toJSON = function toJSON() {\n var json = {\n stepType: \"replace\",\n from: this.from,\n to: this.to\n };\n\n if (this.slice.size) {\n json.slice = this.slice.toJSON();\n }\n\n if (this.structure) {\n json.structure = true;\n }\n\n return json;\n };\n\n ReplaceStep.fromJSON = function fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\") {\n throw new RangeError(\"Invalid input for ReplaceStep.fromJSON\");\n }\n\n return new ReplaceStep(json.from, json.to, Slice.fromJSON(schema, json.slice), !!json.structure);\n };\n\n return ReplaceStep;\n}(Step);\n\nStep.jsonID(\"replace\", ReplaceStep); // ::- Replace a part of the document with a slice of content, but\n// preserve a range of the replaced content by moving it into the\n// slice.\n\nvar ReplaceAroundStep = /*@__PURE__*/function (Step) {\n function ReplaceAroundStep(from, to, gapFrom, gapTo, slice, insert, structure) {\n Step.call(this);\n this.from = from;\n this.to = to;\n this.gapFrom = gapFrom;\n this.gapTo = gapTo;\n this.slice = slice;\n this.insert = insert;\n this.structure = !!structure;\n }\n\n if (Step) ReplaceAroundStep.__proto__ = Step;\n ReplaceAroundStep.prototype = Object.create(Step && Step.prototype);\n ReplaceAroundStep.prototype.constructor = ReplaceAroundStep;\n\n ReplaceAroundStep.prototype.apply = function apply(doc) {\n if (this.structure && (contentBetween(doc, this.from, this.gapFrom) || contentBetween(doc, this.gapTo, this.to))) {\n return StepResult.fail(\"Structure gap-replace would overwrite content\");\n }\n\n var gap = doc.slice(this.gapFrom, this.gapTo);\n\n if (gap.openStart || gap.openEnd) {\n return StepResult.fail(\"Gap is not a flat range\");\n }\n\n var inserted = this.slice.insertAt(this.insert, gap.content);\n\n if (!inserted) {\n return StepResult.fail(\"Content does not fit in gap\");\n }\n\n return StepResult.fromReplace(doc, this.from, this.to, inserted);\n };\n\n ReplaceAroundStep.prototype.getMap = function getMap() {\n return new StepMap([this.from, this.gapFrom - this.from, this.insert, this.gapTo, this.to - this.gapTo, this.slice.size - this.insert]);\n };\n\n ReplaceAroundStep.prototype.invert = function invert(doc) {\n var gap = this.gapTo - this.gapFrom;\n return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap, this.from + this.insert, this.from + this.insert + gap, doc.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure);\n };\n\n ReplaceAroundStep.prototype.map = function map(mapping) {\n var from = mapping.mapResult(this.from, 1),\n to = mapping.mapResult(this.to, -1);\n var gapFrom = mapping.map(this.gapFrom, -1),\n gapTo = mapping.map(this.gapTo, 1);\n\n if (from.deleted && to.deleted || gapFrom < from.pos || gapTo > to.pos) {\n return null;\n }\n\n return new ReplaceAroundStep(from.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure);\n };\n\n ReplaceAroundStep.prototype.toJSON = function toJSON() {\n var json = {\n stepType: \"replaceAround\",\n from: this.from,\n to: this.to,\n gapFrom: this.gapFrom,\n gapTo: this.gapTo,\n insert: this.insert\n };\n\n if (this.slice.size) {\n json.slice = this.slice.toJSON();\n }\n\n if (this.structure) {\n json.structure = true;\n }\n\n return json;\n };\n\n ReplaceAroundStep.fromJSON = function fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\" || typeof json.gapFrom != \"number\" || typeof json.gapTo != \"number\" || typeof json.insert != \"number\") {\n throw new RangeError(\"Invalid input for ReplaceAroundStep.fromJSON\");\n }\n\n return new ReplaceAroundStep(json.from, json.to, json.gapFrom, json.gapTo, Slice.fromJSON(schema, json.slice), json.insert, !!json.structure);\n };\n\n return ReplaceAroundStep;\n}(Step);\n\nStep.jsonID(\"replaceAround\", ReplaceAroundStep);\n\nfunction contentBetween(doc, from, to) {\n var $from = doc.resolve(from),\n dist = to - from,\n depth = $from.depth;\n\n while (dist > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) {\n depth--;\n dist--;\n }\n\n if (dist > 0) {\n var next = $from.node(depth).maybeChild($from.indexAfter(depth));\n\n while (dist > 0) {\n if (!next || next.isLeaf) {\n return true;\n }\n\n next = next.firstChild;\n dist--;\n }\n }\n\n return false;\n}\n\nfunction canCut(node, start, end) {\n return (start == 0 || node.canReplace(start, node.childCount)) && (end == node.childCount || node.canReplace(0, end));\n} // :: (NodeRange) → ?number\n// Try to find a target depth to which the content in the given range\n// can be lifted. Will not go across\n// [isolating](#model.NodeSpec.isolating) parent nodes.\n\n\nfunction liftTarget(range) {\n var parent = range.parent;\n var content = parent.content.cutByIndex(range.startIndex, range.endIndex);\n\n for (var depth = range.depth;; --depth) {\n var node = range.$from.node(depth);\n var index = range.$from.index(depth),\n endIndex = range.$to.indexAfter(depth);\n\n if (depth < range.depth && node.canReplace(index, endIndex, content)) {\n return depth;\n }\n\n if (depth == 0 || node.type.spec.isolating || !canCut(node, index, endIndex)) {\n break;\n }\n }\n} // :: (NodeRange, number) → this\n// Split the content in the given range off from its parent, if there\n// is sibling content before or after it, and move it up the tree to\n// the depth specified by `target`. You'll probably want to use\n// [`liftTarget`](#transform.liftTarget) to compute `target`, to make\n// sure the lift is valid.\n\n\nTransform.prototype.lift = function (range, target) {\n var $from = range.$from;\n var $to = range.$to;\n var depth = range.depth;\n var gapStart = $from.before(depth + 1),\n gapEnd = $to.after(depth + 1);\n var start = gapStart,\n end = gapEnd;\n var before = Fragment.empty,\n openStart = 0;\n\n for (var d = depth, splitting = false; d > target; d--) {\n if (splitting || $from.index(d) > 0) {\n splitting = true;\n before = Fragment.from($from.node(d).copy(before));\n openStart++;\n } else {\n start--;\n }\n }\n\n var after = Fragment.empty,\n openEnd = 0;\n\n for (var d$1 = depth, splitting$1 = false; d$1 > target; d$1--) {\n if (splitting$1 || $to.after(d$1 + 1) < $to.end(d$1)) {\n splitting$1 = true;\n after = Fragment.from($to.node(d$1).copy(after));\n openEnd++;\n } else {\n end++;\n }\n }\n\n return this.step(new ReplaceAroundStep(start, end, gapStart, gapEnd, new Slice(before.append(after), openStart, openEnd), before.size - openStart, true));\n}; // :: (NodeRange, NodeType, ?Object, ?NodeRange) → ?[{type: NodeType, attrs: ?Object}]\n// Try to find a valid way to wrap the content in the given range in a\n// node of the given type. May introduce extra nodes around and inside\n// the wrapper node, if necessary. Returns null if no valid wrapping\n// could be found. When `innerRange` is given, that range's content is\n// used as the content to fit into the wrapping, instead of the\n// content of `range`.\n\n\nfunction findWrapping(range, nodeType, attrs, innerRange) {\n if (innerRange === void 0) innerRange = range;\n var around = findWrappingOutside(range, nodeType);\n var inner = around && findWrappingInside(innerRange, nodeType);\n\n if (!inner) {\n return null;\n }\n\n return around.map(withAttrs).concat({\n type: nodeType,\n attrs: attrs\n }).concat(inner.map(withAttrs));\n}\n\nfunction withAttrs(type) {\n return {\n type: type,\n attrs: null\n };\n}\n\nfunction findWrappingOutside(range, type) {\n var parent = range.parent;\n var startIndex = range.startIndex;\n var endIndex = range.endIndex;\n var around = parent.contentMatchAt(startIndex).findWrapping(type);\n\n if (!around) {\n return null;\n }\n\n var outer = around.length ? around[0] : type;\n return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null;\n}\n\nfunction findWrappingInside(range, type) {\n var parent = range.parent;\n var startIndex = range.startIndex;\n var endIndex = range.endIndex;\n var inner = parent.child(startIndex);\n var inside = type.contentMatch.findWrapping(inner.type);\n\n if (!inside) {\n return null;\n }\n\n var lastType = inside.length ? inside[inside.length - 1] : type;\n var innerMatch = lastType.contentMatch;\n\n for (var i = startIndex; innerMatch && i < endIndex; i++) {\n innerMatch = innerMatch.matchType(parent.child(i).type);\n }\n\n if (!innerMatch || !innerMatch.validEnd) {\n return null;\n }\n\n return inside;\n} // :: (NodeRange, [{type: NodeType, attrs: ?Object}]) → this\n// Wrap the given [range](#model.NodeRange) in the given set of wrappers.\n// The wrappers are assumed to be valid in this position, and should\n// probably be computed with [`findWrapping`](#transform.findWrapping).\n\n\nTransform.prototype.wrap = function (range, wrappers) {\n var content = Fragment.empty;\n\n for (var i = wrappers.length - 1; i >= 0; i--) {\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n }\n\n var start = range.start,\n end = range.end;\n return this.step(new ReplaceAroundStep(start, end, start, end, new Slice(content, 0, 0), wrappers.length, true));\n}; // :: (number, ?number, NodeType, ?Object) → this\n// Set the type of all textblocks (partly) between `from` and `to` to\n// the given node type with the given attributes.\n\n\nTransform.prototype.setBlockType = function (from, to, type, attrs) {\n var this$1 = this;\n if (to === void 0) to = from;\n\n if (!type.isTextblock) {\n throw new RangeError(\"Type given to setBlockType should be a textblock\");\n }\n\n var mapFrom = this.steps.length;\n this.doc.nodesBetween(from, to, function (node, pos) {\n if (node.isTextblock && !node.hasMarkup(type, attrs) && canChangeType(this$1.doc, this$1.mapping.slice(mapFrom).map(pos), type)) {\n // Ensure all markup that isn't allowed in the new node type is cleared\n this$1.clearIncompatible(this$1.mapping.slice(mapFrom).map(pos, 1), type);\n var mapping = this$1.mapping.slice(mapFrom);\n var startM = mapping.map(pos, 1),\n endM = mapping.map(pos + node.nodeSize, 1);\n this$1.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new Slice(Fragment.from(type.create(attrs, null, node.marks)), 0, 0), 1, true));\n return false;\n }\n });\n return this;\n};\n\nfunction canChangeType(doc, pos, type) {\n var $pos = doc.resolve(pos),\n index = $pos.index();\n return $pos.parent.canReplaceWith(index, index + 1, type);\n} // :: (number, ?NodeType, ?Object, ?[Mark]) → this\n// Change the type, attributes, and/or marks of the node at `pos`.\n// When `type` isn't given, the existing node type is preserved,\n\n\nTransform.prototype.setNodeMarkup = function (pos, type, attrs, marks) {\n var node = this.doc.nodeAt(pos);\n\n if (!node) {\n throw new RangeError(\"No node at given position\");\n }\n\n if (!type) {\n type = node.type;\n }\n\n var newNode = type.create(attrs, null, marks || node.marks);\n\n if (node.isLeaf) {\n return this.replaceWith(pos, pos + node.nodeSize, newNode);\n }\n\n if (!type.validContent(node.content)) {\n throw new RangeError(\"Invalid content for node type \" + type.name);\n }\n\n return this.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1, new Slice(Fragment.from(newNode), 0, 0), 1, true));\n}; // :: (Node, number, number, ?[?{type: NodeType, attrs: ?Object}]) → bool\n// Check whether splitting at the given position is allowed.\n\n\nfunction canSplit(doc, pos, depth, typesAfter) {\n if (depth === void 0) depth = 1;\n var $pos = doc.resolve(pos),\n base = $pos.depth - depth;\n var innerType = typesAfter && typesAfter[typesAfter.length - 1] || $pos.parent;\n\n if (base < 0 || $pos.parent.type.spec.isolating || !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) || !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount))) {\n return false;\n }\n\n for (var d = $pos.depth - 1, i = depth - 2; d > base; d--, i--) {\n var node = $pos.node(d),\n index$1 = $pos.index(d);\n\n if (node.type.spec.isolating) {\n return false;\n }\n\n var rest = node.content.cutByIndex(index$1, node.childCount);\n var after = typesAfter && typesAfter[i] || node;\n\n if (after != node) {\n rest = rest.replaceChild(0, after.type.create(after.attrs));\n }\n\n if (!node.canReplace(index$1 + 1, node.childCount) || !after.type.validContent(rest)) {\n return false;\n }\n }\n\n var index = $pos.indexAfter(base);\n var baseType = typesAfter && typesAfter[0];\n return $pos.node(base).canReplaceWith(index, index, baseType ? baseType.type : $pos.node(base + 1).type);\n} // :: (number, ?number, ?[?{type: NodeType, attrs: ?Object}]) → this\n// Split the node at the given position, and optionally, if `depth` is\n// greater than one, any number of nodes above that. By default, the\n// parts split off will inherit the node type of the original node.\n// This can be changed by passing an array of types and attributes to\n// use after the split.\n\n\nTransform.prototype.split = function (pos, depth, typesAfter) {\n if (depth === void 0) depth = 1;\n var $pos = this.doc.resolve(pos),\n before = Fragment.empty,\n after = Fragment.empty;\n\n for (var d = $pos.depth, e = $pos.depth - depth, i = depth - 1; d > e; d--, i--) {\n before = Fragment.from($pos.node(d).copy(before));\n var typeAfter = typesAfter && typesAfter[i];\n after = Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d).copy(after));\n }\n\n return this.step(new ReplaceStep(pos, pos, new Slice(before.append(after), depth, depth), true));\n}; // :: (Node, number) → bool\n// Test whether the blocks before and after a given position can be\n// joined.\n\n\nfunction canJoin(doc, pos) {\n var $pos = doc.resolve(pos),\n index = $pos.index();\n return joinable($pos.nodeBefore, $pos.nodeAfter) && $pos.parent.canReplace(index, index + 1);\n}\n\nfunction joinable(a, b) {\n return a && b && !a.isLeaf && a.canAppend(b);\n} // :: (Node, number, ?number) → ?number\n// Find an ancestor of the given position that can be joined to the\n// block before (or after if `dir` is positive). Returns the joinable\n// point, if any.\n\n\nfunction joinPoint(doc, pos, dir) {\n if (dir === void 0) dir = -1;\n var $pos = doc.resolve(pos);\n\n for (var d = $pos.depth;; d--) {\n var before = void 0,\n after = void 0,\n index = $pos.index(d);\n\n if (d == $pos.depth) {\n before = $pos.nodeBefore;\n after = $pos.nodeAfter;\n } else if (dir > 0) {\n before = $pos.node(d + 1);\n index++;\n after = $pos.node(d).maybeChild(index);\n } else {\n before = $pos.node(d).maybeChild(index - 1);\n after = $pos.node(d + 1);\n }\n\n if (before && !before.isTextblock && joinable(before, after) && $pos.node(d).canReplace(index, index + 1)) {\n return pos;\n }\n\n if (d == 0) {\n break;\n }\n\n pos = dir < 0 ? $pos.before(d) : $pos.after(d);\n }\n} // :: (number, ?number) → this\n// Join the blocks around the given position. If depth is 2, their\n// last and first siblings are also joined, and so on.\n\n\nTransform.prototype.join = function (pos, depth) {\n if (depth === void 0) depth = 1;\n var step = new ReplaceStep(pos - depth, pos + depth, Slice.empty, true);\n return this.step(step);\n}; // :: (Node, number, NodeType) → ?number\n// Try to find a point where a node of the given type can be inserted\n// near `pos`, by searching up the node hierarchy when `pos` itself\n// isn't a valid place but is at the start or end of a node. Return\n// null if no position was found.\n\n\nfunction insertPoint(doc, pos, nodeType) {\n var $pos = doc.resolve(pos);\n\n if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType)) {\n return pos;\n }\n\n if ($pos.parentOffset == 0) {\n for (var d = $pos.depth - 1; d >= 0; d--) {\n var index = $pos.index(d);\n\n if ($pos.node(d).canReplaceWith(index, index, nodeType)) {\n return $pos.before(d + 1);\n }\n\n if (index > 0) {\n return null;\n }\n }\n }\n\n if ($pos.parentOffset == $pos.parent.content.size) {\n for (var d$1 = $pos.depth - 1; d$1 >= 0; d$1--) {\n var index$1 = $pos.indexAfter(d$1);\n\n if ($pos.node(d$1).canReplaceWith(index$1, index$1, nodeType)) {\n return $pos.after(d$1 + 1);\n }\n\n if (index$1 < $pos.node(d$1).childCount) {\n return null;\n }\n }\n }\n} // :: (Node, number, Slice) → ?number\n// Finds a position at or around the given position where the given\n// slice can be inserted. Will look at parent nodes' nearest boundary\n// and try there, even if the original position wasn't directly at the\n// start or end of that node. Returns null when no position was found.\n\n\nfunction dropPoint(doc, pos, slice) {\n var $pos = doc.resolve(pos);\n\n if (!slice.content.size) {\n return pos;\n }\n\n var content = slice.content;\n\n for (var i = 0; i < slice.openStart; i++) {\n content = content.firstChild.content;\n }\n\n for (var pass = 1; pass <= (slice.openStart == 0 && slice.size ? 2 : 1); pass++) {\n for (var d = $pos.depth; d >= 0; d--) {\n var bias = d == $pos.depth ? 0 : $pos.pos <= ($pos.start(d + 1) + $pos.end(d + 1)) / 2 ? -1 : 1;\n var insertPos = $pos.index(d) + (bias > 0 ? 1 : 0);\n\n if (pass == 1 ? $pos.node(d).canReplace(insertPos, insertPos, content) : $pos.node(d).contentMatchAt(insertPos).findWrapping(content.firstChild.type)) {\n return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d + 1) : $pos.after(d + 1);\n }\n }\n }\n\n return null;\n}\n\nfunction mapFragment(fragment, f, parent) {\n var mapped = [];\n\n for (var i = 0; i < fragment.childCount; i++) {\n var child = fragment.child(i);\n\n if (child.content.size) {\n child = child.copy(mapFragment(child.content, f, child));\n }\n\n if (child.isInline) {\n child = f(child, parent, i);\n }\n\n mapped.push(child);\n }\n\n return Fragment.fromArray(mapped);\n} // ::- Add a mark to all inline content between two positions.\n\n\nvar AddMarkStep = /*@__PURE__*/function (Step) {\n function AddMarkStep(from, to, mark) {\n Step.call(this);\n this.from = from;\n this.to = to;\n this.mark = mark;\n }\n\n if (Step) AddMarkStep.__proto__ = Step;\n AddMarkStep.prototype = Object.create(Step && Step.prototype);\n AddMarkStep.prototype.constructor = AddMarkStep;\n\n AddMarkStep.prototype.apply = function apply(doc) {\n var this$1 = this;\n var oldSlice = doc.slice(this.from, this.to),\n $from = doc.resolve(this.from);\n var parent = $from.node($from.sharedDepth(this.to));\n var slice = new Slice(mapFragment(oldSlice.content, function (node, parent) {\n if (!node.isAtom || !parent.type.allowsMarkType(this$1.mark.type)) {\n return node;\n }\n\n return node.mark(this$1.mark.addToSet(node.marks));\n }, parent), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice);\n };\n\n AddMarkStep.prototype.invert = function invert() {\n return new RemoveMarkStep(this.from, this.to, this.mark);\n };\n\n AddMarkStep.prototype.map = function map(mapping) {\n var from = mapping.mapResult(this.from, 1),\n to = mapping.mapResult(this.to, -1);\n\n if (from.deleted && to.deleted || from.pos >= to.pos) {\n return null;\n }\n\n return new AddMarkStep(from.pos, to.pos, this.mark);\n };\n\n AddMarkStep.prototype.merge = function merge(other) {\n if (other instanceof AddMarkStep && other.mark.eq(this.mark) && this.from <= other.to && this.to >= other.from) {\n return new AddMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n }\n };\n\n AddMarkStep.prototype.toJSON = function toJSON() {\n return {\n stepType: \"addMark\",\n mark: this.mark.toJSON(),\n from: this.from,\n to: this.to\n };\n };\n\n AddMarkStep.fromJSON = function fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\") {\n throw new RangeError(\"Invalid input for AddMarkStep.fromJSON\");\n }\n\n return new AddMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n };\n\n return AddMarkStep;\n}(Step);\n\nStep.jsonID(\"addMark\", AddMarkStep); // ::- Remove a mark from all inline content between two positions.\n\nvar RemoveMarkStep = /*@__PURE__*/function (Step) {\n function RemoveMarkStep(from, to, mark) {\n Step.call(this);\n this.from = from;\n this.to = to;\n this.mark = mark;\n }\n\n if (Step) RemoveMarkStep.__proto__ = Step;\n RemoveMarkStep.prototype = Object.create(Step && Step.prototype);\n RemoveMarkStep.prototype.constructor = RemoveMarkStep;\n\n RemoveMarkStep.prototype.apply = function apply(doc) {\n var this$1 = this;\n var oldSlice = doc.slice(this.from, this.to);\n var slice = new Slice(mapFragment(oldSlice.content, function (node) {\n return node.mark(this$1.mark.removeFromSet(node.marks));\n }), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice);\n };\n\n RemoveMarkStep.prototype.invert = function invert() {\n return new AddMarkStep(this.from, this.to, this.mark);\n };\n\n RemoveMarkStep.prototype.map = function map(mapping) {\n var from = mapping.mapResult(this.from, 1),\n to = mapping.mapResult(this.to, -1);\n\n if (from.deleted && to.deleted || from.pos >= to.pos) {\n return null;\n }\n\n return new RemoveMarkStep(from.pos, to.pos, this.mark);\n };\n\n RemoveMarkStep.prototype.merge = function merge(other) {\n if (other instanceof RemoveMarkStep && other.mark.eq(this.mark) && this.from <= other.to && this.to >= other.from) {\n return new RemoveMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n }\n };\n\n RemoveMarkStep.prototype.toJSON = function toJSON() {\n return {\n stepType: \"removeMark\",\n mark: this.mark.toJSON(),\n from: this.from,\n to: this.to\n };\n };\n\n RemoveMarkStep.fromJSON = function fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\") {\n throw new RangeError(\"Invalid input for RemoveMarkStep.fromJSON\");\n }\n\n return new RemoveMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n };\n\n return RemoveMarkStep;\n}(Step);\n\nStep.jsonID(\"removeMark\", RemoveMarkStep); // :: (number, number, Mark) → this\n// Add the given mark to the inline content between `from` and `to`.\n\nTransform.prototype.addMark = function (from, to, mark) {\n var this$1 = this;\n var removed = [],\n added = [],\n removing = null,\n adding = null;\n this.doc.nodesBetween(from, to, function (node, pos, parent) {\n if (!node.isInline) {\n return;\n }\n\n var marks = node.marks;\n\n if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) {\n var start = Math.max(pos, from),\n end = Math.min(pos + node.nodeSize, to);\n var newSet = mark.addToSet(marks);\n\n for (var i = 0; i < marks.length; i++) {\n if (!marks[i].isInSet(newSet)) {\n if (removing && removing.to == start && removing.mark.eq(marks[i])) {\n removing.to = end;\n } else {\n removed.push(removing = new RemoveMarkStep(start, end, marks[i]));\n }\n }\n }\n\n if (adding && adding.to == start) {\n adding.to = end;\n } else {\n added.push(adding = new AddMarkStep(start, end, mark));\n }\n }\n });\n removed.forEach(function (s) {\n return this$1.step(s);\n });\n added.forEach(function (s) {\n return this$1.step(s);\n });\n return this;\n}; // :: (number, number, ?union<Mark, MarkType>) → this\n// Remove marks from inline nodes between `from` and `to`. When `mark`\n// is a single mark, remove precisely that mark. When it is a mark type,\n// remove all marks of that type. When it is null, remove all marks of\n// any type.\n\n\nTransform.prototype.removeMark = function (from, to, mark) {\n var this$1 = this;\n if (mark === void 0) mark = null;\n var matched = [],\n step = 0;\n this.doc.nodesBetween(from, to, function (node, pos) {\n if (!node.isInline) {\n return;\n }\n\n step++;\n var toRemove = null;\n\n if (mark instanceof MarkType) {\n var set = node.marks,\n found;\n\n while (found = mark.isInSet(set)) {\n (toRemove || (toRemove = [])).push(found);\n set = found.removeFromSet(set);\n }\n } else if (mark) {\n if (mark.isInSet(node.marks)) {\n toRemove = [mark];\n }\n } else {\n toRemove = node.marks;\n }\n\n if (toRemove && toRemove.length) {\n var end = Math.min(pos + node.nodeSize, to);\n\n for (var i = 0; i < toRemove.length; i++) {\n var style = toRemove[i],\n found$1 = void 0;\n\n for (var j = 0; j < matched.length; j++) {\n var m = matched[j];\n\n if (m.step == step - 1 && style.eq(matched[j].style)) {\n found$1 = m;\n }\n }\n\n if (found$1) {\n found$1.to = end;\n found$1.step = step;\n } else {\n matched.push({\n style: style,\n from: Math.max(pos, from),\n to: end,\n step: step\n });\n }\n }\n }\n });\n matched.forEach(function (m) {\n return this$1.step(new RemoveMarkStep(m.from, m.to, m.style));\n });\n return this;\n}; // :: (number, NodeType, ?ContentMatch) → this\n// Removes all marks and nodes from the content of the node at `pos`\n// that don't match the given new parent node type. Accepts an\n// optional starting [content match](#model.ContentMatch) as third\n// argument.\n\n\nTransform.prototype.clearIncompatible = function (pos, parentType, match) {\n if (match === void 0) match = parentType.contentMatch;\n var node = this.doc.nodeAt(pos);\n var delSteps = [],\n cur = pos + 1;\n\n for (var i = 0; i < node.childCount; i++) {\n var child = node.child(i),\n end = cur + child.nodeSize;\n var allowed = match.matchType(child.type, child.attrs);\n\n if (!allowed) {\n delSteps.push(new ReplaceStep(cur, end, Slice.empty));\n } else {\n match = allowed;\n\n for (var j = 0; j < child.marks.length; j++) {\n if (!parentType.allowsMarkType(child.marks[j].type)) {\n this.step(new RemoveMarkStep(cur, end, child.marks[j]));\n }\n }\n }\n\n cur = end;\n }\n\n if (!match.validEnd) {\n var fill = match.fillBefore(Fragment.empty, true);\n this.replace(cur, cur, new Slice(fill, 0, 0));\n }\n\n for (var i$1 = delSteps.length - 1; i$1 >= 0; i$1--) {\n this.step(delSteps[i$1]);\n }\n\n return this;\n}; // :: (Node, number, ?number, ?Slice) → ?Step\n// Fit a slice into a given position in the document, producing a\n// [step](#transform.Step) that inserts it. Will return null if\n// there's no meaningful way to insert the slice here, or inserting it\n// would be a no-op (an empty slice over an empty range).\n\n\nfunction replaceStep(doc, from, to, slice) {\n if (to === void 0) to = from;\n if (slice === void 0) slice = Slice.empty;\n\n if (from == to && !slice.size) {\n return null;\n }\n\n var $from = doc.resolve(from),\n $to = doc.resolve(to); // Optimization -- avoid work if it's obvious that it's not needed.\n\n if (fitsTrivially($from, $to, slice)) {\n return new ReplaceStep(from, to, slice);\n }\n\n return new Fitter($from, $to, slice).fit();\n} // :: (number, ?number, ?Slice) → this\n// Replace the part of the document between `from` and `to` with the\n// given `slice`.\n\n\nTransform.prototype.replace = function (from, to, slice) {\n if (to === void 0) to = from;\n if (slice === void 0) slice = Slice.empty;\n var step = replaceStep(this.doc, from, to, slice);\n\n if (step) {\n this.step(step);\n }\n\n return this;\n}; // :: (number, number, union<Fragment, Node, [Node]>) → this\n// Replace the given range with the given content, which may be a\n// fragment, node, or array of nodes.\n\n\nTransform.prototype.replaceWith = function (from, to, content) {\n return this.replace(from, to, new Slice(Fragment.from(content), 0, 0));\n}; // :: (number, number) → this\n// Delete the content between the given positions.\n\n\nTransform.prototype[\"delete\"] = function (from, to) {\n return this.replace(from, to, Slice.empty);\n}; // :: (number, union<Fragment, Node, [Node]>) → this\n// Insert the given content at the given position.\n\n\nTransform.prototype.insert = function (pos, content) {\n return this.replaceWith(pos, pos, content);\n};\n\nfunction fitsTrivially($from, $to, slice) {\n return !slice.openStart && !slice.openEnd && $from.start() == $to.start() && $from.parent.canReplace($from.index(), $to.index(), slice.content);\n} // Algorithm for 'placing' the elements of a slice into a gap:\n//\n// We consider the content of each node that is open to the left to be\n// independently placeable. I.e. in <p(\"foo\"), p(\"bar\")>, when the\n// paragraph on the left is open, \"foo\" can be placed (somewhere on\n// the left side of the replacement gap) independently from p(\"bar\").\n//\n// This class tracks the state of the placement progress in the\n// following properties:\n//\n// - `frontier` holds a stack of `{type, match}` objects that\n// represent the open side of the replacement. It starts at\n// `$from`, then moves forward as content is placed, and is finally\n// reconciled with `$to`.\n//\n// - `unplaced` is a slice that represents the content that hasn't\n// been placed yet.\n//\n// - `placed` is a fragment of placed content. Its open-start value\n// is implicit in `$from`, and its open-end value in `frontier`.\n\n\nvar Fitter = function Fitter($from, $to, slice) {\n this.$to = $to;\n this.$from = $from;\n this.unplaced = slice;\n this.frontier = [];\n\n for (var i = 0; i <= $from.depth; i++) {\n var node = $from.node(i);\n this.frontier.push({\n type: node.type,\n match: node.contentMatchAt($from.indexAfter(i))\n });\n }\n\n this.placed = Fragment.empty;\n\n for (var i$1 = $from.depth; i$1 > 0; i$1--) {\n this.placed = Fragment.from($from.node(i$1).copy(this.placed));\n }\n};\n\nvar prototypeAccessors$1 = {\n depth: {\n configurable: true\n }\n};\n\nprototypeAccessors$1.depth.get = function () {\n return this.frontier.length - 1;\n};\n\nFitter.prototype.fit = function fit() {\n // As long as there's unplaced content, try to place some of it.\n // If that fails, either increase the open score of the unplaced\n // slice, or drop nodes from it, and then try again.\n while (this.unplaced.size) {\n var fit = this.findFittable();\n\n if (fit) {\n this.placeNodes(fit);\n } else {\n this.openMore() || this.dropNode();\n }\n } // When there's inline content directly after the frontier _and_\n // directly after `this.$to`, we must generate a `ReplaceAround`\n // step that pulls that content into the node after the frontier.\n // That means the fitting must be done to the end of the textblock\n // node after `this.$to`, not `this.$to` itself.\n\n\n var moveInline = this.mustMoveInline(),\n placedSize = this.placed.size - this.depth - this.$from.depth;\n var $from = this.$from,\n $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline));\n\n if (!$to) {\n return null;\n } // If closing to `$to` succeeded, create a step\n\n\n var content = this.placed,\n openStart = $from.depth,\n openEnd = $to.depth;\n\n while (openStart && openEnd && content.childCount == 1) {\n // Normalize by dropping open parent nodes\n content = content.firstChild.content;\n openStart--;\n openEnd--;\n }\n\n var slice = new Slice(content, openStart, openEnd);\n\n if (moveInline > -1) {\n return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice, placedSize);\n }\n\n if (slice.size || $from.pos != this.$to.pos) // Don't generate no-op steps\n {\n return new ReplaceStep($from.pos, $to.pos, slice);\n }\n}; // Find a position on the start spine of `this.unplaced` that has\n// content that can be moved somewhere on the frontier. Returns two\n// depths, one for the slice and one for the frontier.\n\n\nFitter.prototype.findFittable = function findFittable() {\n // Only try wrapping nodes (pass 2) after finding a place without\n // wrapping failed.\n for (var pass = 1; pass <= 2; pass++) {\n for (var sliceDepth = this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) {\n var fragment = void 0,\n parent = void 0;\n\n if (sliceDepth) {\n parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild;\n fragment = parent.content;\n } else {\n fragment = this.unplaced.content;\n }\n\n var first = fragment.firstChild;\n\n for (var frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) {\n var ref = this.frontier[frontierDepth];\n var type = ref.type;\n var match = ref.match;\n var wrap = void 0,\n inject = void 0; // In pass 1, if the next node matches, or there is no next\n // node but the parents look compatible, we've found a\n // place.\n\n if (pass == 1 && (first ? match.matchType(first.type) || (inject = match.fillBefore(Fragment.from(first), false)) : type.compatibleContent(parent.type))) {\n return {\n sliceDepth: sliceDepth,\n frontierDepth: frontierDepth,\n parent: parent,\n inject: inject\n };\n } // In pass 2, look for a set of wrapping nodes that make\n // `first` fit here.\n else if (pass == 2 && first && (wrap = match.findWrapping(first.type))) {\n return {\n sliceDepth: sliceDepth,\n frontierDepth: frontierDepth,\n parent: parent,\n wrap: wrap\n };\n } // Don't continue looking further up if the parent node\n // would fit here.\n\n\n if (parent && match.matchType(parent.type)) {\n break;\n }\n }\n }\n }\n};\n\nFitter.prototype.openMore = function openMore() {\n var ref = this.unplaced;\n var content = ref.content;\n var openStart = ref.openStart;\n var openEnd = ref.openEnd;\n var inner = contentAt(content, openStart);\n\n if (!inner.childCount || inner.firstChild.isLeaf) {\n return false;\n }\n\n this.unplaced = new Slice(content, openStart + 1, Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0));\n return true;\n};\n\nFitter.prototype.dropNode = function dropNode() {\n var ref = this.unplaced;\n var content = ref.content;\n var openStart = ref.openStart;\n var openEnd = ref.openEnd;\n var inner = contentAt(content, openStart);\n\n if (inner.childCount <= 1 && openStart > 0) {\n var openAtEnd = content.size - openStart <= openStart + inner.size;\n this.unplaced = new Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1, openAtEnd ? openStart - 1 : openEnd);\n } else {\n this.unplaced = new Slice(dropFromFragment(content, openStart, 1), openStart, openEnd);\n }\n}; // : ({sliceDepth: number, frontierDepth: number, parent: ?Node, wrap: ?[NodeType], inject: ?Fragment})\n// Move content from the unplaced slice at `sliceDepth` to the\n// frontier node at `frontierDepth`. Close that frontier node when\n// applicable.\n\n\nFitter.prototype.placeNodes = function placeNodes(ref) {\n var sliceDepth = ref.sliceDepth;\n var frontierDepth = ref.frontierDepth;\n var parent = ref.parent;\n var inject = ref.inject;\n var wrap = ref.wrap;\n\n while (this.depth > frontierDepth) {\n this.closeFrontierNode();\n }\n\n if (wrap) {\n for (var i = 0; i < wrap.length; i++) {\n this.openFrontierNode(wrap[i]);\n }\n }\n\n var slice = this.unplaced,\n fragment = parent ? parent.content : slice.content;\n var openStart = slice.openStart - sliceDepth;\n var taken = 0,\n add = [];\n var ref$1 = this.frontier[frontierDepth];\n var match = ref$1.match;\n var type = ref$1.type;\n\n if (inject) {\n for (var i$1 = 0; i$1 < inject.childCount; i$1++) {\n add.push(inject.child(i$1));\n }\n\n match = match.matchFragment(inject);\n } // Computes the amount of (end) open nodes at the end of the\n // fragment. When 0, the parent is open, but no more. When\n // negative, nothing is open.\n\n\n var openEndCount = fragment.size + sliceDepth - (slice.content.size - slice.openEnd); // Scan over the fragment, fitting as many child nodes as\n // possible.\n\n while (taken < fragment.childCount) {\n var next = fragment.child(taken),\n matches = match.matchType(next.type);\n\n if (!matches) {\n break;\n }\n\n taken++;\n\n if (taken > 1 || openStart == 0 || next.content.size) {\n // Drop empty open nodes\n match = matches;\n add.push(closeNodeStart(next.mark(type.allowedMarks(next.marks)), taken == 1 ? openStart : 0, taken == fragment.childCount ? openEndCount : -1));\n }\n }\n\n var toEnd = taken == fragment.childCount;\n\n if (!toEnd) {\n openEndCount = -1;\n }\n\n this.placed = addToFragment(this.placed, frontierDepth, Fragment.from(add));\n this.frontier[frontierDepth].match = match; // If the parent types match, and the entire node was moved, and\n // it's not open, close this frontier node right away.\n\n if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1) {\n this.closeFrontierNode();\n } // Add new frontier nodes for any open nodes at the end.\n\n\n for (var i$2 = 0, cur = fragment; i$2 < openEndCount; i$2++) {\n var node = cur.lastChild;\n this.frontier.push({\n type: node.type,\n match: node.contentMatchAt(node.childCount)\n });\n cur = node.content;\n } // Update `this.unplaced`. Drop the entire node from which we\n // placed it we got to its end, otherwise just drop the placed\n // nodes.\n\n\n this.unplaced = !toEnd ? new Slice(dropFromFragment(slice.content, sliceDepth, taken), slice.openStart, slice.openEnd) : sliceDepth == 0 ? Slice.empty : new Slice(dropFromFragment(slice.content, sliceDepth - 1, 1), sliceDepth - 1, openEndCount < 0 ? slice.openEnd : sliceDepth - 1);\n};\n\nFitter.prototype.mustMoveInline = function mustMoveInline() {\n if (!this.$to.parent.isTextblock || this.$to.end() == this.$to.pos) {\n return -1;\n }\n\n var top = this.frontier[this.depth],\n level;\n\n if (!top.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top.type, top.match, false) || this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth) {\n return -1;\n }\n\n var ref = this.$to;\n var depth = ref.depth;\n var after = this.$to.after(depth);\n\n while (depth > 1 && after == this.$to.end(--depth)) {\n ++after;\n }\n\n return after;\n};\n\nFitter.prototype.findCloseLevel = function findCloseLevel($to) {\n scan: for (var i = Math.min(this.depth, $to.depth); i >= 0; i--) {\n var ref = this.frontier[i];\n var match = ref.match;\n var type = ref.type;\n var dropInner = i < $to.depth && $to.end(i + 1) == $to.pos + ($to.depth - (i + 1));\n var fit = contentAfterFits($to, i, type, match, dropInner);\n\n if (!fit) {\n continue;\n }\n\n for (var d = i - 1; d >= 0; d--) {\n var ref$1 = this.frontier[d];\n var match$1 = ref$1.match;\n var type$1 = ref$1.type;\n var matches = contentAfterFits($to, d, type$1, match$1, true);\n\n if (!matches || matches.childCount) {\n continue scan;\n }\n }\n\n return {\n depth: i,\n fit: fit,\n move: dropInner ? $to.doc.resolve($to.after(i + 1)) : $to\n };\n }\n};\n\nFitter.prototype.close = function close($to) {\n var close = this.findCloseLevel($to);\n\n if (!close) {\n return null;\n }\n\n while (this.depth > close.depth) {\n this.closeFrontierNode();\n }\n\n if (close.fit.childCount) {\n this.placed = addToFragment(this.placed, close.depth, close.fit);\n }\n\n $to = close.move;\n\n for (var d = close.depth + 1; d <= $to.depth; d++) {\n var node = $to.node(d),\n add = node.type.contentMatch.fillBefore(node.content, true, $to.index(d));\n this.openFrontierNode(node.type, node.attrs, add);\n }\n\n return $to;\n};\n\nFitter.prototype.openFrontierNode = function openFrontierNode(type, attrs, content) {\n var top = this.frontier[this.depth];\n top.match = top.match.matchType(type);\n this.placed = addToFragment(this.placed, this.depth, Fragment.from(type.create(attrs, content)));\n this.frontier.push({\n type: type,\n match: type.contentMatch\n });\n};\n\nFitter.prototype.closeFrontierNode = function closeFrontierNode() {\n var open = this.frontier.pop();\n var add = open.match.fillBefore(Fragment.empty, true);\n\n if (add.childCount) {\n this.placed = addToFragment(this.placed, this.frontier.length, add);\n }\n};\n\nObject.defineProperties(Fitter.prototype, prototypeAccessors$1);\n\nfunction dropFromFragment(fragment, depth, count) {\n if (depth == 0) {\n return fragment.cutByIndex(count);\n }\n\n return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count)));\n}\n\nfunction addToFragment(fragment, depth, content) {\n if (depth == 0) {\n return fragment.append(content);\n }\n\n return fragment.replaceChild(fragment.childCount - 1, fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content)));\n}\n\nfunction contentAt(fragment, depth) {\n for (var i = 0; i < depth; i++) {\n fragment = fragment.firstChild.content;\n }\n\n return fragment;\n}\n\nfunction closeNodeStart(node, openStart, openEnd) {\n if (openStart <= 0) {\n return node;\n }\n\n var frag = node.content;\n\n if (openStart > 1) {\n frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0));\n }\n\n if (openStart > 0) {\n frag = node.type.contentMatch.fillBefore(frag).append(frag);\n\n if (openEnd <= 0) {\n frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment.empty, true));\n }\n }\n\n return node.copy(frag);\n}\n\nfunction contentAfterFits($to, depth, type, match, open) {\n var node = $to.node(depth),\n index = open ? $to.indexAfter(depth) : $to.index(depth);\n\n if (index == node.childCount && !type.compatibleContent(node.type)) {\n return null;\n }\n\n var fit = match.fillBefore(node.content, true, index);\n return fit && !invalidMarks(type, node.content, index) ? fit : null;\n}\n\nfunction invalidMarks(type, fragment, start) {\n for (var i = start; i < fragment.childCount; i++) {\n if (!type.allowsMarks(fragment.child(i).marks)) {\n return true;\n }\n }\n\n return false;\n} // :: (number, number, Slice) → this\n// Replace a range of the document with a given slice, using `from`,\n// `to`, and the slice's [`openStart`](#model.Slice.openStart) property\n// as hints, rather than fixed start and end points. This method may\n// grow the replaced area or close open nodes in the slice in order to\n// get a fit that is more in line with WYSIWYG expectations, by\n// dropping fully covered parent nodes of the replaced region when\n// they are marked [non-defining](#model.NodeSpec.defining), or\n// including an open parent node from the slice that _is_ marked as\n// [defining](#model.NodeSpec.defining).\n//\n// This is the method, for example, to handle paste. The similar\n// [`replace`](#transform.Transform.replace) method is a more\n// primitive tool which will _not_ move the start and end of its given\n// range, and is useful in situations where you need more precise\n// control over what happens.\n\n\nTransform.prototype.replaceRange = function (from, to, slice) {\n if (!slice.size) {\n return this.deleteRange(from, to);\n }\n\n var $from = this.doc.resolve(from),\n $to = this.doc.resolve(to);\n\n if (fitsTrivially($from, $to, slice)) {\n return this.step(new ReplaceStep(from, to, slice));\n }\n\n var targetDepths = coveredDepths($from, this.doc.resolve(to)); // Can't replace the whole document, so remove 0 if it's present\n\n if (targetDepths[targetDepths.length - 1] == 0) {\n targetDepths.pop();\n } // Negative numbers represent not expansion over the whole node at\n // that depth, but replacing from $from.before(-D) to $to.pos.\n\n\n var preferredTarget = -($from.depth + 1);\n targetDepths.unshift(preferredTarget); // This loop picks a preferred target depth, if one of the covering\n // depths is not outside of a defining node, and adds negative\n // depths for any depth that has $from at its start and does not\n // cross a defining node.\n\n for (var d = $from.depth, pos = $from.pos - 1; d > 0; d--, pos--) {\n var spec = $from.node(d).type.spec;\n\n if (spec.defining || spec.isolating) {\n break;\n }\n\n if (targetDepths.indexOf(d) > -1) {\n preferredTarget = d;\n } else if ($from.before(d) == pos) {\n targetDepths.splice(1, 0, -d);\n }\n } // Try to fit each possible depth of the slice into each possible\n // target depth, starting with the preferred depths.\n\n\n var preferredTargetIndex = targetDepths.indexOf(preferredTarget);\n var leftNodes = [],\n preferredDepth = slice.openStart;\n\n for (var content = slice.content, i = 0;; i++) {\n var node = content.firstChild;\n leftNodes.push(node);\n\n if (i == slice.openStart) {\n break;\n }\n\n content = node.content;\n } // Back up if the node directly above openStart, or the node above\n // that separated only by a non-defining textblock node, is defining.\n\n\n if (preferredDepth > 0 && leftNodes[preferredDepth - 1].type.spec.defining && $from.node(preferredTargetIndex).type != leftNodes[preferredDepth - 1].type) {\n preferredDepth -= 1;\n } else if (preferredDepth >= 2 && leftNodes[preferredDepth - 1].isTextblock && leftNodes[preferredDepth - 2].type.spec.defining && $from.node(preferredTargetIndex).type != leftNodes[preferredDepth - 2].type) {\n preferredDepth -= 2;\n }\n\n for (var j = slice.openStart; j >= 0; j--) {\n var openDepth = (j + preferredDepth + 1) % (slice.openStart + 1);\n var insert = leftNodes[openDepth];\n\n if (!insert) {\n continue;\n }\n\n for (var i$1 = 0; i$1 < targetDepths.length; i$1++) {\n // Loop over possible expansion levels, starting with the\n // preferred one\n var targetDepth = targetDepths[(i$1 + preferredTargetIndex) % targetDepths.length],\n expand = true;\n\n if (targetDepth < 0) {\n expand = false;\n targetDepth = -targetDepth;\n }\n\n var parent = $from.node(targetDepth - 1),\n index = $from.index(targetDepth - 1);\n\n if (parent.canReplaceWith(index, index, insert.type, insert.marks)) {\n return this.replace($from.before(targetDepth), expand ? $to.after(targetDepth) : to, new Slice(closeFragment(slice.content, 0, slice.openStart, openDepth), openDepth, slice.openEnd));\n }\n }\n }\n\n var startSteps = this.steps.length;\n\n for (var i$2 = targetDepths.length - 1; i$2 >= 0; i$2--) {\n this.replace(from, to, slice);\n\n if (this.steps.length > startSteps) {\n break;\n }\n\n var depth = targetDepths[i$2];\n\n if (i$2 < 0) {\n continue;\n }\n\n from = $from.before(depth);\n to = $to.after(depth);\n }\n\n return this;\n};\n\nfunction closeFragment(fragment, depth, oldOpen, newOpen, parent) {\n if (depth < oldOpen) {\n var first = fragment.firstChild;\n fragment = fragment.replaceChild(0, first.copy(closeFragment(first.content, depth + 1, oldOpen, newOpen, first)));\n }\n\n if (depth > newOpen) {\n var match = parent.contentMatchAt(0);\n var start = match.fillBefore(fragment).append(fragment);\n fragment = start.append(match.matchFragment(start).fillBefore(Fragment.empty, true));\n }\n\n return fragment;\n} // :: (number, number, Node) → this\n// Replace the given range with a node, but use `from` and `to` as\n// hints, rather than precise positions. When from and to are the same\n// and are at the start or end of a parent node in which the given\n// node doesn't fit, this method may _move_ them out towards a parent\n// that does allow the given node to be placed. When the given range\n// completely covers a parent node, this method may completely replace\n// that parent node.\n\n\nTransform.prototype.replaceRangeWith = function (from, to, node) {\n if (!node.isInline && from == to && this.doc.resolve(from).parent.content.size) {\n var point = insertPoint(this.doc, from, node.type);\n\n if (point != null) {\n from = to = point;\n }\n }\n\n return this.replaceRange(from, to, new Slice(Fragment.from(node), 0, 0));\n}; // :: (number, number) → this\n// Delete the given range, expanding it to cover fully covered\n// parent nodes until a valid replace is found.\n\n\nTransform.prototype.deleteRange = function (from, to) {\n var $from = this.doc.resolve(from),\n $to = this.doc.resolve(to);\n var covered = coveredDepths($from, $to);\n\n for (var i = 0; i < covered.length; i++) {\n var depth = covered[i],\n last = i == covered.length - 1;\n\n if (last && depth == 0 || $from.node(depth).type.contentMatch.validEnd) {\n return this[\"delete\"]($from.start(depth), $to.end(depth));\n }\n\n if (depth > 0 && (last || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1)))) {\n return this[\"delete\"]($from.before(depth), $to.after(depth));\n }\n }\n\n for (var d = 1; d <= $from.depth && d <= $to.depth; d++) {\n if (from - $from.start(d) == $from.depth - d && to > $from.end(d) && $to.end(d) - to != $to.depth - d) {\n return this[\"delete\"]($from.before(d), to);\n }\n }\n\n return this[\"delete\"](from, to);\n}; // : (ResolvedPos, ResolvedPos) → [number]\n// Returns an array of all depths for which $from - $to spans the\n// whole content of the nodes at that depth.\n\n\nfunction coveredDepths($from, $to) {\n var result = [],\n minDepth = Math.min($from.depth, $to.depth);\n\n for (var d = minDepth; d >= 0; d--) {\n var start = $from.start(d);\n\n if (start < $from.pos - ($from.depth - d) || $to.end(d) > $to.pos + ($to.depth - d) || $from.node(d).type.spec.isolating || $to.node(d).type.spec.isolating) {\n break;\n }\n\n if (start == $to.start(d)) {\n result.push(d);\n }\n }\n\n return result;\n}\n\nexport { AddMarkStep, MapResult, Mapping, RemoveMarkStep, ReplaceAroundStep, ReplaceStep, Step, StepMap, StepResult, Transform, TransformError, canJoin, canSplit, dropPoint, findWrapping, insertPoint, joinPoint, liftTarget, replaceStep };","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { Slice, Fragment, Mark, Node } from 'prosemirror-model';\nimport { ReplaceStep, ReplaceAroundStep, Transform } from 'prosemirror-transform';\nvar classesById = Object.create(null); // ::- Superclass for editor selections. Every selection type should\n// extend this. Should not be instantiated directly.\n\nvar Selection = function Selection($anchor, $head, ranges) {\n // :: [SelectionRange]\n // The ranges covered by the selection.\n this.ranges = ranges || [new SelectionRange($anchor.min($head), $anchor.max($head))]; // :: ResolvedPos\n // The resolved anchor of the selection (the side that stays in\n // place when the selection is modified).\n\n this.$anchor = $anchor; // :: ResolvedPos\n // The resolved head of the selection (the side that moves when\n // the selection is modified).\n\n this.$head = $head;\n};\n\nvar prototypeAccessors = {\n anchor: {\n configurable: true\n },\n head: {\n configurable: true\n },\n from: {\n configurable: true\n },\n to: {\n configurable: true\n },\n $from: {\n configurable: true\n },\n $to: {\n configurable: true\n },\n empty: {\n configurable: true\n }\n}; // :: number\n// The selection's anchor, as an unresolved position.\n\nprototypeAccessors.anchor.get = function () {\n return this.$anchor.pos;\n}; // :: number\n// The selection's head.\n\n\nprototypeAccessors.head.get = function () {\n return this.$head.pos;\n}; // :: number\n// The lower bound of the selection's main range.\n\n\nprototypeAccessors.from.get = function () {\n return this.$from.pos;\n}; // :: number\n// The upper bound of the selection's main range.\n\n\nprototypeAccessors.to.get = function () {\n return this.$to.pos;\n}; // :: ResolvedPos\n// The resolved lowerbound of the selection's main range.\n\n\nprototypeAccessors.$from.get = function () {\n return this.ranges[0].$from;\n}; // :: ResolvedPos\n// The resolved upper bound of the selection's main range.\n\n\nprototypeAccessors.$to.get = function () {\n return this.ranges[0].$to;\n}; // :: bool\n// Indicates whether the selection contains any content.\n\n\nprototypeAccessors.empty.get = function () {\n var ranges = this.ranges;\n\n for (var i = 0; i < ranges.length; i++) {\n if (ranges[i].$from.pos != ranges[i].$to.pos) {\n return false;\n }\n }\n\n return true;\n}; // eq:: (Selection) → bool\n// Test whether the selection is the same as another selection.\n// map:: (doc: Node, mapping: Mappable) → Selection\n// Map this selection through a [mappable](#transform.Mappable) thing. `doc`\n// should be the new document to which we are mapping.\n// :: () → Slice\n// Get the content of this selection as a slice.\n\n\nSelection.prototype.content = function content() {\n return this.$from.node(0).slice(this.from, this.to, true);\n}; // :: (Transaction, ?Slice)\n// Replace the selection with a slice or, if no slice is given,\n// delete the selection. Will append to the given transaction.\n\n\nSelection.prototype.replace = function replace(tr, content) {\n if (content === void 0) content = Slice.empty; // Put the new selection at the position after the inserted\n // content. When that ended in an inline node, search backwards,\n // to get the position after that node. If not, search forward.\n\n var lastNode = content.content.lastChild,\n lastParent = null;\n\n for (var i = 0; i < content.openEnd; i++) {\n lastParent = lastNode;\n lastNode = lastNode.lastChild;\n }\n\n var mapFrom = tr.steps.length,\n ranges = this.ranges;\n\n for (var i$1 = 0; i$1 < ranges.length; i$1++) {\n var ref = ranges[i$1];\n var $from = ref.$from;\n var $to = ref.$to;\n var mapping = tr.mapping.slice(mapFrom);\n tr.replaceRange(mapping.map($from.pos), mapping.map($to.pos), i$1 ? Slice.empty : content);\n\n if (i$1 == 0) {\n selectionToInsertionEnd(tr, mapFrom, (lastNode ? lastNode.isInline : lastParent && lastParent.isTextblock) ? -1 : 1);\n }\n }\n}; // :: (Transaction, Node)\n// Replace the selection with the given node, appending the changes\n// to the given transaction.\n\n\nSelection.prototype.replaceWith = function replaceWith(tr, node) {\n var mapFrom = tr.steps.length,\n ranges = this.ranges;\n\n for (var i = 0; i < ranges.length; i++) {\n var ref = ranges[i];\n var $from = ref.$from;\n var $to = ref.$to;\n var mapping = tr.mapping.slice(mapFrom);\n var from = mapping.map($from.pos),\n to = mapping.map($to.pos);\n\n if (i) {\n tr.deleteRange(from, to);\n } else {\n tr.replaceRangeWith(from, to, node);\n selectionToInsertionEnd(tr, mapFrom, node.isInline ? -1 : 1);\n }\n }\n}; // toJSON:: () → Object\n// Convert the selection to a JSON representation. When implementing\n// this for a custom selection class, make sure to give the object a\n// `type` property whose value matches the ID under which you\n// [registered](#state.Selection^jsonID) your class.\n// :: (ResolvedPos, number, ?bool) → ?Selection\n// Find a valid cursor or leaf node selection starting at the given\n// position and searching back if `dir` is negative, and forward if\n// positive. When `textOnly` is true, only consider cursor\n// selections. Will return null when no valid selection position is\n// found.\n\n\nSelection.findFrom = function findFrom($pos, dir, textOnly) {\n var inner = $pos.parent.inlineContent ? new TextSelection($pos) : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly);\n\n if (inner) {\n return inner;\n }\n\n for (var depth = $pos.depth - 1; depth >= 0; depth--) {\n var found = dir < 0 ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly) : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly);\n\n if (found) {\n return found;\n }\n }\n}; // :: (ResolvedPos, ?number) → Selection\n// Find a valid cursor or leaf node selection near the given\n// position. Searches forward first by default, but if `bias` is\n// negative, it will search backwards first.\n\n\nSelection.near = function near($pos, bias) {\n if (bias === void 0) bias = 1;\n return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0));\n}; // :: (Node) → Selection\n// Find the cursor or leaf node selection closest to the start of\n// the given document. Will return an\n// [`AllSelection`](#state.AllSelection) if no valid position\n// exists.\n\n\nSelection.atStart = function atStart(doc) {\n return findSelectionIn(doc, doc, 0, 0, 1) || new AllSelection(doc);\n}; // :: (Node) → Selection\n// Find the cursor or leaf node selection closest to the end of the\n// given document.\n\n\nSelection.atEnd = function atEnd(doc) {\n return findSelectionIn(doc, doc, doc.content.size, doc.childCount, -1) || new AllSelection(doc);\n}; // :: (Node, Object) → Selection\n// Deserialize the JSON representation of a selection. Must be\n// implemented for custom classes (as a static class method).\n\n\nSelection.fromJSON = function fromJSON(doc, json) {\n if (!json || !json.type) {\n throw new RangeError(\"Invalid input for Selection.fromJSON\");\n }\n\n var cls = classesById[json.type];\n\n if (!cls) {\n throw new RangeError(\"No selection type \" + json.type + \" defined\");\n }\n\n return cls.fromJSON(doc, json);\n}; // :: (string, constructor<Selection>)\n// To be able to deserialize selections from JSON, custom selection\n// classes must register themselves with an ID string, so that they\n// can be disambiguated. Try to pick something that's unlikely to\n// clash with classes from other modules.\n\n\nSelection.jsonID = function jsonID(id, selectionClass) {\n if (id in classesById) {\n throw new RangeError(\"Duplicate use of selection JSON ID \" + id);\n }\n\n classesById[id] = selectionClass;\n selectionClass.prototype.jsonID = id;\n return selectionClass;\n}; // :: () → SelectionBookmark\n// Get a [bookmark](#state.SelectionBookmark) for this selection,\n// which is a value that can be mapped without having access to a\n// current document, and later resolved to a real selection for a\n// given document again. (This is used mostly by the history to\n// track and restore old selections.) The default implementation of\n// this method just converts the selection to a text selection and\n// returns the bookmark for that.\n\n\nSelection.prototype.getBookmark = function getBookmark() {\n return TextSelection.between(this.$anchor, this.$head).getBookmark();\n};\n\nObject.defineProperties(Selection.prototype, prototypeAccessors); // :: bool\n// Controls whether, when a selection of this type is active in the\n// browser, the selected range should be visible to the user. Defaults\n// to `true`.\n\nSelection.prototype.visible = true; // SelectionBookmark:: interface\n// A lightweight, document-independent representation of a selection.\n// You can define a custom bookmark type for a custom selection class\n// to make the history handle it well.\n//\n// map:: (mapping: Mapping) → SelectionBookmark\n// Map the bookmark through a set of changes.\n//\n// resolve:: (doc: Node) → Selection\n// Resolve the bookmark to a real selection again. This may need to\n// do some error checking and may fall back to a default (usually\n// [`TextSelection.between`](#state.TextSelection^between)) if\n// mapping made the bookmark invalid.\n// ::- Represents a selected range in a document.\n\nvar SelectionRange = function SelectionRange($from, $to) {\n // :: ResolvedPos\n // The lower bound of the range.\n this.$from = $from; // :: ResolvedPos\n // The upper bound of the range.\n\n this.$to = $to;\n}; // ::- A text selection represents a classical editor selection, with\n// a head (the moving side) and anchor (immobile side), both of which\n// point into textblock nodes. It can be empty (a regular cursor\n// position).\n\n\nvar TextSelection = /*@__PURE__*/function (Selection) {\n function TextSelection($anchor, $head) {\n if ($head === void 0) $head = $anchor;\n Selection.call(this, $anchor, $head);\n }\n\n if (Selection) TextSelection.__proto__ = Selection;\n TextSelection.prototype = Object.create(Selection && Selection.prototype);\n TextSelection.prototype.constructor = TextSelection;\n var prototypeAccessors$1 = {\n $cursor: {\n configurable: true\n }\n }; // :: ?ResolvedPos\n // Returns a resolved position if this is a cursor selection (an\n // empty text selection), and null otherwise.\n\n prototypeAccessors$1.$cursor.get = function () {\n return this.$anchor.pos == this.$head.pos ? this.$head : null;\n };\n\n TextSelection.prototype.map = function map(doc, mapping) {\n var $head = doc.resolve(mapping.map(this.head));\n\n if (!$head.parent.inlineContent) {\n return Selection.near($head);\n }\n\n var $anchor = doc.resolve(mapping.map(this.anchor));\n return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head);\n };\n\n TextSelection.prototype.replace = function replace(tr, content) {\n if (content === void 0) content = Slice.empty;\n Selection.prototype.replace.call(this, tr, content);\n\n if (content == Slice.empty) {\n var marks = this.$from.marksAcross(this.$to);\n\n if (marks) {\n tr.ensureMarks(marks);\n }\n }\n };\n\n TextSelection.prototype.eq = function eq(other) {\n return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head;\n };\n\n TextSelection.prototype.getBookmark = function getBookmark() {\n return new TextBookmark(this.anchor, this.head);\n };\n\n TextSelection.prototype.toJSON = function toJSON() {\n return {\n type: \"text\",\n anchor: this.anchor,\n head: this.head\n };\n };\n\n TextSelection.fromJSON = function fromJSON(doc, json) {\n if (typeof json.anchor != \"number\" || typeof json.head != \"number\") {\n throw new RangeError(\"Invalid input for TextSelection.fromJSON\");\n }\n\n return new TextSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n }; // :: (Node, number, ?number) → TextSelection\n // Create a text selection from non-resolved positions.\n\n\n TextSelection.create = function create(doc, anchor, head) {\n if (head === void 0) head = anchor;\n var $anchor = doc.resolve(anchor);\n return new this($anchor, head == anchor ? $anchor : doc.resolve(head));\n }; // :: (ResolvedPos, ResolvedPos, ?number) → Selection\n // Return a text selection that spans the given positions or, if\n // they aren't text positions, find a text selection near them.\n // `bias` determines whether the method searches forward (default)\n // or backwards (negative number) first. Will fall back to calling\n // [`Selection.near`](#state.Selection^near) when the document\n // doesn't contain a valid text position.\n\n\n TextSelection.between = function between($anchor, $head, bias) {\n var dPos = $anchor.pos - $head.pos;\n\n if (!bias || dPos) {\n bias = dPos >= 0 ? 1 : -1;\n }\n\n if (!$head.parent.inlineContent) {\n var found = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true);\n\n if (found) {\n $head = found.$head;\n } else {\n return Selection.near($head, bias);\n }\n }\n\n if (!$anchor.parent.inlineContent) {\n if (dPos == 0) {\n $anchor = $head;\n } else {\n $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor;\n\n if ($anchor.pos < $head.pos != dPos < 0) {\n $anchor = $head;\n }\n }\n }\n\n return new TextSelection($anchor, $head);\n };\n\n Object.defineProperties(TextSelection.prototype, prototypeAccessors$1);\n return TextSelection;\n}(Selection);\n\nSelection.jsonID(\"text\", TextSelection);\n\nvar TextBookmark = function TextBookmark(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n};\n\nTextBookmark.prototype.map = function map(mapping) {\n return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head));\n};\n\nTextBookmark.prototype.resolve = function resolve(doc) {\n return TextSelection.between(doc.resolve(this.anchor), doc.resolve(this.head));\n}; // ::- A node selection is a selection that points at a single node.\n// All nodes marked [selectable](#model.NodeSpec.selectable) can be\n// the target of a node selection. In such a selection, `from` and\n// `to` point directly before and after the selected node, `anchor`\n// equals `from`, and `head` equals `to`..\n\n\nvar NodeSelection = /*@__PURE__*/function (Selection) {\n function NodeSelection($pos) {\n var node = $pos.nodeAfter;\n var $end = $pos.node(0).resolve($pos.pos + node.nodeSize);\n Selection.call(this, $pos, $end); // :: Node The selected node.\n\n this.node = node;\n }\n\n if (Selection) NodeSelection.__proto__ = Selection;\n NodeSelection.prototype = Object.create(Selection && Selection.prototype);\n NodeSelection.prototype.constructor = NodeSelection;\n\n NodeSelection.prototype.map = function map(doc, mapping) {\n var ref = mapping.mapResult(this.anchor);\n var deleted = ref.deleted;\n var pos = ref.pos;\n var $pos = doc.resolve(pos);\n\n if (deleted) {\n return Selection.near($pos);\n }\n\n return new NodeSelection($pos);\n };\n\n NodeSelection.prototype.content = function content() {\n return new Slice(Fragment.from(this.node), 0, 0);\n };\n\n NodeSelection.prototype.eq = function eq(other) {\n return other instanceof NodeSelection && other.anchor == this.anchor;\n };\n\n NodeSelection.prototype.toJSON = function toJSON() {\n return {\n type: \"node\",\n anchor: this.anchor\n };\n };\n\n NodeSelection.prototype.getBookmark = function getBookmark() {\n return new NodeBookmark(this.anchor);\n };\n\n NodeSelection.fromJSON = function fromJSON(doc, json) {\n if (typeof json.anchor != \"number\") {\n throw new RangeError(\"Invalid input for NodeSelection.fromJSON\");\n }\n\n return new NodeSelection(doc.resolve(json.anchor));\n }; // :: (Node, number) → NodeSelection\n // Create a node selection from non-resolved positions.\n\n\n NodeSelection.create = function create(doc, from) {\n return new this(doc.resolve(from));\n }; // :: (Node) → bool\n // Determines whether the given node may be selected as a node\n // selection.\n\n\n NodeSelection.isSelectable = function isSelectable(node) {\n return !node.isText && node.type.spec.selectable !== false;\n };\n\n return NodeSelection;\n}(Selection);\n\nNodeSelection.prototype.visible = false;\nSelection.jsonID(\"node\", NodeSelection);\n\nvar NodeBookmark = function NodeBookmark(anchor) {\n this.anchor = anchor;\n};\n\nNodeBookmark.prototype.map = function map(mapping) {\n var ref = mapping.mapResult(this.anchor);\n var deleted = ref.deleted;\n var pos = ref.pos;\n return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos);\n};\n\nNodeBookmark.prototype.resolve = function resolve(doc) {\n var $pos = doc.resolve(this.anchor),\n node = $pos.nodeAfter;\n\n if (node && NodeSelection.isSelectable(node)) {\n return new NodeSelection($pos);\n }\n\n return Selection.near($pos);\n}; // ::- A selection type that represents selecting the whole document\n// (which can not necessarily be expressed with a text selection, when\n// there are for example leaf block nodes at the start or end of the\n// document).\n\n\nvar AllSelection = /*@__PURE__*/function (Selection) {\n function AllSelection(doc) {\n Selection.call(this, doc.resolve(0), doc.resolve(doc.content.size));\n }\n\n if (Selection) AllSelection.__proto__ = Selection;\n AllSelection.prototype = Object.create(Selection && Selection.prototype);\n AllSelection.prototype.constructor = AllSelection;\n\n AllSelection.prototype.replace = function replace(tr, content) {\n if (content === void 0) content = Slice.empty;\n\n if (content == Slice.empty) {\n tr[\"delete\"](0, tr.doc.content.size);\n var sel = Selection.atStart(tr.doc);\n\n if (!sel.eq(tr.selection)) {\n tr.setSelection(sel);\n }\n } else {\n Selection.prototype.replace.call(this, tr, content);\n }\n };\n\n AllSelection.prototype.toJSON = function toJSON() {\n return {\n type: \"all\"\n };\n };\n\n AllSelection.fromJSON = function fromJSON(doc) {\n return new AllSelection(doc);\n };\n\n AllSelection.prototype.map = function map(doc) {\n return new AllSelection(doc);\n };\n\n AllSelection.prototype.eq = function eq(other) {\n return other instanceof AllSelection;\n };\n\n AllSelection.prototype.getBookmark = function getBookmark() {\n return AllBookmark;\n };\n\n return AllSelection;\n}(Selection);\n\nSelection.jsonID(\"all\", AllSelection);\nvar AllBookmark = {\n map: function map() {\n return this;\n },\n resolve: function resolve(doc) {\n return new AllSelection(doc);\n }\n}; // FIXME we'll need some awareness of text direction when scanning for selections\n// Try to find a selection inside the given node. `pos` points at the\n// position where the search starts. When `text` is true, only return\n// text selections.\n\nfunction findSelectionIn(doc, node, pos, index, dir, text) {\n if (node.inlineContent) {\n return TextSelection.create(doc, pos);\n }\n\n for (var i = index - (dir > 0 ? 0 : 1); dir > 0 ? i < node.childCount : i >= 0; i += dir) {\n var child = node.child(i);\n\n if (!child.isAtom) {\n var inner = findSelectionIn(doc, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text);\n\n if (inner) {\n return inner;\n }\n } else if (!text && NodeSelection.isSelectable(child)) {\n return NodeSelection.create(doc, pos - (dir < 0 ? child.nodeSize : 0));\n }\n\n pos += child.nodeSize * dir;\n }\n}\n\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n var last = tr.steps.length - 1;\n\n if (last < startLen) {\n return;\n }\n\n var step = tr.steps[last];\n\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) {\n return;\n }\n\n var map = tr.mapping.maps[last],\n end;\n map.forEach(function (_from, _to, _newFrom, newTo) {\n if (end == null) {\n end = newTo;\n }\n });\n tr.setSelection(Selection.near(tr.doc.resolve(end), bias));\n}\n\nvar UPDATED_SEL = 1,\n UPDATED_MARKS = 2,\n UPDATED_SCROLL = 4; // ::- An editor state transaction, which can be applied to a state to\n// create an updated state. Use\n// [`EditorState.tr`](#state.EditorState.tr) to create an instance.\n//\n// Transactions track changes to the document (they are a subclass of\n// [`Transform`](#transform.Transform)), but also other state changes,\n// like selection updates and adjustments of the set of [stored\n// marks](#state.EditorState.storedMarks). In addition, you can store\n// metadata properties in a transaction, which are extra pieces of\n// information that client code or plugins can use to describe what a\n// transacion represents, so that they can update their [own\n// state](#state.StateField) accordingly.\n//\n// The [editor view](#view.EditorView) uses a few metadata properties:\n// it will attach a property `\"pointer\"` with the value `true` to\n// selection transactions directly caused by mouse or touch input, and\n// a `\"uiEvent\"` property of that may be `\"paste\"`, `\"cut\"`, or `\"drop\"`.\n\nvar Transaction = /*@__PURE__*/function (Transform) {\n function Transaction(state) {\n Transform.call(this, state.doc); // :: number\n // The timestamp associated with this transaction, in the same\n // format as `Date.now()`.\n\n this.time = Date.now();\n this.curSelection = state.selection; // The step count for which the current selection is valid.\n\n this.curSelectionFor = 0; // :: ?[Mark]\n // The stored marks set by this transaction, if any.\n\n this.storedMarks = state.storedMarks; // Bitfield to track which aspects of the state were updated by\n // this transaction.\n\n this.updated = 0; // Object used to store metadata properties for the transaction.\n\n this.meta = Object.create(null);\n }\n\n if (Transform) Transaction.__proto__ = Transform;\n Transaction.prototype = Object.create(Transform && Transform.prototype);\n Transaction.prototype.constructor = Transaction;\n var prototypeAccessors = {\n selection: {\n configurable: true\n },\n selectionSet: {\n configurable: true\n },\n storedMarksSet: {\n configurable: true\n },\n isGeneric: {\n configurable: true\n },\n scrolledIntoView: {\n configurable: true\n }\n }; // :: Selection\n // The transaction's current selection. This defaults to the editor\n // selection [mapped](#state.Selection.map) through the steps in the\n // transaction, but can be overwritten with\n // [`setSelection`](#state.Transaction.setSelection).\n\n prototypeAccessors.selection.get = function () {\n if (this.curSelectionFor < this.steps.length) {\n this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor));\n this.curSelectionFor = this.steps.length;\n }\n\n return this.curSelection;\n }; // :: (Selection) → Transaction\n // Update the transaction's current selection. Will determine the\n // selection that the editor gets when the transaction is applied.\n\n\n Transaction.prototype.setSelection = function setSelection(selection) {\n if (selection.$from.doc != this.doc) {\n throw new RangeError(\"Selection passed to setSelection must point at the current document\");\n }\n\n this.curSelection = selection;\n this.curSelectionFor = this.steps.length;\n this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS;\n this.storedMarks = null;\n return this;\n }; // :: bool\n // Whether the selection was explicitly updated by this transaction.\n\n\n prototypeAccessors.selectionSet.get = function () {\n return (this.updated & UPDATED_SEL) > 0;\n }; // :: (?[Mark]) → Transaction\n // Set the current stored marks.\n\n\n Transaction.prototype.setStoredMarks = function setStoredMarks(marks) {\n this.storedMarks = marks;\n this.updated |= UPDATED_MARKS;\n return this;\n }; // :: ([Mark]) → Transaction\n // Make sure the current stored marks or, if that is null, the marks\n // at the selection, match the given set of marks. Does nothing if\n // this is already the case.\n\n\n Transaction.prototype.ensureMarks = function ensureMarks(marks) {\n if (!Mark.sameSet(this.storedMarks || this.selection.$from.marks(), marks)) {\n this.setStoredMarks(marks);\n }\n\n return this;\n }; // :: (Mark) → Transaction\n // Add a mark to the set of stored marks.\n\n\n Transaction.prototype.addStoredMark = function addStoredMark(mark) {\n return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks()));\n }; // :: (union<Mark, MarkType>) → Transaction\n // Remove a mark or mark type from the set of stored marks.\n\n\n Transaction.prototype.removeStoredMark = function removeStoredMark(mark) {\n return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks()));\n }; // :: bool\n // Whether the stored marks were explicitly set for this transaction.\n\n\n prototypeAccessors.storedMarksSet.get = function () {\n return (this.updated & UPDATED_MARKS) > 0;\n };\n\n Transaction.prototype.addStep = function addStep(step, doc) {\n Transform.prototype.addStep.call(this, step, doc);\n this.updated = this.updated & ~UPDATED_MARKS;\n this.storedMarks = null;\n }; // :: (number) → Transaction\n // Update the timestamp for the transaction.\n\n\n Transaction.prototype.setTime = function setTime(time) {\n this.time = time;\n return this;\n }; // :: (Slice) → Transaction\n // Replace the current selection with the given slice.\n\n\n Transaction.prototype.replaceSelection = function replaceSelection(slice) {\n this.selection.replace(this, slice);\n return this;\n }; // :: (Node, ?bool) → Transaction\n // Replace the selection with the given node. When `inheritMarks` is\n // true and the content is inline, it inherits the marks from the\n // place where it is inserted.\n\n\n Transaction.prototype.replaceSelectionWith = function replaceSelectionWith(node, inheritMarks) {\n var selection = this.selection;\n\n if (inheritMarks !== false) {\n node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : selection.$from.marksAcross(selection.$to) || Mark.none));\n }\n\n selection.replaceWith(this, node);\n return this;\n }; // :: () → Transaction\n // Delete the selection.\n\n\n Transaction.prototype.deleteSelection = function deleteSelection() {\n this.selection.replace(this);\n return this;\n }; // :: (string, from: ?number, to: ?number) → Transaction\n // Replace the given range, or the selection if no range is given,\n // with a text node containing the given string.\n\n\n Transaction.prototype.insertText = function insertText(text, from, to) {\n if (to === void 0) to = from;\n var schema = this.doc.type.schema;\n\n if (from == null) {\n if (!text) {\n return this.deleteSelection();\n }\n\n return this.replaceSelectionWith(schema.text(text), true);\n } else {\n if (!text) {\n return this.deleteRange(from, to);\n }\n\n var marks = this.storedMarks;\n\n if (!marks) {\n var $from = this.doc.resolve(from);\n marks = to == from ? $from.marks() : $from.marksAcross(this.doc.resolve(to));\n }\n\n this.replaceRangeWith(from, to, schema.text(text, marks));\n\n if (!this.selection.empty) {\n this.setSelection(Selection.near(this.selection.$to));\n }\n\n return this;\n }\n }; // :: (union<string, Plugin, PluginKey>, any) → Transaction\n // Store a metadata property in this transaction, keyed either by\n // name or by plugin.\n\n\n Transaction.prototype.setMeta = function setMeta(key, value) {\n this.meta[typeof key == \"string\" ? key : key.key] = value;\n return this;\n }; // :: (union<string, Plugin, PluginKey>) → any\n // Retrieve a metadata property for a given name or plugin.\n\n\n Transaction.prototype.getMeta = function getMeta(key) {\n return this.meta[typeof key == \"string\" ? key : key.key];\n }; // :: bool\n // Returns true if this transaction doesn't contain any metadata,\n // and can thus safely be extended.\n\n\n prototypeAccessors.isGeneric.get = function () {\n for (var _ in this.meta) {\n return false;\n }\n\n return true;\n }; // :: () → Transaction\n // Indicate that the editor should scroll the selection into view\n // when updated to the state produced by this transaction.\n\n\n Transaction.prototype.scrollIntoView = function scrollIntoView() {\n this.updated |= UPDATED_SCROLL;\n return this;\n };\n\n prototypeAccessors.scrolledIntoView.get = function () {\n return (this.updated & UPDATED_SCROLL) > 0;\n };\n\n Object.defineProperties(Transaction.prototype, prototypeAccessors);\n return Transaction;\n}(Transform);\n\nfunction bind(f, self) {\n return !self || !f ? f : f.bind(self);\n}\n\nvar FieldDesc = function FieldDesc(name, desc, self) {\n this.name = name;\n this.init = bind(desc.init, self);\n this.apply = bind(desc.apply, self);\n};\n\nvar baseFields = [new FieldDesc(\"doc\", {\n init: function init(config) {\n return config.doc || config.schema.topNodeType.createAndFill();\n },\n apply: function apply(tr) {\n return tr.doc;\n }\n}), new FieldDesc(\"selection\", {\n init: function init(config, instance) {\n return config.selection || Selection.atStart(instance.doc);\n },\n apply: function apply(tr) {\n return tr.selection;\n }\n}), new FieldDesc(\"storedMarks\", {\n init: function init(config) {\n return config.storedMarks || null;\n },\n apply: function apply(tr, _marks, _old, state) {\n return state.selection.$cursor ? tr.storedMarks : null;\n }\n}), new FieldDesc(\"scrollToSelection\", {\n init: function init() {\n return 0;\n },\n apply: function apply(tr, prev) {\n return tr.scrolledIntoView ? prev + 1 : prev;\n }\n})]; // Object wrapping the part of a state object that stays the same\n// across transactions. Stored in the state's `config` property.\n\nvar Configuration = function Configuration(schema, plugins) {\n var this$1 = this;\n this.schema = schema;\n this.fields = baseFields.concat();\n this.plugins = [];\n this.pluginsByKey = Object.create(null);\n\n if (plugins) {\n plugins.forEach(function (plugin) {\n if (this$1.pluginsByKey[plugin.key]) {\n throw new RangeError(\"Adding different instances of a keyed plugin (\" + plugin.key + \")\");\n }\n\n this$1.plugins.push(plugin);\n this$1.pluginsByKey[plugin.key] = plugin;\n\n if (plugin.spec.state) {\n this$1.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin));\n }\n });\n }\n}; // ::- The state of a ProseMirror editor is represented by an object\n// of this type. A state is a persistent data structure—it isn't\n// updated, but rather a new state value is computed from an old one\n// using the [`apply`](#state.EditorState.apply) method.\n//\n// A state holds a number of built-in fields, and plugins can\n// [define](#state.PluginSpec.state) additional fields.\n\n\nvar EditorState = function EditorState(config) {\n this.config = config;\n};\n\nvar prototypeAccessors$1 = {\n schema: {\n configurable: true\n },\n plugins: {\n configurable: true\n },\n tr: {\n configurable: true\n }\n}; // doc:: Node\n// The current document.\n// selection:: Selection\n// The selection.\n// storedMarks:: ?[Mark]\n// A set of marks to apply to the next input. Will be null when\n// no explicit marks have been set.\n// :: Schema\n// The schema of the state's document.\n\nprototypeAccessors$1.schema.get = function () {\n return this.config.schema;\n}; // :: [Plugin]\n// The plugins that are active in this state.\n\n\nprototypeAccessors$1.plugins.get = function () {\n return this.config.plugins;\n}; // :: (Transaction) → EditorState\n// Apply the given transaction to produce a new state.\n\n\nEditorState.prototype.apply = function apply(tr) {\n return this.applyTransaction(tr).state;\n}; // : (Transaction) → bool\n\n\nEditorState.prototype.filterTransaction = function filterTransaction(tr, ignore) {\n if (ignore === void 0) ignore = -1;\n\n for (var i = 0; i < this.config.plugins.length; i++) {\n if (i != ignore) {\n var plugin = this.config.plugins[i];\n\n if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr, this)) {\n return false;\n }\n }\n }\n\n return true;\n}; // :: (Transaction) → {state: EditorState, transactions: [Transaction]}\n// Verbose variant of [`apply`](#state.EditorState.apply) that\n// returns the precise transactions that were applied (which might\n// be influenced by the [transaction\n// hooks](#state.PluginSpec.filterTransaction) of\n// plugins) along with the new state.\n\n\nEditorState.prototype.applyTransaction = function applyTransaction(rootTr) {\n if (!this.filterTransaction(rootTr)) {\n return {\n state: this,\n transactions: []\n };\n }\n\n var trs = [rootTr],\n newState = this.applyInner(rootTr),\n seen = null; // This loop repeatedly gives plugins a chance to respond to\n // transactions as new transactions are added, making sure to only\n // pass the transactions the plugin did not see before.\n\n for (;;) {\n var haveNew = false;\n\n for (var i = 0; i < this.config.plugins.length; i++) {\n var plugin = this.config.plugins[i];\n\n if (plugin.spec.appendTransaction) {\n var n = seen ? seen[i].n : 0,\n oldState = seen ? seen[i].state : this;\n var tr = n < trs.length && plugin.spec.appendTransaction.call(plugin, n ? trs.slice(n) : trs, oldState, newState);\n\n if (tr && newState.filterTransaction(tr, i)) {\n tr.setMeta(\"appendedTransaction\", rootTr);\n\n if (!seen) {\n seen = [];\n\n for (var j = 0; j < this.config.plugins.length; j++) {\n seen.push(j < i ? {\n state: newState,\n n: trs.length\n } : {\n state: this,\n n: 0\n });\n }\n }\n\n trs.push(tr);\n newState = newState.applyInner(tr);\n haveNew = true;\n }\n\n if (seen) {\n seen[i] = {\n state: newState,\n n: trs.length\n };\n }\n }\n }\n\n if (!haveNew) {\n return {\n state: newState,\n transactions: trs\n };\n }\n }\n}; // : (Transaction) → EditorState\n\n\nEditorState.prototype.applyInner = function applyInner(tr) {\n if (!tr.before.eq(this.doc)) {\n throw new RangeError(\"Applying a mismatched transaction\");\n }\n\n var newInstance = new EditorState(this.config),\n fields = this.config.fields;\n\n for (var i = 0; i < fields.length; i++) {\n var field = fields[i];\n newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance);\n }\n\n for (var i$1 = 0; i$1 < applyListeners.length; i$1++) {\n applyListeners[i$1](this, tr, newInstance);\n }\n\n return newInstance;\n}; // :: Transaction\n// Start a [transaction](#state.Transaction) from this state.\n\n\nprototypeAccessors$1.tr.get = function () {\n return new Transaction(this);\n}; // :: (Object) → EditorState\n// Create a new state.\n//\n// config::- Configuration options. Must contain `schema` or `doc` (or both).\n//\n// schema:: ?Schema\n// The schema to use (only relevant if no `doc` is specified).\n//\n// doc:: ?Node\n// The starting document.\n//\n// selection:: ?Selection\n// A valid selection in the document.\n//\n// storedMarks:: ?[Mark]\n// The initial set of [stored marks](#state.EditorState.storedMarks).\n//\n// plugins:: ?[Plugin]\n// The plugins that should be active in this state.\n\n\nEditorState.create = function create(config) {\n var $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins);\n var instance = new EditorState($config);\n\n for (var i = 0; i < $config.fields.length; i++) {\n instance[$config.fields[i].name] = $config.fields[i].init(config, instance);\n }\n\n return instance;\n}; // :: (Object) → EditorState\n// Create a new state based on this one, but with an adjusted set of\n// active plugins. State fields that exist in both sets of plugins\n// are kept unchanged. Those that no longer exist are dropped, and\n// those that are new are initialized using their\n// [`init`](#state.StateField.init) method, passing in the new\n// configuration object..\n//\n// config::- configuration options\n//\n// plugins:: [Plugin]\n// New set of active plugins.\n\n\nEditorState.prototype.reconfigure = function reconfigure(config) {\n var $config = new Configuration(this.schema, config.plugins);\n var fields = $config.fields,\n instance = new EditorState($config);\n\n for (var i = 0; i < fields.length; i++) {\n var name = fields[i].name;\n instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance);\n }\n\n return instance;\n}; // :: (?union<Object<Plugin>, string, number>) → Object\n// Serialize this state to JSON. If you want to serialize the state\n// of plugins, pass an object mapping property names to use in the\n// resulting JSON object to plugin objects. The argument may also be\n// a string or number, in which case it is ignored, to support the\n// way `JSON.stringify` calls `toString` methods.\n\n\nEditorState.prototype.toJSON = function toJSON(pluginFields) {\n var result = {\n doc: this.doc.toJSON(),\n selection: this.selection.toJSON()\n };\n\n if (this.storedMarks) {\n result.storedMarks = this.storedMarks.map(function (m) {\n return m.toJSON();\n });\n }\n\n if (pluginFields && _typeof(pluginFields) == 'object') {\n for (var prop in pluginFields) {\n if (prop == \"doc\" || prop == \"selection\") {\n throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\");\n }\n\n var plugin = pluginFields[prop],\n state = plugin.spec.state;\n\n if (state && state.toJSON) {\n result[prop] = state.toJSON.call(plugin, this[plugin.key]);\n }\n }\n }\n\n return result;\n}; // :: (Object, Object, ?Object<Plugin>) → EditorState\n// Deserialize a JSON representation of a state. `config` should\n// have at least a `schema` field, and should contain array of\n// plugins to initialize the state with. `pluginFields` can be used\n// to deserialize the state of plugins, by associating plugin\n// instances with the property names they use in the JSON object.\n//\n// config::- configuration options\n//\n// schema:: Schema\n// The schema to use.\n//\n// plugins:: ?[Plugin]\n// The set of active plugins.\n\n\nEditorState.fromJSON = function fromJSON(config, json, pluginFields) {\n if (!json) {\n throw new RangeError(\"Invalid input for EditorState.fromJSON\");\n }\n\n if (!config.schema) {\n throw new RangeError(\"Required config field 'schema' missing\");\n }\n\n var $config = new Configuration(config.schema, config.plugins);\n var instance = new EditorState($config);\n $config.fields.forEach(function (field) {\n if (field.name == \"doc\") {\n instance.doc = Node.fromJSON(config.schema, json.doc);\n } else if (field.name == \"selection\") {\n instance.selection = Selection.fromJSON(instance.doc, json.selection);\n } else if (field.name == \"storedMarks\") {\n if (json.storedMarks) {\n instance.storedMarks = json.storedMarks.map(config.schema.markFromJSON);\n }\n } else {\n if (pluginFields) {\n for (var prop in pluginFields) {\n var plugin = pluginFields[prop],\n state = plugin.spec.state;\n\n if (plugin.key == field.name && state && state.fromJSON && Object.prototype.hasOwnProperty.call(json, prop)) {\n // This field belongs to a plugin mapped to a JSON field, read it from there.\n instance[field.name] = state.fromJSON.call(plugin, config, json[prop], instance);\n return;\n }\n }\n }\n\n instance[field.name] = field.init(config, instance);\n }\n });\n return instance;\n}; // Kludge to allow the view to track mappings between different\n// instances of a state.\n//\n// FIXME this is no longer needed as of prosemirror-view 1.9.0,\n// though due to backwards-compat we should probably keep it around\n// for a while (if only as a no-op)\n\n\nEditorState.addApplyListener = function addApplyListener(f) {\n applyListeners.push(f);\n};\n\nEditorState.removeApplyListener = function removeApplyListener(f) {\n var found = applyListeners.indexOf(f);\n\n if (found > -1) {\n applyListeners.splice(found, 1);\n }\n};\n\nObject.defineProperties(EditorState.prototype, prototypeAccessors$1);\nvar applyListeners = []; // PluginSpec:: interface\n//\n// This is the type passed to the [`Plugin`](#state.Plugin)\n// constructor. It provides a definition for a plugin.\n//\n// props:: ?EditorProps\n// The [view props](#view.EditorProps) added by this plugin. Props\n// that are functions will be bound to have the plugin instance as\n// their `this` binding.\n//\n// state:: ?StateField<any>\n// Allows a plugin to define a [state field](#state.StateField), an\n// extra slot in the state object in which it can keep its own data.\n//\n// key:: ?PluginKey\n// Can be used to make this a keyed plugin. You can have only one\n// plugin with a given key in a given state, but it is possible to\n// access the plugin's configuration and state through the key,\n// without having access to the plugin instance object.\n//\n// view:: ?(EditorView) → Object\n// When the plugin needs to interact with the editor view, or\n// set something up in the DOM, use this field. The function\n// will be called when the plugin's state is associated with an\n// editor view.\n//\n// return::-\n// Should return an object with the following optional\n// properties:\n//\n// update:: ?(view: EditorView, prevState: EditorState)\n// Called whenever the view's state is updated.\n//\n// destroy:: ?()\n// Called when the view is destroyed or receives a state\n// with different plugins.\n//\n// filterTransaction:: ?(Transaction, EditorState) → bool\n// When present, this will be called before a transaction is\n// applied by the state, allowing the plugin to cancel it (by\n// returning false).\n//\n// appendTransaction:: ?(transactions: [Transaction], oldState: EditorState, newState: EditorState) → ?Transaction\n// Allows the plugin to append another transaction to be applied\n// after the given array of transactions. When another plugin\n// appends a transaction after this was called, it is called again\n// with the new state and new transactions—but only the new\n// transactions, i.e. it won't be passed transactions that it\n// already saw.\n\nfunction bindProps(obj, self, target) {\n for (var prop in obj) {\n var val = obj[prop];\n\n if (val instanceof Function) {\n val = val.bind(self);\n } else if (prop == \"handleDOMEvents\") {\n val = bindProps(val, self, {});\n }\n\n target[prop] = val;\n }\n\n return target;\n} // ::- Plugins bundle functionality that can be added to an editor.\n// They are part of the [editor state](#state.EditorState) and\n// may influence that state and the view that contains it.\n\n\nvar Plugin = function Plugin(spec) {\n // :: EditorProps\n // The [props](#view.EditorProps) exported by this plugin.\n this.props = {};\n\n if (spec.props) {\n bindProps(spec.props, this, this.props);\n } // :: Object\n // The plugin's [spec object](#state.PluginSpec).\n\n\n this.spec = spec;\n this.key = spec.key ? spec.key.key : createKey(\"plugin\");\n}; // :: (EditorState) → any\n// Extract the plugin's state field from an editor state.\n\n\nPlugin.prototype.getState = function getState(state) {\n return state[this.key];\n}; // StateField:: interface<T>\n// A plugin spec may provide a state field (under its\n// [`state`](#state.PluginSpec.state) property) of this type, which\n// describes the state it wants to keep. Functions provided here are\n// always called with the plugin instance as their `this` binding.\n//\n// init:: (config: Object, instance: EditorState) → T\n// Initialize the value of the field. `config` will be the object\n// passed to [`EditorState.create`](#state.EditorState^create). Note\n// that `instance` is a half-initialized state instance, and will\n// not have values for plugin fields initialized after this one.\n//\n// apply:: (tr: Transaction, value: T, oldState: EditorState, newState: EditorState) → T\n// Apply the given transaction to this state field, producing a new\n// field value. Note that the `newState` argument is again a partially\n// constructed state does not yet contain the state from plugins\n// coming after this one.\n//\n// toJSON:: ?(value: T) → *\n// Convert this field to JSON. Optional, can be left off to disable\n// JSON serialization for the field.\n//\n// fromJSON:: ?(config: Object, value: *, state: EditorState) → T\n// Deserialize the JSON representation of this field. Note that the\n// `state` argument is again a half-initialized state.\n\n\nvar keys = Object.create(null);\n\nfunction createKey(name) {\n if (name in keys) {\n return name + \"$\" + ++keys[name];\n }\n\n keys[name] = 0;\n return name + \"$\";\n} // ::- A key is used to [tag](#state.PluginSpec.key)\n// plugins in a way that makes it possible to find them, given an\n// editor state. Assigning a key does mean only one plugin of that\n// type can be active in a state.\n\n\nvar PluginKey = function PluginKey(name) {\n if (name === void 0) name = \"key\";\n this.key = createKey(name);\n}; // :: (EditorState) → ?Plugin\n// Get the active plugin with this key, if any, from an editor\n// state.\n\n\nPluginKey.prototype.get = function get(state) {\n return state.config.pluginsByKey[this.key];\n}; // :: (EditorState) → ?any\n// Get the plugin's state from an editor state.\n\n\nPluginKey.prototype.getState = function getState(state) {\n return state[this.key];\n};\n\nexport { AllSelection, EditorState, NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection, Transaction };","import { TextSelection, NodeSelection, Selection, AllSelection } from 'prosemirror-state';\nimport { DOMSerializer, Fragment, Mark, DOMParser, Slice } from 'prosemirror-model';\nimport { dropPoint } from 'prosemirror-transform';\nvar result = {};\n\nif (typeof navigator != \"undefined\" && typeof document != \"undefined\") {\n var ie_edge = /Edge\\/(\\d+)/.exec(navigator.userAgent);\n var ie_upto10 = /MSIE \\d/.test(navigator.userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent);\n result.mac = /Mac/.test(navigator.platform);\n var ie = result.ie = !!(ie_upto10 || ie_11up || ie_edge);\n result.ie_version = ie_upto10 ? document.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : null;\n result.gecko = !ie && /gecko\\/(\\d+)/i.test(navigator.userAgent);\n result.gecko_version = result.gecko && +(/Firefox\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1];\n var chrome = !ie && /Chrome\\/(\\d+)/.exec(navigator.userAgent);\n result.chrome = !!chrome;\n result.chrome_version = chrome && +chrome[1]; // Is true for both iOS and iPadOS for convenience\n\n result.safari = !ie && /Apple Computer/.test(navigator.vendor);\n result.ios = result.safari && (/Mobile\\/\\w+/.test(navigator.userAgent) || navigator.maxTouchPoints > 2);\n result.android = /Android \\d/.test(navigator.userAgent);\n result.webkit = \"webkitFontSmoothing\" in document.documentElement.style;\n result.webkit_version = result.webkit && +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1];\n}\n\nvar domIndex = function domIndex(node) {\n for (var index = 0;; index++) {\n node = node.previousSibling;\n\n if (!node) {\n return index;\n }\n }\n};\n\nvar parentNode = function parentNode(node) {\n var parent = node.parentNode;\n return parent && parent.nodeType == 11 ? parent.host : parent;\n};\n\nvar reusedRange = null; // Note that this will always return the same range, because DOM range\n// objects are every expensive, and keep slowing down subsequent DOM\n// updates, for some reason.\n\nvar textRange = function textRange(node, from, to) {\n var range = reusedRange || (reusedRange = document.createRange());\n range.setEnd(node, to == null ? node.nodeValue.length : to);\n range.setStart(node, from || 0);\n return range;\n}; // Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\n\n\nvar isEquivalentPosition = function isEquivalentPosition(node, off, targetNode, targetOff) {\n return targetNode && (scanFor(node, off, targetNode, targetOff, -1) || scanFor(node, off, targetNode, targetOff, 1));\n};\n\nvar atomElements = /^(img|br|input|textarea|hr)$/i;\n\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n for (;;) {\n if (node == targetNode && off == targetOff) {\n return true;\n }\n\n if (off == (dir < 0 ? 0 : nodeSize(node))) {\n var parent = node.parentNode;\n\n if (parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) || node.contentEditable == \"false\") {\n return false;\n }\n\n off = domIndex(node) + (dir < 0 ? 0 : 1);\n node = parent;\n } else if (node.nodeType == 1) {\n node = node.childNodes[off + (dir < 0 ? -1 : 0)];\n\n if (node.contentEditable == \"false\") {\n return false;\n }\n\n off = dir < 0 ? nodeSize(node) : 0;\n } else {\n return false;\n }\n }\n}\n\nfunction nodeSize(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\n\nfunction isOnEdge(node, offset, parent) {\n for (var atStart = offset == 0, atEnd = offset == nodeSize(node); atStart || atEnd;) {\n if (node == parent) {\n return true;\n }\n\n var index = domIndex(node);\n node = node.parentNode;\n\n if (!node) {\n return false;\n }\n\n atStart = atStart && index == 0;\n atEnd = atEnd && index == nodeSize(node);\n }\n}\n\nfunction hasBlockDesc(dom) {\n var desc;\n\n for (var cur = dom; cur; cur = cur.parentNode) {\n if (desc = cur.pmViewDesc) {\n break;\n }\n }\n\n return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom);\n} // Work around Chrome issue https://bugs.chromium.org/p/chromium/issues/detail?id=447523\n// (isCollapsed inappropriately returns true in shadow dom)\n\n\nvar selectionCollapsed = function selectionCollapsed(domSel) {\n var collapsed = domSel.isCollapsed;\n\n if (collapsed && result.chrome && domSel.rangeCount && !domSel.getRangeAt(0).collapsed) {\n collapsed = false;\n }\n\n return collapsed;\n};\n\nfunction keyEvent(keyCode, key) {\n var event = document.createEvent(\"Event\");\n event.initEvent(\"keydown\", true, true);\n event.keyCode = keyCode;\n event.key = event.code = key;\n return event;\n}\n\nfunction windowRect(doc) {\n return {\n left: 0,\n right: doc.documentElement.clientWidth,\n top: 0,\n bottom: doc.documentElement.clientHeight\n };\n}\n\nfunction getSide(value, side) {\n return typeof value == \"number\" ? value : value[side];\n}\n\nfunction clientRect(node) {\n var rect = node.getBoundingClientRect(); // Make sure scrollbar width isn't included in the rectangle\n\n return {\n left: rect.left,\n right: rect.left + node.clientWidth,\n top: rect.top,\n bottom: rect.top + node.clientHeight\n };\n}\n\nfunction scrollRectIntoView(view, rect, startDOM) {\n var scrollThreshold = view.someProp(\"scrollThreshold\") || 0,\n scrollMargin = view.someProp(\"scrollMargin\") || 5;\n var doc = view.dom.ownerDocument;\n\n for (var parent = startDOM || view.dom;; parent = parentNode(parent)) {\n if (!parent) {\n break;\n }\n\n if (parent.nodeType != 1) {\n continue;\n }\n\n var atTop = parent == doc.body || parent.nodeType != 1;\n var bounding = atTop ? windowRect(doc) : clientRect(parent);\n var moveX = 0,\n moveY = 0;\n\n if (rect.top < bounding.top + getSide(scrollThreshold, \"top\")) {\n moveY = -(bounding.top - rect.top + getSide(scrollMargin, \"top\"));\n } else if (rect.bottom > bounding.bottom - getSide(scrollThreshold, \"bottom\")) {\n moveY = rect.bottom - bounding.bottom + getSide(scrollMargin, \"bottom\");\n }\n\n if (rect.left < bounding.left + getSide(scrollThreshold, \"left\")) {\n moveX = -(bounding.left - rect.left + getSide(scrollMargin, \"left\"));\n } else if (rect.right > bounding.right - getSide(scrollThreshold, \"right\")) {\n moveX = rect.right - bounding.right + getSide(scrollMargin, \"right\");\n }\n\n if (moveX || moveY) {\n if (atTop) {\n doc.defaultView.scrollBy(moveX, moveY);\n } else {\n var startX = parent.scrollLeft,\n startY = parent.scrollTop;\n\n if (moveY) {\n parent.scrollTop += moveY;\n }\n\n if (moveX) {\n parent.scrollLeft += moveX;\n }\n\n var dX = parent.scrollLeft - startX,\n dY = parent.scrollTop - startY;\n rect = {\n left: rect.left - dX,\n top: rect.top - dY,\n right: rect.right - dX,\n bottom: rect.bottom - dY\n };\n }\n }\n\n if (atTop) {\n break;\n }\n }\n} // Store the scroll position of the editor's parent nodes, along with\n// the top position of an element near the top of the editor, which\n// will be used to make sure the visible viewport remains stable even\n// when the size of the content above changes.\n\n\nfunction storeScrollPos(view) {\n var rect = view.dom.getBoundingClientRect(),\n startY = Math.max(0, rect.top);\n var refDOM, refTop;\n\n for (var x = (rect.left + rect.right) / 2, y = startY + 1; y < Math.min(innerHeight, rect.bottom); y += 5) {\n var dom = view.root.elementFromPoint(x, y);\n\n if (dom == view.dom || !view.dom.contains(dom)) {\n continue;\n }\n\n var localRect = dom.getBoundingClientRect();\n\n if (localRect.top >= startY - 20) {\n refDOM = dom;\n refTop = localRect.top;\n break;\n }\n }\n\n return {\n refDOM: refDOM,\n refTop: refTop,\n stack: scrollStack(view.dom)\n };\n}\n\nfunction scrollStack(dom) {\n var stack = [],\n doc = dom.ownerDocument;\n\n for (; dom; dom = parentNode(dom)) {\n stack.push({\n dom: dom,\n top: dom.scrollTop,\n left: dom.scrollLeft\n });\n\n if (dom == doc) {\n break;\n }\n }\n\n return stack;\n} // Reset the scroll position of the editor's parent nodes to that what\n// it was before, when storeScrollPos was called.\n\n\nfunction resetScrollPos(ref) {\n var refDOM = ref.refDOM;\n var refTop = ref.refTop;\n var stack = ref.stack;\n var newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0;\n restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop);\n}\n\nfunction restoreScrollStack(stack, dTop) {\n for (var i = 0; i < stack.length; i++) {\n var ref = stack[i];\n var dom = ref.dom;\n var top = ref.top;\n var left = ref.left;\n\n if (dom.scrollTop != top + dTop) {\n dom.scrollTop = top + dTop;\n }\n\n if (dom.scrollLeft != left) {\n dom.scrollLeft = left;\n }\n }\n}\n\nvar preventScrollSupported = null; // Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\n\nfunction focusPreventScroll(dom) {\n if (dom.setActive) {\n return dom.setActive();\n } // in IE\n\n\n if (preventScrollSupported) {\n return dom.focus(preventScrollSupported);\n }\n\n var stored = scrollStack(dom);\n dom.focus(preventScrollSupported == null ? {\n get preventScroll() {\n preventScrollSupported = {\n preventScroll: true\n };\n return true;\n }\n\n } : undefined);\n\n if (!preventScrollSupported) {\n preventScrollSupported = false;\n restoreScrollStack(stored, 0);\n }\n}\n\nfunction findOffsetInNode(node, coords) {\n var closest,\n dxClosest = 2e8,\n coordsClosest,\n offset = 0;\n var rowBot = coords.top,\n rowTop = coords.top;\n\n for (var child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {\n var rects = void 0;\n\n if (child.nodeType == 1) {\n rects = child.getClientRects();\n } else if (child.nodeType == 3) {\n rects = textRange(child).getClientRects();\n } else {\n continue;\n }\n\n for (var i = 0; i < rects.length; i++) {\n var rect = rects[i];\n\n if (rect.top <= rowBot && rect.bottom >= rowTop) {\n rowBot = Math.max(rect.bottom, rowBot);\n rowTop = Math.min(rect.top, rowTop);\n var dx = rect.left > coords.left ? rect.left - coords.left : rect.right < coords.left ? coords.left - rect.right : 0;\n\n if (dx < dxClosest) {\n closest = child;\n dxClosest = dx;\n coordsClosest = dx && closest.nodeType == 3 ? {\n left: rect.right < coords.left ? rect.right : rect.left,\n top: coords.top\n } : coords;\n\n if (child.nodeType == 1 && dx) {\n offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);\n }\n\n continue;\n }\n }\n\n if (!closest && (coords.left >= rect.right && coords.top >= rect.top || coords.left >= rect.left && coords.top >= rect.bottom)) {\n offset = childIndex + 1;\n }\n }\n }\n\n if (closest && closest.nodeType == 3) {\n return findOffsetInText(closest, coordsClosest);\n }\n\n if (!closest || dxClosest && closest.nodeType == 1) {\n return {\n node: node,\n offset: offset\n };\n }\n\n return findOffsetInNode(closest, coordsClosest);\n}\n\nfunction findOffsetInText(node, coords) {\n var len = node.nodeValue.length;\n var range = document.createRange();\n\n for (var i = 0; i < len; i++) {\n range.setEnd(node, i + 1);\n range.setStart(node, i);\n var rect = singleRect(range, 1);\n\n if (rect.top == rect.bottom) {\n continue;\n }\n\n if (inRect(coords, rect)) {\n return {\n node: node,\n offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0)\n };\n }\n }\n\n return {\n node: node,\n offset: 0\n };\n}\n\nfunction inRect(coords, rect) {\n return coords.left >= rect.left - 1 && coords.left <= rect.right + 1 && coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1;\n}\n\nfunction targetKludge(dom, coords) {\n var parent = dom.parentNode;\n\n if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left) {\n return parent;\n }\n\n return dom;\n}\n\nfunction posFromElement(view, elt, coords) {\n var ref = findOffsetInNode(elt, coords);\n var node = ref.node;\n var offset = ref.offset;\n var bias = -1;\n\n if (node.nodeType == 1 && !node.firstChild) {\n var rect = node.getBoundingClientRect();\n bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;\n }\n\n return view.docView.posFromDOM(node, offset, bias);\n}\n\nfunction posFromCaret(view, node, offset, coords) {\n // Browser (in caretPosition/RangeFromPoint) will agressively\n // normalize towards nearby inline nodes. Since we are interested in\n // positions between block nodes too, we first walk up the hierarchy\n // of nodes to see if there are block nodes that the coordinates\n // fall outside of. If so, we take the position before/after that\n // block. If not, we call `posFromDOM` on the raw node/offset.\n var outside = -1;\n\n for (var cur = node;;) {\n if (cur == view.dom) {\n break;\n }\n\n var desc = view.docView.nearestDesc(cur, true);\n\n if (!desc) {\n return null;\n }\n\n if (desc.node.isBlock && desc.parent) {\n var rect = desc.dom.getBoundingClientRect();\n\n if (rect.left > coords.left || rect.top > coords.top) {\n outside = desc.posBefore;\n } else if (rect.right < coords.left || rect.bottom < coords.top) {\n outside = desc.posAfter;\n } else {\n break;\n }\n }\n\n cur = desc.dom.parentNode;\n }\n\n return outside > -1 ? outside : view.docView.posFromDOM(node, offset);\n}\n\nfunction elementFromPoint(element, coords, box) {\n var len = element.childNodes.length;\n\n if (len && box.top < box.bottom) {\n for (var startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {\n var child = element.childNodes[i];\n\n if (child.nodeType == 1) {\n var rects = child.getClientRects();\n\n for (var j = 0; j < rects.length; j++) {\n var rect = rects[j];\n\n if (inRect(coords, rect)) {\n return elementFromPoint(child, coords, rect);\n }\n }\n }\n\n if ((i = (i + 1) % len) == startI) {\n break;\n }\n }\n }\n\n return element;\n} // Given an x,y position on the editor, get the position in the document.\n\n\nfunction posAtCoords(view, coords) {\n var assign, assign$1;\n var root = view.root,\n node,\n offset;\n\n if (root.caretPositionFromPoint) {\n try {\n // Firefox throws for this call in hard-to-predict circumstances (#994)\n var pos$1 = root.caretPositionFromPoint(coords.left, coords.top);\n\n if (pos$1) {\n assign = pos$1, node = assign.offsetNode, offset = assign.offset;\n }\n } catch (_) {}\n }\n\n if (!node && root.caretRangeFromPoint) {\n var range = root.caretRangeFromPoint(coords.left, coords.top);\n\n if (range) {\n assign$1 = range, node = assign$1.startContainer, offset = assign$1.startOffset;\n }\n }\n\n var elt = root.elementFromPoint(coords.left, coords.top + 1),\n pos;\n\n if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {\n var box = view.dom.getBoundingClientRect();\n\n if (!inRect(coords, box)) {\n return null;\n }\n\n elt = elementFromPoint(view.dom, coords, box);\n\n if (!elt) {\n return null;\n }\n } // Safari's caretRangeFromPoint returns nonsense when on a draggable element\n\n\n if (result.safari && elt.draggable) {\n node = offset = null;\n }\n\n elt = targetKludge(elt, coords);\n\n if (node) {\n if (result.gecko && node.nodeType == 1) {\n // Firefox will sometimes return offsets into <input> nodes, which\n // have no actual children, from caretPositionFromPoint (#953)\n offset = Math.min(offset, node.childNodes.length); // It'll also move the returned position before image nodes,\n // even if those are behind it.\n\n if (offset < node.childNodes.length) {\n var next = node.childNodes[offset],\n box$1;\n\n if (next.nodeName == \"IMG\" && (box$1 = next.getBoundingClientRect()).right <= coords.left && box$1.bottom > coords.top) {\n offset++;\n }\n }\n } // Suspiciously specific kludge to work around caret*FromPoint\n // never returning a position at the end of the document\n\n\n if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 && coords.top > node.lastChild.getBoundingClientRect().bottom) {\n pos = view.state.doc.content.size;\n } // Ignore positions directly after a BR, since caret*FromPoint\n // 'round up' positions that would be more accurately placed\n // before the BR node.\n else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != \"BR\") {\n pos = posFromCaret(view, node, offset, coords);\n }\n }\n\n if (pos == null) {\n pos = posFromElement(view, elt, coords);\n }\n\n var desc = view.docView.nearestDesc(elt, true);\n return {\n pos: pos,\n inside: desc ? desc.posAtStart - desc.border : -1\n };\n}\n\nfunction singleRect(object, bias) {\n var rects = object.getClientRects();\n return !rects.length ? object.getBoundingClientRect() : rects[bias < 0 ? 0 : rects.length - 1];\n}\n\nvar BIDI = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/; // : (EditorView, number, number) → {left: number, top: number, right: number, bottom: number}\n// Given a position in the document model, get a bounding box of the\n// character at that position, relative to the window.\n\nfunction coordsAtPos(view, pos, side) {\n var ref = view.docView.domFromPos(pos, side < 0 ? -1 : 1);\n var node = ref.node;\n var offset = ref.offset;\n var supportEmptyRange = result.webkit || result.gecko;\n\n if (node.nodeType == 3) {\n // These browsers support querying empty text ranges. Prefer that in\n // bidi context or when at the end of a node.\n if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {\n var rect = singleRect(textRange(node, offset, offset), side); // Firefox returns bad results (the position before the space)\n // when querying a position directly after line-broken\n // whitespace. Detect this situation and and kludge around it\n\n if (result.gecko && offset && /\\s/.test(node.nodeValue[offset - 1]) && offset < node.nodeValue.length) {\n var rectBefore = singleRect(textRange(node, offset - 1, offset - 1), -1);\n\n if (rectBefore.top == rect.top) {\n var rectAfter = singleRect(textRange(node, offset, offset + 1), -1);\n\n if (rectAfter.top != rect.top) {\n return flattenV(rectAfter, rectAfter.left < rectBefore.left);\n }\n }\n }\n\n return rect;\n } else {\n var from = offset,\n to = offset,\n takeSide = side < 0 ? 1 : -1;\n\n if (side < 0 && !offset) {\n to++;\n takeSide = -1;\n } else if (side >= 0 && offset == node.nodeValue.length) {\n from--;\n takeSide = 1;\n } else if (side < 0) {\n from--;\n } else {\n to++;\n }\n\n return flattenV(singleRect(textRange(node, from, to), takeSide), takeSide < 0);\n }\n } // Return a horizontal line in block context\n\n\n if (!view.state.doc.resolve(pos).parent.inlineContent) {\n if (offset && (side < 0 || offset == nodeSize(node))) {\n var before = node.childNodes[offset - 1];\n\n if (before.nodeType == 1) {\n return flattenH(before.getBoundingClientRect(), false);\n }\n }\n\n if (offset < nodeSize(node)) {\n var after = node.childNodes[offset];\n\n if (after.nodeType == 1) {\n return flattenH(after.getBoundingClientRect(), true);\n }\n }\n\n return flattenH(node.getBoundingClientRect(), side >= 0);\n } // Inline, not in text node (this is not Bidi-safe)\n\n\n if (offset && (side < 0 || offset == nodeSize(node))) {\n var before$1 = node.childNodes[offset - 1];\n var target = before$1.nodeType == 3 ? textRange(before$1, nodeSize(before$1) - (supportEmptyRange ? 0 : 1)) // BR nodes tend to only return the rectangle before them.\n // Only use them if they are the last element in their parent\n : before$1.nodeType == 1 && (before$1.nodeName != \"BR\" || !before$1.nextSibling) ? before$1 : null;\n\n if (target) {\n return flattenV(singleRect(target, 1), false);\n }\n }\n\n if (offset < nodeSize(node)) {\n var after$1 = node.childNodes[offset];\n var target$1 = after$1.nodeType == 3 ? textRange(after$1, 0, supportEmptyRange ? 0 : 1) : after$1.nodeType == 1 ? after$1 : null;\n\n if (target$1) {\n return flattenV(singleRect(target$1, -1), true);\n }\n } // All else failed, just try to get a rectangle for the target node\n\n\n return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0);\n}\n\nfunction flattenV(rect, left) {\n if (rect.width == 0) {\n return rect;\n }\n\n var x = left ? rect.left : rect.right;\n return {\n top: rect.top,\n bottom: rect.bottom,\n left: x,\n right: x\n };\n}\n\nfunction flattenH(rect, top) {\n if (rect.height == 0) {\n return rect;\n }\n\n var y = top ? rect.top : rect.bottom;\n return {\n top: y,\n bottom: y,\n left: rect.left,\n right: rect.right\n };\n}\n\nfunction withFlushedState(view, state, f) {\n var viewState = view.state,\n active = view.root.activeElement;\n\n if (viewState != state) {\n view.updateState(state);\n }\n\n if (active != view.dom) {\n view.focus();\n }\n\n try {\n return f();\n } finally {\n if (viewState != state) {\n view.updateState(viewState);\n }\n\n if (active != view.dom && active) {\n active.focus();\n }\n }\n} // : (EditorView, number, number)\n// Whether vertical position motion in a given direction\n// from a position would leave a text block.\n\n\nfunction endOfTextblockVertical(view, state, dir) {\n var sel = state.selection;\n var $pos = dir == \"up\" ? sel.$from : sel.$to;\n return withFlushedState(view, state, function () {\n var ref = view.docView.domFromPos($pos.pos, dir == \"up\" ? -1 : 1);\n var dom = ref.node;\n\n for (;;) {\n var nearest = view.docView.nearestDesc(dom, true);\n\n if (!nearest) {\n break;\n }\n\n if (nearest.node.isBlock) {\n dom = nearest.dom;\n break;\n }\n\n dom = nearest.dom.parentNode;\n }\n\n var coords = coordsAtPos(view, $pos.pos, 1);\n\n for (var child = dom.firstChild; child; child = child.nextSibling) {\n var boxes = void 0;\n\n if (child.nodeType == 1) {\n boxes = child.getClientRects();\n } else if (child.nodeType == 3) {\n boxes = textRange(child, 0, child.nodeValue.length).getClientRects();\n } else {\n continue;\n }\n\n for (var i = 0; i < boxes.length; i++) {\n var box = boxes[i];\n\n if (box.bottom > box.top && (dir == \"up\" ? box.bottom < coords.top + 1 : box.top > coords.bottom - 1)) {\n return false;\n }\n }\n }\n\n return true;\n });\n}\n\nvar maybeRTL = /[\\u0590-\\u08ac]/;\n\nfunction endOfTextblockHorizontal(view, state, dir) {\n var ref = state.selection;\n var $head = ref.$head;\n\n if (!$head.parent.isTextblock) {\n return false;\n }\n\n var offset = $head.parentOffset,\n atStart = !offset,\n atEnd = offset == $head.parent.content.size;\n var sel = getSelection(); // If the textblock is all LTR, or the browser doesn't support\n // Selection.modify (Edge), fall back to a primitive approach\n\n if (!maybeRTL.test($head.parent.textContent) || !sel.modify) {\n return dir == \"left\" || dir == \"backward\" ? atStart : atEnd;\n }\n\n return withFlushedState(view, state, function () {\n // This is a huge hack, but appears to be the best we can\n // currently do: use `Selection.modify` to move the selection by\n // one character, and see if that moves the cursor out of the\n // textblock (or doesn't move it at all, when at the start/end of\n // the document).\n var oldRange = sel.getRangeAt(0),\n oldNode = sel.focusNode,\n oldOff = sel.focusOffset;\n var oldBidiLevel = sel.caretBidiLevel; // Only for Firefox\n\n sel.modify(\"move\", dir, \"character\");\n var parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;\n var result = !parentDOM.contains(sel.focusNode.nodeType == 1 ? sel.focusNode : sel.focusNode.parentNode) || oldNode == sel.focusNode && oldOff == sel.focusOffset; // Restore the previous selection\n\n sel.removeAllRanges();\n sel.addRange(oldRange);\n\n if (oldBidiLevel != null) {\n sel.caretBidiLevel = oldBidiLevel;\n }\n\n return result;\n });\n}\n\nvar cachedState = null,\n cachedDir = null,\n cachedResult = false;\n\nfunction endOfTextblock(view, state, dir) {\n if (cachedState == state && cachedDir == dir) {\n return cachedResult;\n }\n\n cachedState = state;\n cachedDir = dir;\n return cachedResult = dir == \"up\" || dir == \"down\" ? endOfTextblockVertical(view, state, dir) : endOfTextblockHorizontal(view, state, dir);\n} // NodeView:: interface\n//\n// By default, document nodes are rendered using the result of the\n// [`toDOM`](#model.NodeSpec.toDOM) method of their spec, and managed\n// entirely by the editor. For some use cases, such as embedded\n// node-specific editing interfaces, you want more control over\n// the behavior of a node's in-editor representation, and need to\n// [define](#view.EditorProps.nodeViews) a custom node view.\n//\n// Mark views only support `dom` and `contentDOM`, and don't support\n// any of the node view methods.\n//\n// Objects returned as node views must conform to this interface.\n//\n// dom:: ?dom.Node\n// The outer DOM node that represents the document node. When not\n// given, the default strategy is used to create a DOM node.\n//\n// contentDOM:: ?dom.Node\n// The DOM node that should hold the node's content. Only meaningful\n// if the node view also defines a `dom` property and if its node\n// type is not a leaf node type. When this is present, ProseMirror\n// will take care of rendering the node's children into it. When it\n// is not present, the node view itself is responsible for rendering\n// (or deciding not to render) its child nodes.\n//\n// update:: ?(node: Node, decorations: [Decoration]) → bool\n// When given, this will be called when the view is updating itself.\n// It will be given a node (possibly of a different type), and an\n// array of active decorations (which are automatically drawn, and\n// the node view may ignore if it isn't interested in them), and\n// should return true if it was able to update to that node, and\n// false otherwise. If the node view has a `contentDOM` property (or\n// no `dom` property), updating its child nodes will be handled by\n// ProseMirror.\n//\n// selectNode:: ?()\n// Can be used to override the way the node's selected status (as a\n// node selection) is displayed.\n//\n// deselectNode:: ?()\n// When defining a `selectNode` method, you should also provide a\n// `deselectNode` method to remove the effect again.\n//\n// setSelection:: ?(anchor: number, head: number, root: dom.Document)\n// This will be called to handle setting the selection inside the\n// node. The `anchor` and `head` positions are relative to the start\n// of the node. By default, a DOM selection will be created between\n// the DOM positions corresponding to those positions, but if you\n// override it you can do something else.\n//\n// stopEvent:: ?(event: dom.Event) → bool\n// Can be used to prevent the editor view from trying to handle some\n// or all DOM events that bubble up from the node view. Events for\n// which this returns true are not handled by the editor.\n//\n// ignoreMutation:: ?(dom.MutationRecord) → bool\n// Called when a DOM\n// [mutation](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver)\n// or a selection change happens within the view. When the change is\n// a selection change, the record will have a `type` property of\n// `\"selection\"` (which doesn't occur for native mutation records).\n// Return false if the editor should re-read the selection or\n// re-parse the range around the mutation, true if it can safely be\n// ignored.\n//\n// destroy:: ?()\n// Called when the node view is removed from the editor or the whole\n// editor is destroyed. (Not available for marks.)\n// View descriptions are data structures that describe the DOM that is\n// used to represent the editor's content. They are used for:\n//\n// - Incremental redrawing when the document changes\n//\n// - Figuring out what part of the document a given DOM position\n// corresponds to\n//\n// - Wiring in custom implementations of the editing interface for a\n// given node\n//\n// They form a doubly-linked mutable tree, starting at `view.docView`.\n\n\nvar NOT_DIRTY = 0,\n CHILD_DIRTY = 1,\n CONTENT_DIRTY = 2,\n NODE_DIRTY = 3; // Superclass for the various kinds of descriptions. Defines their\n// basic structure and shared methods.\n\nvar ViewDesc = function ViewDesc(parent, children, dom, contentDOM) {\n this.parent = parent;\n this.children = children;\n this.dom = dom; // An expando property on the DOM node provides a link back to its\n // description.\n\n dom.pmViewDesc = this; // This is the node that holds the child views. It may be null for\n // descs that don't have children.\n\n this.contentDOM = contentDOM;\n this.dirty = NOT_DIRTY;\n};\n\nvar prototypeAccessors = {\n beforePosition: {\n configurable: true\n },\n size: {\n configurable: true\n },\n border: {\n configurable: true\n },\n posBefore: {\n configurable: true\n },\n posAtStart: {\n configurable: true\n },\n posAfter: {\n configurable: true\n },\n posAtEnd: {\n configurable: true\n },\n contentLost: {\n configurable: true\n },\n domAtom: {\n configurable: true\n }\n}; // Used to check whether a given description corresponds to a\n// widget/mark/node.\n\nViewDesc.prototype.matchesWidget = function matchesWidget() {\n return false;\n};\n\nViewDesc.prototype.matchesMark = function matchesMark() {\n return false;\n};\n\nViewDesc.prototype.matchesNode = function matchesNode() {\n return false;\n};\n\nViewDesc.prototype.matchesHack = function matchesHack() {\n return false;\n};\n\nprototypeAccessors.beforePosition.get = function () {\n return false;\n}; // : () → ?ParseRule\n// When parsing in-editor content (in domchange.js), we allow\n// descriptions to determine the parse rules that should be used to\n// parse them.\n\n\nViewDesc.prototype.parseRule = function parseRule() {\n return null;\n}; // : (dom.Event) → bool\n// Used by the editor's event handler to ignore events that come\n// from certain descs.\n\n\nViewDesc.prototype.stopEvent = function stopEvent() {\n return false;\n}; // The size of the content represented by this desc.\n\n\nprototypeAccessors.size.get = function () {\n var size = 0;\n\n for (var i = 0; i < this.children.length; i++) {\n size += this.children[i].size;\n }\n\n return size;\n}; // For block nodes, this represents the space taken up by their\n// start/end tokens.\n\n\nprototypeAccessors.border.get = function () {\n return 0;\n};\n\nViewDesc.prototype.destroy = function destroy() {\n this.parent = null;\n\n if (this.dom.pmViewDesc == this) {\n this.dom.pmViewDesc = null;\n }\n\n for (var i = 0; i < this.children.length; i++) {\n this.children[i].destroy();\n }\n};\n\nViewDesc.prototype.posBeforeChild = function posBeforeChild(child) {\n for (var i = 0, pos = this.posAtStart; i < this.children.length; i++) {\n var cur = this.children[i];\n\n if (cur == child) {\n return pos;\n }\n\n pos += cur.size;\n }\n};\n\nprototypeAccessors.posBefore.get = function () {\n return this.parent.posBeforeChild(this);\n};\n\nprototypeAccessors.posAtStart.get = function () {\n return this.parent ? this.parent.posBeforeChild(this) + this.border : 0;\n};\n\nprototypeAccessors.posAfter.get = function () {\n return this.posBefore + this.size;\n};\n\nprototypeAccessors.posAtEnd.get = function () {\n return this.posAtStart + this.size - 2 * this.border;\n}; // : (dom.Node, number, ?number) → number\n\n\nViewDesc.prototype.localPosFromDOM = function localPosFromDOM(dom, offset, bias) {\n // If the DOM position is in the content, use the child desc after\n // it to figure out a position.\n if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {\n if (bias < 0) {\n var domBefore, desc;\n\n if (dom == this.contentDOM) {\n domBefore = dom.childNodes[offset - 1];\n } else {\n while (dom.parentNode != this.contentDOM) {\n dom = dom.parentNode;\n }\n\n domBefore = dom.previousSibling;\n }\n\n while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this)) {\n domBefore = domBefore.previousSibling;\n }\n\n return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart;\n } else {\n var domAfter, desc$1;\n\n if (dom == this.contentDOM) {\n domAfter = dom.childNodes[offset];\n } else {\n while (dom.parentNode != this.contentDOM) {\n dom = dom.parentNode;\n }\n\n domAfter = dom.nextSibling;\n }\n\n while (domAfter && !((desc$1 = domAfter.pmViewDesc) && desc$1.parent == this)) {\n domAfter = domAfter.nextSibling;\n }\n\n return domAfter ? this.posBeforeChild(desc$1) : this.posAtEnd;\n }\n } // Otherwise, use various heuristics, falling back on the bias\n // parameter, to determine whether to return the position at the\n // start or at the end of this view desc.\n\n\n var atEnd;\n\n if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {\n atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;\n } else if (this.dom.firstChild) {\n if (offset == 0) {\n for (var search = dom;; search = search.parentNode) {\n if (search == this.dom) {\n atEnd = false;\n break;\n }\n\n if (search.parentNode.firstChild != search) {\n break;\n }\n }\n }\n\n if (atEnd == null && offset == dom.childNodes.length) {\n for (var search$1 = dom;; search$1 = search$1.parentNode) {\n if (search$1 == this.dom) {\n atEnd = true;\n break;\n }\n\n if (search$1.parentNode.lastChild != search$1) {\n break;\n }\n }\n }\n }\n\n return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart;\n}; // Scan up the dom finding the first desc that is a descendant of\n// this one.\n\n\nViewDesc.prototype.nearestDesc = function nearestDesc(dom, onlyNodes) {\n for (var first = true, cur = dom; cur; cur = cur.parentNode) {\n var desc = this.getDesc(cur);\n\n if (desc && (!onlyNodes || desc.node)) {\n // If dom is outside of this desc's nodeDOM, don't count it.\n if (first && desc.nodeDOM && !(desc.nodeDOM.nodeType == 1 ? desc.nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : desc.nodeDOM == dom)) {\n first = false;\n } else {\n return desc;\n }\n }\n }\n};\n\nViewDesc.prototype.getDesc = function getDesc(dom) {\n var desc = dom.pmViewDesc;\n\n for (var cur = desc; cur; cur = cur.parent) {\n if (cur == this) {\n return desc;\n }\n }\n};\n\nViewDesc.prototype.posFromDOM = function posFromDOM(dom, offset, bias) {\n for (var scan = dom; scan; scan = scan.parentNode) {\n var desc = this.getDesc(scan);\n\n if (desc) {\n return desc.localPosFromDOM(dom, offset, bias);\n }\n }\n\n return -1;\n}; // : (number) → ?NodeViewDesc\n// Find the desc for the node after the given pos, if any. (When a\n// parent node overrode rendering, there might not be one.)\n\n\nViewDesc.prototype.descAt = function descAt(pos) {\n for (var i = 0, offset = 0; i < this.children.length; i++) {\n var child = this.children[i],\n end = offset + child.size;\n\n if (offset == pos && end != offset) {\n while (!child.border && child.children.length) {\n child = child.children[0];\n }\n\n return child;\n }\n\n if (pos < end) {\n return child.descAt(pos - offset - child.border);\n }\n\n offset = end;\n }\n}; // : (number, number) → {node: dom.Node, offset: number}\n\n\nViewDesc.prototype.domFromPos = function domFromPos(pos, side) {\n if (!this.contentDOM) {\n return {\n node: this.dom,\n offset: 0\n };\n }\n\n for (var offset = 0, i = 0, first = true;; i++, first = false) {\n // Skip removed or always-before children\n while (i < this.children.length && (this.children[i].beforePosition || this.children[i].dom.parentNode != this.contentDOM)) {\n offset += this.children[i++].size;\n }\n\n var child = i == this.children.length ? null : this.children[i];\n\n if (offset == pos && (side == 0 || !child || !child.size || child.border || side < 0 && first) || child && child.domAtom && pos < offset + child.size) {\n return {\n node: this.contentDOM,\n offset: child ? domIndex(child.dom) : this.contentDOM.childNodes.length\n };\n }\n\n if (!child) {\n throw new Error(\"Invalid position \" + pos);\n }\n\n var end = offset + child.size;\n\n if (!child.domAtom && (side < 0 && !child.border ? end >= pos : end > pos)) {\n return child.domFromPos(pos - offset - child.border, side);\n }\n\n offset = end;\n }\n}; // Used to find a DOM range in a single parent for a given changed\n// range.\n\n\nViewDesc.prototype.parseRange = function parseRange(from, to, base) {\n if (base === void 0) base = 0;\n\n if (this.children.length == 0) {\n return {\n node: this.contentDOM,\n from: from,\n to: to,\n fromOffset: 0,\n toOffset: this.contentDOM.childNodes.length\n };\n }\n\n var fromOffset = -1,\n toOffset = -1;\n\n for (var offset = base, i = 0;; i++) {\n var child = this.children[i],\n end = offset + child.size;\n\n if (fromOffset == -1 && from <= end) {\n var childBase = offset + child.border; // FIXME maybe descend mark views to parse a narrower range?\n\n if (from >= childBase && to <= end - child.border && child.node && child.contentDOM && this.contentDOM.contains(child.contentDOM)) {\n return child.parseRange(from, to, childBase);\n }\n\n from = offset;\n\n for (var j = i; j > 0; j--) {\n var prev = this.children[j - 1];\n\n if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) {\n fromOffset = domIndex(prev.dom) + 1;\n break;\n }\n\n from -= prev.size;\n }\n\n if (fromOffset == -1) {\n fromOffset = 0;\n }\n }\n\n if (fromOffset > -1 && (end > to || i == this.children.length - 1)) {\n to = end;\n\n for (var j$1 = i + 1; j$1 < this.children.length; j$1++) {\n var next = this.children[j$1];\n\n if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) {\n toOffset = domIndex(next.dom);\n break;\n }\n\n to += next.size;\n }\n\n if (toOffset == -1) {\n toOffset = this.contentDOM.childNodes.length;\n }\n\n break;\n }\n\n offset = end;\n }\n\n return {\n node: this.contentDOM,\n from: from,\n to: to,\n fromOffset: fromOffset,\n toOffset: toOffset\n };\n};\n\nViewDesc.prototype.emptyChildAt = function emptyChildAt(side) {\n if (this.border || !this.contentDOM || !this.children.length) {\n return false;\n }\n\n var child = this.children[side < 0 ? 0 : this.children.length - 1];\n return child.size == 0 || child.emptyChildAt(side);\n}; // : (number) → dom.Node\n\n\nViewDesc.prototype.domAfterPos = function domAfterPos(pos) {\n var ref = this.domFromPos(pos, 0);\n var node = ref.node;\n var offset = ref.offset;\n\n if (node.nodeType != 1 || offset == node.childNodes.length) {\n throw new RangeError(\"No node after pos \" + pos);\n }\n\n return node.childNodes[offset];\n}; // : (number, number, dom.Document)\n// View descs are responsible for setting any selection that falls\n// entirely inside of them, so that custom implementations can do\n// custom things with the selection. Note that this falls apart when\n// a selection starts in such a node and ends in another, in which\n// case we just use whatever domFromPos produces as a best effort.\n\n\nViewDesc.prototype.setSelection = function setSelection(anchor, head, root, force) {\n // If the selection falls entirely in a child, give it to that child\n var from = Math.min(anchor, head),\n to = Math.max(anchor, head);\n\n for (var i = 0, offset = 0; i < this.children.length; i++) {\n var child = this.children[i],\n end = offset + child.size;\n\n if (from > offset && to < end) {\n return child.setSelection(anchor - offset - child.border, head - offset - child.border, root, force);\n }\n\n offset = end;\n }\n\n var anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1);\n var headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1);\n var domSel = root.getSelection();\n var brKludge = false; // On Firefox, using Selection.collapse to put the cursor after a\n // BR node for some reason doesn't always work (#1073). On Safari,\n // the cursor sometimes inexplicable visually lags behind its\n // reported position in such situations (#1092).\n\n if ((result.gecko || result.safari) && anchor == head) {\n var node = anchorDOM.node;\n var offset$1 = anchorDOM.offset;\n\n if (node.nodeType == 3) {\n brKludge = offset$1 && node.nodeValue[offset$1 - 1] == \"\\n\"; // Issue #1128\n\n if (brKludge && offset$1 == node.nodeValue.length && node.nextSibling && node.nextSibling.nodeName == \"BR\") {\n anchorDOM = headDOM = {\n node: node.parentNode,\n offset: domIndex(node) + 1\n };\n }\n } else {\n var prev = node.childNodes[offset$1 - 1];\n brKludge = prev && (prev.nodeName == \"BR\" || prev.contentEditable == \"false\");\n }\n }\n\n if (!(force || brKludge && result.safari) && isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset) && isEquivalentPosition(headDOM.node, headDOM.offset, domSel.focusNode, domSel.focusOffset)) {\n return;\n } // Selection.extend can be used to create an 'inverted' selection\n // (one where the focus is before the anchor), but not all\n // browsers support it yet.\n\n\n var domSelExtended = false;\n\n if ((domSel.extend || anchor == head) && !brKludge) {\n domSel.collapse(anchorDOM.node, anchorDOM.offset);\n\n try {\n if (anchor != head) {\n domSel.extend(headDOM.node, headDOM.offset);\n }\n\n domSelExtended = true;\n } catch (err) {\n // In some cases with Chrome the selection is empty after calling\n // collapse, even when it should be valid. This appears to be a bug, but\n // it is difficult to isolate. If this happens fallback to the old path\n // without using extend.\n if (!(err instanceof DOMException)) {\n throw err;\n } // declare global: DOMException\n\n }\n }\n\n if (!domSelExtended) {\n if (anchor > head) {\n var tmp = anchorDOM;\n anchorDOM = headDOM;\n headDOM = tmp;\n }\n\n var range = document.createRange();\n range.setEnd(headDOM.node, headDOM.offset);\n range.setStart(anchorDOM.node, anchorDOM.offset);\n domSel.removeAllRanges();\n domSel.addRange(range);\n }\n}; // : (dom.MutationRecord) → bool\n\n\nViewDesc.prototype.ignoreMutation = function ignoreMutation(mutation) {\n return !this.contentDOM && mutation.type != \"selection\";\n};\n\nprototypeAccessors.contentLost.get = function () {\n return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM);\n}; // Remove a subtree of the element tree that has been touched\n// by a DOM change, so that the next update will redraw it.\n\n\nViewDesc.prototype.markDirty = function markDirty(from, to) {\n for (var offset = 0, i = 0; i < this.children.length; i++) {\n var child = this.children[i],\n end = offset + child.size;\n\n if (offset == end ? from <= end && to >= offset : from < end && to > offset) {\n var startInside = offset + child.border,\n endInside = end - child.border;\n\n if (from >= startInside && to <= endInside) {\n this.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY;\n\n if (from == startInside && to == endInside && (child.contentLost || child.dom.parentNode != this.contentDOM)) {\n child.dirty = NODE_DIRTY;\n } else {\n child.markDirty(from - startInside, to - startInside);\n }\n\n return;\n } else {\n child.dirty = NODE_DIRTY;\n }\n }\n\n offset = end;\n }\n\n this.dirty = CONTENT_DIRTY;\n};\n\nViewDesc.prototype.markParentsDirty = function markParentsDirty() {\n var level = 1;\n\n for (var node = this.parent; node; node = node.parent, level++) {\n var dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY;\n\n if (node.dirty < dirty) {\n node.dirty = dirty;\n }\n }\n};\n\nprototypeAccessors.domAtom.get = function () {\n return false;\n};\n\nObject.defineProperties(ViewDesc.prototype, prototypeAccessors); // Reused array to avoid allocating fresh arrays for things that will\n// stay empty anyway.\n\nvar nothing = []; // A widget desc represents a widget decoration, which is a DOM node\n// drawn between the document nodes.\n\nvar WidgetViewDesc = /*@__PURE__*/function (ViewDesc) {\n function WidgetViewDesc(parent, widget, view, pos) {\n var self,\n dom = widget.type.toDOM;\n\n if (typeof dom == \"function\") {\n dom = dom(view, function () {\n if (!self) {\n return pos;\n }\n\n if (self.parent) {\n return self.parent.posBeforeChild(self);\n }\n });\n }\n\n if (!widget.type.spec.raw) {\n if (dom.nodeType != 1) {\n var wrap = document.createElement(\"span\");\n wrap.appendChild(dom);\n dom = wrap;\n }\n\n dom.contentEditable = false;\n dom.classList.add(\"ProseMirror-widget\");\n }\n\n ViewDesc.call(this, parent, nothing, dom, null);\n this.widget = widget;\n self = this;\n }\n\n if (ViewDesc) WidgetViewDesc.__proto__ = ViewDesc;\n WidgetViewDesc.prototype = Object.create(ViewDesc && ViewDesc.prototype);\n WidgetViewDesc.prototype.constructor = WidgetViewDesc;\n var prototypeAccessors$1 = {\n beforePosition: {\n configurable: true\n },\n domAtom: {\n configurable: true\n }\n };\n\n prototypeAccessors$1.beforePosition.get = function () {\n return this.widget.type.side < 0;\n };\n\n WidgetViewDesc.prototype.matchesWidget = function matchesWidget(widget) {\n return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type);\n };\n\n WidgetViewDesc.prototype.parseRule = function parseRule() {\n return {\n ignore: true\n };\n };\n\n WidgetViewDesc.prototype.stopEvent = function stopEvent(event) {\n var stop = this.widget.spec.stopEvent;\n return stop ? stop(event) : false;\n };\n\n WidgetViewDesc.prototype.ignoreMutation = function ignoreMutation(mutation) {\n return mutation.type != \"selection\" || this.widget.spec.ignoreSelection;\n };\n\n prototypeAccessors$1.domAtom.get = function () {\n return true;\n };\n\n Object.defineProperties(WidgetViewDesc.prototype, prototypeAccessors$1);\n return WidgetViewDesc;\n}(ViewDesc);\n\nvar CompositionViewDesc = /*@__PURE__*/function (ViewDesc) {\n function CompositionViewDesc(parent, dom, textDOM, text) {\n ViewDesc.call(this, parent, nothing, dom, null);\n this.textDOM = textDOM;\n this.text = text;\n }\n\n if (ViewDesc) CompositionViewDesc.__proto__ = ViewDesc;\n CompositionViewDesc.prototype = Object.create(ViewDesc && ViewDesc.prototype);\n CompositionViewDesc.prototype.constructor = CompositionViewDesc;\n var prototypeAccessors$2 = {\n size: {\n configurable: true\n }\n };\n\n prototypeAccessors$2.size.get = function () {\n return this.text.length;\n };\n\n CompositionViewDesc.prototype.localPosFromDOM = function localPosFromDOM(dom, offset) {\n if (dom != this.textDOM) {\n return this.posAtStart + (offset ? this.size : 0);\n }\n\n return this.posAtStart + offset;\n };\n\n CompositionViewDesc.prototype.domFromPos = function domFromPos(pos) {\n return {\n node: this.textDOM,\n offset: pos\n };\n };\n\n CompositionViewDesc.prototype.ignoreMutation = function ignoreMutation(mut) {\n return mut.type === 'characterData' && mut.target.nodeValue == mut.oldValue;\n };\n\n Object.defineProperties(CompositionViewDesc.prototype, prototypeAccessors$2);\n return CompositionViewDesc;\n}(ViewDesc); // A mark desc represents a mark. May have multiple children,\n// depending on how the mark is split. Note that marks are drawn using\n// a fixed nesting order, for simplicity and predictability, so in\n// some cases they will be split more often than would appear\n// necessary.\n\n\nvar MarkViewDesc = /*@__PURE__*/function (ViewDesc) {\n function MarkViewDesc(parent, mark, dom, contentDOM) {\n ViewDesc.call(this, parent, [], dom, contentDOM);\n this.mark = mark;\n }\n\n if (ViewDesc) MarkViewDesc.__proto__ = ViewDesc;\n MarkViewDesc.prototype = Object.create(ViewDesc && ViewDesc.prototype);\n MarkViewDesc.prototype.constructor = MarkViewDesc;\n\n MarkViewDesc.create = function create(parent, mark, inline, view) {\n var custom = view.nodeViews[mark.type.name];\n var spec = custom && custom(mark, view, inline);\n\n if (!spec || !spec.dom) {\n spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline));\n }\n\n return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom);\n };\n\n MarkViewDesc.prototype.parseRule = function parseRule() {\n return {\n mark: this.mark.type.name,\n attrs: this.mark.attrs,\n contentElement: this.contentDOM\n };\n };\n\n MarkViewDesc.prototype.matchesMark = function matchesMark(mark) {\n return this.dirty != NODE_DIRTY && this.mark.eq(mark);\n };\n\n MarkViewDesc.prototype.markDirty = function markDirty(from, to) {\n ViewDesc.prototype.markDirty.call(this, from, to); // Move dirty info to nearest node view\n\n if (this.dirty != NOT_DIRTY) {\n var parent = this.parent;\n\n while (!parent.node) {\n parent = parent.parent;\n }\n\n if (parent.dirty < this.dirty) {\n parent.dirty = this.dirty;\n }\n\n this.dirty = NOT_DIRTY;\n }\n };\n\n MarkViewDesc.prototype.slice = function slice(from, to, view) {\n var copy = MarkViewDesc.create(this.parent, this.mark, true, view);\n var nodes = this.children,\n size = this.size;\n\n if (to < size) {\n nodes = replaceNodes(nodes, to, size, view);\n }\n\n if (from > 0) {\n nodes = replaceNodes(nodes, 0, from, view);\n }\n\n for (var i = 0; i < nodes.length; i++) {\n nodes[i].parent = copy;\n }\n\n copy.children = nodes;\n return copy;\n };\n\n return MarkViewDesc;\n}(ViewDesc); // Node view descs are the main, most common type of view desc, and\n// correspond to an actual node in the document. Unlike mark descs,\n// they populate their child array themselves.\n\n\nvar NodeViewDesc = /*@__PURE__*/function (ViewDesc) {\n function NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) {\n ViewDesc.call(this, parent, node.isLeaf ? nothing : [], dom, contentDOM);\n this.nodeDOM = nodeDOM;\n this.node = node;\n this.outerDeco = outerDeco;\n this.innerDeco = innerDeco;\n\n if (contentDOM) {\n this.updateChildren(view, pos);\n }\n }\n\n if (ViewDesc) NodeViewDesc.__proto__ = ViewDesc;\n NodeViewDesc.prototype = Object.create(ViewDesc && ViewDesc.prototype);\n NodeViewDesc.prototype.constructor = NodeViewDesc;\n var prototypeAccessors$3 = {\n size: {\n configurable: true\n },\n border: {\n configurable: true\n },\n domAtom: {\n configurable: true\n }\n }; // By default, a node is rendered using the `toDOM` method from the\n // node type spec. But client code can use the `nodeViews` spec to\n // supply a custom node view, which can influence various aspects of\n // the way the node works.\n //\n // (Using subclassing for this was intentionally decided against,\n // since it'd require exposing a whole slew of finnicky\n // implementation details to the user code that they probably will\n // never need.)\n\n NodeViewDesc.create = function create(parent, node, outerDeco, innerDeco, view, pos) {\n var assign;\n var custom = view.nodeViews[node.type.name],\n descObj;\n var spec = custom && custom(node, view, function () {\n // (This is a function that allows the custom view to find its\n // own position)\n if (!descObj) {\n return pos;\n }\n\n if (descObj.parent) {\n return descObj.parent.posBeforeChild(descObj);\n }\n }, outerDeco);\n var dom = spec && spec.dom,\n contentDOM = spec && spec.contentDOM;\n\n if (node.isText) {\n if (!dom) {\n dom = document.createTextNode(node.text);\n } else if (dom.nodeType != 3) {\n throw new RangeError(\"Text must be rendered as a DOM text node\");\n }\n } else if (!dom) {\n assign = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node)), dom = assign.dom, contentDOM = assign.contentDOM;\n }\n\n if (!contentDOM && !node.isText && dom.nodeName != \"BR\") {\n // Chrome gets confused by <br contenteditable=false>\n if (!dom.hasAttribute(\"contenteditable\")) {\n dom.contentEditable = false;\n }\n\n if (node.type.spec.draggable) {\n dom.draggable = true;\n }\n }\n\n var nodeDOM = dom;\n dom = applyOuterDeco(dom, outerDeco, node);\n\n if (spec) {\n return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos + 1);\n } else if (node.isText) {\n return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view);\n } else {\n return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos + 1);\n }\n };\n\n NodeViewDesc.prototype.parseRule = function parseRule() {\n var this$1 = this; // Experimental kludge to allow opt-in re-parsing of nodes\n\n if (this.node.type.spec.reparseInView) {\n return null;\n } // FIXME the assumption that this can always return the current\n // attrs means that if the user somehow manages to change the\n // attrs in the dom, that won't be picked up. Not entirely sure\n // whether this is a problem\n\n\n var rule = {\n node: this.node.type.name,\n attrs: this.node.attrs\n };\n\n if (this.node.type.spec.code) {\n rule.preserveWhitespace = \"full\";\n }\n\n if (this.contentDOM && !this.contentLost) {\n rule.contentElement = this.contentDOM;\n } else {\n rule.getContent = function () {\n return this$1.contentDOM ? Fragment.empty : this$1.node.content;\n };\n }\n\n return rule;\n };\n\n NodeViewDesc.prototype.matchesNode = function matchesNode(node, outerDeco, innerDeco) {\n return this.dirty == NOT_DIRTY && node.eq(this.node) && sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco);\n };\n\n prototypeAccessors$3.size.get = function () {\n return this.node.nodeSize;\n };\n\n prototypeAccessors$3.border.get = function () {\n return this.node.isLeaf ? 0 : 1;\n }; // Syncs `this.children` to match `this.node.content` and the local\n // decorations, possibly introducing nesting for marks. Then, in a\n // separate step, syncs the DOM inside `this.contentDOM` to\n // `this.children`.\n\n\n NodeViewDesc.prototype.updateChildren = function updateChildren(view, pos) {\n var this$1 = this;\n var inline = this.node.inlineContent,\n off = pos;\n var composition = inline && view.composing && this.localCompositionNode(view, pos);\n var updater = new ViewTreeUpdater(this, composition && composition.node);\n iterDeco(this.node, this.innerDeco, function (widget, i, insideNode) {\n if (widget.spec.marks) {\n updater.syncToMarks(widget.spec.marks, inline, view);\n } else if (widget.type.side >= 0 && !insideNode) {\n updater.syncToMarks(i == this$1.node.childCount ? Mark.none : this$1.node.child(i).marks, inline, view);\n } // If the next node is a desc matching this widget, reuse it,\n // otherwise insert the widget as a new view desc.\n\n\n updater.placeWidget(widget, view, off);\n }, function (child, outerDeco, innerDeco, i) {\n // Make sure the wrapping mark descs match the node's marks.\n updater.syncToMarks(child.marks, inline, view); // Either find an existing desc that exactly matches this node,\n // and drop the descs before it.\n\n updater.findNodeMatch(child, outerDeco, innerDeco, i) || // Or try updating the next desc to reflect this node.\n updater.updateNextNode(child, outerDeco, innerDeco, view, i) || // Or just add it as a new desc.\n updater.addNode(child, outerDeco, innerDeco, view, off);\n off += child.nodeSize;\n }); // Drop all remaining descs after the current position.\n\n updater.syncToMarks(nothing, inline, view);\n\n if (this.node.isTextblock) {\n updater.addTextblockHacks();\n }\n\n updater.destroyRest(); // Sync the DOM if anything changed\n\n if (updater.changed || this.dirty == CONTENT_DIRTY) {\n // May have to protect focused DOM from being changed if a composition is active\n if (composition) {\n this.protectLocalComposition(view, composition);\n }\n\n renderDescs(this.contentDOM, this.children, view);\n\n if (result.ios) {\n iosHacks(this.dom);\n }\n }\n };\n\n NodeViewDesc.prototype.localCompositionNode = function localCompositionNode(view, pos) {\n // Only do something if both the selection and a focused text node\n // are inside of this node, and the node isn't already part of a\n // view that's a child of this view\n var ref = view.state.selection;\n var from = ref.from;\n var to = ref.to;\n\n if (!(view.state.selection instanceof TextSelection) || from < pos || to > pos + this.node.content.size) {\n return;\n }\n\n var sel = view.root.getSelection();\n var textNode = nearbyTextNode(sel.focusNode, sel.focusOffset);\n\n if (!textNode || !this.dom.contains(textNode.parentNode)) {\n return;\n } // Find the text in the focused node in the node, stop if it's not\n // there (may have been modified through other means, in which\n // case it should overwritten)\n\n\n var text = textNode.nodeValue;\n var textPos = findTextInFragment(this.node.content, text, from - pos, to - pos);\n return textPos < 0 ? null : {\n node: textNode,\n pos: textPos,\n text: text\n };\n };\n\n NodeViewDesc.prototype.protectLocalComposition = function protectLocalComposition(view, ref) {\n var node = ref.node;\n var pos = ref.pos;\n var text = ref.text; // The node is already part of a local view desc, leave it there\n\n if (this.getDesc(node)) {\n return;\n } // Create a composition view for the orphaned nodes\n\n\n var topNode = node;\n\n for (;; topNode = topNode.parentNode) {\n if (topNode.parentNode == this.contentDOM) {\n break;\n }\n\n while (topNode.previousSibling) {\n topNode.parentNode.removeChild(topNode.previousSibling);\n }\n\n while (topNode.nextSibling) {\n topNode.parentNode.removeChild(topNode.nextSibling);\n }\n\n if (topNode.pmViewDesc) {\n topNode.pmViewDesc = null;\n }\n }\n\n var desc = new CompositionViewDesc(this, topNode, node, text);\n view.compositionNodes.push(desc); // Patch up this.children to contain the composition view\n\n this.children = replaceNodes(this.children, pos, pos + text.length, view, desc);\n }; // : (Node, [Decoration], DecorationSet, EditorView) → bool\n // If this desc be updated to match the given node decoration,\n // do so and return true.\n\n\n NodeViewDesc.prototype.update = function update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY || !node.sameMarkup(this.node)) {\n return false;\n }\n\n this.updateInner(node, outerDeco, innerDeco, view);\n return true;\n };\n\n NodeViewDesc.prototype.updateInner = function updateInner(node, outerDeco, innerDeco, view) {\n this.updateOuterDeco(outerDeco);\n this.node = node;\n this.innerDeco = innerDeco;\n\n if (this.contentDOM) {\n this.updateChildren(view, this.posAtStart);\n }\n\n this.dirty = NOT_DIRTY;\n };\n\n NodeViewDesc.prototype.updateOuterDeco = function updateOuterDeco(outerDeco) {\n if (sameOuterDeco(outerDeco, this.outerDeco)) {\n return;\n }\n\n var needsWrap = this.nodeDOM.nodeType != 1;\n var oldDOM = this.dom;\n this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));\n\n if (this.dom != oldDOM) {\n oldDOM.pmViewDesc = null;\n this.dom.pmViewDesc = this;\n }\n\n this.outerDeco = outerDeco;\n }; // Mark this node as being the selected node.\n\n\n NodeViewDesc.prototype.selectNode = function selectNode() {\n this.nodeDOM.classList.add(\"ProseMirror-selectednode\");\n\n if (this.contentDOM || !this.node.type.spec.draggable) {\n this.dom.draggable = true;\n }\n }; // Remove selected node marking from this node.\n\n\n NodeViewDesc.prototype.deselectNode = function deselectNode() {\n this.nodeDOM.classList.remove(\"ProseMirror-selectednode\");\n\n if (this.contentDOM || !this.node.type.spec.draggable) {\n this.dom.removeAttribute(\"draggable\");\n }\n };\n\n prototypeAccessors$3.domAtom.get = function () {\n return this.node.isAtom;\n };\n\n Object.defineProperties(NodeViewDesc.prototype, prototypeAccessors$3);\n return NodeViewDesc;\n}(ViewDesc); // Create a view desc for the top-level document node, to be exported\n// and used by the view class.\n\n\nfunction docViewDesc(doc, outerDeco, innerDeco, dom, view) {\n applyOuterDeco(dom, outerDeco, doc);\n return new NodeViewDesc(null, doc, outerDeco, innerDeco, dom, dom, dom, view, 0);\n}\n\nvar TextViewDesc = /*@__PURE__*/function (NodeViewDesc) {\n function TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {\n NodeViewDesc.call(this, parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view);\n }\n\n if (NodeViewDesc) TextViewDesc.__proto__ = NodeViewDesc;\n TextViewDesc.prototype = Object.create(NodeViewDesc && NodeViewDesc.prototype);\n TextViewDesc.prototype.constructor = TextViewDesc;\n var prototypeAccessors$4 = {\n domAtom: {\n configurable: true\n }\n };\n\n TextViewDesc.prototype.parseRule = function parseRule() {\n var skip = this.nodeDOM.parentNode;\n\n while (skip && skip != this.dom && !skip.pmIsDeco) {\n skip = skip.parentNode;\n }\n\n return {\n skip: skip || true\n };\n };\n\n TextViewDesc.prototype.update = function update(node, outerDeco, _, view) {\n if (this.dirty == NODE_DIRTY || this.dirty != NOT_DIRTY && !this.inParent() || !node.sameMarkup(this.node)) {\n return false;\n }\n\n this.updateOuterDeco(outerDeco);\n\n if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {\n this.nodeDOM.nodeValue = node.text;\n\n if (view.trackWrites == this.nodeDOM) {\n view.trackWrites = null;\n }\n }\n\n this.node = node;\n this.dirty = NOT_DIRTY;\n return true;\n };\n\n TextViewDesc.prototype.inParent = function inParent() {\n var parentDOM = this.parent.contentDOM;\n\n for (var n = this.nodeDOM; n; n = n.parentNode) {\n if (n == parentDOM) {\n return true;\n }\n }\n\n return false;\n };\n\n TextViewDesc.prototype.domFromPos = function domFromPos(pos) {\n return {\n node: this.nodeDOM,\n offset: pos\n };\n };\n\n TextViewDesc.prototype.localPosFromDOM = function localPosFromDOM(dom, offset, bias) {\n if (dom == this.nodeDOM) {\n return this.posAtStart + Math.min(offset, this.node.text.length);\n }\n\n return NodeViewDesc.prototype.localPosFromDOM.call(this, dom, offset, bias);\n };\n\n TextViewDesc.prototype.ignoreMutation = function ignoreMutation(mutation) {\n return mutation.type != \"characterData\" && mutation.type != \"selection\";\n };\n\n TextViewDesc.prototype.slice = function slice(from, to, view) {\n var node = this.node.cut(from, to),\n dom = document.createTextNode(node.text);\n return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view);\n };\n\n prototypeAccessors$4.domAtom.get = function () {\n return false;\n };\n\n Object.defineProperties(TextViewDesc.prototype, prototypeAccessors$4);\n return TextViewDesc;\n}(NodeViewDesc); // A dummy desc used to tag trailing BR or span nodes created to work\n// around contentEditable terribleness.\n\n\nvar BRHackViewDesc = /*@__PURE__*/function (ViewDesc) {\n function BRHackViewDesc() {\n ViewDesc.apply(this, arguments);\n }\n\n if (ViewDesc) BRHackViewDesc.__proto__ = ViewDesc;\n BRHackViewDesc.prototype = Object.create(ViewDesc && ViewDesc.prototype);\n BRHackViewDesc.prototype.constructor = BRHackViewDesc;\n var prototypeAccessors$5 = {\n domAtom: {\n configurable: true\n }\n };\n\n BRHackViewDesc.prototype.parseRule = function parseRule() {\n return {\n ignore: true\n };\n };\n\n BRHackViewDesc.prototype.matchesHack = function matchesHack() {\n return this.dirty == NOT_DIRTY;\n };\n\n prototypeAccessors$5.domAtom.get = function () {\n return true;\n };\n\n Object.defineProperties(BRHackViewDesc.prototype, prototypeAccessors$5);\n return BRHackViewDesc;\n}(ViewDesc); // A separate subclass is used for customized node views, so that the\n// extra checks only have to be made for nodes that are actually\n// customized.\n\n\nvar CustomNodeViewDesc = /*@__PURE__*/function (NodeViewDesc) {\n function CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) {\n NodeViewDesc.call(this, parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos);\n this.spec = spec;\n }\n\n if (NodeViewDesc) CustomNodeViewDesc.__proto__ = NodeViewDesc;\n CustomNodeViewDesc.prototype = Object.create(NodeViewDesc && NodeViewDesc.prototype);\n CustomNodeViewDesc.prototype.constructor = CustomNodeViewDesc; // A custom `update` method gets to decide whether the update goes\n // through. If it does, and there's a `contentDOM` node, our logic\n // updates the children.\n\n CustomNodeViewDesc.prototype.update = function update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY) {\n return false;\n }\n\n if (this.spec.update) {\n var result = this.spec.update(node, outerDeco);\n\n if (result) {\n this.updateInner(node, outerDeco, innerDeco, view);\n }\n\n return result;\n } else if (!this.contentDOM && !node.isLeaf) {\n return false;\n } else {\n return NodeViewDesc.prototype.update.call(this, node, outerDeco, innerDeco, view);\n }\n };\n\n CustomNodeViewDesc.prototype.selectNode = function selectNode() {\n this.spec.selectNode ? this.spec.selectNode() : NodeViewDesc.prototype.selectNode.call(this);\n };\n\n CustomNodeViewDesc.prototype.deselectNode = function deselectNode() {\n this.spec.deselectNode ? this.spec.deselectNode() : NodeViewDesc.prototype.deselectNode.call(this);\n };\n\n CustomNodeViewDesc.prototype.setSelection = function setSelection(anchor, head, root, force) {\n this.spec.setSelection ? this.spec.setSelection(anchor, head, root) : NodeViewDesc.prototype.setSelection.call(this, anchor, head, root, force);\n };\n\n CustomNodeViewDesc.prototype.destroy = function destroy() {\n if (this.spec.destroy) {\n this.spec.destroy();\n }\n\n NodeViewDesc.prototype.destroy.call(this);\n };\n\n CustomNodeViewDesc.prototype.stopEvent = function stopEvent(event) {\n return this.spec.stopEvent ? this.spec.stopEvent(event) : false;\n };\n\n CustomNodeViewDesc.prototype.ignoreMutation = function ignoreMutation(mutation) {\n return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : NodeViewDesc.prototype.ignoreMutation.call(this, mutation);\n };\n\n return CustomNodeViewDesc;\n}(NodeViewDesc); // : (dom.Node, [ViewDesc])\n// Sync the content of the given DOM node with the nodes associated\n// with the given array of view descs, recursing into mark descs\n// because this should sync the subtree for a whole node at a time.\n\n\nfunction renderDescs(parentDOM, descs, view) {\n var dom = parentDOM.firstChild,\n written = false;\n\n for (var i = 0; i < descs.length; i++) {\n var desc = descs[i],\n childDOM = desc.dom;\n\n if (childDOM.parentNode == parentDOM) {\n while (childDOM != dom) {\n dom = rm(dom);\n written = true;\n }\n\n dom = dom.nextSibling;\n } else {\n written = true;\n parentDOM.insertBefore(childDOM, dom);\n }\n\n if (desc instanceof MarkViewDesc) {\n var pos = dom ? dom.previousSibling : parentDOM.lastChild;\n renderDescs(desc.contentDOM, desc.children, view);\n dom = pos ? pos.nextSibling : parentDOM.firstChild;\n }\n }\n\n while (dom) {\n dom = rm(dom);\n written = true;\n }\n\n if (written && view.trackWrites == parentDOM) {\n view.trackWrites = null;\n }\n}\n\nfunction OuterDecoLevel(nodeName) {\n if (nodeName) {\n this.nodeName = nodeName;\n }\n}\n\nOuterDecoLevel.prototype = Object.create(null);\nvar noDeco = [new OuterDecoLevel()];\n\nfunction computeOuterDeco(outerDeco, node, needsWrap) {\n if (outerDeco.length == 0) {\n return noDeco;\n }\n\n var top = needsWrap ? noDeco[0] : new OuterDecoLevel(),\n result = [top];\n\n for (var i = 0; i < outerDeco.length; i++) {\n var attrs = outerDeco[i].type.attrs;\n\n if (!attrs) {\n continue;\n }\n\n if (attrs.nodeName) {\n result.push(top = new OuterDecoLevel(attrs.nodeName));\n }\n\n for (var name in attrs) {\n var val = attrs[name];\n\n if (val == null) {\n continue;\n }\n\n if (needsWrap && result.length == 1) {\n result.push(top = new OuterDecoLevel(node.isInline ? \"span\" : \"div\"));\n }\n\n if (name == \"class\") {\n top[\"class\"] = (top[\"class\"] ? top[\"class\"] + \" \" : \"\") + val;\n } else if (name == \"style\") {\n top.style = (top.style ? top.style + \";\" : \"\") + val;\n } else if (name != \"nodeName\") {\n top[name] = val;\n }\n }\n }\n\n return result;\n}\n\nfunction patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) {\n // Shortcut for trivial case\n if (prevComputed == noDeco && curComputed == noDeco) {\n return nodeDOM;\n }\n\n var curDOM = nodeDOM;\n\n for (var i = 0; i < curComputed.length; i++) {\n var deco = curComputed[i],\n prev = prevComputed[i];\n\n if (i) {\n var parent = void 0;\n\n if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM && (parent = curDOM.parentNode) && parent.tagName.toLowerCase() == deco.nodeName) {\n curDOM = parent;\n } else {\n parent = document.createElement(deco.nodeName);\n parent.pmIsDeco = true;\n parent.appendChild(curDOM);\n prev = noDeco[0];\n curDOM = parent;\n }\n }\n\n patchAttributes(curDOM, prev || noDeco[0], deco);\n }\n\n return curDOM;\n}\n\nfunction patchAttributes(dom, prev, cur) {\n for (var name in prev) {\n if (name != \"class\" && name != \"style\" && name != \"nodeName\" && !(name in cur)) {\n dom.removeAttribute(name);\n }\n }\n\n for (var name$1 in cur) {\n if (name$1 != \"class\" && name$1 != \"style\" && name$1 != \"nodeName\" && cur[name$1] != prev[name$1]) {\n dom.setAttribute(name$1, cur[name$1]);\n }\n }\n\n if (prev[\"class\"] != cur[\"class\"]) {\n var prevList = prev[\"class\"] ? prev[\"class\"].split(\" \") : nothing;\n var curList = cur[\"class\"] ? cur[\"class\"].split(\" \") : nothing;\n\n for (var i = 0; i < prevList.length; i++) {\n if (curList.indexOf(prevList[i]) == -1) {\n dom.classList.remove(prevList[i]);\n }\n }\n\n for (var i$1 = 0; i$1 < curList.length; i$1++) {\n if (prevList.indexOf(curList[i$1]) == -1) {\n dom.classList.add(curList[i$1]);\n }\n }\n }\n\n if (prev.style != cur.style) {\n if (prev.style) {\n var prop = /\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g,\n m;\n\n while (m = prop.exec(prev.style)) {\n dom.style.removeProperty(m[1]);\n }\n }\n\n if (cur.style) {\n dom.style.cssText += cur.style;\n }\n }\n}\n\nfunction applyOuterDeco(dom, deco, node) {\n return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1));\n} // : ([Decoration], [Decoration]) → bool\n\n\nfunction sameOuterDeco(a, b) {\n if (a.length != b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; i++) {\n if (!a[i].type.eq(b[i].type)) {\n return false;\n }\n }\n\n return true;\n} // Remove a DOM node and return its next sibling.\n\n\nfunction rm(dom) {\n var next = dom.nextSibling;\n dom.parentNode.removeChild(dom);\n return next;\n} // Helper class for incrementally updating a tree of mark descs and\n// the widget and node descs inside of them.\n\n\nvar ViewTreeUpdater = function ViewTreeUpdater(top, lockedNode) {\n this.top = top;\n this.lock = lockedNode; // Index into `this.top`'s child array, represents the current\n // update position.\n\n this.index = 0; // When entering a mark, the current top and index are pushed\n // onto this.\n\n this.stack = []; // Tracks whether anything was changed\n\n this.changed = false;\n var pre = preMatch(top.node.content, top.children);\n this.preMatched = pre.nodes;\n this.preMatchOffset = pre.offset;\n};\n\nViewTreeUpdater.prototype.getPreMatch = function getPreMatch(index) {\n return index >= this.preMatchOffset ? this.preMatched[index - this.preMatchOffset] : null;\n}; // Destroy and remove the children between the given indices in\n// `this.top`.\n\n\nViewTreeUpdater.prototype.destroyBetween = function destroyBetween(start, end) {\n if (start == end) {\n return;\n }\n\n for (var i = start; i < end; i++) {\n this.top.children[i].destroy();\n }\n\n this.top.children.splice(start, end - start);\n this.changed = true;\n}; // Destroy all remaining children in `this.top`.\n\n\nViewTreeUpdater.prototype.destroyRest = function destroyRest() {\n this.destroyBetween(this.index, this.top.children.length);\n}; // : ([Mark], EditorView)\n// Sync the current stack of mark descs with the given array of\n// marks, reusing existing mark descs when possible.\n\n\nViewTreeUpdater.prototype.syncToMarks = function syncToMarks(marks, inline, view) {\n var keep = 0,\n depth = this.stack.length >> 1;\n var maxKeep = Math.min(depth, marks.length);\n\n while (keep < maxKeep && (keep == depth - 1 ? this.top : this.stack[keep + 1 << 1]).matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false) {\n keep++;\n }\n\n while (keep < depth) {\n this.destroyRest();\n this.top.dirty = NOT_DIRTY;\n this.index = this.stack.pop();\n this.top = this.stack.pop();\n depth--;\n }\n\n while (depth < marks.length) {\n this.stack.push(this.top, this.index + 1);\n var found = -1;\n\n for (var i = this.index; i < Math.min(this.index + 3, this.top.children.length); i++) {\n if (this.top.children[i].matchesMark(marks[depth])) {\n found = i;\n break;\n }\n }\n\n if (found > -1) {\n if (found > this.index) {\n this.changed = true;\n this.destroyBetween(this.index, found);\n }\n\n this.top = this.top.children[this.index];\n } else {\n var markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view);\n this.top.children.splice(this.index, 0, markDesc);\n this.top = markDesc;\n this.changed = true;\n }\n\n this.index = 0;\n depth++;\n }\n}; // : (Node, [Decoration], DecorationSet) → bool\n// Try to find a node desc matching the given data. Skip over it and\n// return true when successful.\n\n\nViewTreeUpdater.prototype.findNodeMatch = function findNodeMatch(node, outerDeco, innerDeco, index) {\n var found = -1,\n preMatch = index < 0 ? undefined : this.getPreMatch(index),\n children = this.top.children;\n\n if (preMatch && preMatch.matchesNode(node, outerDeco, innerDeco)) {\n found = children.indexOf(preMatch);\n } else {\n for (var i = this.index, e = Math.min(children.length, i + 5); i < e; i++) {\n var child = children[i];\n\n if (child.matchesNode(node, outerDeco, innerDeco) && this.preMatched.indexOf(child) < 0) {\n found = i;\n break;\n }\n }\n }\n\n if (found < 0) {\n return false;\n }\n\n this.destroyBetween(this.index, found);\n this.index++;\n return true;\n}; // : (Node, [Decoration], DecorationSet, EditorView, Fragment, number) → bool\n// Try to update the next node, if any, to the given data. Checks\n// pre-matches to avoid overwriting nodes that could still be used.\n\n\nViewTreeUpdater.prototype.updateNextNode = function updateNextNode(node, outerDeco, innerDeco, view, index) {\n for (var i = this.index; i < this.top.children.length; i++) {\n var next = this.top.children[i];\n\n if (next instanceof NodeViewDesc) {\n var preMatch = this.preMatched.indexOf(next);\n\n if (preMatch > -1 && preMatch + this.preMatchOffset != index) {\n return false;\n }\n\n var nextDOM = next.dom; // Can't update if nextDOM is or contains this.lock, except if\n // it's a text node whose content already matches the new text\n // and whose decorations match the new ones.\n\n var locked = this.lock && (nextDOM == this.lock || nextDOM.nodeType == 1 && nextDOM.contains(this.lock.parentNode)) && !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text && next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco));\n\n if (!locked && next.update(node, outerDeco, innerDeco, view)) {\n this.destroyBetween(this.index, i);\n\n if (next.dom != nextDOM) {\n this.changed = true;\n }\n\n this.index++;\n return true;\n }\n\n break;\n }\n }\n\n return false;\n}; // : (Node, [Decoration], DecorationSet, EditorView)\n// Insert the node as a newly created node desc.\n\n\nViewTreeUpdater.prototype.addNode = function addNode(node, outerDeco, innerDeco, view, pos) {\n this.top.children.splice(this.index++, 0, NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos));\n this.changed = true;\n};\n\nViewTreeUpdater.prototype.placeWidget = function placeWidget(widget, view, pos) {\n var next = this.index < this.top.children.length ? this.top.children[this.index] : null;\n\n if (next && next.matchesWidget(widget) && (widget == next.widget || !next.widget.type.toDOM.parentNode)) {\n this.index++;\n } else {\n var desc = new WidgetViewDesc(this.top, widget, view, pos);\n this.top.children.splice(this.index++, 0, desc);\n this.changed = true;\n }\n}; // Make sure a textblock looks and behaves correctly in\n// contentEditable.\n\n\nViewTreeUpdater.prototype.addTextblockHacks = function addTextblockHacks() {\n var lastChild = this.top.children[this.index - 1];\n\n while (lastChild instanceof MarkViewDesc) {\n lastChild = lastChild.children[lastChild.children.length - 1];\n }\n\n if (!lastChild || // Empty textblock\n !(lastChild instanceof TextViewDesc) || /\\n$/.test(lastChild.node.text)) {\n if (this.index < this.top.children.length && this.top.children[this.index].matchesHack()) {\n this.index++;\n } else {\n var dom = document.createElement(\"br\");\n this.top.children.splice(this.index++, 0, new BRHackViewDesc(this.top, nothing, dom, null));\n this.changed = true;\n }\n }\n}; // : (Fragment, [ViewDesc]) → [ViewDesc]\n// Iterate from the end of the fragment and array of descs to find\n// directly matching ones, in order to avoid overeagerly reusing\n// those for other nodes. Returns an array whose positions correspond\n// to node positions in the fragment, and whose elements are either\n// descs matched to the child at that index, or empty.\n\n\nfunction preMatch(frag, descs) {\n var result = [],\n end = frag.childCount;\n\n for (var i = descs.length - 1; end > 0 && i >= 0; i--) {\n var desc = descs[i],\n node = desc.node;\n\n if (!node) {\n continue;\n }\n\n if (node != frag.child(end - 1)) {\n break;\n }\n\n result.push(desc);\n --end;\n }\n\n return {\n nodes: result.reverse(),\n offset: end\n };\n}\n\nfunction compareSide(a, b) {\n return a.type.side - b.type.side;\n} // : (ViewDesc, DecorationSet, (Decoration, number), (Node, [Decoration], DecorationSet, number))\n// This function abstracts iterating over the nodes and decorations in\n// a fragment. Calls `onNode` for each node, with its local and child\n// decorations. Splits text nodes when there is a decoration starting\n// or ending inside of them. Calls `onWidget` for each widget.\n\n\nfunction iterDeco(parent, deco, onWidget, onNode) {\n var locals = deco.locals(parent),\n offset = 0; // Simple, cheap variant for when there are no local decorations\n\n if (locals.length == 0) {\n for (var i = 0; i < parent.childCount; i++) {\n var child = parent.child(i);\n onNode(child, locals, deco.forChild(offset, child), i);\n offset += child.nodeSize;\n }\n\n return;\n }\n\n var decoIndex = 0,\n active = [],\n restNode = null;\n\n for (var parentIndex = 0;;) {\n if (decoIndex < locals.length && locals[decoIndex].to == offset) {\n var widget = locals[decoIndex++],\n widgets = void 0;\n\n while (decoIndex < locals.length && locals[decoIndex].to == offset) {\n (widgets || (widgets = [widget])).push(locals[decoIndex++]);\n }\n\n if (widgets) {\n widgets.sort(compareSide);\n\n for (var i$1 = 0; i$1 < widgets.length; i$1++) {\n onWidget(widgets[i$1], parentIndex, !!restNode);\n }\n } else {\n onWidget(widget, parentIndex, !!restNode);\n }\n }\n\n var child$1 = void 0,\n index = void 0;\n\n if (restNode) {\n index = -1;\n child$1 = restNode;\n restNode = null;\n } else if (parentIndex < parent.childCount) {\n index = parentIndex;\n child$1 = parent.child(parentIndex++);\n } else {\n break;\n }\n\n for (var i$2 = 0; i$2 < active.length; i$2++) {\n if (active[i$2].to <= offset) {\n active.splice(i$2--, 1);\n }\n }\n\n while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset) {\n active.push(locals[decoIndex++]);\n }\n\n var end = offset + child$1.nodeSize;\n\n if (child$1.isText) {\n var cutAt = end;\n\n if (decoIndex < locals.length && locals[decoIndex].from < cutAt) {\n cutAt = locals[decoIndex].from;\n }\n\n for (var i$3 = 0; i$3 < active.length; i$3++) {\n if (active[i$3].to < cutAt) {\n cutAt = active[i$3].to;\n }\n }\n\n if (cutAt < end) {\n restNode = child$1.cut(cutAt - offset);\n child$1 = child$1.cut(0, cutAt - offset);\n end = cutAt;\n index = -1;\n }\n }\n\n var outerDeco = !active.length ? nothing : child$1.isInline && !child$1.isLeaf ? active.filter(function (d) {\n return !d.inline;\n }) : active.slice();\n onNode(child$1, outerDeco, deco.forChild(offset, child$1), index);\n offset = end;\n }\n} // List markers in Mobile Safari will mysteriously disappear\n// sometimes. This works around that.\n\n\nfunction iosHacks(dom) {\n if (dom.nodeName == \"UL\" || dom.nodeName == \"OL\") {\n var oldCSS = dom.style.cssText;\n dom.style.cssText = oldCSS + \"; list-style: square !important\";\n window.getComputedStyle(dom).listStyle;\n dom.style.cssText = oldCSS;\n }\n}\n\nfunction nearbyTextNode(node, offset) {\n for (;;) {\n if (node.nodeType == 3) {\n return node;\n }\n\n if (node.nodeType == 1 && offset > 0) {\n if (node.childNodes.length > offset && node.childNodes[offset].nodeType == 3) {\n return node.childNodes[offset];\n }\n\n node = node.childNodes[offset - 1];\n offset = nodeSize(node);\n } else if (node.nodeType == 1 && offset < node.childNodes.length) {\n node = node.childNodes[offset];\n offset = 0;\n } else {\n return null;\n }\n }\n} // Find a piece of text in an inline fragment, overlapping from-to\n\n\nfunction findTextInFragment(frag, text, from, to) {\n for (var i = 0, pos = 0; i < frag.childCount && pos <= to;) {\n var child = frag.child(i++),\n childStart = pos;\n pos += child.nodeSize;\n\n if (!child.isText) {\n continue;\n }\n\n var str = child.text;\n\n while (i < frag.childCount) {\n var next = frag.child(i++);\n pos += next.nodeSize;\n\n if (!next.isText) {\n break;\n }\n\n str += next.text;\n }\n\n if (pos >= from) {\n var found = str.lastIndexOf(text, to - childStart);\n\n if (found >= 0 && found + text.length + childStart >= from) {\n return childStart + found;\n }\n }\n }\n\n return -1;\n} // Replace range from-to in an array of view descs with replacement\n// (may be null to just delete). This goes very much against the grain\n// of the rest of this code, which tends to create nodes with the\n// right shape in one go, rather than messing with them after\n// creation, but is necessary in the composition hack.\n\n\nfunction replaceNodes(nodes, from, to, view, replacement) {\n var result = [];\n\n for (var i = 0, off = 0; i < nodes.length; i++) {\n var child = nodes[i],\n start = off,\n end = off += child.size;\n\n if (start >= to || end <= from) {\n result.push(child);\n } else {\n if (start < from) {\n result.push(child.slice(0, from - start, view));\n }\n\n if (replacement) {\n result.push(replacement);\n replacement = null;\n }\n\n if (end > to) {\n result.push(child.slice(to - start, child.size, view));\n }\n }\n }\n\n return result;\n}\n\nfunction selectionFromDOM(view, origin) {\n var domSel = view.root.getSelection(),\n doc = view.state.doc;\n\n if (!domSel.focusNode) {\n return null;\n }\n\n var nearestDesc = view.docView.nearestDesc(domSel.focusNode),\n inWidget = nearestDesc && nearestDesc.size == 0;\n var head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);\n\n if (head < 0) {\n return null;\n }\n\n var $head = doc.resolve(head),\n $anchor,\n selection;\n\n if (selectionCollapsed(domSel)) {\n $anchor = $head;\n\n while (nearestDesc && !nearestDesc.node) {\n nearestDesc = nearestDesc.parent;\n }\n\n if (nearestDesc && nearestDesc.node.isAtom && NodeSelection.isSelectable(nearestDesc.node) && nearestDesc.parent && !(nearestDesc.node.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {\n var pos = nearestDesc.posBefore;\n selection = new NodeSelection(head == pos ? $head : doc.resolve(pos));\n }\n } else {\n var anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);\n\n if (anchor < 0) {\n return null;\n }\n\n $anchor = doc.resolve(anchor);\n }\n\n if (!selection) {\n var bias = origin == \"pointer\" || view.state.selection.head < $head.pos && !inWidget ? 1 : -1;\n selection = selectionBetween(view, $anchor, $head, bias);\n }\n\n return selection;\n}\n\nfunction selectionToDOM(view, force) {\n var sel = view.state.selection;\n syncNodeSelection(view, sel);\n\n if (view.editable ? !view.hasFocus() : !(hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom))) {\n return;\n }\n\n view.domObserver.disconnectSelection();\n\n if (view.cursorWrapper) {\n selectCursorWrapper(view);\n } else {\n var anchor = sel.anchor;\n var head = sel.head;\n var resetEditableFrom, resetEditableTo;\n\n if (brokenSelectBetweenUneditable && !(sel instanceof TextSelection)) {\n if (!sel.$from.parent.inlineContent) {\n resetEditableFrom = temporarilyEditableNear(view, sel.from);\n }\n\n if (!sel.empty && !sel.$from.parent.inlineContent) {\n resetEditableTo = temporarilyEditableNear(view, sel.to);\n }\n }\n\n view.docView.setSelection(anchor, head, view.root, force);\n\n if (brokenSelectBetweenUneditable) {\n if (resetEditableFrom) {\n resetEditable(resetEditableFrom);\n }\n\n if (resetEditableTo) {\n resetEditable(resetEditableTo);\n }\n }\n\n if (sel.visible) {\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n } else {\n view.dom.classList.add(\"ProseMirror-hideselection\");\n\n if (\"onselectionchange\" in document) {\n removeClassOnSelectionChange(view);\n }\n }\n }\n\n view.domObserver.setCurSelection();\n view.domObserver.connectSelection();\n} // Kludge to work around Webkit not allowing a selection to start/end\n// between non-editable block nodes. We briefly make something\n// editable, set the selection, then set it uneditable again.\n\n\nvar brokenSelectBetweenUneditable = result.safari || result.chrome && result.chrome_version < 63;\n\nfunction temporarilyEditableNear(view, pos) {\n var ref = view.docView.domFromPos(pos, 0);\n var node = ref.node;\n var offset = ref.offset;\n var after = offset < node.childNodes.length ? node.childNodes[offset] : null;\n var before = offset ? node.childNodes[offset - 1] : null;\n\n if (result.safari && after && after.contentEditable == \"false\") {\n return setEditable(after);\n }\n\n if ((!after || after.contentEditable == \"false\") && (!before || before.contentEditable == \"false\")) {\n if (after) {\n return setEditable(after);\n } else if (before) {\n return setEditable(before);\n }\n }\n}\n\nfunction setEditable(element) {\n element.contentEditable = \"true\";\n\n if (result.safari && element.draggable) {\n element.draggable = false;\n element.wasDraggable = true;\n }\n\n return element;\n}\n\nfunction resetEditable(element) {\n element.contentEditable = \"false\";\n\n if (element.wasDraggable) {\n element.draggable = true;\n element.wasDraggable = null;\n }\n}\n\nfunction removeClassOnSelectionChange(view) {\n var doc = view.dom.ownerDocument;\n doc.removeEventListener(\"selectionchange\", view.hideSelectionGuard);\n var domSel = view.root.getSelection();\n var node = domSel.anchorNode,\n offset = domSel.anchorOffset;\n doc.addEventListener(\"selectionchange\", view.hideSelectionGuard = function () {\n if (domSel.anchorNode != node || domSel.anchorOffset != offset) {\n doc.removeEventListener(\"selectionchange\", view.hideSelectionGuard);\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n }\n });\n}\n\nfunction selectCursorWrapper(view) {\n var domSel = view.root.getSelection(),\n range = document.createRange();\n var node = view.cursorWrapper.dom,\n img = node.nodeName == \"IMG\";\n\n if (img) {\n range.setEnd(node.parentNode, domIndex(node) + 1);\n } else {\n range.setEnd(node, 0);\n }\n\n range.collapse(false);\n domSel.removeAllRanges();\n domSel.addRange(range); // Kludge to kill 'control selection' in IE11 when selecting an\n // invisible cursor wrapper, since that would result in those weird\n // resize handles and a selection that considers the absolutely\n // positioned wrapper, rather than the root editable node, the\n // focused element.\n\n if (!img && !view.state.selection.visible && result.ie && result.ie_version <= 11) {\n node.disabled = true;\n node.disabled = false;\n }\n}\n\nfunction syncNodeSelection(view, sel) {\n if (sel instanceof NodeSelection) {\n var desc = view.docView.descAt(sel.from);\n\n if (desc != view.lastSelectedViewDesc) {\n clearNodeSelection(view);\n\n if (desc) {\n desc.selectNode();\n }\n\n view.lastSelectedViewDesc = desc;\n }\n } else {\n clearNodeSelection(view);\n }\n} // Clear all DOM statefulness of the last node selection.\n\n\nfunction clearNodeSelection(view) {\n if (view.lastSelectedViewDesc) {\n if (view.lastSelectedViewDesc.parent) {\n view.lastSelectedViewDesc.deselectNode();\n }\n\n view.lastSelectedViewDesc = null;\n }\n}\n\nfunction selectionBetween(view, $anchor, $head, bias) {\n return view.someProp(\"createSelectionBetween\", function (f) {\n return f(view, $anchor, $head);\n }) || TextSelection.between($anchor, $head, bias);\n}\n\nfunction hasFocusAndSelection(view) {\n if (view.editable && view.root.activeElement != view.dom) {\n return false;\n }\n\n return hasSelection(view);\n}\n\nfunction hasSelection(view) {\n var sel = view.root.getSelection();\n\n if (!sel.anchorNode) {\n return false;\n }\n\n try {\n // Firefox will raise 'permission denied' errors when accessing\n // properties of `sel.anchorNode` when it's in a generated CSS\n // element.\n return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) && (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));\n } catch (_) {\n return false;\n }\n}\n\nfunction anchorInRightPlace(view) {\n var anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0);\n var domSel = view.root.getSelection();\n return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset);\n}\n\nfunction moveSelectionBlock(state, dir) {\n var ref = state.selection;\n var $anchor = ref.$anchor;\n var $head = ref.$head;\n var $side = dir > 0 ? $anchor.max($head) : $anchor.min($head);\n var $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null;\n return $start && Selection.findFrom($start, dir);\n}\n\nfunction apply(view, sel) {\n view.dispatch(view.state.tr.setSelection(sel).scrollIntoView());\n return true;\n}\n\nfunction selectHorizontally(view, dir, mods) {\n var sel = view.state.selection;\n\n if (sel instanceof TextSelection) {\n if (!sel.empty || mods.indexOf(\"s\") > -1) {\n return false;\n } else if (view.endOfTextblock(dir > 0 ? \"right\" : \"left\")) {\n var next = moveSelectionBlock(view.state, dir);\n\n if (next && next instanceof NodeSelection) {\n return apply(view, next);\n }\n\n return false;\n } else if (!(result.mac && mods.indexOf(\"m\") > -1)) {\n var $head = sel.$head,\n node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter,\n desc;\n\n if (!node || node.isText) {\n return false;\n }\n\n var nodePos = dir < 0 ? $head.pos - node.nodeSize : $head.pos;\n\n if (!(node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM)) {\n return false;\n }\n\n if (NodeSelection.isSelectable(node)) {\n return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head));\n } else if (result.webkit) {\n // Chrome and Safari will introduce extra pointless cursor\n // positions around inline uneditable nodes, so we have to\n // take over and move the cursor past them (#937)\n return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)));\n } else {\n return false;\n }\n }\n } else if (sel instanceof NodeSelection && sel.node.isInline) {\n return apply(view, new TextSelection(dir > 0 ? sel.$to : sel.$from));\n } else {\n var next$1 = moveSelectionBlock(view.state, dir);\n\n if (next$1) {\n return apply(view, next$1);\n }\n\n return false;\n }\n}\n\nfunction nodeLen(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\n\nfunction isIgnorable(dom) {\n var desc = dom.pmViewDesc;\n return desc && desc.size == 0 && (dom.nextSibling || dom.nodeName != \"BR\");\n} // Make sure the cursor isn't directly after one or more ignored\n// nodes, which will confuse the browser's cursor motion logic.\n\n\nfunction skipIgnoredNodesLeft(view) {\n var sel = view.root.getSelection();\n var node = sel.focusNode,\n offset = sel.focusOffset;\n\n if (!node) {\n return;\n }\n\n var moveNode,\n moveOffset,\n force = false; // Gecko will do odd things when the selection is directly in front\n // of a non-editable node, so in that case, move it into the next\n // node if possible. Issue prosemirror/prosemirror#832.\n\n if (result.gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset])) {\n force = true;\n }\n\n for (;;) {\n if (offset > 0) {\n if (node.nodeType != 1) {\n break;\n } else {\n var before = node.childNodes[offset - 1];\n\n if (isIgnorable(before)) {\n moveNode = node;\n moveOffset = --offset;\n } else if (before.nodeType == 3) {\n node = before;\n offset = node.nodeValue.length;\n } else {\n break;\n }\n }\n } else if (isBlockNode(node)) {\n break;\n } else {\n var prev = node.previousSibling;\n\n while (prev && isIgnorable(prev)) {\n moveNode = node.parentNode;\n moveOffset = domIndex(prev);\n prev = prev.previousSibling;\n }\n\n if (!prev) {\n node = node.parentNode;\n\n if (node == view.dom) {\n break;\n }\n\n offset = 0;\n } else {\n node = prev;\n offset = nodeLen(node);\n }\n }\n }\n\n if (force) {\n setSelFocus(view, sel, node, offset);\n } else if (moveNode) {\n setSelFocus(view, sel, moveNode, moveOffset);\n }\n} // Make sure the cursor isn't directly before one or more ignored\n// nodes.\n\n\nfunction skipIgnoredNodesRight(view) {\n var sel = view.root.getSelection();\n var node = sel.focusNode,\n offset = sel.focusOffset;\n\n if (!node) {\n return;\n }\n\n var len = nodeLen(node);\n var moveNode, moveOffset;\n\n for (;;) {\n if (offset < len) {\n if (node.nodeType != 1) {\n break;\n }\n\n var after = node.childNodes[offset];\n\n if (isIgnorable(after)) {\n moveNode = node;\n moveOffset = ++offset;\n } else {\n break;\n }\n } else if (isBlockNode(node)) {\n break;\n } else {\n var next = node.nextSibling;\n\n while (next && isIgnorable(next)) {\n moveNode = next.parentNode;\n moveOffset = domIndex(next) + 1;\n next = next.nextSibling;\n }\n\n if (!next) {\n node = node.parentNode;\n\n if (node == view.dom) {\n break;\n }\n\n offset = len = 0;\n } else {\n node = next;\n offset = 0;\n len = nodeLen(node);\n }\n }\n }\n\n if (moveNode) {\n setSelFocus(view, sel, moveNode, moveOffset);\n }\n}\n\nfunction isBlockNode(dom) {\n var desc = dom.pmViewDesc;\n return desc && desc.node && desc.node.isBlock;\n}\n\nfunction setSelFocus(view, sel, node, offset) {\n if (selectionCollapsed(sel)) {\n var range = document.createRange();\n range.setEnd(node, offset);\n range.setStart(node, offset);\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (sel.extend) {\n sel.extend(node, offset);\n }\n\n view.domObserver.setCurSelection();\n var state = view.state; // If no state update ends up happening, reset the selection.\n\n setTimeout(function () {\n if (view.state == state) {\n selectionToDOM(view);\n }\n }, 50);\n} // : (EditorState, number)\n// Check whether vertical selection motion would involve node\n// selections. If so, apply it (if not, the result is left to the\n// browser)\n\n\nfunction selectVertically(view, dir, mods) {\n var sel = view.state.selection;\n\n if (sel instanceof TextSelection && !sel.empty || mods.indexOf(\"s\") > -1) {\n return false;\n }\n\n if (result.mac && mods.indexOf(\"m\") > -1) {\n return false;\n }\n\n var $from = sel.$from;\n var $to = sel.$to;\n\n if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? \"up\" : \"down\")) {\n var next = moveSelectionBlock(view.state, dir);\n\n if (next && next instanceof NodeSelection) {\n return apply(view, next);\n }\n }\n\n if (!$from.parent.inlineContent) {\n var side = dir < 0 ? $from : $to;\n var beyond = sel instanceof AllSelection ? Selection.near(side, dir) : Selection.findFrom(side, dir);\n return beyond ? apply(view, beyond) : false;\n }\n\n return false;\n}\n\nfunction stopNativeHorizontalDelete(view, dir) {\n if (!(view.state.selection instanceof TextSelection)) {\n return true;\n }\n\n var ref = view.state.selection;\n var $head = ref.$head;\n var $anchor = ref.$anchor;\n var empty = ref.empty;\n\n if (!$head.sameParent($anchor)) {\n return true;\n }\n\n if (!empty) {\n return false;\n }\n\n if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\")) {\n return true;\n }\n\n var nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter);\n\n if (nextNode && !nextNode.isText) {\n var tr = view.state.tr;\n\n if (dir < 0) {\n tr[\"delete\"]($head.pos - nextNode.nodeSize, $head.pos);\n } else {\n tr[\"delete\"]($head.pos, $head.pos + nextNode.nodeSize);\n }\n\n view.dispatch(tr);\n return true;\n }\n\n return false;\n}\n\nfunction switchEditable(view, node, state) {\n view.domObserver.stop();\n node.contentEditable = state;\n view.domObserver.start();\n} // Issue #867 / #1090 / https://bugs.chromium.org/p/chromium/issues/detail?id=903821\n// In which Safari (and at some point in the past, Chrome) does really\n// wrong things when the down arrow is pressed when the cursor is\n// directly at the start of a textblock and has an uneditable node\n// after it\n\n\nfunction safariDownArrowBug(view) {\n if (!result.safari || view.state.selection.$head.parentOffset > 0) {\n return;\n }\n\n var ref = view.root.getSelection();\n var focusNode = ref.focusNode;\n var focusOffset = ref.focusOffset;\n\n if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 && focusNode.firstChild && focusNode.firstChild.contentEditable == \"false\") {\n var child = focusNode.firstChild;\n switchEditable(view, child, true);\n setTimeout(function () {\n return switchEditable(view, child, false);\n }, 20);\n }\n} // A backdrop key mapping used to make sure we always suppress keys\n// that have a dangerous default effect, even if the commands they are\n// bound to return false, and to make sure that cursor-motion keys\n// find a cursor (as opposed to a node selection) when pressed. For\n// cursor-motion keys, the code in the handlers also takes care of\n// block selections.\n\n\nfunction getMods(event) {\n var result = \"\";\n\n if (event.ctrlKey) {\n result += \"c\";\n }\n\n if (event.metaKey) {\n result += \"m\";\n }\n\n if (event.altKey) {\n result += \"a\";\n }\n\n if (event.shiftKey) {\n result += \"s\";\n }\n\n return result;\n}\n\nfunction captureKeyDown(view, event) {\n var code = event.keyCode,\n mods = getMods(event);\n\n if (code == 8 || result.mac && code == 72 && mods == \"c\") {\n // Backspace, Ctrl-h on Mac\n return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodesLeft(view);\n } else if (code == 46 || result.mac && code == 68 && mods == \"c\") {\n // Delete, Ctrl-d on Mac\n return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodesRight(view);\n } else if (code == 13 || code == 27) {\n // Enter, Esc\n return true;\n } else if (code == 37) {\n // Left arrow\n return selectHorizontally(view, -1, mods) || skipIgnoredNodesLeft(view);\n } else if (code == 39) {\n // Right arrow\n return selectHorizontally(view, 1, mods) || skipIgnoredNodesRight(view);\n } else if (code == 38) {\n // Up arrow\n return selectVertically(view, -1, mods) || skipIgnoredNodesLeft(view);\n } else if (code == 40) {\n // Down arrow\n return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodesRight(view);\n } else if (mods == (result.mac ? \"m\" : \"c\") && (code == 66 || code == 73 || code == 89 || code == 90)) {\n // Mod-[biyz]\n return true;\n }\n\n return false;\n} // Note that all referencing and parsing is done with the\n// start-of-operation selection and document, since that's the one\n// that the DOM represents. If any changes came in in the meantime,\n// the modification is mapped over those before it is applied, in\n// readDOMChange.\n\n\nfunction parseBetween(view, from_, to_) {\n var ref = view.docView.parseRange(from_, to_);\n var parent = ref.node;\n var fromOffset = ref.fromOffset;\n var toOffset = ref.toOffset;\n var from = ref.from;\n var to = ref.to;\n var domSel = view.root.getSelection(),\n find = null,\n anchor = domSel.anchorNode;\n\n if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {\n find = [{\n node: anchor,\n offset: domSel.anchorOffset\n }];\n\n if (!selectionCollapsed(domSel)) {\n find.push({\n node: domSel.focusNode,\n offset: domSel.focusOffset\n });\n }\n } // Work around issue in Chrome where backspacing sometimes replaces\n // the deleted content with a random BR node (issues #799, #831)\n\n\n if (result.chrome && view.lastKeyCode === 8) {\n for (var off = toOffset; off > fromOffset; off--) {\n var node = parent.childNodes[off - 1],\n desc = node.pmViewDesc;\n\n if (node.nodeType == \"BR\" && !desc) {\n toOffset = off;\n break;\n }\n\n if (!desc || desc.size) {\n break;\n }\n }\n }\n\n var startDoc = view.state.doc;\n var parser = view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n var $from = startDoc.resolve(from);\n var sel = null,\n doc = parser.parse(parent, {\n topNode: $from.parent,\n topMatch: $from.parent.contentMatchAt($from.index()),\n topOpen: true,\n from: fromOffset,\n to: toOffset,\n preserveWhitespace: $from.parent.type.spec.code ? \"full\" : true,\n editableContent: true,\n findPositions: find,\n ruleFromNode: ruleFromNode,\n context: $from\n });\n\n if (find && find[0].pos != null) {\n var anchor$1 = find[0].pos,\n head = find[1] && find[1].pos;\n\n if (head == null) {\n head = anchor$1;\n }\n\n sel = {\n anchor: anchor$1 + from,\n head: head + from\n };\n }\n\n return {\n doc: doc,\n sel: sel,\n from: from,\n to: to\n };\n}\n\nfunction ruleFromNode(dom) {\n var desc = dom.pmViewDesc;\n\n if (desc) {\n return desc.parseRule();\n } else if (dom.nodeName == \"BR\" && dom.parentNode) {\n // Safari replaces the list item or table cell with a BR\n // directly in the list node (?!) if you delete the last\n // character in a list item or table cell (#708, #862)\n if (result.safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) {\n var skip = document.createElement(\"div\");\n skip.appendChild(document.createElement(\"li\"));\n return {\n skip: skip\n };\n } else if (dom.parentNode.lastChild == dom || result.safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) {\n return {\n ignore: true\n };\n }\n } else if (dom.nodeName == \"IMG\" && dom.getAttribute(\"mark-placeholder\")) {\n return {\n ignore: true\n };\n }\n}\n\nfunction readDOMChange(view, from, to, typeOver, addedNodes) {\n if (from < 0) {\n var origin = view.lastSelectionTime > Date.now() - 50 ? view.lastSelectionOrigin : null;\n var newSel = selectionFromDOM(view, origin);\n\n if (newSel && !view.state.selection.eq(newSel)) {\n var tr$1 = view.state.tr.setSelection(newSel);\n\n if (origin == \"pointer\") {\n tr$1.setMeta(\"pointer\", true);\n } else if (origin == \"key\") {\n tr$1.scrollIntoView();\n }\n\n view.dispatch(tr$1);\n }\n\n return;\n }\n\n var $before = view.state.doc.resolve(from);\n var shared = $before.sharedDepth(to);\n from = $before.before(shared + 1);\n to = view.state.doc.resolve(to).after(shared + 1);\n var sel = view.state.selection;\n var parse = parseBetween(view, from, to); // Chrome sometimes leaves the cursor before the inserted text when\n // composing after a cursor wrapper. This moves it forward.\n\n if (result.chrome && view.cursorWrapper && parse.sel && parse.sel.anchor == view.cursorWrapper.deco.from) {\n var text = view.cursorWrapper.deco.type.toDOM.nextSibling;\n var size = text && text.nodeValue ? text.nodeValue.length : 1;\n parse.sel = {\n anchor: parse.sel.anchor + size,\n head: parse.sel.anchor + size\n };\n }\n\n var doc = view.state.doc,\n compare = doc.slice(parse.from, parse.to);\n var preferredPos, preferredSide; // Prefer anchoring to end when Backspace is pressed\n\n if (view.lastKeyCode === 8 && Date.now() - 100 < view.lastKeyCodeTime) {\n preferredPos = view.state.selection.to;\n preferredSide = \"end\";\n } else {\n preferredPos = view.state.selection.from;\n preferredSide = \"start\";\n }\n\n view.lastKeyCode = null;\n var change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide);\n\n if (!change) {\n if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) && !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) {\n change = {\n start: sel.from,\n endA: sel.to,\n endB: sel.to\n };\n } else if (result.ios && view.lastIOSEnter > Date.now() - 225 && addedNodes.some(function (n) {\n return n.nodeName == \"DIV\" || n.nodeName == \"P\";\n }) && view.someProp(\"handleKeyDown\", function (f) {\n return f(view, keyEvent(13, \"Enter\"));\n })) {\n view.lastIOSEnter = 0;\n return;\n } else {\n if (parse.sel) {\n var sel$1 = resolveSelection(view, view.state.doc, parse.sel);\n\n if (sel$1 && !sel$1.eq(view.state.selection)) {\n view.dispatch(view.state.tr.setSelection(sel$1));\n }\n }\n\n return;\n }\n }\n\n view.domChangeCount++; // Handle the case where overwriting a selection by typing matches\n // the start or end of the selected content, creating a change\n // that's smaller than what was actually overwritten.\n\n if (view.state.selection.from < view.state.selection.to && change.start == change.endB && view.state.selection instanceof TextSelection) {\n if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2) {\n change.start = view.state.selection.from;\n } else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2) {\n change.endB += view.state.selection.to - change.endA;\n change.endA = view.state.selection.to;\n }\n } // IE11 will insert a non-breaking space _ahead_ of the space after\n // the cursor space when adding a space before another space. When\n // that happened, adjust the change to cover the space instead.\n\n\n if (result.ie && result.ie_version <= 11 && change.endB == change.start + 1 && change.endA == change.start && change.start > parse.from && parse.doc.textBetween(change.start - parse.from - 1, change.start - parse.from + 1) == \" \\xA0\") {\n change.start--;\n change.endA--;\n change.endB--;\n }\n\n var $from = parse.doc.resolveNoCache(change.start - parse.from);\n var $to = parse.doc.resolveNoCache(change.endB - parse.from);\n var inlineChange = $from.sameParent($to) && $from.parent.inlineContent;\n var nextSel; // If this looks like the effect of pressing Enter (or was recorded\n // as being an iOS enter press), just dispatch an Enter key instead.\n\n if ((result.ios && view.lastIOSEnter > Date.now() - 225 && (!inlineChange || addedNodes.some(function (n) {\n return n.nodeName == \"DIV\" || n.nodeName == \"P\";\n })) || !inlineChange && $from.pos < parse.doc.content.size && (nextSel = Selection.findFrom(parse.doc.resolve($from.pos + 1), 1, true)) && nextSel.head == $to.pos) && view.someProp(\"handleKeyDown\", function (f) {\n return f(view, keyEvent(13, \"Enter\"));\n })) {\n view.lastIOSEnter = 0;\n return;\n } // Same for backspace\n\n\n if (view.state.selection.anchor > change.start && looksLikeJoin(doc, change.start, change.endA, $from, $to) && view.someProp(\"handleKeyDown\", function (f) {\n return f(view, keyEvent(8, \"Backspace\"));\n })) {\n if (result.android && result.chrome) {\n view.domObserver.suppressSelectionUpdates();\n } // #820\n\n\n return;\n } // This tries to detect Android virtual keyboard\n // enter-and-pick-suggestion action. That sometimes (see issue\n // #1059) first fires a DOM mutation, before moving the selection to\n // the newly created block. And then, because ProseMirror cleans up\n // the DOM selection, it gives up moving the selection entirely,\n // leaving the cursor in the wrong place. When that happens, we drop\n // the new paragraph from the initial change, and fire a simulated\n // enter key afterwards.\n\n\n if (result.android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth && parse.sel && parse.sel.anchor == parse.sel.head && parse.sel.head == change.endA) {\n change.endB -= 2;\n $to = parse.doc.resolveNoCache(change.endB - parse.from);\n setTimeout(function () {\n view.someProp(\"handleKeyDown\", function (f) {\n return f(view, keyEvent(13, \"Enter\"));\n });\n }, 20);\n }\n\n var chFrom = change.start,\n chTo = change.endA;\n var tr, storedMarks, markChange, $from1;\n\n if (inlineChange) {\n if ($from.pos == $to.pos) {\n // Deletion\n // IE11 sometimes weirdly moves the DOM selection around after\n // backspacing out the first element in a textblock\n if (result.ie && result.ie_version <= 11 && $from.parentOffset == 0) {\n view.domObserver.suppressSelectionUpdates();\n setTimeout(function () {\n return selectionToDOM(view);\n }, 20);\n }\n\n tr = view.state.tr[\"delete\"](chFrom, chTo);\n storedMarks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA));\n } else if ( // Adding or removing a mark\n change.endA == change.endB && ($from1 = doc.resolve(change.start)) && (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset), $from1.parent.content.cut($from1.parentOffset, change.endA - $from1.start())))) {\n tr = view.state.tr;\n\n if (markChange.type == \"add\") {\n tr.addMark(chFrom, chTo, markChange.mark);\n } else {\n tr.removeMark(chFrom, chTo, markChange.mark);\n }\n } else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {\n // Both positions in the same text node -- simply insert text\n var text$1 = $from.parent.textBetween($from.parentOffset, $to.parentOffset);\n\n if (view.someProp(\"handleTextInput\", function (f) {\n return f(view, chFrom, chTo, text$1);\n })) {\n return;\n }\n\n tr = view.state.tr.insertText(text$1, chFrom, chTo);\n }\n }\n\n if (!tr) {\n tr = view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from));\n }\n\n if (parse.sel) {\n var sel$2 = resolveSelection(view, tr.doc, parse.sel); // Chrome Android will sometimes, during composition, report the\n // selection in the wrong place. If it looks like that is\n // happening, don't update the selection.\n // Edge just doesn't move the cursor forward when you start typing\n // in an empty block or between br nodes.\n\n if (sel$2 && !(result.chrome && result.android && view.composing && sel$2.empty && (sel$2.head == chFrom || sel$2.head == tr.mapping.map(chTo) - 1) || result.ie && sel$2.empty && sel$2.head == chFrom)) {\n tr.setSelection(sel$2);\n }\n }\n\n if (storedMarks) {\n tr.ensureMarks(storedMarks);\n }\n\n view.dispatch(tr.scrollIntoView());\n}\n\nfunction resolveSelection(view, doc, parsedSel) {\n if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size) {\n return null;\n }\n\n return selectionBetween(view, doc.resolve(parsedSel.anchor), doc.resolve(parsedSel.head));\n} // : (Fragment, Fragment) → ?{mark: Mark, type: string}\n// Given two same-length, non-empty fragments of inline content,\n// determine whether the first could be created from the second by\n// removing or adding a single mark type.\n\n\nfunction isMarkChange(cur, prev) {\n var curMarks = cur.firstChild.marks,\n prevMarks = prev.firstChild.marks;\n var added = curMarks,\n removed = prevMarks,\n type,\n mark,\n update;\n\n for (var i = 0; i < prevMarks.length; i++) {\n added = prevMarks[i].removeFromSet(added);\n }\n\n for (var i$1 = 0; i$1 < curMarks.length; i$1++) {\n removed = curMarks[i$1].removeFromSet(removed);\n }\n\n if (added.length == 1 && removed.length == 0) {\n mark = added[0];\n type = \"add\";\n\n update = function update(node) {\n return node.mark(mark.addToSet(node.marks));\n };\n } else if (added.length == 0 && removed.length == 1) {\n mark = removed[0];\n type = \"remove\";\n\n update = function update(node) {\n return node.mark(mark.removeFromSet(node.marks));\n };\n } else {\n return null;\n }\n\n var updated = [];\n\n for (var i$2 = 0; i$2 < prev.childCount; i$2++) {\n updated.push(update(prev.child(i$2)));\n }\n\n if (Fragment.from(updated).eq(cur)) {\n return {\n mark: mark,\n type: type\n };\n }\n}\n\nfunction looksLikeJoin(old, start, end, $newStart, $newEnd) {\n if (!$newStart.parent.isTextblock || // The content must have shrunk\n end - start <= $newEnd.pos - $newStart.pos || // newEnd must point directly at or after the end of the block that newStart points into\n skipClosingAndOpening($newStart, true, false) < $newEnd.pos) {\n return false;\n }\n\n var $start = old.resolve(start); // Start must be at the end of a block\n\n if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock) {\n return false;\n }\n\n var $next = old.resolve(skipClosingAndOpening($start, true, true)); // The next textblock must start before end and end near it\n\n if (!$next.parent.isTextblock || $next.pos > end || skipClosingAndOpening($next, true, false) < end) {\n return false;\n } // The fragments after the join point must match\n\n\n return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content);\n}\n\nfunction skipClosingAndOpening($pos, fromEnd, mayOpen) {\n var depth = $pos.depth,\n end = fromEnd ? $pos.end() : $pos.pos;\n\n while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {\n depth--;\n end++;\n fromEnd = false;\n }\n\n if (mayOpen) {\n var next = $pos.node(depth).maybeChild($pos.indexAfter(depth));\n\n while (next && !next.isLeaf) {\n next = next.firstChild;\n end++;\n }\n }\n\n return end;\n}\n\nfunction findDiff(a, b, pos, preferredPos, preferredSide) {\n var start = a.findDiffStart(b, pos);\n\n if (start == null) {\n return null;\n }\n\n var ref = a.findDiffEnd(b, pos + a.size, pos + b.size);\n var endA = ref.a;\n var endB = ref.b;\n\n if (preferredSide == \"end\") {\n var adjust = Math.max(0, start - Math.min(endA, endB));\n preferredPos -= endA + adjust - start;\n }\n\n if (endA < start && a.size < b.size) {\n var move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;\n start -= move;\n endB = start + (endB - endA);\n endA = start;\n } else if (endB < start) {\n var move$1 = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;\n start -= move$1;\n endA = start + (endA - endB);\n endB = start;\n }\n\n return {\n start: start,\n endA: endA,\n endB: endB\n };\n}\n\nfunction serializeForClipboard(view, slice) {\n var context = [];\n var content = slice.content;\n var openStart = slice.openStart;\n var openEnd = slice.openEnd;\n\n while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) {\n openStart--;\n openEnd--;\n var node = content.firstChild;\n context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null);\n content = node.content;\n }\n\n var serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema);\n var doc = detachedDoc(),\n wrap = doc.createElement(\"div\");\n wrap.appendChild(serializer.serializeFragment(content, {\n document: doc\n }));\n var firstChild = wrap.firstChild,\n needsWrap;\n\n while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n for (var i = needsWrap.length - 1; i >= 0; i--) {\n var wrapper = doc.createElement(needsWrap[i]);\n\n while (wrap.firstChild) {\n wrapper.appendChild(wrap.firstChild);\n }\n\n wrap.appendChild(wrapper);\n }\n\n firstChild = wrap.firstChild;\n }\n\n if (firstChild && firstChild.nodeType == 1) {\n firstChild.setAttribute(\"data-pm-slice\", openStart + \" \" + openEnd + \" \" + JSON.stringify(context));\n }\n\n var text = view.someProp(\"clipboardTextSerializer\", function (f) {\n return f(slice);\n }) || slice.content.textBetween(0, slice.content.size, \"\\n\\n\");\n return {\n dom: wrap,\n text: text\n };\n} // : (EditorView, string, string, ?bool, ResolvedPos) → ?Slice\n// Read a slice of content from the clipboard (or drop data).\n\n\nfunction parseFromClipboard(view, text, html, plainText, $context) {\n var dom,\n inCode = $context.parent.type.spec.code,\n slice;\n\n if (!html && !text) {\n return null;\n }\n\n var asText = text && (plainText || inCode || !html);\n\n if (asText) {\n view.someProp(\"transformPastedText\", function (f) {\n text = f(text, inCode || plainText);\n });\n\n if (inCode) {\n return new Slice(Fragment.from(view.state.schema.text(text)), 0, 0);\n }\n\n var parsed = view.someProp(\"clipboardTextParser\", function (f) {\n return f(text, $context, plainText);\n });\n\n if (parsed) {\n slice = parsed;\n } else {\n dom = document.createElement(\"div\");\n text.trim().split(/(?:\\r\\n?|\\n)+/).forEach(function (block) {\n dom.appendChild(document.createElement(\"p\")).textContent = block;\n });\n }\n } else {\n view.someProp(\"transformPastedHTML\", function (f) {\n html = f(html);\n });\n dom = readHTML(html);\n }\n\n var contextNode = dom && dom.querySelector(\"[data-pm-slice]\");\n var sliceData = contextNode && /^(\\d+) (\\d+) (.*)/.exec(contextNode.getAttribute(\"data-pm-slice\"));\n\n if (!slice) {\n var parser = view.someProp(\"clipboardParser\") || view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n slice = parser.parseSlice(dom, {\n preserveWhitespace: !!(asText || sliceData),\n context: $context\n });\n }\n\n if (sliceData) {\n slice = addContext(closeSlice(slice, +sliceData[1], +sliceData[2]), sliceData[3]);\n } else // HTML wasn't created by ProseMirror. Make sure top-level siblings are coherent\n {\n slice = Slice.maxOpen(normalizeSiblings(slice.content, $context), false);\n }\n\n view.someProp(\"transformPasted\", function (f) {\n slice = f(slice);\n });\n return slice;\n} // Takes a slice parsed with parseSlice, which means there hasn't been\n// any content-expression checking done on the top nodes, tries to\n// find a parent node in the current context that might fit the nodes,\n// and if successful, rebuilds the slice so that it fits into that parent.\n//\n// This addresses the problem that Transform.replace expects a\n// coherent slice, and will fail to place a set of siblings that don't\n// fit anywhere in the schema.\n\n\nfunction normalizeSiblings(fragment, $context) {\n if (fragment.childCount < 2) {\n return fragment;\n }\n\n var loop = function loop(d) {\n var parent = $context.node(d);\n var match = parent.contentMatchAt($context.index(d));\n var lastWrap = void 0,\n result = [];\n fragment.forEach(function (node) {\n if (!result) {\n return;\n }\n\n var wrap = match.findWrapping(node.type),\n inLast;\n\n if (!wrap) {\n return result = null;\n }\n\n if (inLast = result.length && lastWrap.length && addToSibling(wrap, lastWrap, node, result[result.length - 1], 0)) {\n result[result.length - 1] = inLast;\n } else {\n if (result.length) {\n result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length);\n }\n\n var wrapped = withWrappers(node, wrap);\n result.push(wrapped);\n match = match.matchType(wrapped.type, wrapped.attrs);\n lastWrap = wrap;\n }\n });\n\n if (result) {\n return {\n v: Fragment.from(result)\n };\n }\n };\n\n for (var d = $context.depth; d >= 0; d--) {\n var returned = loop(d);\n if (returned) return returned.v;\n }\n\n return fragment;\n}\n\nfunction withWrappers(node, wrap, from) {\n if (from === void 0) from = 0;\n\n for (var i = wrap.length - 1; i >= from; i--) {\n node = wrap[i].create(null, Fragment.from(node));\n }\n\n return node;\n} // Used to group adjacent nodes wrapped in similar parents by\n// normalizeSiblings into the same parent node\n\n\nfunction addToSibling(wrap, lastWrap, node, sibling, depth) {\n if (depth < wrap.length && depth < lastWrap.length && wrap[depth] == lastWrap[depth]) {\n var inner = addToSibling(wrap, lastWrap, node, sibling.lastChild, depth + 1);\n\n if (inner) {\n return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner));\n }\n\n var match = sibling.contentMatchAt(sibling.childCount);\n\n if (match.matchType(depth == wrap.length - 1 ? node.type : wrap[depth + 1])) {\n return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node, wrap, depth + 1))));\n }\n }\n}\n\nfunction closeRight(node, depth) {\n if (depth == 0) {\n return node;\n }\n\n var fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1));\n var fill = node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true);\n return node.copy(fragment.append(fill));\n}\n\nfunction closeRange(fragment, side, from, to, depth, openEnd) {\n var node = side < 0 ? fragment.firstChild : fragment.lastChild,\n inner = node.content;\n\n if (depth < to - 1) {\n inner = closeRange(inner, side, from, to, depth + 1, openEnd);\n }\n\n if (depth >= from) {\n inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, fragment.childCount > 1 || openEnd <= depth).append(inner) : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true));\n }\n\n return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner));\n}\n\nfunction closeSlice(slice, openStart, openEnd) {\n if (openStart < slice.openStart) {\n slice = new Slice(closeRange(slice.content, -1, openStart, slice.openStart, 0, slice.openEnd), openStart, slice.openEnd);\n }\n\n if (openEnd < slice.openEnd) {\n slice = new Slice(closeRange(slice.content, 1, openEnd, slice.openEnd, 0, 0), slice.openStart, openEnd);\n }\n\n return slice;\n} // Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"<td>..</td>\"` the table cells are ignored.\n\n\nvar wrapMap = {\n thead: [\"table\"],\n tbody: [\"table\"],\n tfoot: [\"table\"],\n caption: [\"table\"],\n colgroup: [\"table\"],\n col: [\"table\", \"colgroup\"],\n tr: [\"table\", \"tbody\"],\n td: [\"table\", \"tbody\", \"tr\"],\n th: [\"table\", \"tbody\", \"tr\"]\n};\nvar _detachedDoc = null;\n\nfunction detachedDoc() {\n return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument(\"title\"));\n}\n\nfunction readHTML(html) {\n var metas = /(\\s*<meta [^>]*>)*/.exec(html);\n\n if (metas) {\n html = html.slice(metas[0].length);\n }\n\n var elt = detachedDoc().createElement(\"div\");\n var firstTag = /(?:<meta [^>]*>)*<([a-z][^>\\s]+)/i.exec(html),\n wrap,\n depth = 0;\n\n if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()]) {\n html = wrap.map(function (n) {\n return \"<\" + n + \">\";\n }).join(\"\") + html + wrap.map(function (n) {\n return \"</\" + n + \">\";\n }).reverse().join(\"\");\n depth = wrap.length;\n }\n\n elt.innerHTML = html;\n\n for (var i = 0; i < depth; i++) {\n elt = elt.firstChild;\n }\n\n return elt;\n}\n\nfunction addContext(slice, context) {\n if (!slice.size) {\n return slice;\n }\n\n var schema = slice.content.firstChild.type.schema,\n array;\n\n try {\n array = JSON.parse(context);\n } catch (e) {\n return slice;\n }\n\n var content = slice.content;\n var openStart = slice.openStart;\n var openEnd = slice.openEnd;\n\n for (var i = array.length - 2; i >= 0; i -= 2) {\n var type = schema.nodes[array[i]];\n\n if (!type || type.hasRequiredAttrs()) {\n break;\n }\n\n content = Fragment.from(type.create(array[i + 1], content));\n openStart++;\n openEnd++;\n }\n\n return new Slice(content, openStart, openEnd);\n}\n\nvar observeOptions = {\n childList: true,\n characterData: true,\n characterDataOldValue: true,\n attributes: true,\n attributeOldValue: true,\n subtree: true\n}; // IE11 has very broken mutation observers, so we also listen to DOMCharacterDataModified\n\nvar useCharData = result.ie && result.ie_version <= 11;\n\nvar SelectionState = function SelectionState() {\n this.anchorNode = this.anchorOffset = this.focusNode = this.focusOffset = null;\n};\n\nSelectionState.prototype.set = function set(sel) {\n this.anchorNode = sel.anchorNode;\n this.anchorOffset = sel.anchorOffset;\n this.focusNode = sel.focusNode;\n this.focusOffset = sel.focusOffset;\n};\n\nSelectionState.prototype.eq = function eq(sel) {\n return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset && sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset;\n};\n\nvar DOMObserver = function DOMObserver(view, handleDOMChange) {\n var this$1 = this;\n this.view = view;\n this.handleDOMChange = handleDOMChange;\n this.queue = [];\n this.flushingSoon = -1;\n this.observer = window.MutationObserver && new window.MutationObserver(function (mutations) {\n for (var i = 0; i < mutations.length; i++) {\n this$1.queue.push(mutations[i]);\n } // IE11 will sometimes (on backspacing out a single character\n // text node after a BR node) call the observer callback\n // before actually updating the DOM, which will cause\n // ProseMirror to miss the change (see #930)\n\n\n if (result.ie && result.ie_version <= 11 && mutations.some(function (m) {\n return m.type == \"childList\" && m.removedNodes.length || m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length;\n })) {\n this$1.flushSoon();\n } else {\n this$1.flush();\n }\n });\n this.currentSelection = new SelectionState();\n\n if (useCharData) {\n this.onCharData = function (e) {\n this$1.queue.push({\n target: e.target,\n type: \"characterData\",\n oldValue: e.prevValue\n });\n this$1.flushSoon();\n };\n }\n\n this.onSelectionChange = this.onSelectionChange.bind(this);\n this.suppressingSelectionUpdates = false;\n};\n\nDOMObserver.prototype.flushSoon = function flushSoon() {\n var this$1 = this;\n\n if (this.flushingSoon < 0) {\n this.flushingSoon = window.setTimeout(function () {\n this$1.flushingSoon = -1;\n this$1.flush();\n }, 20);\n }\n};\n\nDOMObserver.prototype.forceFlush = function forceFlush() {\n if (this.flushingSoon > -1) {\n window.clearTimeout(this.flushingSoon);\n this.flushingSoon = -1;\n this.flush();\n }\n};\n\nDOMObserver.prototype.start = function start() {\n if (this.observer) {\n this.observer.observe(this.view.dom, observeOptions);\n }\n\n if (useCharData) {\n this.view.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n }\n\n this.connectSelection();\n};\n\nDOMObserver.prototype.stop = function stop() {\n var this$1 = this;\n\n if (this.observer) {\n var take = this.observer.takeRecords();\n\n if (take.length) {\n for (var i = 0; i < take.length; i++) {\n this.queue.push(take[i]);\n }\n\n window.setTimeout(function () {\n return this$1.flush();\n }, 20);\n }\n\n this.observer.disconnect();\n }\n\n if (useCharData) {\n this.view.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n }\n\n this.disconnectSelection();\n};\n\nDOMObserver.prototype.connectSelection = function connectSelection() {\n this.view.dom.ownerDocument.addEventListener(\"selectionchange\", this.onSelectionChange);\n};\n\nDOMObserver.prototype.disconnectSelection = function disconnectSelection() {\n this.view.dom.ownerDocument.removeEventListener(\"selectionchange\", this.onSelectionChange);\n};\n\nDOMObserver.prototype.suppressSelectionUpdates = function suppressSelectionUpdates() {\n var this$1 = this;\n this.suppressingSelectionUpdates = true;\n setTimeout(function () {\n return this$1.suppressingSelectionUpdates = false;\n }, 50);\n};\n\nDOMObserver.prototype.onSelectionChange = function onSelectionChange() {\n if (!hasFocusAndSelection(this.view)) {\n return;\n }\n\n if (this.suppressingSelectionUpdates) {\n return selectionToDOM(this.view);\n } // Deletions on IE11 fire their events in the wrong order, giving\n // us a selection change event before the DOM changes are\n // reported.\n\n\n if (result.ie && result.ie_version <= 11 && !this.view.state.selection.empty) {\n var sel = this.view.root.getSelection(); // Selection.isCollapsed isn't reliable on IE\n\n if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset)) {\n return this.flushSoon();\n }\n }\n\n this.flush();\n};\n\nDOMObserver.prototype.setCurSelection = function setCurSelection() {\n this.currentSelection.set(this.view.root.getSelection());\n};\n\nDOMObserver.prototype.ignoreSelectionChange = function ignoreSelectionChange(sel) {\n if (sel.rangeCount == 0) {\n return true;\n }\n\n var container = sel.getRangeAt(0).commonAncestorContainer;\n var desc = this.view.docView.nearestDesc(container);\n\n if (desc && desc.ignoreMutation({\n type: \"selection\",\n target: container.nodeType == 3 ? container.parentNode : container\n })) {\n this.setCurSelection();\n return true;\n }\n};\n\nDOMObserver.prototype.flush = function flush() {\n if (!this.view.docView || this.flushingSoon > -1) {\n return;\n }\n\n var mutations = this.observer ? this.observer.takeRecords() : [];\n\n if (this.queue.length) {\n mutations = this.queue.concat(mutations);\n this.queue.length = 0;\n }\n\n var sel = this.view.root.getSelection();\n var newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasSelection(this.view) && !this.ignoreSelectionChange(sel);\n var from = -1,\n to = -1,\n typeOver = false,\n added = [];\n\n if (this.view.editable) {\n for (var i = 0; i < mutations.length; i++) {\n var result$1 = this.registerMutation(mutations[i], added);\n\n if (result$1) {\n from = from < 0 ? result$1.from : Math.min(result$1.from, from);\n to = to < 0 ? result$1.to : Math.max(result$1.to, to);\n\n if (result$1.typeOver) {\n typeOver = true;\n }\n }\n }\n }\n\n if (result.gecko && added.length > 1) {\n var brs = added.filter(function (n) {\n return n.nodeName == \"BR\";\n });\n\n if (brs.length == 2) {\n var a = brs[0];\n var b = brs[1];\n\n if (a.parentNode && a.parentNode.parentNode == b.parentNode) {\n b.remove();\n } else {\n a.remove();\n }\n }\n }\n\n if (from > -1 || newSel) {\n if (from > -1) {\n this.view.docView.markDirty(from, to);\n checkCSS(this.view);\n }\n\n this.handleDOMChange(from, to, typeOver, added);\n\n if (this.view.docView.dirty) {\n this.view.updateState(this.view.state);\n } else if (!this.currentSelection.eq(sel)) {\n selectionToDOM(this.view);\n }\n\n this.currentSelection.set(sel);\n }\n};\n\nDOMObserver.prototype.registerMutation = function registerMutation(mut, added) {\n // Ignore mutations inside nodes that were already noted as inserted\n if (added.indexOf(mut.target) > -1) {\n return null;\n }\n\n var desc = this.view.docView.nearestDesc(mut.target);\n\n if (mut.type == \"attributes\" && (desc == this.view.docView || mut.attributeName == \"contenteditable\" || // Firefox sometimes fires spurious events for null/empty styles\n mut.attributeName == \"style\" && !mut.oldValue && !mut.target.getAttribute(\"style\"))) {\n return null;\n }\n\n if (!desc || desc.ignoreMutation(mut)) {\n return null;\n }\n\n if (mut.type == \"childList\") {\n var prev = mut.previousSibling,\n next = mut.nextSibling;\n\n if (result.ie && result.ie_version <= 11 && mut.addedNodes.length) {\n // IE11 gives us incorrect next/prev siblings for some\n // insertions, so if there are added nodes, recompute those\n for (var i = 0; i < mut.addedNodes.length; i++) {\n var ref = mut.addedNodes[i];\n var previousSibling = ref.previousSibling;\n var nextSibling = ref.nextSibling;\n\n if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0) {\n prev = previousSibling;\n }\n\n if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0) {\n next = nextSibling;\n }\n }\n }\n\n var fromOffset = prev && prev.parentNode == mut.target ? domIndex(prev) + 1 : 0;\n var from = desc.localPosFromDOM(mut.target, fromOffset, -1);\n var toOffset = next && next.parentNode == mut.target ? domIndex(next) : mut.target.childNodes.length;\n\n for (var i$1 = 0; i$1 < mut.addedNodes.length; i$1++) {\n added.push(mut.addedNodes[i$1]);\n }\n\n var to = desc.localPosFromDOM(mut.target, toOffset, 1);\n return {\n from: from,\n to: to\n };\n } else if (mut.type == \"attributes\") {\n return {\n from: desc.posAtStart - desc.border,\n to: desc.posAtEnd + desc.border\n };\n } else {\n // \"characterData\"\n return {\n from: desc.posAtStart,\n to: desc.posAtEnd,\n // An event was generated for a text change that didn't change\n // any text. Mark the dom change to fall back to assuming the\n // selection was typed over with an identical value if it can't\n // find another change.\n typeOver: mut.target.nodeValue == mut.oldValue\n };\n }\n};\n\nvar cssChecked = false;\n\nfunction checkCSS(view) {\n if (cssChecked) {\n return;\n }\n\n cssChecked = true;\n\n if (getComputedStyle(view.dom).whiteSpace == \"normal\") {\n console[\"warn\"](\"ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package.\");\n }\n} // A collection of DOM events that occur within the editor, and callback functions\n// to invoke when the event fires.\n\n\nvar handlers = {},\n editHandlers = {};\n\nfunction initInput(view) {\n view.shiftKey = false;\n view.mouseDown = null;\n view.lastKeyCode = null;\n view.lastKeyCodeTime = 0;\n view.lastClick = {\n time: 0,\n x: 0,\n y: 0,\n type: \"\"\n };\n view.lastSelectionOrigin = null;\n view.lastSelectionTime = 0;\n view.lastIOSEnter = 0;\n view.lastIOSEnterFallbackTimeout = null;\n view.composing = false;\n view.composingTimeout = null;\n view.compositionNodes = [];\n view.compositionEndedAt = -2e8;\n view.domObserver = new DOMObserver(view, function (from, to, typeOver, added) {\n return readDOMChange(view, from, to, typeOver, added);\n });\n view.domObserver.start(); // Used by hacks like the beforeinput handler to check whether anything happened in the DOM\n\n view.domChangeCount = 0;\n view.eventHandlers = Object.create(null);\n\n var loop = function loop(event) {\n var handler = handlers[event];\n view.dom.addEventListener(event, view.eventHandlers[event] = function (event) {\n if (eventBelongsToView(view, event) && !runCustomHandler(view, event) && (view.editable || !(event.type in editHandlers))) {\n handler(view, event);\n }\n });\n };\n\n for (var event in handlers) {\n loop(event);\n } // On Safari, for reasons beyond my understanding, adding an input\n // event handler makes an issue where the composition vanishes when\n // you press enter go away.\n\n\n if (result.safari) {\n view.dom.addEventListener(\"input\", function () {\n return null;\n });\n }\n\n ensureListeners(view);\n}\n\nfunction setSelectionOrigin(view, origin) {\n view.lastSelectionOrigin = origin;\n view.lastSelectionTime = Date.now();\n}\n\nfunction destroyInput(view) {\n view.domObserver.stop();\n\n for (var type in view.eventHandlers) {\n view.dom.removeEventListener(type, view.eventHandlers[type]);\n }\n\n clearTimeout(view.composingTimeout);\n clearTimeout(view.lastIOSEnterFallbackTimeout);\n}\n\nfunction ensureListeners(view) {\n view.someProp(\"handleDOMEvents\", function (currentHandlers) {\n for (var type in currentHandlers) {\n if (!view.eventHandlers[type]) {\n view.dom.addEventListener(type, view.eventHandlers[type] = function (event) {\n return runCustomHandler(view, event);\n });\n }\n }\n });\n}\n\nfunction runCustomHandler(view, event) {\n return view.someProp(\"handleDOMEvents\", function (handlers) {\n var handler = handlers[event.type];\n return handler ? handler(view, event) || event.defaultPrevented : false;\n });\n}\n\nfunction eventBelongsToView(view, event) {\n if (!event.bubbles) {\n return true;\n }\n\n if (event.defaultPrevented) {\n return false;\n }\n\n for (var node = event.target; node != view.dom; node = node.parentNode) {\n if (!node || node.nodeType == 11 || node.pmViewDesc && node.pmViewDesc.stopEvent(event)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction dispatchEvent(view, event) {\n if (!runCustomHandler(view, event) && handlers[event.type] && (view.editable || !(event.type in editHandlers))) {\n handlers[event.type](view, event);\n }\n}\n\neditHandlers.keydown = function (view, event) {\n view.shiftKey = event.keyCode == 16 || event.shiftKey;\n\n if (inOrNearComposition(view, event)) {\n return;\n }\n\n view.domObserver.forceFlush();\n view.lastKeyCode = event.keyCode;\n view.lastKeyCodeTime = Date.now(); // On iOS, if we preventDefault enter key presses, the virtual\n // keyboard gets confused. So the hack here is to set a flag that\n // makes the DOM change code recognize that what just happens should\n // be replaced by whatever the Enter key handlers do.\n\n if (result.ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n var now = Date.now();\n view.lastIOSEnter = now;\n view.lastIOSEnterFallbackTimeout = setTimeout(function () {\n if (view.lastIOSEnter == now) {\n view.someProp(\"handleKeyDown\", function (f) {\n return f(view, keyEvent(13, \"Enter\"));\n });\n view.lastIOSEnter = 0;\n }\n }, 200);\n } else if (view.someProp(\"handleKeyDown\", function (f) {\n return f(view, event);\n }) || captureKeyDown(view, event)) {\n event.preventDefault();\n } else {\n setSelectionOrigin(view, \"key\");\n }\n};\n\neditHandlers.keyup = function (view, e) {\n if (e.keyCode == 16) {\n view.shiftKey = false;\n }\n};\n\neditHandlers.keypress = function (view, event) {\n if (inOrNearComposition(view, event) || !event.charCode || event.ctrlKey && !event.altKey || result.mac && event.metaKey) {\n return;\n }\n\n if (view.someProp(\"handleKeyPress\", function (f) {\n return f(view, event);\n })) {\n event.preventDefault();\n return;\n }\n\n var sel = view.state.selection;\n\n if (!(sel instanceof TextSelection) || !sel.$from.sameParent(sel.$to)) {\n var text = String.fromCharCode(event.charCode);\n\n if (!view.someProp(\"handleTextInput\", function (f) {\n return f(view, sel.$from.pos, sel.$to.pos, text);\n })) {\n view.dispatch(view.state.tr.insertText(text).scrollIntoView());\n }\n\n event.preventDefault();\n }\n};\n\nfunction eventCoords(event) {\n return {\n left: event.clientX,\n top: event.clientY\n };\n}\n\nfunction isNear(event, click) {\n var dx = click.x - event.clientX,\n dy = click.y - event.clientY;\n return dx * dx + dy * dy < 100;\n}\n\nfunction runHandlerOnContext(view, propName, pos, inside, event) {\n if (inside == -1) {\n return false;\n }\n\n var $pos = view.state.doc.resolve(inside);\n\n var loop = function loop(i) {\n if (view.someProp(propName, function (f) {\n return i > $pos.depth ? f(view, pos, $pos.nodeAfter, $pos.before(i), event, true) : f(view, pos, $pos.node(i), $pos.before(i), event, false);\n })) {\n return {\n v: true\n };\n }\n };\n\n for (var i = $pos.depth + 1; i > 0; i--) {\n var returned = loop(i);\n if (returned) return returned.v;\n }\n\n return false;\n}\n\nfunction updateSelection(view, selection, origin) {\n if (!view.focused) {\n view.focus();\n }\n\n var tr = view.state.tr.setSelection(selection);\n\n if (origin == \"pointer\") {\n tr.setMeta(\"pointer\", true);\n }\n\n view.dispatch(tr);\n}\n\nfunction selectClickedLeaf(view, inside) {\n if (inside == -1) {\n return false;\n }\n\n var $pos = view.state.doc.resolve(inside),\n node = $pos.nodeAfter;\n\n if (node && node.isAtom && NodeSelection.isSelectable(node)) {\n updateSelection(view, new NodeSelection($pos), \"pointer\");\n return true;\n }\n\n return false;\n}\n\nfunction selectClickedNode(view, inside) {\n if (inside == -1) {\n return false;\n }\n\n var sel = view.state.selection,\n selectedNode,\n selectAt;\n\n if (sel instanceof NodeSelection) {\n selectedNode = sel.node;\n }\n\n var $pos = view.state.doc.resolve(inside);\n\n for (var i = $pos.depth + 1; i > 0; i--) {\n var node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n\n if (NodeSelection.isSelectable(node)) {\n if (selectedNode && sel.$from.depth > 0 && i >= sel.$from.depth && $pos.before(sel.$from.depth + 1) == sel.$from.pos) {\n selectAt = $pos.before(sel.$from.depth);\n } else {\n selectAt = $pos.before(i);\n }\n\n break;\n }\n }\n\n if (selectAt != null) {\n updateSelection(view, NodeSelection.create(view.state.doc, selectAt), \"pointer\");\n return true;\n } else {\n return false;\n }\n}\n\nfunction handleSingleClick(view, pos, inside, event, selectNode) {\n return runHandlerOnContext(view, \"handleClickOn\", pos, inside, event) || view.someProp(\"handleClick\", function (f) {\n return f(view, pos, event);\n }) || (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside));\n}\n\nfunction handleDoubleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleDoubleClickOn\", pos, inside, event) || view.someProp(\"handleDoubleClick\", function (f) {\n return f(view, pos, event);\n });\n}\n\nfunction handleTripleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleTripleClickOn\", pos, inside, event) || view.someProp(\"handleTripleClick\", function (f) {\n return f(view, pos, event);\n }) || defaultTripleClick(view, inside);\n}\n\nfunction defaultTripleClick(view, inside) {\n var doc = view.state.doc;\n\n if (inside == -1) {\n if (doc.inlineContent) {\n updateSelection(view, TextSelection.create(doc, 0, doc.content.size), \"pointer\");\n return true;\n }\n\n return false;\n }\n\n var $pos = doc.resolve(inside);\n\n for (var i = $pos.depth + 1; i > 0; i--) {\n var node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n var nodePos = $pos.before(i);\n\n if (node.inlineContent) {\n updateSelection(view, TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size), \"pointer\");\n } else if (NodeSelection.isSelectable(node)) {\n updateSelection(view, NodeSelection.create(doc, nodePos), \"pointer\");\n } else {\n continue;\n }\n\n return true;\n }\n}\n\nfunction forceDOMFlush(view) {\n return endComposition(view);\n}\n\nvar selectNodeModifier = result.mac ? \"metaKey\" : \"ctrlKey\";\n\nhandlers.mousedown = function (view, event) {\n view.shiftKey = event.shiftKey;\n var flushed = forceDOMFlush(view);\n var now = Date.now(),\n type = \"singleClick\";\n\n if (now - view.lastClick.time < 500 && isNear(event, view.lastClick) && !event[selectNodeModifier]) {\n if (view.lastClick.type == \"singleClick\") {\n type = \"doubleClick\";\n } else if (view.lastClick.type == \"doubleClick\") {\n type = \"tripleClick\";\n }\n }\n\n view.lastClick = {\n time: now,\n x: event.clientX,\n y: event.clientY,\n type: type\n };\n var pos = view.posAtCoords(eventCoords(event));\n\n if (!pos) {\n return;\n }\n\n if (type == \"singleClick\") {\n view.mouseDown = new MouseDown(view, pos, event, flushed);\n } else if ((type == \"doubleClick\" ? handleDoubleClick : handleTripleClick)(view, pos.pos, pos.inside, event)) {\n event.preventDefault();\n } else {\n setSelectionOrigin(view, \"pointer\");\n }\n};\n\nvar MouseDown = function MouseDown(view, pos, event, flushed) {\n var this$1 = this;\n this.view = view;\n this.startDoc = view.state.doc;\n this.pos = pos;\n this.event = event;\n this.flushed = flushed;\n this.selectNode = event[selectNodeModifier];\n this.allowDefault = event.shiftKey;\n var targetNode, targetPos;\n\n if (pos.inside > -1) {\n targetNode = view.state.doc.nodeAt(pos.inside);\n targetPos = pos.inside;\n } else {\n var $pos = view.state.doc.resolve(pos.pos);\n targetNode = $pos.parent;\n targetPos = $pos.depth ? $pos.before() : 0;\n }\n\n this.mightDrag = null;\n var target = flushed ? null : event.target;\n var targetDesc = target ? view.docView.nearestDesc(target, true) : null;\n this.target = targetDesc ? targetDesc.dom : null;\n\n if (targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false || view.state.selection instanceof NodeSelection && targetPos == view.state.selection.from) {\n this.mightDrag = {\n node: targetNode,\n pos: targetPos,\n addAttr: this.target && !this.target.draggable,\n setUneditable: this.target && result.gecko && !this.target.hasAttribute(\"contentEditable\")\n };\n }\n\n if (this.target && this.mightDrag && (this.mightDrag.addAttr || this.mightDrag.setUneditable)) {\n this.view.domObserver.stop();\n\n if (this.mightDrag.addAttr) {\n this.target.draggable = true;\n }\n\n if (this.mightDrag.setUneditable) {\n setTimeout(function () {\n return this$1.target.setAttribute(\"contentEditable\", \"false\");\n }, 20);\n }\n\n this.view.domObserver.start();\n }\n\n view.root.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n view.root.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n setSelectionOrigin(view, \"pointer\");\n};\n\nMouseDown.prototype.done = function done() {\n this.view.root.removeEventListener(\"mouseup\", this.up);\n this.view.root.removeEventListener(\"mousemove\", this.move);\n\n if (this.mightDrag && this.target) {\n this.view.domObserver.stop();\n\n if (this.mightDrag.addAttr) {\n this.target.removeAttribute(\"draggable\");\n }\n\n if (this.mightDrag.setUneditable) {\n this.target.removeAttribute(\"contentEditable\");\n }\n\n this.view.domObserver.start();\n }\n\n this.view.mouseDown = null;\n};\n\nMouseDown.prototype.up = function up(event) {\n this.done();\n\n if (!this.view.dom.contains(event.target.nodeType == 3 ? event.target.parentNode : event.target)) {\n return;\n }\n\n var pos = this.pos;\n\n if (this.view.state.doc != this.startDoc) {\n pos = this.view.posAtCoords(eventCoords(event));\n }\n\n if (this.allowDefault || !pos) {\n setSelectionOrigin(this.view, \"pointer\");\n } else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) {\n event.preventDefault();\n } else if (this.flushed || // Safari ignores clicks on draggable elements\n result.safari && this.mightDrag && !this.mightDrag.node.isAtom || // Chrome will sometimes treat a node selection as a\n // cursor, but still report that the node is selected\n // when asked through getSelection. You'll then get a\n // situation where clicking at the point where that\n // (hidden) cursor is doesn't change the selection, and\n // thus doesn't get a reaction from ProseMirror. This\n // works around that.\n result.chrome && !(this.view.state.selection instanceof TextSelection) && (pos.pos == this.view.state.selection.from || pos.pos == this.view.state.selection.to)) {\n updateSelection(this.view, Selection.near(this.view.state.doc.resolve(pos.pos)), \"pointer\");\n event.preventDefault();\n } else {\n setSelectionOrigin(this.view, \"pointer\");\n }\n};\n\nMouseDown.prototype.move = function move(event) {\n if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 || Math.abs(this.event.y - event.clientY) > 4)) {\n this.allowDefault = true;\n }\n\n setSelectionOrigin(this.view, \"pointer\");\n};\n\nhandlers.touchdown = function (view) {\n forceDOMFlush(view);\n setSelectionOrigin(view, \"pointer\");\n};\n\nhandlers.contextmenu = function (view) {\n return forceDOMFlush(view);\n};\n\nfunction inOrNearComposition(view, event) {\n if (view.composing) {\n return true;\n } // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n // On Japanese input method editors (IMEs), the Enter key is used to confirm character\n // selection. On Safari, when Enter is pressed, compositionend and keydown events are\n // emitted. The keydown event triggers newline insertion, which we don't want.\n // This method returns true if the keydown event should be ignored.\n // We only ignore it once, as pressing Enter a second time *should* insert a newline.\n // Furthermore, the keydown event timestamp must be close to the compositionEndedAt timestamp.\n // This guards against the case where compositionend is triggered without the keyboard\n // (e.g. character confirmation may be done with the mouse), and keydown is triggered\n // afterwards- we wouldn't want to ignore the keydown event in this case.\n\n\n if (result.safari && Math.abs(event.timeStamp - view.compositionEndedAt) < 500) {\n view.compositionEndedAt = -2e8;\n return true;\n }\n\n return false;\n} // Drop active composition after 5 seconds of inactivity on Android\n\n\nvar timeoutComposition = result.android ? 5000 : -1;\n\neditHandlers.compositionstart = editHandlers.compositionupdate = function (view) {\n if (!view.composing) {\n view.domObserver.flush();\n var state = view.state;\n var $pos = state.selection.$from;\n\n if (state.selection.empty && (state.storedMarks || !$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(function (m) {\n return m.type.spec.inclusive === false;\n }))) {\n // Need to wrap the cursor in mark nodes different from the ones in the DOM context\n view.markCursor = view.state.storedMarks || $pos.marks();\n endComposition(view, true);\n view.markCursor = null;\n } else {\n endComposition(view); // In firefox, if the cursor is after but outside a marked node,\n // the inserted text won't inherit the marks. So this moves it\n // inside if necessary.\n\n if (result.gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {\n var sel = view.root.getSelection();\n\n for (var node = sel.focusNode, offset = sel.focusOffset; node && node.nodeType == 1 && offset != 0;) {\n var before = offset < 0 ? node.lastChild : node.childNodes[offset - 1];\n\n if (!before) {\n break;\n }\n\n if (before.nodeType == 3) {\n sel.collapse(before, before.nodeValue.length);\n break;\n } else {\n node = before;\n offset = -1;\n }\n }\n }\n }\n\n view.composing = true;\n }\n\n scheduleComposeEnd(view, timeoutComposition);\n};\n\neditHandlers.compositionend = function (view, event) {\n if (view.composing) {\n view.composing = false;\n view.compositionEndedAt = event.timeStamp;\n scheduleComposeEnd(view, 20);\n }\n};\n\nfunction scheduleComposeEnd(view, delay) {\n clearTimeout(view.composingTimeout);\n\n if (delay > -1) {\n view.composingTimeout = setTimeout(function () {\n return endComposition(view);\n }, delay);\n }\n}\n\nfunction clearComposition(view) {\n view.composing = false;\n\n while (view.compositionNodes.length > 0) {\n view.compositionNodes.pop().markParentsDirty();\n }\n}\n\nfunction endComposition(view, forceUpdate) {\n view.domObserver.forceFlush();\n clearComposition(view);\n\n if (forceUpdate || view.docView.dirty) {\n var sel = selectionFromDOM(view);\n\n if (sel && !sel.eq(view.state.selection)) {\n view.dispatch(view.state.tr.setSelection(sel));\n } else {\n view.updateState(view.state);\n }\n\n return true;\n }\n\n return false;\n}\n\nfunction captureCopy(view, dom) {\n // The extra wrapper is somehow necessary on IE/Edge to prevent the\n // content from being mangled when it is put onto the clipboard\n if (!view.dom.parentNode) {\n return;\n }\n\n var wrap = view.dom.parentNode.appendChild(document.createElement(\"div\"));\n wrap.appendChild(dom);\n wrap.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n var sel = getSelection(),\n range = document.createRange();\n range.selectNodeContents(dom); // Done because IE will fire a selectionchange moving the selection\n // to its start when removeAllRanges is called and the editor still\n // has focus (which will mess up the editor's selection state).\n\n view.dom.blur();\n sel.removeAllRanges();\n sel.addRange(range);\n setTimeout(function () {\n if (wrap.parentNode) {\n wrap.parentNode.removeChild(wrap);\n }\n\n view.focus();\n }, 50);\n} // This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API—all the objects and methods are\n// there, they just don't work, and they are hard to test.\n\n\nvar brokenClipboardAPI = result.ie && result.ie_version < 15 || result.ios && result.webkit_version < 604;\n\nhandlers.copy = editHandlers.cut = function (view, e) {\n var sel = view.state.selection,\n cut = e.type == \"cut\";\n\n if (sel.empty) {\n return;\n } // IE and Edge's clipboard interface is completely broken\n\n\n var data = brokenClipboardAPI ? null : e.clipboardData;\n var slice = sel.content();\n var ref = serializeForClipboard(view, slice);\n var dom = ref.dom;\n var text = ref.text;\n\n if (data) {\n e.preventDefault();\n data.clearData();\n data.setData(\"text/html\", dom.innerHTML);\n data.setData(\"text/plain\", text);\n } else {\n captureCopy(view, dom);\n }\n\n if (cut) {\n view.dispatch(view.state.tr.deleteSelection().scrollIntoView().setMeta(\"uiEvent\", \"cut\"));\n }\n};\n\nfunction sliceSingleNode(slice) {\n return slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1 ? slice.content.firstChild : null;\n}\n\nfunction capturePaste(view, e) {\n if (!view.dom.parentNode) {\n return;\n }\n\n var plainText = view.shiftKey || view.state.selection.$from.parent.type.spec.code;\n var target = view.dom.parentNode.appendChild(document.createElement(plainText ? \"textarea\" : \"div\"));\n\n if (!plainText) {\n target.contentEditable = \"true\";\n }\n\n target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n target.focus();\n setTimeout(function () {\n view.focus();\n\n if (target.parentNode) {\n target.parentNode.removeChild(target);\n }\n\n if (plainText) {\n doPaste(view, target.value, null, e);\n } else {\n doPaste(view, target.textContent, target.innerHTML, e);\n }\n }, 50);\n}\n\nfunction doPaste(view, text, html, e) {\n var slice = parseFromClipboard(view, text, html, view.shiftKey, view.state.selection.$from);\n\n if (view.someProp(\"handlePaste\", function (f) {\n return f(view, e, slice || Slice.empty);\n })) {\n return true;\n }\n\n if (!slice) {\n return false;\n }\n\n var singleNode = sliceSingleNode(slice);\n var tr = singleNode ? view.state.tr.replaceSelectionWith(singleNode, view.shiftKey) : view.state.tr.replaceSelection(slice);\n view.dispatch(tr.scrollIntoView().setMeta(\"paste\", true).setMeta(\"uiEvent\", \"paste\"));\n return true;\n}\n\neditHandlers.paste = function (view, e) {\n var data = brokenClipboardAPI ? null : e.clipboardData;\n\n if (data && doPaste(view, data.getData(\"text/plain\"), data.getData(\"text/html\"), e)) {\n e.preventDefault();\n } else {\n capturePaste(view, e);\n }\n};\n\nvar Dragging = function Dragging(slice, move) {\n this.slice = slice;\n this.move = move;\n};\n\nvar dragCopyModifier = result.mac ? \"altKey\" : \"ctrlKey\";\n\nhandlers.dragstart = function (view, e) {\n var mouseDown = view.mouseDown;\n\n if (mouseDown) {\n mouseDown.done();\n }\n\n if (!e.dataTransfer) {\n return;\n }\n\n var sel = view.state.selection;\n var pos = sel.empty ? null : view.posAtCoords(eventCoords(e));\n if (pos && pos.pos >= sel.from && pos.pos <= (sel instanceof NodeSelection ? sel.to - 1 : sel.to)) ;else if (mouseDown && mouseDown.mightDrag) {\n view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos)));\n } else if (e.target && e.target.nodeType == 1) {\n var desc = view.docView.nearestDesc(e.target, true);\n\n if (!desc || !desc.node.type.spec.draggable || desc == view.docView) {\n return;\n }\n\n view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, desc.posBefore)));\n }\n var slice = view.state.selection.content();\n var ref = serializeForClipboard(view, slice);\n var dom = ref.dom;\n var text = ref.text;\n e.dataTransfer.clearData();\n e.dataTransfer.setData(brokenClipboardAPI ? \"Text\" : \"text/html\", dom.innerHTML);\n\n if (!brokenClipboardAPI) {\n e.dataTransfer.setData(\"text/plain\", text);\n }\n\n view.dragging = new Dragging(slice, !e[dragCopyModifier]);\n};\n\nhandlers.dragend = function (view) {\n var dragging = view.dragging;\n window.setTimeout(function () {\n if (view.dragging == dragging) {\n view.dragging = null;\n }\n }, 50);\n};\n\neditHandlers.dragover = editHandlers.dragenter = function (_, e) {\n return e.preventDefault();\n};\n\neditHandlers.drop = function (view, e) {\n var dragging = view.dragging;\n view.dragging = null;\n\n if (!e.dataTransfer) {\n return;\n }\n\n var eventPos = view.posAtCoords(eventCoords(e));\n\n if (!eventPos) {\n return;\n }\n\n var $mouse = view.state.doc.resolve(eventPos.pos);\n\n if (!$mouse) {\n return;\n }\n\n var slice = dragging && dragging.slice || parseFromClipboard(view, e.dataTransfer.getData(brokenClipboardAPI ? \"Text\" : \"text/plain\"), brokenClipboardAPI ? null : e.dataTransfer.getData(\"text/html\"), false, $mouse);\n var move = dragging && !e[dragCopyModifier];\n\n if (view.someProp(\"handleDrop\", function (f) {\n return f(view, e, slice || Slice.empty, move);\n })) {\n e.preventDefault();\n return;\n }\n\n if (!slice) {\n return;\n }\n\n e.preventDefault();\n var insertPos = slice ? dropPoint(view.state.doc, $mouse.pos, slice) : $mouse.pos;\n\n if (insertPos == null) {\n insertPos = $mouse.pos;\n }\n\n var tr = view.state.tr;\n\n if (move) {\n tr.deleteSelection();\n }\n\n var pos = tr.mapping.map(insertPos);\n var isNode = slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1;\n var beforeInsert = tr.doc;\n\n if (isNode) {\n tr.replaceRangeWith(pos, pos, slice.content.firstChild);\n } else {\n tr.replaceRange(pos, pos, slice);\n }\n\n if (tr.doc.eq(beforeInsert)) {\n return;\n }\n\n var $pos = tr.doc.resolve(pos);\n\n if (isNode && NodeSelection.isSelectable(slice.content.firstChild) && $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice.content.firstChild)) {\n tr.setSelection(new NodeSelection($pos));\n } else {\n var end = tr.mapping.map(insertPos);\n tr.mapping.maps[tr.mapping.maps.length - 1].forEach(function (_from, _to, _newFrom, newTo) {\n return end = newTo;\n });\n tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end)));\n }\n\n view.focus();\n view.dispatch(tr.setMeta(\"uiEvent\", \"drop\"));\n};\n\nhandlers.focus = function (view) {\n if (!view.focused) {\n view.domObserver.stop();\n view.dom.classList.add(\"ProseMirror-focused\");\n view.domObserver.start();\n view.focused = true;\n setTimeout(function () {\n if (view.docView && view.hasFocus() && !view.domObserver.currentSelection.eq(view.root.getSelection())) {\n selectionToDOM(view);\n }\n }, 20);\n }\n};\n\nhandlers.blur = function (view) {\n if (view.focused) {\n view.domObserver.stop();\n view.dom.classList.remove(\"ProseMirror-focused\");\n view.domObserver.start();\n view.domObserver.currentSelection.set({});\n view.focused = false;\n }\n};\n\nhandlers.beforeinput = function (view, event) {\n // We should probably do more with beforeinput events, but support\n // is so spotty that I'm still waiting to see where they are going.\n // Very specific hack to deal with backspace sometimes failing on\n // Chrome Android when after an uneditable node.\n if (result.chrome && result.android && event.inputType == \"deleteContentBackward\") {\n var domChangeCount = view.domChangeCount;\n setTimeout(function () {\n if (view.domChangeCount != domChangeCount) {\n return;\n } // Event already had some effect\n // This bug tends to close the virtual keyboard, so we refocus\n\n\n view.dom.blur();\n view.focus();\n\n if (view.someProp(\"handleKeyDown\", function (f) {\n return f(view, keyEvent(8, \"Backspace\"));\n })) {\n return;\n }\n\n var ref = view.state.selection;\n var $cursor = ref.$cursor; // Crude approximation of backspace behavior when no command handled it\n\n if ($cursor && $cursor.pos > 0) {\n view.dispatch(view.state.tr[\"delete\"]($cursor.pos - 1, $cursor.pos).scrollIntoView());\n }\n }, 50);\n }\n}; // Make sure all handlers get registered\n\n\nfor (var prop in editHandlers) {\n handlers[prop] = editHandlers[prop];\n}\n\nfunction compareObjs(a, b) {\n if (a == b) {\n return true;\n }\n\n for (var p in a) {\n if (a[p] !== b[p]) {\n return false;\n }\n }\n\n for (var p$1 in b) {\n if (!(p$1 in a)) {\n return false;\n }\n }\n\n return true;\n}\n\nvar WidgetType = function WidgetType(toDOM, spec) {\n this.spec = spec || noSpec;\n this.side = this.spec.side || 0;\n this.toDOM = toDOM;\n};\n\nWidgetType.prototype.map = function map(mapping, span, offset, oldOffset) {\n var ref = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1);\n var pos = ref.pos;\n var deleted = ref.deleted;\n return deleted ? null : new Decoration(pos - offset, pos - offset, this);\n};\n\nWidgetType.prototype.valid = function valid() {\n return true;\n};\n\nWidgetType.prototype.eq = function eq(other) {\n return this == other || other instanceof WidgetType && (this.spec.key && this.spec.key == other.spec.key || this.toDOM == other.toDOM && compareObjs(this.spec, other.spec));\n};\n\nvar InlineType = function InlineType(attrs, spec) {\n this.spec = spec || noSpec;\n this.attrs = attrs;\n};\n\nInlineType.prototype.map = function map(mapping, span, offset, oldOffset) {\n var from = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset;\n var to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset;\n return from >= to ? null : new Decoration(from, to, this);\n};\n\nInlineType.prototype.valid = function valid(_, span) {\n return span.from < span.to;\n};\n\nInlineType.prototype.eq = function eq(other) {\n return this == other || other instanceof InlineType && compareObjs(this.attrs, other.attrs) && compareObjs(this.spec, other.spec);\n};\n\nInlineType.is = function is(span) {\n return span.type instanceof InlineType;\n};\n\nvar NodeType = function NodeType(attrs, spec) {\n this.spec = spec || noSpec;\n this.attrs = attrs;\n};\n\nNodeType.prototype.map = function map(mapping, span, offset, oldOffset) {\n var from = mapping.mapResult(span.from + oldOffset, 1);\n\n if (from.deleted) {\n return null;\n }\n\n var to = mapping.mapResult(span.to + oldOffset, -1);\n\n if (to.deleted || to.pos <= from.pos) {\n return null;\n }\n\n return new Decoration(from.pos - offset, to.pos - offset, this);\n};\n\nNodeType.prototype.valid = function valid(node, span) {\n var ref = node.content.findIndex(span.from);\n var index = ref.index;\n var offset = ref.offset;\n return offset == span.from && offset + node.child(index).nodeSize == span.to;\n};\n\nNodeType.prototype.eq = function eq(other) {\n return this == other || other instanceof NodeType && compareObjs(this.attrs, other.attrs) && compareObjs(this.spec, other.spec);\n}; // ::- Decoration objects can be provided to the view through the\n// [`decorations` prop](#view.EditorProps.decorations). They come in\n// several variants—see the static members of this class for details.\n\n\nvar Decoration = function Decoration(from, to, type) {\n // :: number\n // The start position of the decoration.\n this.from = from; // :: number\n // The end position. Will be the same as `from` for [widget\n // decorations](#view.Decoration^widget).\n\n this.to = to;\n this.type = type;\n};\n\nvar prototypeAccessors$1 = {\n spec: {\n configurable: true\n },\n inline: {\n configurable: true\n }\n};\n\nDecoration.prototype.copy = function copy(from, to) {\n return new Decoration(from, to, this.type);\n};\n\nDecoration.prototype.eq = function eq(other, offset) {\n if (offset === void 0) offset = 0;\n return this.type.eq(other.type) && this.from + offset == other.from && this.to + offset == other.to;\n};\n\nDecoration.prototype.map = function map(mapping, offset, oldOffset) {\n return this.type.map(mapping, this, offset, oldOffset);\n}; // :: (number, union<(view: EditorView, getPos: () → number) → dom.Node, dom.Node>, ?Object) → Decoration\n// Creates a widget decoration, which is a DOM node that's shown in\n// the document at the given position. It is recommended that you\n// delay rendering the widget by passing a function that will be\n// called when the widget is actually drawn in a view, but you can\n// also directly pass a DOM node. `getPos` can be used to find the\n// widget's current document position.\n//\n// spec::- These options are supported:\n//\n// side:: ?number\n// Controls which side of the document position this widget is\n// associated with. When negative, it is drawn before a cursor\n// at its position, and content inserted at that position ends\n// up after the widget. When zero (the default) or positive, the\n// widget is drawn after the cursor and content inserted there\n// ends up before the widget.\n//\n// When there are multiple widgets at a given position, their\n// `side` values determine the order in which they appear. Those\n// with lower values appear first. The ordering of widgets with\n// the same `side` value is unspecified.\n//\n// When `marks` is null, `side` also determines the marks that\n// the widget is wrapped in—those of the node before when\n// negative, those of the node after when positive.\n//\n// marks:: ?[Mark]\n// The precise set of marks to draw around the widget.\n//\n// stopEvent:: ?(event: dom.Event) → bool\n// Can be used to control which DOM events, when they bubble out\n// of this widget, the editor view should ignore.\n//\n// ignoreSelection:: ?bool\n// When set (defaults to false), selection changes inside the\n// widget are ignored, and don't cause ProseMirror to try and\n// re-sync the selection with its selection state.\n//\n// key:: ?string\n// When comparing decorations of this type (in order to decide\n// whether it needs to be redrawn), ProseMirror will by default\n// compare the widget DOM node by identity. If you pass a key,\n// that key will be compared instead, which can be useful when\n// you generate decorations on the fly and don't want to store\n// and reuse DOM nodes. Make sure that any widgets with the same\n// key are interchangeable—if widgets differ in, for example,\n// the behavior of some event handler, they should get\n// different keys.\n\n\nDecoration.widget = function widget(pos, toDOM, spec) {\n return new Decoration(pos, pos, new WidgetType(toDOM, spec));\n}; // :: (number, number, DecorationAttrs, ?Object) → Decoration\n// Creates an inline decoration, which adds the given attributes to\n// each inline node between `from` and `to`.\n//\n// spec::- These options are recognized:\n//\n// inclusiveStart:: ?bool\n// Determines how the left side of the decoration is\n// [mapped](#transform.Position_Mapping) when content is\n// inserted directly at that position. By default, the decoration\n// won't include the new content, but you can set this to `true`\n// to make it inclusive.\n//\n// inclusiveEnd:: ?bool\n// Determines how the right side of the decoration is mapped.\n// See\n// [`inclusiveStart`](#view.Decoration^inline^spec.inclusiveStart).\n\n\nDecoration.inline = function inline(from, to, attrs, spec) {\n return new Decoration(from, to, new InlineType(attrs, spec));\n}; // :: (number, number, DecorationAttrs, ?Object) → Decoration\n// Creates a node decoration. `from` and `to` should point precisely\n// before and after a node in the document. That node, and only that\n// node, will receive the given attributes.\n//\n// spec::-\n//\n// Optional information to store with the decoration. It\n// is also used when comparing decorators for equality.\n\n\nDecoration.node = function node(from, to, attrs, spec) {\n return new Decoration(from, to, new NodeType(attrs, spec));\n}; // :: Object\n// The spec provided when creating this decoration. Can be useful\n// if you've stored extra information in that object.\n\n\nprototypeAccessors$1.spec.get = function () {\n return this.type.spec;\n};\n\nprototypeAccessors$1.inline.get = function () {\n return this.type instanceof InlineType;\n};\n\nObject.defineProperties(Decoration.prototype, prototypeAccessors$1); // DecorationAttrs:: interface\n// A set of attributes to add to a decorated node. Most properties\n// simply directly correspond to DOM attributes of the same name,\n// which will be set to the property's value. These are exceptions:\n//\n// class:: ?string\n// A CSS class name or a space-separated set of class names to be\n// _added_ to the classes that the node already had.\n//\n// style:: ?string\n// A string of CSS to be _added_ to the node's existing `style` property.\n//\n// nodeName:: ?string\n// When non-null, the target node is wrapped in a DOM element of\n// this type (and the other attributes are applied to this element).\n\nvar none = [],\n noSpec = {}; // ::- A collection of [decorations](#view.Decoration), organized in\n// such a way that the drawing algorithm can efficiently use and\n// compare them. This is a persistent data structure—it is not\n// modified, updates create a new value.\n\nvar DecorationSet = function DecorationSet(local, children) {\n this.local = local && local.length ? local : none;\n this.children = children && children.length ? children : none;\n}; // :: (Node, [Decoration]) → DecorationSet\n// Create a set of decorations, using the structure of the given\n// document.\n\n\nDecorationSet.create = function create(doc, decorations) {\n return decorations.length ? buildTree(decorations, doc, 0, noSpec) : empty;\n}; // :: (?number, ?number, ?(spec: Object) → bool) → [Decoration]\n// Find all decorations in this set which touch the given range\n// (including decorations that start or end directly at the\n// boundaries) and match the given predicate on their spec. When\n// `start` and `end` are omitted, all decorations in the set are\n// considered. When `predicate` isn't given, all decorations are\n// assumed to match.\n\n\nDecorationSet.prototype.find = function find(start, end, predicate) {\n var result = [];\n this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate);\n return result;\n};\n\nDecorationSet.prototype.findInner = function findInner(start, end, result, offset, predicate) {\n for (var i = 0; i < this.local.length; i++) {\n var span = this.local[i];\n\n if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec))) {\n result.push(span.copy(span.from + offset, span.to + offset));\n }\n }\n\n for (var i$1 = 0; i$1 < this.children.length; i$1 += 3) {\n if (this.children[i$1] < end && this.children[i$1 + 1] > start) {\n var childOff = this.children[i$1] + 1;\n this.children[i$1 + 2].findInner(start - childOff, end - childOff, result, offset + childOff, predicate);\n }\n }\n}; // :: (Mapping, Node, ?Object) → DecorationSet\n// Map the set of decorations in response to a change in the\n// document.\n//\n// options::- An optional set of options.\n//\n// onRemove:: ?(decorationSpec: Object)\n// When given, this function will be called for each decoration\n// that gets dropped as a result of the mapping, passing the\n// spec of that decoration.\n\n\nDecorationSet.prototype.map = function map(mapping, doc, options) {\n if (this == empty || mapping.maps.length == 0) {\n return this;\n }\n\n return this.mapInner(mapping, doc, 0, 0, options || noSpec);\n};\n\nDecorationSet.prototype.mapInner = function mapInner(mapping, node, offset, oldOffset, options) {\n var newLocal;\n\n for (var i = 0; i < this.local.length; i++) {\n var mapped = this.local[i].map(mapping, offset, oldOffset);\n\n if (mapped && mapped.type.valid(node, mapped)) {\n (newLocal || (newLocal = [])).push(mapped);\n } else if (options.onRemove) {\n options.onRemove(this.local[i].spec);\n }\n }\n\n if (this.children.length) {\n return mapChildren(this.children, newLocal, mapping, node, offset, oldOffset, options);\n } else {\n return newLocal ? new DecorationSet(newLocal.sort(byPos)) : empty;\n }\n}; // :: (Node, [Decoration]) → DecorationSet\n// Add the given array of decorations to the ones in the set,\n// producing a new set. Needs access to the current document to\n// create the appropriate tree structure.\n\n\nDecorationSet.prototype.add = function add(doc, decorations) {\n if (!decorations.length) {\n return this;\n }\n\n if (this == empty) {\n return DecorationSet.create(doc, decorations);\n }\n\n return this.addInner(doc, decorations, 0);\n};\n\nDecorationSet.prototype.addInner = function addInner(doc, decorations, offset) {\n var this$1 = this;\n var children,\n childIndex = 0;\n doc.forEach(function (childNode, childOffset) {\n var baseOffset = childOffset + offset,\n found;\n\n if (!(found = takeSpansForNode(decorations, childNode, baseOffset))) {\n return;\n }\n\n if (!children) {\n children = this$1.children.slice();\n }\n\n while (childIndex < children.length && children[childIndex] < childOffset) {\n childIndex += 3;\n }\n\n if (children[childIndex] == childOffset) {\n children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found, baseOffset + 1);\n } else {\n children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found, childNode, baseOffset + 1, noSpec));\n }\n\n childIndex += 3;\n });\n var local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset);\n\n for (var i = 0; i < local.length; i++) {\n if (!local[i].type.valid(doc, local[i])) {\n local.splice(i--, 1);\n }\n }\n\n return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local, children || this.children);\n}; // :: ([Decoration]) → DecorationSet\n// Create a new set that contains the decorations in this set, minus\n// the ones in the given array.\n\n\nDecorationSet.prototype.remove = function remove(decorations) {\n if (decorations.length == 0 || this == empty) {\n return this;\n }\n\n return this.removeInner(decorations, 0);\n};\n\nDecorationSet.prototype.removeInner = function removeInner(decorations, offset) {\n var children = this.children,\n local = this.local;\n\n for (var i = 0; i < children.length; i += 3) {\n var found = void 0,\n from = children[i] + offset,\n to = children[i + 1] + offset;\n\n for (var j = 0, span = void 0; j < decorations.length; j++) {\n if (span = decorations[j]) {\n if (span.from > from && span.to < to) {\n decorations[j] = null;\n (found || (found = [])).push(span);\n }\n }\n }\n\n if (!found) {\n continue;\n }\n\n if (children == this.children) {\n children = this.children.slice();\n }\n\n var removed = children[i + 2].removeInner(found, from + 1);\n\n if (removed != empty) {\n children[i + 2] = removed;\n } else {\n children.splice(i, 3);\n i -= 3;\n }\n }\n\n if (local.length) {\n for (var i$1 = 0, span$1 = void 0; i$1 < decorations.length; i$1++) {\n if (span$1 = decorations[i$1]) {\n for (var j$1 = 0; j$1 < local.length; j$1++) {\n if (local[j$1].eq(span$1, offset)) {\n if (local == this.local) {\n local = this.local.slice();\n }\n\n local.splice(j$1--, 1);\n }\n }\n }\n }\n }\n\n if (children == this.children && local == this.local) {\n return this;\n }\n\n return local.length || children.length ? new DecorationSet(local, children) : empty;\n};\n\nDecorationSet.prototype.forChild = function forChild(offset, node) {\n if (this == empty) {\n return this;\n }\n\n if (node.isLeaf) {\n return DecorationSet.empty;\n }\n\n var child, local;\n\n for (var i = 0; i < this.children.length; i += 3) {\n if (this.children[i] >= offset) {\n if (this.children[i] == offset) {\n child = this.children[i + 2];\n }\n\n break;\n }\n }\n\n var start = offset + 1,\n end = start + node.content.size;\n\n for (var i$1 = 0; i$1 < this.local.length; i$1++) {\n var dec = this.local[i$1];\n\n if (dec.from < end && dec.to > start && dec.type instanceof InlineType) {\n var from = Math.max(start, dec.from) - start,\n to = Math.min(end, dec.to) - start;\n\n if (from < to) {\n (local || (local = [])).push(dec.copy(from, to));\n }\n }\n }\n\n if (local) {\n var localSet = new DecorationSet(local.sort(byPos));\n return child ? new DecorationGroup([localSet, child]) : localSet;\n }\n\n return child || empty;\n};\n\nDecorationSet.prototype.eq = function eq(other) {\n if (this == other) {\n return true;\n }\n\n if (!(other instanceof DecorationSet) || this.local.length != other.local.length || this.children.length != other.children.length) {\n return false;\n }\n\n for (var i = 0; i < this.local.length; i++) {\n if (!this.local[i].eq(other.local[i])) {\n return false;\n }\n }\n\n for (var i$1 = 0; i$1 < this.children.length; i$1 += 3) {\n if (this.children[i$1] != other.children[i$1] || this.children[i$1 + 1] != other.children[i$1 + 1] || !this.children[i$1 + 2].eq(other.children[i$1 + 2])) {\n return false;\n }\n }\n\n return true;\n};\n\nDecorationSet.prototype.locals = function locals(node) {\n return removeOverlap(this.localsInner(node));\n};\n\nDecorationSet.prototype.localsInner = function localsInner(node) {\n if (this == empty) {\n return none;\n }\n\n if (node.inlineContent || !this.local.some(InlineType.is)) {\n return this.local;\n }\n\n var result = [];\n\n for (var i = 0; i < this.local.length; i++) {\n if (!(this.local[i].type instanceof InlineType)) {\n result.push(this.local[i]);\n }\n }\n\n return result;\n};\n\nvar empty = new DecorationSet(); // :: DecorationSet\n// The empty set of decorations.\n\nDecorationSet.empty = empty;\nDecorationSet.removeOverlap = removeOverlap; // :- An abstraction that allows the code dealing with decorations to\n// treat multiple DecorationSet objects as if it were a single object\n// with (a subset of) the same interface.\n\nvar DecorationGroup = function DecorationGroup(members) {\n this.members = members;\n};\n\nDecorationGroup.prototype.forChild = function forChild(offset, child) {\n if (child.isLeaf) {\n return DecorationSet.empty;\n }\n\n var found = [];\n\n for (var i = 0; i < this.members.length; i++) {\n var result = this.members[i].forChild(offset, child);\n\n if (result == empty) {\n continue;\n }\n\n if (result instanceof DecorationGroup) {\n found = found.concat(result.members);\n } else {\n found.push(result);\n }\n }\n\n return DecorationGroup.from(found);\n};\n\nDecorationGroup.prototype.eq = function eq(other) {\n if (!(other instanceof DecorationGroup) || other.members.length != this.members.length) {\n return false;\n }\n\n for (var i = 0; i < this.members.length; i++) {\n if (!this.members[i].eq(other.members[i])) {\n return false;\n }\n }\n\n return true;\n};\n\nDecorationGroup.prototype.locals = function locals(node) {\n var result,\n sorted = true;\n\n for (var i = 0; i < this.members.length; i++) {\n var locals = this.members[i].localsInner(node);\n\n if (!locals.length) {\n continue;\n }\n\n if (!result) {\n result = locals;\n } else {\n if (sorted) {\n result = result.slice();\n sorted = false;\n }\n\n for (var j = 0; j < locals.length; j++) {\n result.push(locals[j]);\n }\n }\n }\n\n return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none;\n}; // : ([DecorationSet]) → union<DecorationSet, DecorationGroup>\n// Create a group for the given array of decoration sets, or return\n// a single set when possible.\n\n\nDecorationGroup.from = function from(members) {\n switch (members.length) {\n case 0:\n return empty;\n\n case 1:\n return members[0];\n\n default:\n return new DecorationGroup(members);\n }\n};\n\nfunction mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) {\n var children = oldChildren.slice(); // Mark the children that are directly touched by changes, and\n // move those that are after the changes.\n\n var shift = function shift(oldStart, oldEnd, newStart, newEnd) {\n for (var i = 0; i < children.length; i += 3) {\n var end = children[i + 1],\n dSize = void 0;\n\n if (end == -1 || oldStart > end + oldOffset) {\n continue;\n }\n\n if (oldEnd >= children[i] + oldOffset) {\n children[i + 1] = -1;\n } else if (newStart >= offset && (dSize = newEnd - newStart - (oldEnd - oldStart))) {\n children[i] += dSize;\n children[i + 1] += dSize;\n }\n }\n };\n\n for (var i = 0; i < mapping.maps.length; i++) {\n mapping.maps[i].forEach(shift);\n } // Find the child nodes that still correspond to a single node,\n // recursively call mapInner on them and update their positions.\n\n\n var mustRebuild = false;\n\n for (var i$1 = 0; i$1 < children.length; i$1 += 3) {\n if (children[i$1 + 1] == -1) {\n // Touched nodes\n var from = mapping.map(oldChildren[i$1] + oldOffset),\n fromLocal = from - offset;\n\n if (fromLocal < 0 || fromLocal >= node.content.size) {\n mustRebuild = true;\n continue;\n } // Must read oldChildren because children was tagged with -1\n\n\n var to = mapping.map(oldChildren[i$1 + 1] + oldOffset, -1),\n toLocal = to - offset;\n var ref = node.content.findIndex(fromLocal);\n var index = ref.index;\n var childOffset = ref.offset;\n var childNode = node.maybeChild(index);\n\n if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) {\n var mapped = children[i$1 + 2].mapInner(mapping, childNode, from + 1, oldChildren[i$1] + oldOffset + 1, options);\n\n if (mapped != empty) {\n children[i$1] = fromLocal;\n children[i$1 + 1] = toLocal;\n children[i$1 + 2] = mapped;\n } else {\n children[i$1 + 1] = -2;\n mustRebuild = true;\n }\n } else {\n mustRebuild = true;\n }\n }\n } // Remaining children must be collected and rebuilt into the appropriate structure\n\n\n if (mustRebuild) {\n var decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal || [], mapping, offset, oldOffset, options);\n var built = buildTree(decorations, node, 0, options);\n newLocal = built.local;\n\n for (var i$2 = 0; i$2 < children.length; i$2 += 3) {\n if (children[i$2 + 1] < 0) {\n children.splice(i$2, 3);\n i$2 -= 3;\n }\n }\n\n for (var i$3 = 0, j = 0; i$3 < built.children.length; i$3 += 3) {\n var from$1 = built.children[i$3];\n\n while (j < children.length && children[j] < from$1) {\n j += 3;\n }\n\n children.splice(j, 0, built.children[i$3], built.children[i$3 + 1], built.children[i$3 + 2]);\n }\n }\n\n return new DecorationSet(newLocal && newLocal.sort(byPos), children);\n}\n\nfunction moveSpans(spans, offset) {\n if (!offset || !spans.length) {\n return spans;\n }\n\n var result = [];\n\n for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n result.push(new Decoration(span.from + offset, span.to + offset, span.type));\n }\n\n return result;\n}\n\nfunction mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset, oldOffset, options) {\n // Gather all decorations from the remaining marked children\n function gather(set, oldOffset) {\n for (var i = 0; i < set.local.length; i++) {\n var mapped = set.local[i].map(mapping, offset, oldOffset);\n\n if (mapped) {\n decorations.push(mapped);\n } else if (options.onRemove) {\n options.onRemove(set.local[i].spec);\n }\n }\n\n for (var i$1 = 0; i$1 < set.children.length; i$1 += 3) {\n gather(set.children[i$1 + 2], set.children[i$1] + oldOffset + 1);\n }\n }\n\n for (var i = 0; i < children.length; i += 3) {\n if (children[i + 1] == -1) {\n gather(children[i + 2], oldChildren[i] + oldOffset + 1);\n }\n }\n\n return decorations;\n}\n\nfunction takeSpansForNode(spans, node, offset) {\n if (node.isLeaf) {\n return null;\n }\n\n var end = offset + node.nodeSize,\n found = null;\n\n for (var i = 0, span = void 0; i < spans.length; i++) {\n if ((span = spans[i]) && span.from > offset && span.to < end) {\n (found || (found = [])).push(span);\n spans[i] = null;\n }\n }\n\n return found;\n}\n\nfunction withoutNulls(array) {\n var result = [];\n\n for (var i = 0; i < array.length; i++) {\n if (array[i] != null) {\n result.push(array[i]);\n }\n }\n\n return result;\n} // : ([Decoration], Node, number) → DecorationSet\n// Build up a tree that corresponds to a set of decorations. `offset`\n// is a base offset that should be subtractet from the `from` and `to`\n// positions in the spans (so that we don't have to allocate new spans\n// for recursive calls).\n\n\nfunction buildTree(spans, node, offset, options) {\n var children = [],\n hasNulls = false;\n node.forEach(function (childNode, localStart) {\n var found = takeSpansForNode(spans, childNode, localStart + offset);\n\n if (found) {\n hasNulls = true;\n var subtree = buildTree(found, childNode, offset + localStart + 1, options);\n\n if (subtree != empty) {\n children.push(localStart, localStart + childNode.nodeSize, subtree);\n }\n }\n });\n var locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset).sort(byPos);\n\n for (var i = 0; i < locals.length; i++) {\n if (!locals[i].type.valid(node, locals[i])) {\n if (options.onRemove) {\n options.onRemove(locals[i].spec);\n }\n\n locals.splice(i--, 1);\n }\n }\n\n return locals.length || children.length ? new DecorationSet(locals, children) : empty;\n} // : (Decoration, Decoration) → number\n// Used to sort decorations so that ones with a low start position\n// come first, and within a set with the same start position, those\n// with an smaller end position come first.\n\n\nfunction byPos(a, b) {\n return a.from - b.from || a.to - b.to;\n} // : ([Decoration]) → [Decoration]\n// Scan a sorted array of decorations for partially overlapping spans,\n// and split those so that only fully overlapping spans are left (to\n// make subsequent rendering easier). Will return the input array if\n// no partially overlapping spans are found (the common case).\n\n\nfunction removeOverlap(spans) {\n var working = spans;\n\n for (var i = 0; i < working.length - 1; i++) {\n var span = working[i];\n\n if (span.from != span.to) {\n for (var j = i + 1; j < working.length; j++) {\n var next = working[j];\n\n if (next.from == span.from) {\n if (next.to != span.to) {\n if (working == spans) {\n working = spans.slice();\n } // Followed by a partially overlapping larger span. Split that\n // span.\n\n\n working[j] = next.copy(next.from, span.to);\n insertAhead(working, j + 1, next.copy(span.to, next.to));\n }\n\n continue;\n } else {\n if (next.from < span.to) {\n if (working == spans) {\n working = spans.slice();\n } // The end of this one overlaps with a subsequent span. Split\n // this one.\n\n\n working[i] = span.copy(span.from, next.from);\n insertAhead(working, j, span.copy(next.from, span.to));\n }\n\n break;\n }\n }\n }\n }\n\n return working;\n}\n\nfunction insertAhead(array, i, deco) {\n while (i < array.length && byPos(deco, array[i]) > 0) {\n i++;\n }\n\n array.splice(i, 0, deco);\n} // : (EditorView) → union<DecorationSet, DecorationGroup>\n// Get the decorations associated with the current props of a view.\n\n\nfunction viewDecorations(view) {\n var found = [];\n view.someProp(\"decorations\", function (f) {\n var result = f(view.state);\n\n if (result && result != empty) {\n found.push(result);\n }\n });\n\n if (view.cursorWrapper) {\n found.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco]));\n }\n\n return DecorationGroup.from(found);\n} // ::- An editor view manages the DOM structure that represents an\n// editable document. Its state and behavior are determined by its\n// [props](#view.DirectEditorProps).\n\n\nvar EditorView = function EditorView(place, props) {\n this._props = props; // :: EditorState\n // The view's current [state](#state.EditorState).\n\n this.state = props.state;\n this.dispatch = this.dispatch.bind(this);\n this._root = null;\n this.focused = false; // Kludge used to work around a Chrome bug\n\n this.trackWrites = null; // :: dom.Element\n // An editable DOM node containing the document. (You probably\n // should not directly interfere with its content.)\n\n this.dom = place && place.mount || document.createElement(\"div\");\n\n if (place) {\n if (place.appendChild) {\n place.appendChild(this.dom);\n } else if (place.apply) {\n place(this.dom);\n } else if (place.mount) {\n this.mounted = true;\n }\n } // :: bool\n // Indicates whether the editor is currently [editable](#view.EditorProps.editable).\n\n\n this.editable = getEditable(this);\n this.markCursor = null;\n this.cursorWrapper = null;\n updateCursorWrapper(this);\n this.nodeViews = buildNodeViews(this);\n this.docView = docViewDesc(this.state.doc, computeDocDeco(this), viewDecorations(this), this.dom, this);\n this.lastSelectedViewDesc = null; // :: ?{slice: Slice, move: bool}\n // When editor content is being dragged, this object contains\n // information about the dragged slice and whether it is being\n // copied or moved. At any other time, it is null.\n\n this.dragging = null;\n initInput(this);\n this.pluginViews = [];\n this.updatePluginViews();\n};\n\nvar prototypeAccessors$2 = {\n props: {\n configurable: true\n },\n root: {\n configurable: true\n }\n}; // composing:: boolean\n// Holds `true` when a\n// [composition](https://developer.mozilla.org/en-US/docs/Mozilla/IME_handling_guide)\n// is active.\n// :: DirectEditorProps\n// The view's current [props](#view.EditorProps).\n\nprototypeAccessors$2.props.get = function () {\n if (this._props.state != this.state) {\n var prev = this._props;\n this._props = {};\n\n for (var name in prev) {\n this._props[name] = prev[name];\n }\n\n this._props.state = this.state;\n }\n\n return this._props;\n}; // :: (DirectEditorProps)\n// Update the view's props. Will immediately cause an update to\n// the DOM.\n\n\nEditorView.prototype.update = function update(props) {\n if (props.handleDOMEvents != this._props.handleDOMEvents) {\n ensureListeners(this);\n }\n\n this._props = props;\n this.updateStateInner(props.state, true);\n}; // :: (DirectEditorProps)\n// Update the view by updating existing props object with the object\n// given as argument. Equivalent to `view.update(Object.assign({},\n// view.props, props))`.\n\n\nEditorView.prototype.setProps = function setProps(props) {\n var updated = {};\n\n for (var name in this._props) {\n updated[name] = this._props[name];\n }\n\n updated.state = this.state;\n\n for (var name$1 in props) {\n updated[name$1] = props[name$1];\n }\n\n this.update(updated);\n}; // :: (EditorState)\n// Update the editor's `state` prop, without touching any of the\n// other props.\n\n\nEditorView.prototype.updateState = function updateState(state) {\n this.updateStateInner(state, this.state.plugins != state.plugins);\n};\n\nEditorView.prototype.updateStateInner = function updateStateInner(state, reconfigured) {\n var this$1 = this;\n var prev = this.state,\n redraw = false,\n updateSel = false; // When stored marks are added, stop composition, so that they can\n // be displayed.\n\n if (state.storedMarks && this.composing) {\n clearComposition(this);\n updateSel = true;\n }\n\n this.state = state;\n\n if (reconfigured) {\n var nodeViews = buildNodeViews(this);\n\n if (changedNodeViews(nodeViews, this.nodeViews)) {\n this.nodeViews = nodeViews;\n redraw = true;\n }\n\n ensureListeners(this);\n }\n\n this.editable = getEditable(this);\n updateCursorWrapper(this);\n var innerDeco = viewDecorations(this),\n outerDeco = computeDocDeco(this);\n var scroll = reconfigured ? \"reset\" : state.scrollToSelection > prev.scrollToSelection ? \"to selection\" : \"preserve\";\n var updateDoc = redraw || !this.docView.matchesNode(state.doc, outerDeco, innerDeco);\n\n if (updateDoc || !state.selection.eq(prev.selection)) {\n updateSel = true;\n }\n\n var oldScrollPos = scroll == \"preserve\" && updateSel && this.dom.style.overflowAnchor == null && storeScrollPos(this);\n\n if (updateSel) {\n this.domObserver.stop(); // Work around an issue in Chrome, IE, and Edge where changing\n // the DOM around an active selection puts it into a broken\n // state where the thing the user sees differs from the\n // selection reported by the Selection object (#710, #973,\n // #1011, #1013, #1035).\n\n var forceSelUpdate = updateDoc && (result.ie || result.chrome) && !this.composing && !prev.selection.empty && !state.selection.empty && selectionContextChanged(prev.selection, state.selection);\n\n if (updateDoc) {\n // If the node that the selection points into is written to,\n // Chrome sometimes starts misreporting the selection, so this\n // tracks that and forces a selection reset when our update\n // did write to the node.\n var chromeKludge = result.chrome ? this.trackWrites = this.root.getSelection().focusNode : null;\n\n if (redraw || !this.docView.update(state.doc, outerDeco, innerDeco, this)) {\n this.docView.updateOuterDeco([]);\n this.docView.destroy();\n this.docView = docViewDesc(state.doc, outerDeco, innerDeco, this.dom, this);\n }\n\n if (chromeKludge && !this.trackWrites) {\n forceSelUpdate = true;\n }\n } // Work around for an issue where an update arriving right between\n // a DOM selection change and the \"selectionchange\" event for it\n // can cause a spurious DOM selection update, disrupting mouse\n // drag selection.\n\n\n if (forceSelUpdate || !(this.mouseDown && this.domObserver.currentSelection.eq(this.root.getSelection()) && anchorInRightPlace(this))) {\n selectionToDOM(this, forceSelUpdate);\n } else {\n syncNodeSelection(this, state.selection);\n this.domObserver.setCurSelection();\n }\n\n this.domObserver.start();\n }\n\n this.updatePluginViews(prev);\n\n if (scroll == \"reset\") {\n this.dom.scrollTop = 0;\n } else if (scroll == \"to selection\") {\n var startDOM = this.root.getSelection().focusNode;\n if (this.someProp(\"handleScrollToSelection\", function (f) {\n return f(this$1);\n })) ; // Handled\n else if (state.selection instanceof NodeSelection) {\n scrollRectIntoView(this, this.docView.domAfterPos(state.selection.from).getBoundingClientRect(), startDOM);\n } else {\n scrollRectIntoView(this, this.coordsAtPos(state.selection.head, 1), startDOM);\n }\n } else if (oldScrollPos) {\n resetScrollPos(oldScrollPos);\n }\n};\n\nEditorView.prototype.destroyPluginViews = function destroyPluginViews() {\n var view;\n\n while (view = this.pluginViews.pop()) {\n if (view.destroy) {\n view.destroy();\n }\n }\n};\n\nEditorView.prototype.updatePluginViews = function updatePluginViews(prevState) {\n if (!prevState || prevState.plugins != this.state.plugins) {\n this.destroyPluginViews();\n\n for (var i = 0; i < this.state.plugins.length; i++) {\n var plugin = this.state.plugins[i];\n\n if (plugin.spec.view) {\n this.pluginViews.push(plugin.spec.view(this));\n }\n }\n } else {\n for (var i$1 = 0; i$1 < this.pluginViews.length; i$1++) {\n var pluginView = this.pluginViews[i$1];\n\n if (pluginView.update) {\n pluginView.update(this, prevState);\n }\n }\n }\n}; // :: (string, ?(prop: *) → *) → *\n// Goes over the values of a prop, first those provided directly,\n// then those from plugins (in order), and calls `f` every time a\n// non-undefined value is found. When `f` returns a truthy value,\n// that is immediately returned. When `f` isn't provided, it is\n// treated as the identity function (the prop value is returned\n// directly).\n\n\nEditorView.prototype.someProp = function someProp(propName, f) {\n var prop = this._props && this._props[propName],\n value;\n\n if (prop != null && (value = f ? f(prop) : prop)) {\n return value;\n }\n\n var plugins = this.state.plugins;\n\n if (plugins) {\n for (var i = 0; i < plugins.length; i++) {\n var prop$1 = plugins[i].props[propName];\n\n if (prop$1 != null && (value = f ? f(prop$1) : prop$1)) {\n return value;\n }\n }\n }\n}; // :: () → bool\n// Query whether the view has focus.\n\n\nEditorView.prototype.hasFocus = function hasFocus() {\n return this.root.activeElement == this.dom;\n}; // :: ()\n// Focus the editor.\n\n\nEditorView.prototype.focus = function focus() {\n this.domObserver.stop();\n\n if (this.editable) {\n focusPreventScroll(this.dom);\n }\n\n selectionToDOM(this);\n this.domObserver.start();\n}; // :: union<dom.Document, dom.DocumentFragment>\n// Get the document root in which the editor exists. This will\n// usually be the top-level `document`, but might be a [shadow\n// DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM)\n// root if the editor is inside one.\n\n\nprototypeAccessors$2.root.get = function () {\n var cached = this._root;\n\n if (cached == null) {\n for (var search = this.dom.parentNode; search; search = search.parentNode) {\n if (search.nodeType == 9 || search.nodeType == 11 && search.host) {\n if (!search.getSelection) {\n Object.getPrototypeOf(search).getSelection = function () {\n return document.getSelection();\n };\n }\n\n return this._root = search;\n }\n }\n }\n\n return cached || document;\n}; // :: ({left: number, top: number}) → ?{pos: number, inside: number}\n// Given a pair of viewport coordinates, return the document\n// position that corresponds to them. May return null if the given\n// coordinates aren't inside of the editor. When an object is\n// returned, its `pos` property is the position nearest to the\n// coordinates, and its `inside` property holds the position of the\n// inner node that the position falls inside of, or -1 if it is at\n// the top level, not in any node.\n\n\nEditorView.prototype.posAtCoords = function posAtCoords$1(coords) {\n return posAtCoords(this, coords);\n}; // :: (number, number) → {left: number, right: number, top: number, bottom: number}\n// Returns the viewport rectangle at a given document position.\n// `left` and `right` will be the same number, as this returns a\n// flat cursor-ish rectangle. If the position is between two things\n// that aren't directly adjacent, `side` determines which element is\n// used. When < 0, the element before the position is used,\n// otherwise the element after.\n\n\nEditorView.prototype.coordsAtPos = function coordsAtPos$1(pos, side) {\n if (side === void 0) side = 1;\n return coordsAtPos(this, pos, side);\n}; // :: (number, number) → {node: dom.Node, offset: number}\n// Find the DOM position that corresponds to the given document\n// position. When `side` is negative, find the position as close as\n// possible to the content before the position. When positive,\n// prefer positions close to the content after the position. When\n// zero, prefer as shallow a position as possible.\n//\n// Note that you should **not** mutate the editor's internal DOM,\n// only inspect it (and even that is usually not necessary).\n\n\nEditorView.prototype.domAtPos = function domAtPos(pos, side) {\n if (side === void 0) side = 0;\n return this.docView.domFromPos(pos, side);\n}; // :: (number) → ?dom.Node\n// Find the DOM node that represents the document node after the\n// given position. May return `null` when the position doesn't point\n// in front of a node or if the node is inside an opaque node view.\n//\n// This is intended to be able to call things like\n// `getBoundingClientRect` on that DOM node. Do **not** mutate the\n// editor DOM directly, or add styling this way, since that will be\n// immediately overriden by the editor as it redraws the node.\n\n\nEditorView.prototype.nodeDOM = function nodeDOM(pos) {\n var desc = this.docView.descAt(pos);\n return desc ? desc.nodeDOM : null;\n}; // :: (dom.Node, number, ?number) → number\n// Find the document position that corresponds to a given DOM\n// position. (Whenever possible, it is preferable to inspect the\n// document structure directly, rather than poking around in the\n// DOM, but sometimes—for example when interpreting an event\n// target—you don't have a choice.)\n//\n// The `bias` parameter can be used to influence which side of a DOM\n// node to use when the position is inside a leaf node.\n\n\nEditorView.prototype.posAtDOM = function posAtDOM(node, offset, bias) {\n if (bias === void 0) bias = -1;\n var pos = this.docView.posFromDOM(node, offset, bias);\n\n if (pos == null) {\n throw new RangeError(\"DOM position not inside the editor\");\n }\n\n return pos;\n}; // :: (union<\"up\", \"down\", \"left\", \"right\", \"forward\", \"backward\">, ?EditorState) → bool\n// Find out whether the selection is at the end of a textblock when\n// moving in a given direction. When, for example, given `\"left\"`,\n// it will return true if moving left from the current cursor\n// position would leave that position's parent textblock. Will apply\n// to the view's current state by default, but it is possible to\n// pass a different state.\n\n\nEditorView.prototype.endOfTextblock = function endOfTextblock$1(dir, state) {\n return endOfTextblock(this, state || this.state, dir);\n}; // :: ()\n// Removes the editor from the DOM and destroys all [node\n// views](#view.NodeView).\n\n\nEditorView.prototype.destroy = function destroy() {\n if (!this.docView) {\n return;\n }\n\n destroyInput(this);\n this.destroyPluginViews();\n\n if (this.mounted) {\n this.docView.update(this.state.doc, [], viewDecorations(this), this);\n this.dom.textContent = \"\";\n } else if (this.dom.parentNode) {\n this.dom.parentNode.removeChild(this.dom);\n }\n\n this.docView.destroy();\n this.docView = null;\n}; // Used for testing.\n\n\nEditorView.prototype.dispatchEvent = function dispatchEvent$1(event) {\n return dispatchEvent(this, event);\n}; // :: (Transaction)\n// Dispatch a transaction. Will call\n// [`dispatchTransaction`](#view.DirectEditorProps.dispatchTransaction)\n// when given, and otherwise defaults to applying the transaction to\n// the current state and calling\n// [`updateState`](#view.EditorView.updateState) with the result.\n// This method is bound to the view instance, so that it can be\n// easily passed around.\n\n\nEditorView.prototype.dispatch = function dispatch(tr) {\n var dispatchTransaction = this._props.dispatchTransaction;\n\n if (dispatchTransaction) {\n dispatchTransaction.call(this, tr);\n } else {\n this.updateState(this.state.apply(tr));\n }\n};\n\nObject.defineProperties(EditorView.prototype, prototypeAccessors$2);\n\nfunction computeDocDeco(view) {\n var attrs = Object.create(null);\n attrs[\"class\"] = \"ProseMirror\";\n attrs.contenteditable = String(view.editable);\n view.someProp(\"attributes\", function (value) {\n if (typeof value == \"function\") {\n value = value(view.state);\n }\n\n if (value) {\n for (var attr in value) {\n if (attr == \"class\") {\n attrs[\"class\"] += \" \" + value[attr];\n } else if (!attrs[attr] && attr != \"contenteditable\" && attr != \"nodeName\") {\n attrs[attr] = String(value[attr]);\n }\n }\n }\n });\n return [Decoration.node(0, view.state.doc.content.size, attrs)];\n}\n\nfunction updateCursorWrapper(view) {\n if (view.markCursor) {\n var dom = document.createElement(\"img\");\n dom.setAttribute(\"mark-placeholder\", \"true\");\n view.cursorWrapper = {\n dom: dom,\n deco: Decoration.widget(view.state.selection.head, dom, {\n raw: true,\n marks: view.markCursor\n })\n };\n } else {\n view.cursorWrapper = null;\n }\n}\n\nfunction getEditable(view) {\n return !view.someProp(\"editable\", function (value) {\n return value(view.state) === false;\n });\n}\n\nfunction selectionContextChanged(sel1, sel2) {\n var depth = Math.min(sel1.$anchor.sharedDepth(sel1.head), sel2.$anchor.sharedDepth(sel2.head));\n return sel1.$anchor.start(depth) != sel2.$anchor.start(depth);\n}\n\nfunction buildNodeViews(view) {\n var result = {};\n view.someProp(\"nodeViews\", function (obj) {\n for (var prop in obj) {\n if (!Object.prototype.hasOwnProperty.call(result, prop)) {\n result[prop] = obj[prop];\n }\n }\n });\n return result;\n}\n\nfunction changedNodeViews(a, b) {\n var nA = 0,\n nB = 0;\n\n for (var prop in a) {\n if (a[prop] != b[prop]) {\n return true;\n }\n\n nA++;\n }\n\n for (var _ in b) {\n nB++;\n }\n\n return nA != nB;\n} // EditorProps:: interface\n//\n// Props are configuration values that can be passed to an editor view\n// or included in a plugin. This interface lists the supported props.\n//\n// The various event-handling functions may all return `true` to\n// indicate that they handled the given event. The view will then take\n// care to call `preventDefault` on the event, except with\n// `handleDOMEvents`, where the handler itself is responsible for that.\n//\n// How a prop is resolved depends on the prop. Handler functions are\n// called one at a time, starting with the base props and then\n// searching through the plugins (in order of appearance) until one of\n// them returns true. For some props, the first plugin that yields a\n// value gets precedence.\n//\n// handleDOMEvents:: ?Object<(view: EditorView, event: dom.Event) → bool>\n// Can be an object mapping DOM event type names to functions that\n// handle them. Such functions will be called before any handling\n// ProseMirror does of events fired on the editable DOM element.\n// Contrary to the other event handling props, when returning true\n// from such a function, you are responsible for calling\n// `preventDefault` yourself (or not, if you want to allow the\n// default behavior).\n//\n// handleKeyDown:: ?(view: EditorView, event: dom.KeyboardEvent) → bool\n// Called when the editor receives a `keydown` event.\n//\n// handleKeyPress:: ?(view: EditorView, event: dom.KeyboardEvent) → bool\n// Handler for `keypress` events.\n//\n// handleTextInput:: ?(view: EditorView, from: number, to: number, text: string) → bool\n// Whenever the user directly input text, this handler is called\n// before the input is applied. If it returns `true`, the default\n// behavior of actually inserting the text is suppressed.\n//\n// handleClickOn:: ?(view: EditorView, pos: number, node: Node, nodePos: number, event: dom.MouseEvent, direct: bool) → bool\n// Called for each node around a click, from the inside out. The\n// `direct` flag will be true for the inner node.\n//\n// handleClick:: ?(view: EditorView, pos: number, event: dom.MouseEvent) → bool\n// Called when the editor is clicked, after `handleClickOn` handlers\n// have been called.\n//\n// handleDoubleClickOn:: ?(view: EditorView, pos: number, node: Node, nodePos: number, event: dom.MouseEvent, direct: bool) → bool\n// Called for each node around a double click.\n//\n// handleDoubleClick:: ?(view: EditorView, pos: number, event: dom.MouseEvent) → bool\n// Called when the editor is double-clicked, after `handleDoubleClickOn`.\n//\n// handleTripleClickOn:: ?(view: EditorView, pos: number, node: Node, nodePos: number, event: dom.MouseEvent, direct: bool) → bool\n// Called for each node around a triple click.\n//\n// handleTripleClick:: ?(view: EditorView, pos: number, event: dom.MouseEvent) → bool\n// Called when the editor is triple-clicked, after `handleTripleClickOn`.\n//\n// handlePaste:: ?(view: EditorView, event: dom.ClipboardEvent, slice: Slice) → bool\n// Can be used to override the behavior of pasting. `slice` is the\n// pasted content parsed by the editor, but you can directly access\n// the event to get at the raw content.\n//\n// handleDrop:: ?(view: EditorView, event: dom.Event, slice: Slice, moved: bool) → bool\n// Called when something is dropped on the editor. `moved` will be\n// true if this drop moves from the current selection (which should\n// thus be deleted).\n//\n// handleScrollToSelection:: ?(view: EditorView) → bool\n// Called when the view, after updating its state, tries to scroll\n// the selection into view. A handler function may return false to\n// indicate that it did not handle the scrolling and further\n// handlers or the default behavior should be tried.\n//\n// createSelectionBetween:: ?(view: EditorView, anchor: ResolvedPos, head: ResolvedPos) → ?Selection\n// Can be used to override the way a selection is created when\n// reading a DOM selection between the given anchor and head.\n//\n// domParser:: ?DOMParser\n// The [parser](#model.DOMParser) to use when reading editor changes\n// from the DOM. Defaults to calling\n// [`DOMParser.fromSchema`](#model.DOMParser^fromSchema) on the\n// editor's schema.\n//\n// transformPastedHTML:: ?(html: string) → string\n// Can be used to transform pasted HTML text, _before_ it is parsed,\n// for example to clean it up.\n//\n// clipboardParser:: ?DOMParser\n// The [parser](#model.DOMParser) to use when reading content from\n// the clipboard. When not given, the value of the\n// [`domParser`](#view.EditorProps.domParser) prop is used.\n//\n// transformPastedText:: ?(text: string, plain: bool) → string\n// Transform pasted plain text. The `plain` flag will be true when\n// the text is pasted as plain text.\n//\n// clipboardTextParser:: ?(text: string, $context: ResolvedPos, plain: bool) → Slice\n// A function to parse text from the clipboard into a document\n// slice. Called after\n// [`transformPastedText`](#view.EditorProps.transformPastedText).\n// The default behavior is to split the text into lines, wrap them\n// in `<p>` tags, and call\n// [`clipboardParser`](#view.EditorProps.clipboardParser) on it.\n// The `plain` flag will be true when the text is pasted as plain text.\n//\n// transformPasted:: ?(Slice) → Slice\n// Can be used to transform pasted content before it is applied to\n// the document.\n//\n// nodeViews:: ?Object<(node: Node, view: EditorView, getPos: () → number, decorations: [Decoration]) → NodeView>\n// Allows you to pass custom rendering and behavior logic for nodes\n// and marks. Should map node and mark names to constructor\n// functions that produce a [`NodeView`](#view.NodeView) object\n// implementing the node's display behavior. For nodes, the third\n// argument `getPos` is a function that can be called to get the\n// node's current position, which can be useful when creating\n// transactions to update it. For marks, the third argument is a\n// boolean that indicates whether the mark's content is inline.\n//\n// `decorations` is an array of node or inline decorations that are\n// active around the node. They are automatically drawn in the\n// normal way, and you will usually just want to ignore this, but\n// they can also be used as a way to provide context information to\n// the node view without adding it to the document itself.\n//\n// clipboardSerializer:: ?DOMSerializer\n// The DOM serializer to use when putting content onto the\n// clipboard. If not given, the result of\n// [`DOMSerializer.fromSchema`](#model.DOMSerializer^fromSchema)\n// will be used.\n//\n// clipboardTextSerializer:: ?(Slice) → string\n// A function that will be called to get the text for the current\n// selection when copying text to the clipboard. By default, the\n// editor will use [`textBetween`](#model.Node.textBetween) on the\n// selected range.\n//\n// decorations:: ?(state: EditorState) → ?DecorationSet\n// A set of [document decorations](#view.Decoration) to show in the\n// view.\n//\n// editable:: ?(state: EditorState) → bool\n// When this returns false, the content of the view is not directly\n// editable.\n//\n// attributes:: ?union<Object<string>, (EditorState) → ?Object<string>>\n// Control the DOM attributes of the editable element. May be either\n// an object or a function going from an editor state to an object.\n// By default, the element will get a class `\"ProseMirror\"`, and\n// will have its `contentEditable` attribute determined by the\n// [`editable` prop](#view.EditorProps.editable). Additional classes\n// provided here will be added to the class. For other attributes,\n// the value provided first (as in\n// [`someProp`](#view.EditorView.someProp)) will be used.\n//\n// scrollThreshold:: ?union<number, {top: number, right: number, bottom: number, left: number}>\n// Determines the distance (in pixels) between the cursor and the\n// end of the visible viewport at which point, when scrolling the\n// cursor into view, scrolling takes place. Defaults to 0.\n//\n// scrollMargin:: ?union<number, {top: number, right: number, bottom: number, left: number}>\n// Determines the extra space (in pixels) that is left above or\n// below the cursor when it is scrolled into view. Defaults to 5.\n// DirectEditorProps:: interface extends EditorProps\n//\n// The props object given directly to the editor view supports two\n// fields that can't be used in plugins:\n//\n// state:: EditorState\n// The current state of the editor.\n//\n// dispatchTransaction:: ?(tr: Transaction)\n// The callback over which to send transactions (state updates)\n// produced by the view. If you specify this, you probably want to\n// make sure this ends up calling the view's\n// [`updateState`](#view.EditorView.updateState) method with a new\n// state that has the transaction\n// [applied](#state.EditorState.apply). The callback will be bound to have\n// the view instance as its `this` binding.\n\n\nexport { Decoration, DecorationSet, EditorView, endComposition as __endComposition, parseFromClipboard as __parseFromClipboard, serializeForClipboard as __serializeForClipboard };","import { Schema, Mark } from 'prosemirror-model';\nimport markdownit from 'markdown-it'; // ::Schema Document schema for the data model used by CommonMark.\n\nvar schema = new Schema({\n nodes: {\n doc: {\n content: \"block+\"\n },\n paragraph: {\n content: \"inline*\",\n group: \"block\",\n parseDOM: [{\n tag: \"p\"\n }],\n toDOM: function toDOM() {\n return [\"p\", 0];\n }\n },\n blockquote: {\n content: \"block+\",\n group: \"block\",\n parseDOM: [{\n tag: \"blockquote\"\n }],\n toDOM: function toDOM() {\n return [\"blockquote\", 0];\n }\n },\n horizontal_rule: {\n group: \"block\",\n parseDOM: [{\n tag: \"hr\"\n }],\n toDOM: function toDOM() {\n return [\"div\", [\"hr\"]];\n }\n },\n heading: {\n attrs: {\n level: {\n \"default\": 1\n }\n },\n content: \"(text | image)*\",\n group: \"block\",\n defining: true,\n parseDOM: [{\n tag: \"h1\",\n attrs: {\n level: 1\n }\n }, {\n tag: \"h2\",\n attrs: {\n level: 2\n }\n }, {\n tag: \"h3\",\n attrs: {\n level: 3\n }\n }, {\n tag: \"h4\",\n attrs: {\n level: 4\n }\n }, {\n tag: \"h5\",\n attrs: {\n level: 5\n }\n }, {\n tag: \"h6\",\n attrs: {\n level: 6\n }\n }],\n toDOM: function toDOM(node) {\n return [\"h\" + node.attrs.level, 0];\n }\n },\n code_block: {\n content: \"text*\",\n group: \"block\",\n code: true,\n defining: true,\n marks: \"\",\n attrs: {\n params: {\n \"default\": \"\"\n }\n },\n parseDOM: [{\n tag: \"pre\",\n preserveWhitespace: \"full\",\n getAttrs: function getAttrs(node) {\n return {\n params: node.getAttribute(\"data-params\") || \"\"\n };\n }\n }],\n toDOM: function toDOM(node) {\n return [\"pre\", node.attrs.params ? {\n \"data-params\": node.attrs.params\n } : {}, [\"code\", 0]];\n }\n },\n ordered_list: {\n content: \"list_item+\",\n group: \"block\",\n attrs: {\n order: {\n \"default\": 1\n },\n tight: {\n \"default\": false\n }\n },\n parseDOM: [{\n tag: \"ol\",\n getAttrs: function getAttrs(dom) {\n return {\n order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1,\n tight: dom.hasAttribute(\"data-tight\")\n };\n }\n }],\n toDOM: function toDOM(node) {\n return [\"ol\", {\n start: node.attrs.order == 1 ? null : node.attrs.order,\n \"data-tight\": node.attrs.tight ? \"true\" : null\n }, 0];\n }\n },\n bullet_list: {\n content: \"list_item+\",\n group: \"block\",\n attrs: {\n tight: {\n \"default\": false\n }\n },\n parseDOM: [{\n tag: \"ul\",\n getAttrs: function getAttrs(dom) {\n return {\n tight: dom.hasAttribute(\"data-tight\")\n };\n }\n }],\n toDOM: function toDOM(node) {\n return [\"ul\", {\n \"data-tight\": node.attrs.tight ? \"true\" : null\n }, 0];\n }\n },\n list_item: {\n content: \"paragraph block*\",\n defining: true,\n parseDOM: [{\n tag: \"li\"\n }],\n toDOM: function toDOM() {\n return [\"li\", 0];\n }\n },\n text: {\n group: \"inline\"\n },\n image: {\n inline: true,\n attrs: {\n src: {},\n alt: {\n \"default\": null\n },\n title: {\n \"default\": null\n }\n },\n group: \"inline\",\n draggable: true,\n parseDOM: [{\n tag: \"img[src]\",\n getAttrs: function getAttrs(dom) {\n return {\n src: dom.getAttribute(\"src\"),\n title: dom.getAttribute(\"title\"),\n alt: dom.getAttribute(\"alt\")\n };\n }\n }],\n toDOM: function toDOM(node) {\n return [\"img\", node.attrs];\n }\n },\n hard_break: {\n inline: true,\n group: \"inline\",\n selectable: false,\n parseDOM: [{\n tag: \"br\"\n }],\n toDOM: function toDOM() {\n return [\"br\"];\n }\n }\n },\n marks: {\n em: {\n parseDOM: [{\n tag: \"i\"\n }, {\n tag: \"em\"\n }, {\n style: \"font-style\",\n getAttrs: function getAttrs(value) {\n return value == \"italic\" && null;\n }\n }],\n toDOM: function toDOM() {\n return [\"em\"];\n }\n },\n strong: {\n parseDOM: [{\n tag: \"b\"\n }, {\n tag: \"strong\"\n }, {\n style: \"font-weight\",\n getAttrs: function getAttrs(value) {\n return /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null;\n }\n }],\n toDOM: function toDOM() {\n return [\"strong\"];\n }\n },\n link: {\n attrs: {\n href: {},\n title: {\n \"default\": null\n }\n },\n inclusive: false,\n parseDOM: [{\n tag: \"a[href]\",\n getAttrs: function getAttrs(dom) {\n return {\n href: dom.getAttribute(\"href\"),\n title: dom.getAttribute(\"title\")\n };\n }\n }],\n toDOM: function toDOM(node) {\n return [\"a\", node.attrs];\n }\n },\n code: {\n parseDOM: [{\n tag: \"code\"\n }],\n toDOM: function toDOM() {\n return [\"code\"];\n }\n }\n }\n});\n\nfunction maybeMerge(a, b) {\n if (a.isText && b.isText && Mark.sameSet(a.marks, b.marks)) {\n return a.withText(a.text + b.text);\n }\n} // Object used to track the context of a running parse.\n\n\nvar MarkdownParseState = function MarkdownParseState(schema, tokenHandlers) {\n this.schema = schema;\n this.stack = [{\n type: schema.topNodeType,\n content: []\n }];\n this.marks = Mark.none;\n this.tokenHandlers = tokenHandlers;\n};\n\nMarkdownParseState.prototype.top = function top() {\n return this.stack[this.stack.length - 1];\n};\n\nMarkdownParseState.prototype.push = function push(elt) {\n if (this.stack.length) {\n this.top().content.push(elt);\n }\n}; // : (string)\n// Adds the given text to the current position in the document,\n// using the current marks as styling.\n\n\nMarkdownParseState.prototype.addText = function addText(text) {\n if (!text) {\n return;\n }\n\n var nodes = this.top().content,\n last = nodes[nodes.length - 1];\n var node = this.schema.text(text, this.marks),\n merged;\n\n if (last && (merged = maybeMerge(last, node))) {\n nodes[nodes.length - 1] = merged;\n } else {\n nodes.push(node);\n }\n}; // : (Mark)\n// Adds the given mark to the set of active marks.\n\n\nMarkdownParseState.prototype.openMark = function openMark(mark) {\n this.marks = mark.addToSet(this.marks);\n}; // : (Mark)\n// Removes the given mark from the set of active marks.\n\n\nMarkdownParseState.prototype.closeMark = function closeMark(mark) {\n this.marks = mark.removeFromSet(this.marks);\n};\n\nMarkdownParseState.prototype.parseTokens = function parseTokens(toks) {\n for (var i = 0; i < toks.length; i++) {\n var tok = toks[i];\n var handler = this.tokenHandlers[tok.type];\n\n if (!handler) {\n throw new Error(\"Token type `\" + tok.type + \"` not supported by Markdown parser\");\n }\n\n handler(this, tok, toks, i);\n }\n}; // : (NodeType, ?Object, ?[Node]) → ?Node\n// Add a node at the current position.\n\n\nMarkdownParseState.prototype.addNode = function addNode(type, attrs, content) {\n var node = type.createAndFill(attrs, content, this.marks);\n\n if (!node) {\n return null;\n }\n\n this.push(node);\n return node;\n}; // : (NodeType, ?Object)\n// Wrap subsequent content in a node of the given type.\n\n\nMarkdownParseState.prototype.openNode = function openNode(type, attrs) {\n this.stack.push({\n type: type,\n attrs: attrs,\n content: []\n });\n}; // : () → ?Node\n// Close and return the node that is currently on top of the stack.\n\n\nMarkdownParseState.prototype.closeNode = function closeNode() {\n if (this.marks.length) {\n this.marks = Mark.none;\n }\n\n var info = this.stack.pop();\n return this.addNode(info.type, info.attrs, info.content);\n};\n\nfunction attrs(spec, token, tokens, i) {\n if (spec.getAttrs) {\n return spec.getAttrs(token, tokens, i);\n } // For backwards compatibility when `attrs` is a Function\n else if (spec.attrs instanceof Function) {\n return spec.attrs(token);\n } else {\n return spec.attrs;\n }\n} // Code content is represented as a single token with a `content`\n// property in Markdown-it.\n\n\nfunction noCloseToken(spec, type) {\n return spec.noCloseToken || type == \"code_inline\" || type == \"code_block\" || type == \"fence\";\n}\n\nfunction withoutTrailingNewline(str) {\n return str[str.length - 1] == \"\\n\" ? str.slice(0, str.length - 1) : str;\n}\n\nfunction noOp() {}\n\nfunction tokenHandlers(schema, tokens) {\n var handlers = Object.create(null);\n\n var loop = function loop(type) {\n var spec = tokens[type];\n\n if (spec.block) {\n var nodeType = schema.nodeType(spec.block);\n\n if (noCloseToken(spec, type)) {\n handlers[type] = function (state, tok, tokens, i) {\n state.openNode(nodeType, attrs(spec, tok, tokens, i));\n state.addText(withoutTrailingNewline(tok.content));\n state.closeNode();\n };\n } else {\n handlers[type + \"_open\"] = function (state, tok, tokens, i) {\n return state.openNode(nodeType, attrs(spec, tok, tokens, i));\n };\n\n handlers[type + \"_close\"] = function (state) {\n return state.closeNode();\n };\n }\n } else if (spec.node) {\n var nodeType$1 = schema.nodeType(spec.node);\n\n handlers[type] = function (state, tok, tokens, i) {\n return state.addNode(nodeType$1, attrs(spec, tok, tokens, i));\n };\n } else if (spec.mark) {\n var markType = schema.marks[spec.mark];\n\n if (noCloseToken(spec, type)) {\n handlers[type] = function (state, tok, tokens, i) {\n state.openMark(markType.create(attrs(spec, tok, tokens, i)));\n state.addText(withoutTrailingNewline(tok.content));\n state.closeMark(markType);\n };\n } else {\n handlers[type + \"_open\"] = function (state, tok, tokens, i) {\n return state.openMark(markType.create(attrs(spec, tok, tokens, i)));\n };\n\n handlers[type + \"_close\"] = function (state) {\n return state.closeMark(markType);\n };\n }\n } else if (spec.ignore) {\n if (noCloseToken(spec, type)) {\n handlers[type] = noOp;\n } else {\n handlers[type + '_open'] = noOp;\n handlers[type + '_close'] = noOp;\n }\n } else {\n throw new RangeError(\"Unrecognized parsing spec \" + JSON.stringify(spec));\n }\n };\n\n for (var type in tokens) {\n loop(type);\n }\n\n handlers.text = function (state, tok) {\n return state.addText(tok.content);\n };\n\n handlers.inline = function (state, tok) {\n return state.parseTokens(tok.children);\n };\n\n handlers.softbreak = handlers.softbreak || function (state) {\n return state.addText(\"\\n\");\n };\n\n return handlers;\n} // ::- A configuration of a Markdown parser. Such a parser uses\n// [markdown-it](https://github.com/markdown-it/markdown-it) to\n// tokenize a file, and then runs the custom rules it is given over\n// the tokens to create a ProseMirror document tree.\n\n\nvar MarkdownParser = function MarkdownParser(schema, tokenizer, tokens) {\n // :: Object The value of the `tokens` object used to construct\n // this parser. Can be useful to copy and modify to base other\n // parsers on.\n this.tokens = tokens;\n this.schema = schema;\n this.tokenizer = tokenizer;\n this.tokenHandlers = tokenHandlers(schema, tokens);\n}; // :: (string) → Node\n// Parse a string as [CommonMark](http://commonmark.org/) markup,\n// and create a ProseMirror document as prescribed by this parser's\n// rules.\n\n\nMarkdownParser.prototype.parse = function parse(text) {\n var state = new MarkdownParseState(this.schema, this.tokenHandlers),\n doc;\n state.parseTokens(this.tokenizer.parse(text, {}));\n\n do {\n doc = state.closeNode();\n } while (state.stack.length);\n\n return doc;\n};\n\nfunction listIsTight(tokens, i) {\n while (++i < tokens.length) {\n if (tokens[i].type != \"list_item_open\") {\n return tokens[i].hidden;\n }\n }\n\n return false;\n} // :: MarkdownParser\n// A parser parsing unextended [CommonMark](http://commonmark.org/),\n// without inline HTML, and producing a document in the basic schema.\n\n\nvar defaultMarkdownParser = new MarkdownParser(schema, markdownit(\"commonmark\", {\n html: false\n}), {\n blockquote: {\n block: \"blockquote\"\n },\n paragraph: {\n block: \"paragraph\"\n },\n list_item: {\n block: \"list_item\"\n },\n bullet_list: {\n block: \"bullet_list\",\n getAttrs: function getAttrs(_, tokens, i) {\n return {\n tight: listIsTight(tokens, i)\n };\n }\n },\n ordered_list: {\n block: \"ordered_list\",\n getAttrs: function getAttrs(tok, tokens, i) {\n return {\n order: +tok.attrGet(\"start\") || 1,\n tight: listIsTight(tokens, i)\n };\n }\n },\n heading: {\n block: \"heading\",\n getAttrs: function getAttrs(tok) {\n return {\n level: +tok.tag.slice(1)\n };\n }\n },\n code_block: {\n block: \"code_block\",\n noCloseToken: true\n },\n fence: {\n block: \"code_block\",\n getAttrs: function getAttrs(tok) {\n return {\n params: tok.info || \"\"\n };\n },\n noCloseToken: true\n },\n hr: {\n node: \"horizontal_rule\"\n },\n image: {\n node: \"image\",\n getAttrs: function getAttrs(tok) {\n return {\n src: tok.attrGet(\"src\"),\n title: tok.attrGet(\"title\") || null,\n alt: tok.children[0] && tok.children[0].content || null\n };\n }\n },\n hardbreak: {\n node: \"hard_break\"\n },\n em: {\n mark: \"em\"\n },\n strong: {\n mark: \"strong\"\n },\n link: {\n mark: \"link\",\n getAttrs: function getAttrs(tok) {\n return {\n href: tok.attrGet(\"href\"),\n title: tok.attrGet(\"title\") || null\n };\n }\n },\n code_inline: {\n mark: \"code\",\n noCloseToken: true\n }\n}); // ::- A specification for serializing a ProseMirror document as\n// Markdown/CommonMark text.\n\nvar MarkdownSerializer = function MarkdownSerializer(nodes, marks) {\n // :: Object<(MarkdownSerializerState, Node)> The node serializer\n // functions for this serializer.\n this.nodes = nodes; // :: Object The mark serializer info.\n\n this.marks = marks;\n}; // :: (Node, ?Object) → string\n// Serialize the content of the given node to\n// [CommonMark](http://commonmark.org/).\n\n\nMarkdownSerializer.prototype.serialize = function serialize(content, options) {\n var state = new MarkdownSerializerState(this.nodes, this.marks, options);\n state.renderContent(content);\n return state.out;\n}; // :: MarkdownSerializer\n// A serializer for the [basic schema](#schema).\n\n\nvar defaultMarkdownSerializer = new MarkdownSerializer({\n blockquote: function blockquote(state, node) {\n state.wrapBlock(\"> \", null, node, function () {\n return state.renderContent(node);\n });\n },\n code_block: function code_block(state, node) {\n state.write(\"```\" + (node.attrs.params || \"\") + \"\\n\");\n state.text(node.textContent, false);\n state.ensureNewLine();\n state.write(\"```\");\n state.closeBlock(node);\n },\n heading: function heading(state, node) {\n state.write(state.repeat(\"#\", node.attrs.level) + \" \");\n state.renderInline(node);\n state.closeBlock(node);\n },\n horizontal_rule: function horizontal_rule(state, node) {\n state.write(node.attrs.markup || \"---\");\n state.closeBlock(node);\n },\n bullet_list: function bullet_list(state, node) {\n state.renderList(node, \" \", function () {\n return (node.attrs.bullet || \"*\") + \" \";\n });\n },\n ordered_list: function ordered_list(state, node) {\n var start = node.attrs.order || 1;\n var maxW = String(start + node.childCount - 1).length;\n var space = state.repeat(\" \", maxW + 2);\n state.renderList(node, space, function (i) {\n var nStr = String(start + i);\n return state.repeat(\" \", maxW - nStr.length) + nStr + \". \";\n });\n },\n list_item: function list_item(state, node) {\n state.renderContent(node);\n },\n paragraph: function paragraph(state, node) {\n state.renderInline(node);\n state.closeBlock(node);\n },\n image: function image(state, node) {\n state.write(\"![\" + state.esc(node.attrs.alt || \"\") + \"](\" + state.esc(node.attrs.src) + (node.attrs.title ? \" \" + state.quote(node.attrs.title) : \"\") + \")\");\n },\n hard_break: function hard_break(state, node, parent, index) {\n for (var i = index + 1; i < parent.childCount; i++) {\n if (parent.child(i).type != node.type) {\n state.write(\"\\\\\\n\");\n return;\n }\n }\n },\n text: function text(state, node) {\n state.text(node.text);\n }\n}, {\n em: {\n open: \"*\",\n close: \"*\",\n mixable: true,\n expelEnclosingWhitespace: true\n },\n strong: {\n open: \"**\",\n close: \"**\",\n mixable: true,\n expelEnclosingWhitespace: true\n },\n link: {\n open: function open(_state, mark, parent, index) {\n return isPlainURL(mark, parent, index, 1) ? \"<\" : \"[\";\n },\n close: function close(state, mark, parent, index) {\n return isPlainURL(mark, parent, index, -1) ? \">\" : \"](\" + state.esc(mark.attrs.href) + (mark.attrs.title ? \" \" + state.quote(mark.attrs.title) : \"\") + \")\";\n }\n },\n code: {\n open: function open(_state, _mark, parent, index) {\n return backticksFor(parent.child(index), -1);\n },\n close: function close(_state, _mark, parent, index) {\n return backticksFor(parent.child(index - 1), 1);\n },\n escape: false\n }\n});\n\nfunction backticksFor(node, side) {\n var ticks = /`+/g,\n m,\n len = 0;\n\n if (node.isText) {\n while (m = ticks.exec(node.text)) {\n len = Math.max(len, m[0].length);\n }\n }\n\n var result = len > 0 && side > 0 ? \" `\" : \"`\";\n\n for (var i = 0; i < len; i++) {\n result += \"`\";\n }\n\n if (len > 0 && side < 0) {\n result += \" \";\n }\n\n return result;\n}\n\nfunction isPlainURL(link, parent, index, side) {\n if (link.attrs.title || !/^\\w+:/.test(link.attrs.href)) {\n return false;\n }\n\n var content = parent.child(index + (side < 0 ? -1 : 0));\n\n if (!content.isText || content.text != link.attrs.href || content.marks[content.marks.length - 1] != link) {\n return false;\n }\n\n if (index == (side < 0 ? 1 : parent.childCount - 1)) {\n return true;\n }\n\n var next = parent.child(index + (side < 0 ? -2 : 1));\n return !link.isInSet(next.marks);\n} // ::- This is an object used to track state and expose\n// methods related to markdown serialization. Instances are passed to\n// node and mark serialization methods (see `toMarkdown`).\n\n\nvar MarkdownSerializerState = function MarkdownSerializerState(nodes, marks, options) {\n this.nodes = nodes;\n this.marks = marks;\n this.delim = this.out = \"\";\n this.closed = false;\n this.inTightList = false; // :: Object\n // The options passed to the serializer.\n // tightLists:: ?bool\n // Whether to render lists in a tight style. This can be overridden\n // on a node level by specifying a tight attribute on the node.\n // Defaults to false.\n\n this.options = options || {};\n\n if (typeof this.options.tightLists == \"undefined\") {\n this.options.tightLists = false;\n }\n};\n\nMarkdownSerializerState.prototype.flushClose = function flushClose(size) {\n if (this.closed) {\n if (!this.atBlank()) {\n this.out += \"\\n\";\n }\n\n if (size == null) {\n size = 2;\n }\n\n if (size > 1) {\n var delimMin = this.delim;\n var trim = /\\s+$/.exec(delimMin);\n\n if (trim) {\n delimMin = delimMin.slice(0, delimMin.length - trim[0].length);\n }\n\n for (var i = 1; i < size; i++) {\n this.out += delimMin + \"\\n\";\n }\n }\n\n this.closed = false;\n }\n}; // :: (string, ?string, Node, ())\n// Render a block, prefixing each line with `delim`, and the first\n// line in `firstDelim`. `node` should be the node that is closed at\n// the end of the block, and `f` is a function that renders the\n// content of the block.\n\n\nMarkdownSerializerState.prototype.wrapBlock = function wrapBlock(delim, firstDelim, node, f) {\n var old = this.delim;\n this.write(firstDelim || delim);\n this.delim += delim;\n f();\n this.delim = old;\n this.closeBlock(node);\n};\n\nMarkdownSerializerState.prototype.atBlank = function atBlank() {\n return /(^|\\n)$/.test(this.out);\n}; // :: ()\n// Ensure the current content ends with a newline.\n\n\nMarkdownSerializerState.prototype.ensureNewLine = function ensureNewLine() {\n if (!this.atBlank()) {\n this.out += \"\\n\";\n }\n}; // :: (?string)\n// Prepare the state for writing output (closing closed paragraphs,\n// adding delimiters, and so on), and then optionally add content\n// (unescaped) to the output.\n\n\nMarkdownSerializerState.prototype.write = function write(content) {\n this.flushClose();\n\n if (this.delim && this.atBlank()) {\n this.out += this.delim;\n }\n\n if (content) {\n this.out += content;\n }\n}; // :: (Node)\n// Close the block for the given node.\n\n\nMarkdownSerializerState.prototype.closeBlock = function closeBlock(node) {\n this.closed = node;\n}; // :: (string, ?bool)\n// Add the given text to the document. When escape is not `false`,\n// it will be escaped.\n\n\nMarkdownSerializerState.prototype.text = function text(text$1, escape) {\n var lines = text$1.split(\"\\n\");\n\n for (var i = 0; i < lines.length; i++) {\n var startOfLine = this.atBlank() || this.closed;\n this.write();\n this.out += escape !== false ? this.esc(lines[i], startOfLine) : lines[i];\n\n if (i != lines.length - 1) {\n this.out += \"\\n\";\n }\n }\n}; // :: (Node)\n// Render the given node as a block.\n\n\nMarkdownSerializerState.prototype.render = function render(node, parent, index) {\n if (typeof parent == \"number\") {\n throw new Error(\"!\");\n }\n\n if (!this.nodes[node.type.name]) {\n throw new Error(\"Token type `\" + node.type.name + \"` not supported by Markdown renderer\");\n }\n\n this.nodes[node.type.name](this, node, parent, index);\n}; // :: (Node)\n// Render the contents of `parent` as block nodes.\n\n\nMarkdownSerializerState.prototype.renderContent = function renderContent(parent) {\n var this$1 = this;\n parent.forEach(function (node, _, i) {\n return this$1.render(node, parent, i);\n });\n}; // :: (Node)\n// Render the contents of `parent` as inline content.\n\n\nMarkdownSerializerState.prototype.renderInline = function renderInline(parent) {\n var this$1 = this;\n var active = [],\n trailing = \"\";\n\n var progress = function progress(node, _, index) {\n var marks = node ? node.marks : []; // Remove marks from `hard_break` that are the last node inside\n // that mark to prevent parser edge cases with new lines just\n // before closing marks.\n // (FIXME it'd be nice if we had a schema-agnostic way to\n // identify nodes that serialize as hard breaks)\n\n if (node && node.type.name === \"hard_break\") {\n marks = marks.filter(function (m) {\n if (index + 1 == parent.childCount) {\n return false;\n }\n\n var next = parent.child(index + 1);\n return m.isInSet(next.marks) && (!next.isText || /\\S/.test(next.text));\n });\n }\n\n var leading = trailing;\n trailing = \"\"; // If whitespace has to be expelled from the node, adjust\n // leading and trailing accordingly.\n\n if (node && node.isText && marks.some(function (mark) {\n var info = this$1.marks[mark.type.name];\n return info && info.expelEnclosingWhitespace;\n })) {\n var ref = /^(\\s*)(.*?)(\\s*)$/m.exec(node.text);\n var _$1 = ref[0];\n var lead = ref[1];\n var inner$1 = ref[2];\n var trail = ref[3];\n leading += lead;\n trailing = trail;\n\n if (lead || trail) {\n node = inner$1 ? node.withText(inner$1) : null;\n\n if (!node) {\n marks = active;\n }\n }\n }\n\n var inner = marks.length && marks[marks.length - 1],\n noEsc = inner && this$1.marks[inner.type.name].escape === false;\n var len = marks.length - (noEsc ? 1 : 0); // Try to reorder 'mixable' marks, such as em and strong, which\n // in Markdown may be opened and closed in different order, so\n // that order of the marks for the token matches the order in\n // active.\n\n outer: for (var i = 0; i < len; i++) {\n var mark = marks[i];\n\n if (!this$1.marks[mark.type.name].mixable) {\n break;\n }\n\n for (var j = 0; j < active.length; j++) {\n var other = active[j];\n\n if (!this$1.marks[other.type.name].mixable) {\n break;\n }\n\n if (mark.eq(other)) {\n if (i > j) {\n marks = marks.slice(0, j).concat(mark).concat(marks.slice(j, i)).concat(marks.slice(i + 1, len));\n } else if (j > i) {\n marks = marks.slice(0, i).concat(marks.slice(i + 1, j)).concat(mark).concat(marks.slice(j, len));\n }\n\n continue outer;\n }\n }\n } // Find the prefix of the mark set that didn't change\n\n\n var keep = 0;\n\n while (keep < Math.min(active.length, len) && marks[keep].eq(active[keep])) {\n ++keep;\n } // Close the marks that need to be closed\n\n\n while (keep < active.length) {\n this$1.text(this$1.markString(active.pop(), false, parent, index), false);\n } // Output any previously expelled trailing whitespace outside the marks\n\n\n if (leading) {\n this$1.text(leading);\n } // Open the marks that need to be opened\n\n\n if (node) {\n while (active.length < len) {\n var add = marks[active.length];\n active.push(add);\n this$1.text(this$1.markString(add, true, parent, index), false);\n } // Render the node. Special case code marks, since their content\n // may not be escaped.\n\n\n if (noEsc && node.isText) {\n this$1.text(this$1.markString(inner, true, parent, index) + node.text + this$1.markString(inner, false, parent, index + 1), false);\n } else {\n this$1.render(node, parent, index);\n }\n }\n };\n\n parent.forEach(progress);\n progress(null, null, parent.childCount);\n}; // :: (Node, string, (number) → string)\n// Render a node's content as a list. `delim` should be the extra\n// indentation added to all lines except the first in an item,\n// `firstDelim` is a function going from an item index to a\n// delimiter for the first line of the item.\n\n\nMarkdownSerializerState.prototype.renderList = function renderList(node, delim, firstDelim) {\n var this$1 = this;\n\n if (this.closed && this.closed.type == node.type) {\n this.flushClose(3);\n } else if (this.inTightList) {\n this.flushClose(1);\n }\n\n var isTight = typeof node.attrs.tight != \"undefined\" ? node.attrs.tight : this.options.tightLists;\n var prevTight = this.inTightList;\n this.inTightList = isTight;\n node.forEach(function (child, _, i) {\n if (i && isTight) {\n this$1.flushClose(1);\n }\n\n this$1.wrapBlock(delim, firstDelim(i), node, function () {\n return this$1.render(child, node, i);\n });\n });\n this.inTightList = prevTight;\n}; // :: (string, ?bool) → string\n// Escape the given string so that it can safely appear in Markdown\n// content. If `startOfLine` is true, also escape characters that\n// have special meaning only at the start of the line.\n\n\nMarkdownSerializerState.prototype.esc = function esc(str, startOfLine) {\n str = str.replace(/[`*\\\\~\\[\\]]/g, \"\\\\$&\");\n\n if (startOfLine) {\n str = str.replace(/^[:#\\-*+]/, \"\\\\$&\").replace(/^(\\s*\\d+)\\./, \"$1\\\\.\");\n }\n\n return str;\n};\n\nMarkdownSerializerState.prototype.quote = function quote(str) {\n var wrap = str.indexOf('\"') == -1 ? '\"\"' : str.indexOf(\"'\") == -1 ? \"''\" : \"()\";\n return wrap[0] + str + wrap[1];\n}; // :: (string, number) → string\n// Repeat the given string `n` times.\n\n\nMarkdownSerializerState.prototype.repeat = function repeat(str, n) {\n var out = \"\";\n\n for (var i = 0; i < n; i++) {\n out += str;\n }\n\n return out;\n}; // : (Mark, bool, string?) → string\n// Get the markdown string for a given opening or closing mark.\n\n\nMarkdownSerializerState.prototype.markString = function markString(mark, open, parent, index) {\n var info = this.marks[mark.type.name];\n var value = open ? info.open : info.close;\n return typeof value == \"string\" ? value : value(this, mark, parent, index);\n}; // :: (string) → { leading: ?string, trailing: ?string }\n// Get leading and trailing whitespace from a string. Values of\n// leading or trailing property of the return object will be undefined\n// if there is no match.\n\n\nMarkdownSerializerState.prototype.getEnclosingWhitespace = function getEnclosingWhitespace(text) {\n return {\n leading: (text.match(/^(\\s+)/) || [])[0],\n trailing: (text.match(/(\\s+)$/) || [])[0]\n };\n};\n\nexport { MarkdownParser, MarkdownSerializer, MarkdownSerializerState, defaultMarkdownParser, defaultMarkdownSerializer, schema };","export var base = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 10: \"Enter\",\n 12: \"NumLock\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 44: \"PrintScreen\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Meta\",\n 92: \"Meta\",\n 106: \"*\",\n 107: \"+\",\n 108: \",\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 160: \"Shift\",\n 161: \"Shift\",\n 162: \"Control\",\n 163: \"Control\",\n 164: \"Alt\",\n 165: \"Alt\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\",\n 229: \"q\"\n};\nexport var shift = {\n 48: \")\",\n 49: \"!\",\n 50: \"@\",\n 51: \"#\",\n 52: \"$\",\n 53: \"%\",\n 54: \"^\",\n 55: \"&\",\n 56: \"*\",\n 57: \"(\",\n 59: \":\",\n 61: \"+\",\n 173: \"_\",\n 186: \":\",\n 187: \"+\",\n 188: \"<\",\n 189: \"_\",\n 190: \">\",\n 191: \"?\",\n 192: \"~\",\n 219: \"{\",\n 220: \"|\",\n 221: \"}\",\n 222: \"\\\"\",\n 229: \"Q\"\n};\nvar chrome = typeof navigator != \"undefined\" && /Chrome\\/(\\d+)/.exec(navigator.userAgent);\nvar safari = typeof navigator != \"undefined\" && /Apple Computer/.test(navigator.vendor);\nvar gecko = typeof navigator != \"undefined\" && /Gecko\\/\\d+/.test(navigator.userAgent);\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform);\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent);\nvar brokenModifierNames = chrome && (mac || +chrome[1] < 57) || gecko && mac; // Fill in the digit keys\n\nfor (var i = 0; i < 10; i++) {\n base[48 + i] = base[96 + i] = String(i);\n} // The function keys\n\n\nfor (var i = 1; i <= 24; i++) {\n base[i + 111] = \"F\" + i;\n} // And the alphabetic keys\n\n\nfor (var i = 65; i <= 90; i++) {\n base[i] = String.fromCharCode(i + 32);\n shift[i] = String.fromCharCode(i);\n} // For each code that doesn't have a shift-equivalent, copy the base name\n\n\nfor (var code in base) {\n if (!shift.hasOwnProperty(code)) shift[code] = base[code];\n}\n\nexport function keyName(event) {\n // Don't trust event.key in Chrome when there are modifiers until\n // they fix https://bugs.chromium.org/p/chromium/issues/detail?id=633838\n var ignoreKey = brokenModifierNames && (event.ctrlKey || event.altKey || event.metaKey) || (safari || ie) && event.shiftKey && event.key && event.key.length == 1;\n var name = !ignoreKey && event.key || (event.shiftKey ? shift : base)[event.keyCode] || event.key || \"Unidentified\"; // Edge sometimes produces wrong names (Issue #3)\n\n if (name == \"Esc\") name = \"Escape\";\n if (name == \"Del\") name = \"Delete\"; // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n\n if (name == \"Left\") name = \"ArrowLeft\";\n if (name == \"Up\") name = \"ArrowUp\";\n if (name == \"Right\") name = \"ArrowRight\";\n if (name == \"Down\") name = \"ArrowDown\";\n return name;\n}","import { keyName, base } from 'w3c-keyname';\nimport { Plugin } from 'prosemirror-state'; // declare global: navigator\n\nvar mac = typeof navigator != \"undefined\" ? /Mac/.test(navigator.platform) : false;\n\nfunction normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/),\n result = parts[parts.length - 1];\n\n if (result == \"Space\") {\n result = \" \";\n }\n\n var alt, ctrl, shift, meta;\n\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n\n if (/^(cmd|meta|m)$/i.test(mod)) {\n meta = true;\n } else if (/^a(lt)?$/i.test(mod)) {\n alt = true;\n } else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true;\n } else if (/^s(hift)?$/i.test(mod)) {\n shift = true;\n } else if (/^mod$/i.test(mod)) {\n if (mac) {\n meta = true;\n } else {\n ctrl = true;\n }\n } else {\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n }\n\n if (alt) {\n result = \"Alt-\" + result;\n }\n\n if (ctrl) {\n result = \"Ctrl-\" + result;\n }\n\n if (meta) {\n result = \"Meta-\" + result;\n }\n\n if (shift) {\n result = \"Shift-\" + result;\n }\n\n return result;\n}\n\nfunction normalize(map) {\n var copy = Object.create(null);\n\n for (var prop in map) {\n copy[normalizeKeyName(prop)] = map[prop];\n }\n\n return copy;\n}\n\nfunction modifiers(name, event, shift) {\n if (event.altKey) {\n name = \"Alt-\" + name;\n }\n\n if (event.ctrlKey) {\n name = \"Ctrl-\" + name;\n }\n\n if (event.metaKey) {\n name = \"Meta-\" + name;\n }\n\n if (shift !== false && event.shiftKey) {\n name = \"Shift-\" + name;\n }\n\n return name;\n} // :: (Object) → Plugin\n// Create a keymap plugin for the given set of bindings.\n//\n// Bindings should map key names to [command](#commands)-style\n// functions, which will be called with `(EditorState, dispatch,\n// EditorView)` arguments, and should return true when they've handled\n// the key. Note that the view argument isn't part of the command\n// protocol, but can be used as an escape hatch if a binding needs to\n// directly interact with the UI.\n//\n// Key names may be strings like `\"Shift-Ctrl-Enter\"`—a key\n// identifier prefixed with zero or more modifiers. Key identifiers\n// are based on the strings that can appear in\n// [`KeyEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\n// Use lowercase letters to refer to letter keys (or uppercase letters\n// if you want shift to be held). You may use `\"Space\"` as an alias\n// for the `\" \"` name.\n//\n// Modifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n// `a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n// `Meta-`) are recognized. For characters that are created by holding\n// shift, the `Shift-` prefix is implied, and should not be added\n// explicitly.\n//\n// You can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\n// other platforms.\n//\n// You can add multiple keymap plugins to an editor. The order in\n// which they appear determines their precedence (the ones early in\n// the array get to dispatch first).\n\n\nfunction keymap(bindings) {\n return new Plugin({\n props: {\n handleKeyDown: keydownHandler(bindings)\n }\n });\n} // :: (Object) → (view: EditorView, event: dom.Event) → bool\n// Given a set of bindings (using the same format as\n// [`keymap`](#keymap.keymap), return a [keydown\n// handler](#view.EditorProps.handleKeyDown) that handles them.\n\n\nfunction keydownHandler(bindings) {\n var map = normalize(bindings);\n return function (view, event) {\n var name = keyName(event),\n isChar = name.length == 1 && name != \" \",\n baseName;\n var direct = map[modifiers(name, event, !isChar)];\n\n if (direct && direct(view.state, view.dispatch, view)) {\n return true;\n }\n\n if (isChar && (event.shiftKey || event.altKey || event.metaKey || name.charCodeAt(0) > 127) && (baseName = base[event.keyCode]) && baseName != name) {\n // Try falling back to the keyCode when there's a modifier\n // active or the character produced isn't ASCII, and our table\n // produces a different name from the the keyCode. See #668,\n // #1060\n var fromCode = map[modifiers(baseName, event, true)];\n\n if (fromCode && fromCode(view.state, view.dispatch, view)) {\n return true;\n }\n } else if (isChar && event.shiftKey) {\n // Otherwise, if shift is active, also try the binding with the\n // Shift- prefix enabled. See #997\n var withShift = map[modifiers(name, event, true)];\n\n if (withShift && withShift(view.state, view.dispatch, view)) {\n return true;\n }\n }\n\n return false;\n };\n}\n\nexport { keydownHandler, keymap };","var GOOD_LEAF_SIZE = 200; // :: class<T> A rope sequence is a persistent sequence data structure\n// that supports appending, prepending, and slicing without doing a\n// full copy. It is represented as a mostly-balanced tree.\n\nvar RopeSequence = function RopeSequence() {};\n\nRopeSequence.prototype.append = function append(other) {\n if (!other.length) {\n return this;\n }\n\n other = RopeSequence.from(other);\n return !this.length && other || other.length < GOOD_LEAF_SIZE && this.leafAppend(other) || this.length < GOOD_LEAF_SIZE && other.leafPrepend(this) || this.appendInner(other);\n}; // :: (union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Prepend an array or other rope to this one, returning a new rope.\n\n\nRopeSequence.prototype.prepend = function prepend(other) {\n if (!other.length) {\n return this;\n }\n\n return RopeSequence.from(other).append(this);\n};\n\nRopeSequence.prototype.appendInner = function appendInner(other) {\n return new Append(this, other);\n}; // :: (?number, ?number) → RopeSequence<T>\n// Create a rope repesenting a sub-sequence of this rope.\n\n\nRopeSequence.prototype.slice = function slice(from, to) {\n if (from === void 0) from = 0;\n if (to === void 0) to = this.length;\n\n if (from >= to) {\n return RopeSequence.empty;\n }\n\n return this.sliceInner(Math.max(0, from), Math.min(this.length, to));\n}; // :: (number) → T\n// Retrieve the element at the given position from this rope.\n\n\nRopeSequence.prototype.get = function get(i) {\n if (i < 0 || i >= this.length) {\n return undefined;\n }\n\n return this.getInner(i);\n}; // :: ((element: T, index: number) → ?bool, ?number, ?number)\n// Call the given function for each element between the given\n// indices. This tends to be more efficient than looping over the\n// indices and calling `get`, because it doesn't have to descend the\n// tree for every element.\n\n\nRopeSequence.prototype.forEach = function forEach(f, from, to) {\n if (from === void 0) from = 0;\n if (to === void 0) to = this.length;\n\n if (from <= to) {\n this.forEachInner(f, from, to, 0);\n } else {\n this.forEachInvertedInner(f, from, to, 0);\n }\n}; // :: ((element: T, index: number) → U, ?number, ?number) → [U]\n// Map the given functions over the elements of the rope, producing\n// a flat array.\n\n\nRopeSequence.prototype.map = function map(f, from, to) {\n if (from === void 0) from = 0;\n if (to === void 0) to = this.length;\n var result = [];\n this.forEach(function (elt, i) {\n return result.push(f(elt, i));\n }, from, to);\n return result;\n}; // :: (?union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Create a rope representing the given array, or return the rope\n// itself if a rope was given.\n\n\nRopeSequence.from = function from(values) {\n if (values instanceof RopeSequence) {\n return values;\n }\n\n return values && values.length ? new Leaf(values) : RopeSequence.empty;\n};\n\nvar Leaf = /*@__PURE__*/function (RopeSequence) {\n function Leaf(values) {\n RopeSequence.call(this);\n this.values = values;\n }\n\n if (RopeSequence) Leaf.__proto__ = RopeSequence;\n Leaf.prototype = Object.create(RopeSequence && RopeSequence.prototype);\n Leaf.prototype.constructor = Leaf;\n var prototypeAccessors = {\n length: {\n configurable: true\n },\n depth: {\n configurable: true\n }\n };\n\n Leaf.prototype.flatten = function flatten() {\n return this.values;\n };\n\n Leaf.prototype.sliceInner = function sliceInner(from, to) {\n if (from == 0 && to == this.length) {\n return this;\n }\n\n return new Leaf(this.values.slice(from, to));\n };\n\n Leaf.prototype.getInner = function getInner(i) {\n return this.values[i];\n };\n\n Leaf.prototype.forEachInner = function forEachInner(f, from, to, start) {\n for (var i = from; i < to; i++) {\n if (f(this.values[i], start + i) === false) {\n return false;\n }\n }\n };\n\n Leaf.prototype.forEachInvertedInner = function forEachInvertedInner(f, from, to, start) {\n for (var i = from - 1; i >= to; i--) {\n if (f(this.values[i], start + i) === false) {\n return false;\n }\n }\n };\n\n Leaf.prototype.leafAppend = function leafAppend(other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE) {\n return new Leaf(this.values.concat(other.flatten()));\n }\n };\n\n Leaf.prototype.leafPrepend = function leafPrepend(other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE) {\n return new Leaf(other.flatten().concat(this.values));\n }\n };\n\n prototypeAccessors.length.get = function () {\n return this.values.length;\n };\n\n prototypeAccessors.depth.get = function () {\n return 0;\n };\n\n Object.defineProperties(Leaf.prototype, prototypeAccessors);\n return Leaf;\n}(RopeSequence); // :: RopeSequence\n// The empty rope sequence.\n\n\nRopeSequence.empty = new Leaf([]);\n\nvar Append = /*@__PURE__*/function (RopeSequence) {\n function Append(left, right) {\n RopeSequence.call(this);\n this.left = left;\n this.right = right;\n this.length = left.length + right.length;\n this.depth = Math.max(left.depth, right.depth) + 1;\n }\n\n if (RopeSequence) Append.__proto__ = RopeSequence;\n Append.prototype = Object.create(RopeSequence && RopeSequence.prototype);\n Append.prototype.constructor = Append;\n\n Append.prototype.flatten = function flatten() {\n return this.left.flatten().concat(this.right.flatten());\n };\n\n Append.prototype.getInner = function getInner(i) {\n return i < this.left.length ? this.left.get(i) : this.right.get(i - this.left.length);\n };\n\n Append.prototype.forEachInner = function forEachInner(f, from, to, start) {\n var leftLen = this.left.length;\n\n if (from < leftLen && this.left.forEachInner(f, from, Math.min(to, leftLen), start) === false) {\n return false;\n }\n\n if (to > leftLen && this.right.forEachInner(f, Math.max(from - leftLen, 0), Math.min(this.length, to) - leftLen, start + leftLen) === false) {\n return false;\n }\n };\n\n Append.prototype.forEachInvertedInner = function forEachInvertedInner(f, from, to, start) {\n var leftLen = this.left.length;\n\n if (from > leftLen && this.right.forEachInvertedInner(f, from - leftLen, Math.max(to, leftLen) - leftLen, start + leftLen) === false) {\n return false;\n }\n\n if (to < leftLen && this.left.forEachInvertedInner(f, Math.min(from, leftLen), to, start) === false) {\n return false;\n }\n };\n\n Append.prototype.sliceInner = function sliceInner(from, to) {\n if (from == 0 && to == this.length) {\n return this;\n }\n\n var leftLen = this.left.length;\n\n if (to <= leftLen) {\n return this.left.slice(from, to);\n }\n\n if (from >= leftLen) {\n return this.right.slice(from - leftLen, to - leftLen);\n }\n\n return this.left.slice(from, leftLen).append(this.right.slice(0, to - leftLen));\n };\n\n Append.prototype.leafAppend = function leafAppend(other) {\n var inner = this.right.leafAppend(other);\n\n if (inner) {\n return new Append(this.left, inner);\n }\n };\n\n Append.prototype.leafPrepend = function leafPrepend(other) {\n var inner = this.left.leafPrepend(other);\n\n if (inner) {\n return new Append(inner, this.right);\n }\n };\n\n Append.prototype.appendInner = function appendInner(other) {\n if (this.left.depth >= Math.max(this.right.depth, other.depth) + 1) {\n return new Append(this.left, new Append(this.right, other));\n }\n\n return new Append(this, other);\n };\n\n return Append;\n}(RopeSequence);\n\nvar ropeSequence = RopeSequence;\nexport default ropeSequence;","import RopeSequence from 'rope-sequence';\nimport { Mapping } from 'prosemirror-transform';\nimport { PluginKey, Plugin } from 'prosemirror-state'; // ProseMirror's history isn't simply a way to roll back to a previous\n// state, because ProseMirror supports applying changes without adding\n// them to the history (for example during collaboration).\n//\n// To this end, each 'Branch' (one for the undo history and one for\n// the redo history) keeps an array of 'Items', which can optionally\n// hold a step (an actual undoable change), and always hold a position\n// map (which is needed to move changes below them to apply to the\n// current document).\n//\n// An item that has both a step and a selection bookmark is the start\n// of an 'event' — a group of changes that will be undone or redone at\n// once. (It stores only the bookmark, since that way we don't have to\n// provide a document until the selection is actually applied, which\n// is useful when compressing.)\n// Used to schedule history compression\n\nvar max_empty_items = 500;\n\nvar Branch = function Branch(items, eventCount) {\n this.items = items;\n this.eventCount = eventCount;\n}; // : (EditorState, bool) → ?{transform: Transform, selection: ?SelectionBookmark, remaining: Branch}\n// Pop the latest event off the branch's history and apply it\n// to a document transform.\n\n\nBranch.prototype.popEvent = function popEvent(state, preserveItems) {\n var this$1 = this;\n\n if (this.eventCount == 0) {\n return null;\n }\n\n var end = this.items.length;\n\n for (;; end--) {\n var next = this.items.get(end - 1);\n\n if (next.selection) {\n --end;\n break;\n }\n }\n\n var remap, mapFrom;\n\n if (preserveItems) {\n remap = this.remapping(end, this.items.length);\n mapFrom = remap.maps.length;\n }\n\n var transform = state.tr;\n var selection, remaining;\n var addAfter = [],\n addBefore = [];\n this.items.forEach(function (item, i) {\n if (!item.step) {\n if (!remap) {\n remap = this$1.remapping(end, i + 1);\n mapFrom = remap.maps.length;\n }\n\n mapFrom--;\n addBefore.push(item);\n return;\n }\n\n if (remap) {\n addBefore.push(new Item(item.map));\n var step = item.step.map(remap.slice(mapFrom)),\n map;\n\n if (step && transform.maybeStep(step).doc) {\n map = transform.mapping.maps[transform.mapping.maps.length - 1];\n addAfter.push(new Item(map, null, null, addAfter.length + addBefore.length));\n }\n\n mapFrom--;\n\n if (map) {\n remap.appendMap(map, mapFrom);\n }\n } else {\n transform.maybeStep(item.step);\n }\n\n if (item.selection) {\n selection = remap ? item.selection.map(remap.slice(mapFrom)) : item.selection;\n remaining = new Branch(this$1.items.slice(0, end).append(addBefore.reverse().concat(addAfter)), this$1.eventCount - 1);\n return false;\n }\n }, this.items.length, 0);\n return {\n remaining: remaining,\n transform: transform,\n selection: selection\n };\n}; // : (Transform, ?SelectionBookmark, Object) → Branch\n// Create a new branch with the given transform added.\n\n\nBranch.prototype.addTransform = function addTransform(transform, selection, histOptions, preserveItems) {\n var newItems = [],\n eventCount = this.eventCount;\n var oldItems = this.items,\n lastItem = !preserveItems && oldItems.length ? oldItems.get(oldItems.length - 1) : null;\n\n for (var i = 0; i < transform.steps.length; i++) {\n var step = transform.steps[i].invert(transform.docs[i]);\n var item = new Item(transform.mapping.maps[i], step, selection),\n merged = void 0;\n\n if (merged = lastItem && lastItem.merge(item)) {\n item = merged;\n\n if (i) {\n newItems.pop();\n } else {\n oldItems = oldItems.slice(0, oldItems.length - 1);\n }\n }\n\n newItems.push(item);\n\n if (selection) {\n eventCount++;\n selection = null;\n }\n\n if (!preserveItems) {\n lastItem = item;\n }\n }\n\n var overflow = eventCount - histOptions.depth;\n\n if (overflow > DEPTH_OVERFLOW) {\n oldItems = cutOffEvents(oldItems, overflow);\n eventCount -= overflow;\n }\n\n return new Branch(oldItems.append(newItems), eventCount);\n};\n\nBranch.prototype.remapping = function remapping(from, to) {\n var maps = new Mapping();\n this.items.forEach(function (item, i) {\n var mirrorPos = item.mirrorOffset != null && i - item.mirrorOffset >= from ? maps.maps.length - item.mirrorOffset : null;\n maps.appendMap(item.map, mirrorPos);\n }, from, to);\n return maps;\n};\n\nBranch.prototype.addMaps = function addMaps(array) {\n if (this.eventCount == 0) {\n return this;\n }\n\n return new Branch(this.items.append(array.map(function (map) {\n return new Item(map);\n })), this.eventCount);\n}; // : (Transform, number)\n// When the collab module receives remote changes, the history has\n// to know about those, so that it can adjust the steps that were\n// rebased on top of the remote changes, and include the position\n// maps for the remote changes in its array of items.\n\n\nBranch.prototype.rebased = function rebased(rebasedTransform, rebasedCount) {\n if (!this.eventCount) {\n return this;\n }\n\n var rebasedItems = [],\n start = Math.max(0, this.items.length - rebasedCount);\n var mapping = rebasedTransform.mapping;\n var newUntil = rebasedTransform.steps.length;\n var eventCount = this.eventCount;\n this.items.forEach(function (item) {\n if (item.selection) {\n eventCount--;\n }\n }, start);\n var iRebased = rebasedCount;\n this.items.forEach(function (item) {\n var pos = mapping.getMirror(--iRebased);\n\n if (pos == null) {\n return;\n }\n\n newUntil = Math.min(newUntil, pos);\n var map = mapping.maps[pos];\n\n if (item.step) {\n var step = rebasedTransform.steps[pos].invert(rebasedTransform.docs[pos]);\n var selection = item.selection && item.selection.map(mapping.slice(iRebased + 1, pos));\n\n if (selection) {\n eventCount++;\n }\n\n rebasedItems.push(new Item(map, step, selection));\n } else {\n rebasedItems.push(new Item(map));\n }\n }, start);\n var newMaps = [];\n\n for (var i = rebasedCount; i < newUntil; i++) {\n newMaps.push(new Item(mapping.maps[i]));\n }\n\n var items = this.items.slice(0, start).append(newMaps).append(rebasedItems);\n var branch = new Branch(items, eventCount);\n\n if (branch.emptyItemCount() > max_empty_items) {\n branch = branch.compress(this.items.length - rebasedItems.length);\n }\n\n return branch;\n};\n\nBranch.prototype.emptyItemCount = function emptyItemCount() {\n var count = 0;\n this.items.forEach(function (item) {\n if (!item.step) {\n count++;\n }\n });\n return count;\n}; // Compressing a branch means rewriting it to push the air (map-only\n// items) out. During collaboration, these naturally accumulate\n// because each remote change adds one. The `upto` argument is used\n// to ensure that only the items below a given level are compressed,\n// because `rebased` relies on a clean, untouched set of items in\n// order to associate old items with rebased steps.\n\n\nBranch.prototype.compress = function compress(upto) {\n if (upto === void 0) upto = this.items.length;\n var remap = this.remapping(0, upto),\n mapFrom = remap.maps.length;\n var items = [],\n events = 0;\n this.items.forEach(function (item, i) {\n if (i >= upto) {\n items.push(item);\n\n if (item.selection) {\n events++;\n }\n } else if (item.step) {\n var step = item.step.map(remap.slice(mapFrom)),\n map = step && step.getMap();\n mapFrom--;\n\n if (map) {\n remap.appendMap(map, mapFrom);\n }\n\n if (step) {\n var selection = item.selection && item.selection.map(remap.slice(mapFrom));\n\n if (selection) {\n events++;\n }\n\n var newItem = new Item(map.invert(), step, selection),\n merged,\n last = items.length - 1;\n\n if (merged = items.length && items[last].merge(newItem)) {\n items[last] = merged;\n } else {\n items.push(newItem);\n }\n }\n } else if (item.map) {\n mapFrom--;\n }\n }, this.items.length, 0);\n return new Branch(RopeSequence.from(items.reverse()), events);\n};\n\nBranch.empty = new Branch(RopeSequence.empty, 0);\n\nfunction cutOffEvents(items, n) {\n var cutPoint;\n items.forEach(function (item, i) {\n if (item.selection && n-- == 0) {\n cutPoint = i;\n return false;\n }\n });\n return items.slice(cutPoint);\n}\n\nvar Item = function Item(map, step, selection, mirrorOffset) {\n // The (forward) step map for this item.\n this.map = map; // The inverted step\n\n this.step = step; // If this is non-null, this item is the start of a group, and\n // this selection is the starting selection for the group (the one\n // that was active before the first step was applied)\n\n this.selection = selection; // If this item is the inverse of a previous mapping on the stack,\n // this points at the inverse's offset\n\n this.mirrorOffset = mirrorOffset;\n};\n\nItem.prototype.merge = function merge(other) {\n if (this.step && other.step && !other.selection) {\n var step = other.step.merge(this.step);\n\n if (step) {\n return new Item(step.getMap().invert(), step, this.selection);\n }\n }\n}; // The value of the state field that tracks undo/redo history for that\n// state. Will be stored in the plugin state when the history plugin\n// is active.\n\n\nvar HistoryState = function HistoryState(done, undone, prevRanges, prevTime) {\n this.done = done;\n this.undone = undone;\n this.prevRanges = prevRanges;\n this.prevTime = prevTime;\n};\n\nvar DEPTH_OVERFLOW = 20; // : (HistoryState, EditorState, Transaction, Object)\n// Record a transformation in undo history.\n\nfunction applyTransaction(history, state, tr, options) {\n var historyTr = tr.getMeta(historyKey),\n rebased;\n\n if (historyTr) {\n return historyTr.historyState;\n }\n\n if (tr.getMeta(closeHistoryKey)) {\n history = new HistoryState(history.done, history.undone, null, 0);\n }\n\n var appended = tr.getMeta(\"appendedTransaction\");\n\n if (tr.steps.length == 0) {\n return history;\n } else if (appended && appended.getMeta(historyKey)) {\n if (appended.getMeta(historyKey).redo) {\n return new HistoryState(history.done.addTransform(tr, null, options, mustPreserveItems(state)), history.undone, rangesFor(tr.mapping.maps[tr.steps.length - 1]), history.prevTime);\n } else {\n return new HistoryState(history.done, history.undone.addTransform(tr, null, options, mustPreserveItems(state)), null, history.prevTime);\n }\n } else if (tr.getMeta(\"addToHistory\") !== false && !(appended && appended.getMeta(\"addToHistory\") === false)) {\n // Group transforms that occur in quick succession into one event.\n var newGroup = history.prevTime == 0 || !appended && (history.prevTime < (tr.time || 0) - options.newGroupDelay || !isAdjacentTo(tr, history.prevRanges));\n var prevRanges = appended ? mapRanges(history.prevRanges, tr.mapping) : rangesFor(tr.mapping.maps[tr.steps.length - 1]);\n return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : null, options, mustPreserveItems(state)), Branch.empty, prevRanges, tr.time);\n } else if (rebased = tr.getMeta(\"rebased\")) {\n // Used by the collab module to tell the history that some of its\n // content has been rebased.\n return new HistoryState(history.done.rebased(tr, rebased), history.undone.rebased(tr, rebased), mapRanges(history.prevRanges, tr.mapping), history.prevTime);\n } else {\n return new HistoryState(history.done.addMaps(tr.mapping.maps), history.undone.addMaps(tr.mapping.maps), mapRanges(history.prevRanges, tr.mapping), history.prevTime);\n }\n}\n\nfunction isAdjacentTo(transform, prevRanges) {\n if (!prevRanges) {\n return false;\n }\n\n if (!transform.docChanged) {\n return true;\n }\n\n var adjacent = false;\n transform.mapping.maps[0].forEach(function (start, end) {\n for (var i = 0; i < prevRanges.length; i += 2) {\n if (start <= prevRanges[i + 1] && end >= prevRanges[i]) {\n adjacent = true;\n }\n }\n });\n return adjacent;\n}\n\nfunction rangesFor(map) {\n var result = [];\n map.forEach(function (_from, _to, from, to) {\n return result.push(from, to);\n });\n return result;\n}\n\nfunction mapRanges(ranges, mapping) {\n if (!ranges) {\n return null;\n }\n\n var result = [];\n\n for (var i = 0; i < ranges.length; i += 2) {\n var from = mapping.map(ranges[i], 1),\n to = mapping.map(ranges[i + 1], -1);\n\n if (from <= to) {\n result.push(from, to);\n }\n }\n\n return result;\n} // : (HistoryState, EditorState, (tr: Transaction), bool)\n// Apply the latest event from one branch to the document and shift the event\n// onto the other branch.\n\n\nfunction histTransaction(history, state, dispatch, redo) {\n var preserveItems = mustPreserveItems(state),\n histOptions = historyKey.get(state).spec.config;\n var pop = (redo ? history.undone : history.done).popEvent(state, preserveItems);\n\n if (!pop) {\n return;\n }\n\n var selection = pop.selection.resolve(pop.transform.doc);\n var added = (redo ? history.done : history.undone).addTransform(pop.transform, state.selection.getBookmark(), histOptions, preserveItems);\n var newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0);\n dispatch(pop.transform.setSelection(selection).setMeta(historyKey, {\n redo: redo,\n historyState: newHist\n }).scrollIntoView());\n}\n\nvar cachedPreserveItems = false,\n cachedPreserveItemsPlugins = null; // Check whether any plugin in the given state has a\n// `historyPreserveItems` property in its spec, in which case we must\n// preserve steps exactly as they came in, so that they can be\n// rebased.\n\nfunction mustPreserveItems(state) {\n var plugins = state.plugins;\n\n if (cachedPreserveItemsPlugins != plugins) {\n cachedPreserveItems = false;\n cachedPreserveItemsPlugins = plugins;\n\n for (var i = 0; i < plugins.length; i++) {\n if (plugins[i].spec.historyPreserveItems) {\n cachedPreserveItems = true;\n break;\n }\n }\n }\n\n return cachedPreserveItems;\n} // :: (Transaction) → Transaction\n// Set a flag on the given transaction that will prevent further steps\n// from being appended to an existing history event (so that they\n// require a separate undo command to undo).\n\n\nfunction closeHistory(tr) {\n return tr.setMeta(closeHistoryKey, true);\n}\n\nvar historyKey = new PluginKey(\"history\");\nvar closeHistoryKey = new PluginKey(\"closeHistory\"); // :: (?Object) → Plugin\n// Returns a plugin that enables the undo history for an editor. The\n// plugin will track undo and redo stacks, which can be used with the\n// [`undo`](#history.undo) and [`redo`](#history.redo) commands.\n//\n// You can set an `\"addToHistory\"` [metadata\n// property](#state.Transaction.setMeta) of `false` on a transaction\n// to prevent it from being rolled back by undo.\n//\n// config::-\n// Supports the following configuration options:\n//\n// depth:: ?number\n// The amount of history events that are collected before the\n// oldest events are discarded. Defaults to 100.\n//\n// newGroupDelay:: ?number\n// The delay between changes after which a new group should be\n// started. Defaults to 500 (milliseconds). Note that when changes\n// aren't adjacent, a new group is always started.\n\nfunction history(config) {\n config = {\n depth: config && config.depth || 100,\n newGroupDelay: config && config.newGroupDelay || 500\n };\n return new Plugin({\n key: historyKey,\n state: {\n init: function init() {\n return new HistoryState(Branch.empty, Branch.empty, null, 0);\n },\n apply: function apply(tr, hist, state) {\n return applyTransaction(hist, state, tr, config);\n }\n },\n config: config\n });\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// A command function that undoes the last change, if any.\n\n\nfunction undo(state, dispatch) {\n var hist = historyKey.getState(state);\n\n if (!hist || hist.done.eventCount == 0) {\n return false;\n }\n\n if (dispatch) {\n histTransaction(hist, state, dispatch, false);\n }\n\n return true;\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// A command function that redoes the last undone change, if any.\n\n\nfunction redo(state, dispatch) {\n var hist = historyKey.getState(state);\n\n if (!hist || hist.undone.eventCount == 0) {\n return false;\n }\n\n if (dispatch) {\n histTransaction(hist, state, dispatch, true);\n }\n\n return true;\n} // :: (EditorState) → number\n// The amount of undoable events available in a given state.\n\n\nfunction undoDepth(state) {\n var hist = historyKey.getState(state);\n return hist ? hist.done.eventCount : 0;\n} // :: (EditorState) → number\n// The amount of redoable events available in a given editor state.\n\n\nfunction redoDepth(state) {\n var hist = historyKey.getState(state);\n return hist ? hist.undone.eventCount : 0;\n}\n\nexport { HistoryState, closeHistory, history, redo, redoDepth, undo, undoDepth };","import { liftTarget, canJoin, joinPoint, canSplit, ReplaceAroundStep, findWrapping } from 'prosemirror-transform';\nimport { Fragment, Slice } from 'prosemirror-model';\nimport { NodeSelection, Selection, TextSelection, AllSelection } from 'prosemirror-state'; // :: (EditorState, ?(tr: Transaction)) → bool\n// Delete the selection, if there is one.\n\nfunction deleteSelection(state, dispatch) {\n if (state.selection.empty) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.deleteSelection().scrollIntoView());\n }\n\n return true;\n} // :: (EditorState, ?(tr: Transaction), ?EditorView) → bool\n// If the selection is empty and at the start of a textblock, try to\n// reduce the distance between that block and the one before it—if\n// there's a block directly before it that can be joined, join them.\n// If not, try to move the selected block closer to the next one in\n// the document structure by lifting it out of its parent or moving it\n// into a parent of the previous block. Will use the view for accurate\n// (bidi-aware) start-of-textblock detection if given.\n\n\nfunction joinBackward(state, dispatch, view) {\n var ref = state.selection;\n var $cursor = ref.$cursor;\n\n if (!$cursor || (view ? !view.endOfTextblock(\"backward\", state) : $cursor.parentOffset > 0)) {\n return false;\n }\n\n var $cut = findCutBefore($cursor); // If there is no node before this, try to lift\n\n if (!$cut) {\n var range = $cursor.blockRange(),\n target = range && liftTarget(range);\n\n if (target == null) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.lift(range, target).scrollIntoView());\n }\n\n return true;\n }\n\n var before = $cut.nodeBefore; // Apply the joining algorithm\n\n if (!before.type.spec.isolating && deleteBarrier(state, $cut, dispatch)) {\n return true;\n } // If the node below has no content and the node above is\n // selectable, delete the node below and select the one above.\n\n\n if ($cursor.parent.content.size == 0 && (textblockAt(before, \"end\") || NodeSelection.isSelectable(before))) {\n if (dispatch) {\n var tr = state.tr.deleteRange($cursor.before(), $cursor.after());\n tr.setSelection(textblockAt(before, \"end\") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos, -1)), -1) : NodeSelection.create(tr.doc, $cut.pos - before.nodeSize));\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n } // If the node before is an atom, delete it\n\n\n if (before.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch) {\n dispatch(state.tr[\"delete\"]($cut.pos - before.nodeSize, $cut.pos).scrollIntoView());\n }\n\n return true;\n }\n\n return false;\n}\n\nfunction textblockAt(node, side) {\n for (; node; node = side == \"start\" ? node.firstChild : node.lastChild) {\n if (node.isTextblock) {\n return true;\n }\n }\n\n return false;\n} // :: (EditorState, ?(tr: Transaction), ?EditorView) → bool\n// When the selection is empty and at the start of a textblock, select\n// the node before that textblock, if possible. This is intended to be\n// bound to keys like backspace, after\n// [`joinBackward`](#commands.joinBackward) or other deleting\n// commands, as a fall-back behavior when the schema doesn't allow\n// deletion at the selected point.\n\n\nfunction selectNodeBackward(state, dispatch, view) {\n var ref = state.selection;\n var $head = ref.$head;\n var empty = ref.empty;\n var $cut = $head;\n\n if (!empty) {\n return false;\n }\n\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"backward\", state) : $head.parentOffset > 0) {\n return false;\n }\n\n $cut = findCutBefore($head);\n }\n\n var node = $cut && $cut.nodeBefore;\n\n if (!node || !NodeSelection.isSelectable(node)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos - node.nodeSize)).scrollIntoView());\n }\n\n return true;\n}\n\nfunction findCutBefore($pos) {\n if (!$pos.parent.type.spec.isolating) {\n for (var i = $pos.depth - 1; i >= 0; i--) {\n if ($pos.index(i) > 0) {\n return $pos.doc.resolve($pos.before(i + 1));\n }\n\n if ($pos.node(i).type.spec.isolating) {\n break;\n }\n }\n }\n\n return null;\n} // :: (EditorState, ?(tr: Transaction), ?EditorView) → bool\n// If the selection is empty and the cursor is at the end of a\n// textblock, try to reduce or remove the boundary between that block\n// and the one after it, either by joining them or by moving the other\n// block closer to this one in the tree structure. Will use the view\n// for accurate start-of-textblock detection if given.\n\n\nfunction joinForward(state, dispatch, view) {\n var ref = state.selection;\n var $cursor = ref.$cursor;\n\n if (!$cursor || (view ? !view.endOfTextblock(\"forward\", state) : $cursor.parentOffset < $cursor.parent.content.size)) {\n return false;\n }\n\n var $cut = findCutAfter($cursor); // If there is no node after this, there's nothing to do\n\n if (!$cut) {\n return false;\n }\n\n var after = $cut.nodeAfter; // Try the joining algorithm\n\n if (deleteBarrier(state, $cut, dispatch)) {\n return true;\n } // If the node above has no content and the node below is\n // selectable, delete the node above and select the one below.\n\n\n if ($cursor.parent.content.size == 0 && (textblockAt(after, \"start\") || NodeSelection.isSelectable(after))) {\n if (dispatch) {\n var tr = state.tr.deleteRange($cursor.before(), $cursor.after());\n tr.setSelection(textblockAt(after, \"start\") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos)), 1) : NodeSelection.create(tr.doc, tr.mapping.map($cut.pos)));\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n } // If the next node is an atom, delete it\n\n\n if (after.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch) {\n dispatch(state.tr[\"delete\"]($cut.pos, $cut.pos + after.nodeSize).scrollIntoView());\n }\n\n return true;\n }\n\n return false;\n} // :: (EditorState, ?(tr: Transaction), ?EditorView) → bool\n// When the selection is empty and at the end of a textblock, select\n// the node coming after that textblock, if possible. This is intended\n// to be bound to keys like delete, after\n// [`joinForward`](#commands.joinForward) and similar deleting\n// commands, to provide a fall-back behavior when the schema doesn't\n// allow deletion at the selected point.\n\n\nfunction selectNodeForward(state, dispatch, view) {\n var ref = state.selection;\n var $head = ref.$head;\n var empty = ref.empty;\n var $cut = $head;\n\n if (!empty) {\n return false;\n }\n\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"forward\", state) : $head.parentOffset < $head.parent.content.size) {\n return false;\n }\n\n $cut = findCutAfter($head);\n }\n\n var node = $cut && $cut.nodeAfter;\n\n if (!node || !NodeSelection.isSelectable(node)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos)).scrollIntoView());\n }\n\n return true;\n}\n\nfunction findCutAfter($pos) {\n if (!$pos.parent.type.spec.isolating) {\n for (var i = $pos.depth - 1; i >= 0; i--) {\n var parent = $pos.node(i);\n\n if ($pos.index(i) + 1 < parent.childCount) {\n return $pos.doc.resolve($pos.after(i + 1));\n }\n\n if (parent.type.spec.isolating) {\n break;\n }\n }\n }\n\n return null;\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// Join the selected block or, if there is a text selection, the\n// closest ancestor block of the selection that can be joined, with\n// the sibling above it.\n\n\nfunction joinUp(state, dispatch) {\n var sel = state.selection,\n nodeSel = sel instanceof NodeSelection,\n point;\n\n if (nodeSel) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.from)) {\n return false;\n }\n\n point = sel.from;\n } else {\n point = joinPoint(state.doc, sel.from, -1);\n\n if (point == null) {\n return false;\n }\n }\n\n if (dispatch) {\n var tr = state.tr.join(point);\n\n if (nodeSel) {\n tr.setSelection(NodeSelection.create(tr.doc, point - state.doc.resolve(point).nodeBefore.nodeSize));\n }\n\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// Join the selected block, or the closest ancestor of the selection\n// that can be joined, with the sibling after it.\n\n\nfunction joinDown(state, dispatch) {\n var sel = state.selection,\n point;\n\n if (sel instanceof NodeSelection) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.to)) {\n return false;\n }\n\n point = sel.to;\n } else {\n point = joinPoint(state.doc, sel.to, 1);\n\n if (point == null) {\n return false;\n }\n }\n\n if (dispatch) {\n dispatch(state.tr.join(point).scrollIntoView());\n }\n\n return true;\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// Lift the selected block, or the closest ancestor block of the\n// selection that can be lifted, out of its parent node.\n\n\nfunction lift(state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var range = $from.blockRange($to),\n target = range && liftTarget(range);\n\n if (target == null) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.lift(range, target).scrollIntoView());\n }\n\n return true;\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// If the selection is in a node whose type has a truthy\n// [`code`](#model.NodeSpec.code) property in its spec, replace the\n// selection with a newline character.\n\n\nfunction newlineInCode(state, dispatch) {\n var ref = state.selection;\n var $head = ref.$head;\n var $anchor = ref.$anchor;\n\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.insertText(\"\\n\").scrollIntoView());\n }\n\n return true;\n}\n\nfunction defaultBlockAt(match) {\n for (var i = 0; i < match.edgeCount; i++) {\n var ref = match.edge(i);\n var type = ref.type;\n\n if (type.isTextblock && !type.hasRequiredAttrs()) {\n return type;\n }\n }\n\n return null;\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// When the selection is in a node with a truthy\n// [`code`](#model.NodeSpec.code) property in its spec, create a\n// default block after the code block, and move the cursor there.\n\n\nfunction exitCode(state, dispatch) {\n var ref = state.selection;\n var $head = ref.$head;\n var $anchor = ref.$anchor;\n\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) {\n return false;\n }\n\n var above = $head.node(-1),\n after = $head.indexAfter(-1),\n type = defaultBlockAt(above.contentMatchAt(after));\n\n if (!above.canReplaceWith(after, after, type)) {\n return false;\n }\n\n if (dispatch) {\n var pos = $head.after(),\n tr = state.tr.replaceWith(pos, pos, type.createAndFill());\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1));\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// If a block node is selected, create an empty paragraph before (if\n// it is its parent's first child) or after it.\n\n\nfunction createParagraphNear(state, dispatch) {\n var sel = state.selection;\n var $from = sel.$from;\n var $to = sel.$to;\n\n if (!(sel instanceof NodeSelection) || $from.parent.inlineContent) {\n return false;\n }\n\n var type = defaultBlockAt($to.parent.contentMatchAt($to.indexAfter()));\n\n if (!type || !type.isTextblock) {\n return false;\n }\n\n if (dispatch) {\n var side = (!$from.parentOffset && $to.index() < $to.parent.childCount ? $from : $to).pos;\n var tr = state.tr.insert(side, type.createAndFill());\n tr.setSelection(TextSelection.create(tr.doc, side + 1));\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// If the cursor is in an empty textblock that can be lifted, lift the\n// block.\n\n\nfunction liftEmptyBlock(state, dispatch) {\n var ref = state.selection;\n var $cursor = ref.$cursor;\n\n if (!$cursor || $cursor.parent.content.size) {\n return false;\n }\n\n if ($cursor.depth > 1 && $cursor.after() != $cursor.end(-1)) {\n var before = $cursor.before();\n\n if (canSplit(state.doc, before)) {\n if (dispatch) {\n dispatch(state.tr.split(before).scrollIntoView());\n }\n\n return true;\n }\n }\n\n var range = $cursor.blockRange(),\n target = range && liftTarget(range);\n\n if (target == null) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.lift(range, target).scrollIntoView());\n }\n\n return true;\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// Split the parent block of the selection. If the selection is a text\n// selection, also delete its content.\n\n\nfunction splitBlock(state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n\n if (state.selection instanceof NodeSelection && state.selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(state.doc, $from.pos)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.split($from.pos).scrollIntoView());\n }\n\n return true;\n }\n\n if (!$from.parent.isBlock) {\n return false;\n }\n\n if (dispatch) {\n var atEnd = $to.parentOffset == $to.parent.content.size;\n var tr = state.tr;\n\n if (state.selection instanceof TextSelection || state.selection instanceof AllSelection) {\n tr.deleteSelection();\n }\n\n var deflt = $from.depth == 0 ? null : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));\n var types = atEnd && deflt ? [{\n type: deflt\n }] : null;\n var can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types);\n\n if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt && [{\n type: deflt\n }])) {\n types = [{\n type: deflt\n }];\n can = true;\n }\n\n if (can) {\n tr.split(tr.mapping.map($from.pos), 1, types);\n\n if (!atEnd && !$from.parentOffset && $from.parent.type != deflt && $from.node(-1).canReplace($from.index(-1), $from.indexAfter(-1), Fragment.from([deflt.create(), $from.parent]))) {\n tr.setNodeMarkup(tr.mapping.map($from.before()), deflt);\n }\n }\n\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// Acts like [`splitBlock`](#commands.splitBlock), but without\n// resetting the set of active marks at the cursor.\n\n\nfunction splitBlockKeepMarks(state, dispatch) {\n return splitBlock(state, dispatch && function (tr) {\n var marks = state.storedMarks || state.selection.$to.parentOffset && state.selection.$from.marks();\n\n if (marks) {\n tr.ensureMarks(marks);\n }\n\n dispatch(tr);\n });\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// Move the selection to the node wrapping the current selection, if\n// any. (Will not select the document node.)\n\n\nfunction selectParentNode(state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var to = ref.to;\n var pos;\n var same = $from.sharedDepth(to);\n\n if (same == 0) {\n return false;\n }\n\n pos = $from.before(same);\n\n if (dispatch) {\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, pos)));\n }\n\n return true;\n} // :: (EditorState, ?(tr: Transaction)) → bool\n// Select the whole document.\n\n\nfunction selectAll(state, dispatch) {\n if (dispatch) {\n dispatch(state.tr.setSelection(new AllSelection(state.doc)));\n }\n\n return true;\n}\n\nfunction joinMaybeClear(state, $pos, dispatch) {\n var before = $pos.nodeBefore,\n after = $pos.nodeAfter,\n index = $pos.index();\n\n if (!before || !after || !before.type.compatibleContent(after.type)) {\n return false;\n }\n\n if (!before.content.size && $pos.parent.canReplace(index - 1, index)) {\n if (dispatch) {\n dispatch(state.tr[\"delete\"]($pos.pos - before.nodeSize, $pos.pos).scrollIntoView());\n }\n\n return true;\n }\n\n if (!$pos.parent.canReplace(index, index + 1) || !(after.isTextblock || canJoin(state.doc, $pos.pos))) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.clearIncompatible($pos.pos, before.type, before.contentMatchAt(before.childCount)).join($pos.pos).scrollIntoView());\n }\n\n return true;\n}\n\nfunction deleteBarrier(state, $cut, dispatch) {\n var before = $cut.nodeBefore,\n after = $cut.nodeAfter,\n conn,\n match;\n\n if (before.type.spec.isolating || after.type.spec.isolating) {\n return false;\n }\n\n if (joinMaybeClear(state, $cut, dispatch)) {\n return true;\n }\n\n var canDelAfter = $cut.parent.canReplace($cut.index(), $cut.index() + 1);\n\n if (canDelAfter && (conn = (match = before.contentMatchAt(before.childCount)).findWrapping(after.type)) && match.matchType(conn[0] || after.type).validEnd) {\n if (dispatch) {\n var end = $cut.pos + after.nodeSize,\n wrap = Fragment.empty;\n\n for (var i = conn.length - 1; i >= 0; i--) {\n wrap = Fragment.from(conn[i].create(null, wrap));\n }\n\n wrap = Fragment.from(before.copy(wrap));\n var tr = state.tr.step(new ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new Slice(wrap, 1, 0), conn.length, true));\n var joinAt = end + 2 * conn.length;\n\n if (canJoin(tr.doc, joinAt)) {\n tr.join(joinAt);\n }\n\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n }\n\n var selAfter = Selection.findFrom($cut, 1);\n var range = selAfter && selAfter.$from.blockRange(selAfter.$to),\n target = range && liftTarget(range);\n\n if (target != null && target >= $cut.depth) {\n if (dispatch) {\n dispatch(state.tr.lift(range, target).scrollIntoView());\n }\n\n return true;\n }\n\n if (canDelAfter && after.isTextblock && textblockAt(before, \"end\")) {\n var at = before,\n wrap$1 = [];\n\n for (;;) {\n wrap$1.push(at);\n\n if (at.isTextblock) {\n break;\n }\n\n at = at.lastChild;\n }\n\n if (at.canReplace(at.childCount, at.childCount, after.content)) {\n if (dispatch) {\n var end$1 = Fragment.empty;\n\n for (var i$1 = wrap$1.length - 1; i$1 >= 0; i$1--) {\n end$1 = Fragment.from(wrap$1[i$1].copy(end$1));\n }\n\n var tr$1 = state.tr.step(new ReplaceAroundStep($cut.pos - wrap$1.length, $cut.pos + after.nodeSize, $cut.pos + 1, $cut.pos + after.nodeSize - 1, new Slice(end$1, wrap$1.length, 0), 0, true));\n dispatch(tr$1.scrollIntoView());\n }\n\n return true;\n }\n }\n\n return false;\n} // Parameterized commands\n// :: (NodeType, ?Object) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Wrap the selection in a node of the given type with the given\n// attributes.\n\n\nfunction wrapIn(nodeType, attrs) {\n return function (state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var range = $from.blockRange($to),\n wrapping = range && findWrapping(range, nodeType, attrs);\n\n if (!wrapping) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.wrap(range, wrapping).scrollIntoView());\n }\n\n return true;\n };\n} // :: (NodeType, ?Object) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Returns a command that tries to set the selected textblocks to the\n// given node type with the given attributes.\n\n\nfunction setBlockType(nodeType, attrs) {\n return function (state, dispatch) {\n var ref = state.selection;\n var from = ref.from;\n var to = ref.to;\n var applicable = false;\n state.doc.nodesBetween(from, to, function (node, pos) {\n if (applicable) {\n return false;\n }\n\n if (!node.isTextblock || node.hasMarkup(nodeType, attrs)) {\n return;\n }\n\n if (node.type == nodeType) {\n applicable = true;\n } else {\n var $pos = state.doc.resolve(pos),\n index = $pos.index();\n applicable = $pos.parent.canReplaceWith(index, index + 1, nodeType);\n }\n });\n\n if (!applicable) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.setBlockType(from, to, nodeType, attrs).scrollIntoView());\n }\n\n return true;\n };\n}\n\nfunction markApplies(doc, ranges, type) {\n var loop = function loop(i) {\n var ref = ranges[i];\n var $from = ref.$from;\n var $to = ref.$to;\n var can = $from.depth == 0 ? doc.type.allowsMarkType(type) : false;\n doc.nodesBetween($from.pos, $to.pos, function (node) {\n if (can) {\n return false;\n }\n\n can = node.inlineContent && node.type.allowsMarkType(type);\n });\n\n if (can) {\n return {\n v: true\n };\n }\n };\n\n for (var i = 0; i < ranges.length; i++) {\n var returned = loop(i);\n if (returned) return returned.v;\n }\n\n return false;\n} // :: (MarkType, ?Object) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Create a command function that toggles the given mark with the\n// given attributes. Will return `false` when the current selection\n// doesn't support that mark. This will remove the mark if any marks\n// of that type exist in the selection, or add it otherwise. If the\n// selection is empty, this applies to the [stored\n// marks](#state.EditorState.storedMarks) instead of a range of the\n// document.\n\n\nfunction toggleMark(markType, attrs) {\n return function (state, dispatch) {\n var ref = state.selection;\n var empty = ref.empty;\n var $cursor = ref.$cursor;\n var ranges = ref.ranges;\n\n if (empty && !$cursor || !markApplies(state.doc, ranges, markType)) {\n return false;\n }\n\n if (dispatch) {\n if ($cursor) {\n if (markType.isInSet(state.storedMarks || $cursor.marks())) {\n dispatch(state.tr.removeStoredMark(markType));\n } else {\n dispatch(state.tr.addStoredMark(markType.create(attrs)));\n }\n } else {\n var has = false,\n tr = state.tr;\n\n for (var i = 0; !has && i < ranges.length; i++) {\n var ref$1 = ranges[i];\n var $from = ref$1.$from;\n var $to = ref$1.$to;\n has = state.doc.rangeHasMark($from.pos, $to.pos, markType);\n }\n\n for (var i$1 = 0; i$1 < ranges.length; i$1++) {\n var ref$2 = ranges[i$1];\n var $from$1 = ref$2.$from;\n var $to$1 = ref$2.$to;\n\n if (has) {\n tr.removeMark($from$1.pos, $to$1.pos, markType);\n } else {\n var from = $from$1.pos,\n to = $to$1.pos,\n start = $from$1.nodeAfter,\n end = $to$1.nodeBefore;\n var spaceStart = start && start.isText ? /^\\s*/.exec(start.text)[0].length : 0;\n var spaceEnd = end && end.isText ? /\\s*$/.exec(end.text)[0].length : 0;\n\n if (from + spaceStart < to) {\n from += spaceStart;\n to -= spaceEnd;\n }\n\n tr.addMark(from, to, markType.create(attrs));\n }\n }\n\n dispatch(tr.scrollIntoView());\n }\n }\n\n return true;\n };\n}\n\nfunction wrapDispatchForJoin(dispatch, isJoinable) {\n return function (tr) {\n if (!tr.isGeneric) {\n return dispatch(tr);\n }\n\n var ranges = [];\n\n for (var i = 0; i < tr.mapping.maps.length; i++) {\n var map = tr.mapping.maps[i];\n\n for (var j = 0; j < ranges.length; j++) {\n ranges[j] = map.map(ranges[j]);\n }\n\n map.forEach(function (_s, _e, from, to) {\n return ranges.push(from, to);\n });\n } // Figure out which joinable points exist inside those ranges,\n // by checking all node boundaries in their parent nodes.\n\n\n var joinable = [];\n\n for (var i$1 = 0; i$1 < ranges.length; i$1 += 2) {\n var from = ranges[i$1],\n to = ranges[i$1 + 1];\n var $from = tr.doc.resolve(from),\n depth = $from.sharedDepth(to),\n parent = $from.node(depth);\n\n for (var index = $from.indexAfter(depth), pos = $from.after(depth + 1); pos <= to; ++index) {\n var after = parent.maybeChild(index);\n\n if (!after) {\n break;\n }\n\n if (index && joinable.indexOf(pos) == -1) {\n var before = parent.child(index - 1);\n\n if (before.type == after.type && isJoinable(before, after)) {\n joinable.push(pos);\n }\n }\n\n pos += after.nodeSize;\n }\n } // Join the joinable points\n\n\n joinable.sort(function (a, b) {\n return a - b;\n });\n\n for (var i$2 = joinable.length - 1; i$2 >= 0; i$2--) {\n if (canJoin(tr.doc, joinable[i$2])) {\n tr.join(joinable[i$2]);\n }\n }\n\n dispatch(tr);\n };\n} // :: ((state: EditorState, ?(tr: Transaction)) → bool, union<(before: Node, after: Node) → bool, [string]>) → (state: EditorState, ?(tr: Transaction)) → bool\n// Wrap a command so that, when it produces a transform that causes\n// two joinable nodes to end up next to each other, those are joined.\n// Nodes are considered joinable when they are of the same type and\n// when the `isJoinable` predicate returns true for them or, if an\n// array of strings was passed, if their node type name is in that\n// array.\n\n\nfunction autoJoin(command, isJoinable) {\n if (Array.isArray(isJoinable)) {\n var types = isJoinable;\n\n isJoinable = function isJoinable(node) {\n return types.indexOf(node.type.name) > -1;\n };\n }\n\n return function (state, dispatch) {\n return command(state, dispatch && wrapDispatchForJoin(dispatch, isJoinable));\n };\n} // :: (...[(EditorState, ?(tr: Transaction), ?EditorView) → bool]) → (EditorState, ?(tr: Transaction), ?EditorView) → bool\n// Combine a number of command functions into a single function (which\n// calls them one by one until one returns true).\n\n\nfunction chainCommands() {\n var commands = [],\n len = arguments.length;\n\n while (len--) {\n commands[len] = arguments[len];\n }\n\n return function (state, dispatch, view) {\n for (var i = 0; i < commands.length; i++) {\n if (commands[i](state, dispatch, view)) {\n return true;\n }\n }\n\n return false;\n };\n}\n\nvar backspace = chainCommands(deleteSelection, joinBackward, selectNodeBackward);\nvar del = chainCommands(deleteSelection, joinForward, selectNodeForward); // :: Object\n// A basic keymap containing bindings not specific to any schema.\n// Binds the following keys (when multiple commands are listed, they\n// are chained with [`chainCommands`](#commands.chainCommands)):\n//\n// * **Enter** to `newlineInCode`, `createParagraphNear`, `liftEmptyBlock`, `splitBlock`\n// * **Mod-Enter** to `exitCode`\n// * **Backspace** and **Mod-Backspace** to `deleteSelection`, `joinBackward`, `selectNodeBackward`\n// * **Delete** and **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n// * **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n// * **Mod-a** to `selectAll`\n\nvar pcBaseKeymap = {\n \"Enter\": chainCommands(newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock),\n \"Mod-Enter\": exitCode,\n \"Backspace\": backspace,\n \"Mod-Backspace\": backspace,\n \"Delete\": del,\n \"Mod-Delete\": del,\n \"Mod-a\": selectAll\n}; // :: Object\n// A copy of `pcBaseKeymap` that also binds **Ctrl-h** like Backspace,\n// **Ctrl-d** like Delete, **Alt-Backspace** like Ctrl-Backspace, and\n// **Ctrl-Alt-Backspace**, **Alt-Delete**, and **Alt-d** like\n// Ctrl-Delete.\n\nvar macBaseKeymap = {\n \"Ctrl-h\": pcBaseKeymap[\"Backspace\"],\n \"Alt-Backspace\": pcBaseKeymap[\"Mod-Backspace\"],\n \"Ctrl-d\": pcBaseKeymap[\"Delete\"],\n \"Ctrl-Alt-Backspace\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-Delete\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-d\": pcBaseKeymap[\"Mod-Delete\"]\n};\n\nfor (var key in pcBaseKeymap) {\n macBaseKeymap[key] = pcBaseKeymap[key];\n} // declare global: os, navigator\n\n\nvar mac = typeof navigator != \"undefined\" ? /Mac/.test(navigator.platform) : typeof os != \"undefined\" ? os.platform() == \"darwin\" : false; // :: Object\n// Depending on the detected platform, this will hold\n// [`pcBasekeymap`](#commands.pcBaseKeymap) or\n// [`macBaseKeymap`](#commands.macBaseKeymap).\n\nvar baseKeymap = mac ? macBaseKeymap : pcBaseKeymap;\nexport { autoJoin, baseKeymap, chainCommands, createParagraphNear, deleteSelection, exitCode, joinBackward, joinDown, joinForward, joinUp, lift, liftEmptyBlock, macBaseKeymap, newlineInCode, pcBaseKeymap, selectAll, selectNodeBackward, selectNodeForward, selectParentNode, setBlockType, splitBlock, splitBlockKeepMarks, toggleMark, wrapIn };","import { Plugin } from 'prosemirror-state';\nimport { dropPoint } from 'prosemirror-transform'; // :: (options: ?Object) → Plugin\n// Create a plugin that, when added to a ProseMirror instance,\n// causes a decoration to show up at the drop position when something\n// is dragged over the editor.\n//\n// options::- These options are supported:\n//\n// color:: ?string\n// The color of the cursor. Defaults to `black`.\n//\n// width:: ?number\n// The precise width of the cursor in pixels. Defaults to 1.\n//\n// class:: ?string\n// A CSS class name to add to the cursor element.\n\nfunction dropCursor(options) {\n if (options === void 0) options = {};\n return new Plugin({\n view: function view(editorView) {\n return new DropCursorView(editorView, options);\n }\n });\n}\n\nvar DropCursorView = function DropCursorView(editorView, options) {\n var this$1 = this;\n this.editorView = editorView;\n this.width = options.width || 1;\n this.color = options.color || \"black\";\n this[\"class\"] = options[\"class\"];\n this.cursorPos = null;\n this.element = null;\n this.timeout = null;\n this.handlers = [\"dragover\", \"dragend\", \"drop\", \"dragleave\"].map(function (name) {\n var handler = function handler(e) {\n return this$1[name](e);\n };\n\n editorView.dom.addEventListener(name, handler);\n return {\n name: name,\n handler: handler\n };\n });\n};\n\nDropCursorView.prototype.destroy = function destroy() {\n var this$1 = this;\n this.handlers.forEach(function (ref) {\n var name = ref.name;\n var handler = ref.handler;\n return this$1.editorView.dom.removeEventListener(name, handler);\n });\n};\n\nDropCursorView.prototype.update = function update(editorView, prevState) {\n if (this.cursorPos != null && prevState.doc != editorView.state.doc) {\n this.updateOverlay();\n }\n};\n\nDropCursorView.prototype.setCursor = function setCursor(pos) {\n if (pos == this.cursorPos) {\n return;\n }\n\n this.cursorPos = pos;\n\n if (pos == null) {\n this.element.parentNode.removeChild(this.element);\n this.element = null;\n } else {\n this.updateOverlay();\n }\n};\n\nDropCursorView.prototype.updateOverlay = function updateOverlay() {\n var $pos = this.editorView.state.doc.resolve(this.cursorPos),\n rect;\n\n if (!$pos.parent.inlineContent) {\n var before = $pos.nodeBefore,\n after = $pos.nodeAfter;\n\n if (before || after) {\n var nodeRect = this.editorView.nodeDOM(this.cursorPos - (before ? before.nodeSize : 0)).getBoundingClientRect();\n var top = before ? nodeRect.bottom : nodeRect.top;\n\n if (before && after) {\n top = (top + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2;\n }\n\n rect = {\n left: nodeRect.left,\n right: nodeRect.right,\n top: top - this.width / 2,\n bottom: top + this.width / 2\n };\n }\n }\n\n if (!rect) {\n var coords = this.editorView.coordsAtPos(this.cursorPos);\n rect = {\n left: coords.left - this.width / 2,\n right: coords.left + this.width / 2,\n top: coords.top,\n bottom: coords.bottom\n };\n }\n\n var parent = this.editorView.dom.offsetParent;\n\n if (!this.element) {\n this.element = parent.appendChild(document.createElement(\"div\"));\n\n if (this[\"class\"]) {\n this.element.className = this[\"class\"];\n }\n\n this.element.style.cssText = \"position: absolute; z-index: 50; pointer-events: none; background-color: \" + this.color;\n }\n\n var parentLeft, parentTop;\n\n if (!parent || parent == document.body && getComputedStyle(parent).position == \"static\") {\n parentLeft = -pageXOffset;\n parentTop = -pageYOffset;\n } else {\n var rect$1 = parent.getBoundingClientRect();\n parentLeft = rect$1.left - parent.scrollLeft;\n parentTop = rect$1.top - parent.scrollTop;\n }\n\n this.element.style.left = rect.left - parentLeft + \"px\";\n this.element.style.top = rect.top - parentTop + \"px\";\n this.element.style.width = rect.right - rect.left + \"px\";\n this.element.style.height = rect.bottom - rect.top + \"px\";\n};\n\nDropCursorView.prototype.scheduleRemoval = function scheduleRemoval(timeout) {\n var this$1 = this;\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n return this$1.setCursor(null);\n }, timeout);\n};\n\nDropCursorView.prototype.dragover = function dragover(event) {\n if (!this.editorView.editable) {\n return;\n }\n\n var pos = this.editorView.posAtCoords({\n left: event.clientX,\n top: event.clientY\n });\n\n if (pos) {\n var target = pos.pos;\n\n if (this.editorView.dragging && this.editorView.dragging.slice) {\n target = dropPoint(this.editorView.state.doc, target, this.editorView.dragging.slice);\n\n if (target == null) {\n target = pos.pos;\n }\n }\n\n this.setCursor(target);\n this.scheduleRemoval(5000);\n }\n};\n\nDropCursorView.prototype.dragend = function dragend() {\n this.scheduleRemoval(20);\n};\n\nDropCursorView.prototype.drop = function drop() {\n this.scheduleRemoval(20);\n};\n\nDropCursorView.prototype.dragleave = function dragleave(event) {\n if (event.target == this.editorView.dom || !this.editorView.dom.contains(event.relatedTarget)) {\n this.setCursor(null);\n }\n};\n\nexport { dropCursor };","import { keydownHandler } from 'prosemirror-keymap';\nimport { NodeSelection, Selection, Plugin, TextSelection } from 'prosemirror-state';\nimport { DecorationSet, Decoration } from 'prosemirror-view';\nimport { Slice } from 'prosemirror-model'; // ::- Gap cursor selections are represented using this class. Its\n// `$anchor` and `$head` properties both point at the cursor position.\n\nvar GapCursor = /*@__PURE__*/function (Selection) {\n function GapCursor($pos) {\n Selection.call(this, $pos, $pos);\n }\n\n if (Selection) GapCursor.__proto__ = Selection;\n GapCursor.prototype = Object.create(Selection && Selection.prototype);\n GapCursor.prototype.constructor = GapCursor;\n\n GapCursor.prototype.map = function map(doc, mapping) {\n var $pos = doc.resolve(mapping.map(this.head));\n return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos);\n };\n\n GapCursor.prototype.content = function content() {\n return Slice.empty;\n };\n\n GapCursor.prototype.eq = function eq(other) {\n return other instanceof GapCursor && other.head == this.head;\n };\n\n GapCursor.prototype.toJSON = function toJSON() {\n return {\n type: \"gapcursor\",\n pos: this.head\n };\n };\n\n GapCursor.fromJSON = function fromJSON(doc, json) {\n if (typeof json.pos != \"number\") {\n throw new RangeError(\"Invalid input for GapCursor.fromJSON\");\n }\n\n return new GapCursor(doc.resolve(json.pos));\n };\n\n GapCursor.prototype.getBookmark = function getBookmark() {\n return new GapBookmark(this.anchor);\n };\n\n GapCursor.valid = function valid($pos) {\n var parent = $pos.parent;\n\n if (parent.isTextblock || !closedBefore($pos) || !closedAfter($pos)) {\n return false;\n }\n\n var override = parent.type.spec.allowGapCursor;\n\n if (override != null) {\n return override;\n }\n\n var deflt = parent.contentMatchAt($pos.index()).defaultType;\n return deflt && deflt.isTextblock;\n };\n\n GapCursor.findFrom = function findFrom($pos, dir, mustMove) {\n search: for (;;) {\n if (!mustMove && GapCursor.valid($pos)) {\n return $pos;\n }\n\n var pos = $pos.pos,\n next = null; // Scan up from this position\n\n for (var d = $pos.depth;; d--) {\n var parent = $pos.node(d);\n\n if (dir > 0 ? $pos.indexAfter(d) < parent.childCount : $pos.index(d) > 0) {\n next = parent.child(dir > 0 ? $pos.indexAfter(d) : $pos.index(d) - 1);\n break;\n } else if (d == 0) {\n return null;\n }\n\n pos += dir;\n var $cur = $pos.doc.resolve(pos);\n\n if (GapCursor.valid($cur)) {\n return $cur;\n }\n } // And then down into the next node\n\n\n for (;;) {\n var inside = dir > 0 ? next.firstChild : next.lastChild;\n\n if (!inside) {\n if (next.isAtom && !next.isText && !NodeSelection.isSelectable(next)) {\n $pos = $pos.doc.resolve(pos + next.nodeSize * dir);\n mustMove = false;\n continue search;\n }\n\n break;\n }\n\n next = inside;\n pos += dir;\n var $cur$1 = $pos.doc.resolve(pos);\n\n if (GapCursor.valid($cur$1)) {\n return $cur$1;\n }\n }\n\n return null;\n }\n };\n\n return GapCursor;\n}(Selection);\n\nGapCursor.prototype.visible = false;\nSelection.jsonID(\"gapcursor\", GapCursor);\n\nvar GapBookmark = function GapBookmark(pos) {\n this.pos = pos;\n};\n\nGapBookmark.prototype.map = function map(mapping) {\n return new GapBookmark(mapping.map(this.pos));\n};\n\nGapBookmark.prototype.resolve = function resolve(doc) {\n var $pos = doc.resolve(this.pos);\n return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos);\n};\n\nfunction closedBefore($pos) {\n for (var d = $pos.depth; d >= 0; d--) {\n var index = $pos.index(d); // At the start of this parent, look at next one\n\n if (index == 0) {\n continue;\n } // See if the node before (or its first ancestor) is closed\n\n\n for (var before = $pos.node(d).child(index - 1);; before = before.lastChild) {\n if (before.childCount == 0 && !before.inlineContent || before.isAtom || before.type.spec.isolating) {\n return true;\n }\n\n if (before.inlineContent) {\n return false;\n }\n }\n } // Hit start of document\n\n\n return true;\n}\n\nfunction closedAfter($pos) {\n for (var d = $pos.depth; d >= 0; d--) {\n var index = $pos.indexAfter(d),\n parent = $pos.node(d);\n\n if (index == parent.childCount) {\n continue;\n }\n\n for (var after = parent.child(index);; after = after.firstChild) {\n if (after.childCount == 0 && !after.inlineContent || after.isAtom || after.type.spec.isolating) {\n return true;\n }\n\n if (after.inlineContent) {\n return false;\n }\n }\n }\n\n return true;\n} // :: () → Plugin\n// Create a gap cursor plugin. When enabled, this will capture clicks\n// near and arrow-key-motion past places that don't have a normally\n// selectable position nearby, and create a gap cursor selection for\n// them. The cursor is drawn as an element with class\n// `ProseMirror-gapcursor`. You can either include\n// `style/gapcursor.css` from the package's directory or add your own\n// styles to make it visible.\n\n\nvar gapCursor = function gapCursor() {\n return new Plugin({\n props: {\n decorations: drawGapCursor,\n createSelectionBetween: function createSelectionBetween(_view, $anchor, $head) {\n if ($anchor.pos == $head.pos && GapCursor.valid($head)) {\n return new GapCursor($head);\n }\n },\n handleClick: handleClick,\n handleKeyDown: handleKeyDown\n }\n });\n};\n\nvar handleKeyDown = keydownHandler({\n \"ArrowLeft\": arrow(\"horiz\", -1),\n \"ArrowRight\": arrow(\"horiz\", 1),\n \"ArrowUp\": arrow(\"vert\", -1),\n \"ArrowDown\": arrow(\"vert\", 1)\n});\n\nfunction arrow(axis, dir) {\n var dirStr = axis == \"vert\" ? dir > 0 ? \"down\" : \"up\" : dir > 0 ? \"right\" : \"left\";\n return function (state, dispatch, view) {\n var sel = state.selection;\n var $start = dir > 0 ? sel.$to : sel.$from,\n mustMove = sel.empty;\n\n if (sel instanceof TextSelection) {\n if (!view.endOfTextblock(dirStr) || $start.depth == 0) {\n return false;\n }\n\n mustMove = false;\n $start = state.doc.resolve(dir > 0 ? $start.after() : $start.before());\n }\n\n var $found = GapCursor.findFrom($start, dir, mustMove);\n\n if (!$found) {\n return false;\n }\n\n if (dispatch) {\n dispatch(state.tr.setSelection(new GapCursor($found)));\n }\n\n return true;\n };\n}\n\nfunction handleClick(view, pos, event) {\n if (!view.editable) {\n return false;\n }\n\n var $pos = view.state.doc.resolve(pos);\n\n if (!GapCursor.valid($pos)) {\n return false;\n }\n\n var ref = view.posAtCoords({\n left: event.clientX,\n top: event.clientY\n });\n var inside = ref.inside;\n\n if (inside > -1 && NodeSelection.isSelectable(view.state.doc.nodeAt(inside))) {\n return false;\n }\n\n view.dispatch(view.state.tr.setSelection(new GapCursor($pos)));\n return true;\n}\n\nfunction drawGapCursor(state) {\n if (!(state.selection instanceof GapCursor)) {\n return null;\n }\n\n var node = document.createElement(\"div\");\n node.className = \"ProseMirror-gapcursor\";\n return DecorationSet.create(state.doc, [Decoration.widget(state.selection.head, node, {\n key: \"gapcursor\"\n })]);\n}\n\nexport { GapCursor, gapCursor };","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nexport default function crelt() {\n var elt = arguments[0];\n if (typeof elt == \"string\") elt = document.createElement(elt);\n var i = 1,\n next = arguments[1];\n\n if (next && _typeof(next) == \"object\" && next.nodeType == null && !Array.isArray(next)) {\n for (var name in next) {\n if (Object.prototype.hasOwnProperty.call(next, name)) {\n var value = next[name];\n if (typeof value == \"string\") elt.setAttribute(name, value);else if (value != null) elt[name] = value;\n }\n }\n\n i++;\n }\n\n for (; i < arguments.length; i++) {\n add(elt, arguments[i]);\n }\n\n return elt;\n}\n\nfunction add(elt, child) {\n if (typeof child == \"string\") {\n elt.appendChild(document.createTextNode(child));\n } else if (child == null) {} else if (child.nodeType != null) {\n elt.appendChild(child);\n } else if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) {\n add(elt, child[i]);\n }\n } else {\n throw new RangeError(\"Unsupported child node: \" + child);\n }\n}","import crel from 'crelt';\nimport { joinUp, lift, selectParentNode, setBlockType, wrapIn } from 'prosemirror-commands';\nimport { undo, redo } from 'prosemirror-history';\nimport { Plugin } from 'prosemirror-state';\nvar SVG = \"http://www.w3.org/2000/svg\";\nvar XLINK = \"http://www.w3.org/1999/xlink\";\nvar prefix = \"ProseMirror-icon\";\n\nfunction hashPath(path) {\n var hash = 0;\n\n for (var i = 0; i < path.length; i++) {\n hash = (hash << 5) - hash + path.charCodeAt(i) | 0;\n }\n\n return hash;\n}\n\nfunction getIcon(icon) {\n var node = document.createElement(\"div\");\n node.className = prefix;\n\n if (icon.path) {\n var name = \"pm-icon-\" + hashPath(icon.path).toString(16);\n\n if (!document.getElementById(name)) {\n buildSVG(name, icon);\n }\n\n var svg = node.appendChild(document.createElementNS(SVG, \"svg\"));\n svg.style.width = icon.width / icon.height + \"em\";\n var use = svg.appendChild(document.createElementNS(SVG, \"use\"));\n use.setAttributeNS(XLINK, \"href\", /([^#]*)/.exec(document.location)[1] + \"#\" + name);\n } else if (icon.dom) {\n node.appendChild(icon.dom.cloneNode(true));\n } else {\n node.appendChild(document.createElement(\"span\")).textContent = icon.text || '';\n\n if (icon.css) {\n node.firstChild.style.cssText = icon.css;\n }\n }\n\n return node;\n}\n\nfunction buildSVG(name, data) {\n var collection = document.getElementById(prefix + \"-collection\");\n\n if (!collection) {\n collection = document.createElementNS(SVG, \"svg\");\n collection.id = prefix + \"-collection\";\n collection.style.display = \"none\";\n document.body.insertBefore(collection, document.body.firstChild);\n }\n\n var sym = document.createElementNS(SVG, \"symbol\");\n sym.id = name;\n sym.setAttribute(\"viewBox\", \"0 0 \" + data.width + \" \" + data.height);\n var path = sym.appendChild(document.createElementNS(SVG, \"path\"));\n path.setAttribute(\"d\", data.path);\n collection.appendChild(sym);\n}\n\nvar prefix$1 = \"ProseMirror-menu\"; // ::- An icon or label that, when clicked, executes a command.\n\nvar MenuItem = function MenuItem(spec) {\n // :: MenuItemSpec\n // The spec used to create the menu item.\n this.spec = spec;\n}; // :: (EditorView) → {dom: dom.Node, update: (EditorState) → bool}\n// Renders the icon according to its [display\n// spec](#menu.MenuItemSpec.display), and adds an event handler which\n// executes the command when the representation is clicked.\n\n\nMenuItem.prototype.render = function render(view) {\n var spec = this.spec;\n var dom = spec.render ? spec.render(view) : spec.icon ? getIcon(spec.icon) : spec.label ? crel(\"div\", null, translate(view, spec.label)) : null;\n\n if (!dom) {\n throw new RangeError(\"MenuItem without icon or label property\");\n }\n\n if (spec.title) {\n var title = typeof spec.title === \"function\" ? spec.title(view.state) : spec.title;\n dom.setAttribute(\"title\", translate(view, title));\n }\n\n if (spec[\"class\"]) {\n dom.classList.add(spec[\"class\"]);\n }\n\n if (spec.css) {\n dom.style.cssText += spec.css;\n }\n\n dom.addEventListener(\"mousedown\", function (e) {\n e.preventDefault();\n\n if (!dom.classList.contains(prefix$1 + \"-disabled\")) {\n spec.run(view.state, view.dispatch, view, e);\n }\n });\n\n function update(state) {\n if (spec.select) {\n var selected = spec.select(state);\n dom.style.display = selected ? \"\" : \"none\";\n\n if (!selected) {\n return false;\n }\n }\n\n var enabled = true;\n\n if (spec.enable) {\n enabled = spec.enable(state) || false;\n setClass(dom, prefix$1 + \"-disabled\", !enabled);\n }\n\n if (spec.active) {\n var active = enabled && spec.active(state) || false;\n setClass(dom, prefix$1 + \"-active\", active);\n }\n\n return true;\n }\n\n return {\n dom: dom,\n update: update\n };\n};\n\nfunction translate(view, text) {\n return view._props.translate ? view._props.translate(text) : text;\n} // MenuItemSpec:: interface\n// The configuration object passed to the `MenuItem` constructor.\n//\n// run:: (EditorState, (Transaction), EditorView, dom.Event)\n// The function to execute when the menu item is activated.\n//\n// select:: ?(EditorState) → bool\n// Optional function that is used to determine whether the item is\n// appropriate at the moment. Deselected items will be hidden.\n//\n// enable:: ?(EditorState) → bool\n// Function that is used to determine if the item is enabled. If\n// given and returning false, the item will be given a disabled\n// styling.\n//\n// active:: ?(EditorState) → bool\n// A predicate function to determine whether the item is 'active' (for\n// example, the item for toggling the strong mark might be active then\n// the cursor is in strong text).\n//\n// render:: ?(EditorView) → dom.Node\n// A function that renders the item. You must provide either this,\n// [`icon`](#menu.MenuItemSpec.icon), or [`label`](#MenuItemSpec.label).\n//\n// icon:: ?Object\n// Describes an icon to show for this item. The object may specify\n// an SVG icon, in which case its `path` property should be an [SVG\n// path\n// spec](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d),\n// and `width` and `height` should provide the viewbox in which that\n// path exists. Alternatively, it may have a `text` property\n// specifying a string of text that makes up the icon, with an\n// optional `css` property giving additional CSS styling for the\n// text. _Or_ it may contain `dom` property containing a DOM node.\n//\n// label:: ?string\n// Makes the item show up as a text label. Mostly useful for items\n// wrapped in a [drop-down](#menu.Dropdown) or similar menu. The object\n// should have a `label` property providing the text to display.\n//\n// title:: ?union<string, (EditorState) → string>\n// Defines DOM title (mouseover) text for the item.\n//\n// class:: ?string\n// Optionally adds a CSS class to the item's DOM representation.\n//\n// css:: ?string\n// Optionally adds a string of inline CSS to the item's DOM\n// representation.\n\n\nvar lastMenuEvent = {\n time: 0,\n node: null\n};\n\nfunction markMenuEvent(e) {\n lastMenuEvent.time = Date.now();\n lastMenuEvent.node = e.target;\n}\n\nfunction isMenuEvent(wrapper) {\n return Date.now() - 100 < lastMenuEvent.time && lastMenuEvent.node && wrapper.contains(lastMenuEvent.node);\n} // ::- A drop-down menu, displayed as a label with a downwards-pointing\n// triangle to the right of it.\n\n\nvar Dropdown = function Dropdown(content, options) {\n this.options = options || {};\n this.content = Array.isArray(content) ? content : [content];\n}; // :: (EditorView) → {dom: dom.Node, update: (EditorState)}\n// Render the dropdown menu and sub-items.\n\n\nDropdown.prototype.render = function render(view) {\n var this$1 = this;\n var content = renderDropdownItems(this.content, view);\n var label = crel(\"div\", {\n \"class\": prefix$1 + \"-dropdown \" + (this.options[\"class\"] || \"\"),\n style: this.options.css\n }, translate(view, this.options.label));\n\n if (this.options.title) {\n label.setAttribute(\"title\", translate(view, this.options.title));\n }\n\n var wrap = crel(\"div\", {\n \"class\": prefix$1 + \"-dropdown-wrap\"\n }, label);\n var open = null,\n listeningOnClose = null;\n\n var close = function close() {\n if (open && open.close()) {\n open = null;\n window.removeEventListener(\"mousedown\", listeningOnClose);\n }\n };\n\n label.addEventListener(\"mousedown\", function (e) {\n e.preventDefault();\n markMenuEvent(e);\n\n if (open) {\n close();\n } else {\n open = this$1.expand(wrap, content.dom);\n window.addEventListener(\"mousedown\", listeningOnClose = function listeningOnClose() {\n if (!isMenuEvent(wrap)) {\n close();\n }\n });\n }\n });\n\n function update(state) {\n var inner = content.update(state);\n wrap.style.display = inner ? \"\" : \"none\";\n return inner;\n }\n\n return {\n dom: wrap,\n update: update\n };\n};\n\nDropdown.prototype.expand = function expand(dom, items) {\n var menuDOM = crel(\"div\", {\n \"class\": prefix$1 + \"-dropdown-menu \" + (this.options[\"class\"] || \"\")\n }, items);\n var done = false;\n\n function close() {\n if (done) {\n return;\n }\n\n done = true;\n dom.removeChild(menuDOM);\n return true;\n }\n\n dom.appendChild(menuDOM);\n return {\n close: close,\n node: menuDOM\n };\n};\n\nfunction renderDropdownItems(items, view) {\n var rendered = [],\n updates = [];\n\n for (var i = 0; i < items.length; i++) {\n var ref = items[i].render(view);\n var dom = ref.dom;\n var update = ref.update;\n rendered.push(crel(\"div\", {\n \"class\": prefix$1 + \"-dropdown-item\"\n }, dom));\n updates.push(update);\n }\n\n return {\n dom: rendered,\n update: combineUpdates(updates, rendered)\n };\n}\n\nfunction combineUpdates(updates, nodes) {\n return function (state) {\n var something = false;\n\n for (var i = 0; i < updates.length; i++) {\n var up = updates[i](state);\n nodes[i].style.display = up ? \"\" : \"none\";\n\n if (up) {\n something = true;\n }\n }\n\n return something;\n };\n} // ::- Represents a submenu wrapping a group of elements that start\n// hidden and expand to the right when hovered over or tapped.\n\n\nvar DropdownSubmenu = function DropdownSubmenu(content, options) {\n this.options = options || {};\n this.content = Array.isArray(content) ? content : [content];\n}; // :: (EditorView) → {dom: dom.Node, update: (EditorState) → bool}\n// Renders the submenu.\n\n\nDropdownSubmenu.prototype.render = function render(view) {\n var items = renderDropdownItems(this.content, view);\n var label = crel(\"div\", {\n \"class\": prefix$1 + \"-submenu-label\"\n }, translate(view, this.options.label));\n var wrap = crel(\"div\", {\n \"class\": prefix$1 + \"-submenu-wrap\"\n }, label, crel(\"div\", {\n \"class\": prefix$1 + \"-submenu\"\n }, items.dom));\n var _listeningOnClose = null;\n label.addEventListener(\"mousedown\", function (e) {\n e.preventDefault();\n markMenuEvent(e);\n setClass(wrap, prefix$1 + \"-submenu-wrap-active\");\n\n if (!_listeningOnClose) {\n window.addEventListener(\"mousedown\", _listeningOnClose = function listeningOnClose() {\n if (!isMenuEvent(wrap)) {\n wrap.classList.remove(prefix$1 + \"-submenu-wrap-active\");\n window.removeEventListener(\"mousedown\", _listeningOnClose);\n _listeningOnClose = null;\n }\n });\n }\n });\n\n function update(state) {\n var inner = items.update(state);\n wrap.style.display = inner ? \"\" : \"none\";\n return inner;\n }\n\n return {\n dom: wrap,\n update: update\n };\n}; // :: (EditorView, [union<MenuElement, [MenuElement]>]) → {dom: ?dom.DocumentFragment, update: (EditorState) → bool}\n// Render the given, possibly nested, array of menu elements into a\n// document fragment, placing separators between them (and ensuring no\n// superfluous separators appear when some of the groups turn out to\n// be empty).\n\n\nfunction renderGrouped(view, content) {\n var result = document.createDocumentFragment();\n var updates = [],\n separators = [];\n\n for (var i = 0; i < content.length; i++) {\n var items = content[i],\n localUpdates = [],\n localNodes = [];\n\n for (var j = 0; j < items.length; j++) {\n var ref = items[j].render(view);\n var dom = ref.dom;\n var update$1 = ref.update;\n var span = crel(\"span\", {\n \"class\": prefix$1 + \"item\"\n }, dom);\n result.appendChild(span);\n localNodes.push(span);\n localUpdates.push(update$1);\n }\n\n if (localUpdates.length) {\n updates.push(combineUpdates(localUpdates, localNodes));\n\n if (i < content.length - 1) {\n separators.push(result.appendChild(separator()));\n }\n }\n }\n\n function update(state) {\n var something = false,\n needSep = false;\n\n for (var i = 0; i < updates.length; i++) {\n var hasContent = updates[i](state);\n\n if (i) {\n separators[i - 1].style.display = needSep && hasContent ? \"\" : \"none\";\n }\n\n needSep = hasContent;\n\n if (hasContent) {\n something = true;\n }\n }\n\n return something;\n }\n\n return {\n dom: result,\n update: update\n };\n}\n\nfunction separator() {\n return crel(\"span\", {\n \"class\": prefix$1 + \"separator\"\n });\n} // :: Object\n// A set of basic editor-related icons. Contains the properties\n// `join`, `lift`, `selectParentNode`, `undo`, `redo`, `strong`, `em`,\n// `code`, `link`, `bulletList`, `orderedList`, and `blockquote`, each\n// holding an object that can be used as the `icon` option to\n// `MenuItem`.\n\n\nvar icons = {\n join: {\n width: 800,\n height: 900,\n path: \"M0 75h800v125h-800z M0 825h800v-125h-800z M250 400h100v-100h100v100h100v100h-100v100h-100v-100h-100z\"\n },\n lift: {\n width: 1024,\n height: 1024,\n path: \"M219 310v329q0 7-5 12t-12 5q-8 0-13-5l-164-164q-5-5-5-13t5-13l164-164q5-5 13-5 7 0 12 5t5 12zM1024 749v109q0 7-5 12t-12 5h-987q-7 0-12-5t-5-12v-109q0-7 5-12t12-5h987q7 0 12 5t5 12zM1024 530v109q0 7-5 12t-12 5h-621q-7 0-12-5t-5-12v-109q0-7 5-12t12-5h621q7 0 12 5t5 12zM1024 310v109q0 7-5 12t-12 5h-621q-7 0-12-5t-5-12v-109q0-7 5-12t12-5h621q7 0 12 5t5 12zM1024 91v109q0 7-5 12t-12 5h-987q-7 0-12-5t-5-12v-109q0-7 5-12t12-5h987q7 0 12 5t5 12z\"\n },\n selectParentNode: {\n text: \"\\u2B1A\",\n css: \"font-weight: bold\"\n },\n undo: {\n width: 1024,\n height: 1024,\n path: \"M761 1024c113-206 132-520-313-509v253l-384-384 384-384v248c534-13 594 472 313 775z\"\n },\n redo: {\n width: 1024,\n height: 1024,\n path: \"M576 248v-248l384 384-384 384v-253c-446-10-427 303-313 509-280-303-221-789 313-775z\"\n },\n strong: {\n width: 805,\n height: 1024,\n path: \"M317 869q42 18 80 18 214 0 214-191 0-65-23-102-15-25-35-42t-38-26-46-14-48-6-54-1q-41 0-57 5 0 30-0 90t-0 90q0 4-0 38t-0 55 2 47 6 38zM309 442q24 4 62 4 46 0 81-7t62-25 42-51 14-81q0-40-16-70t-45-46-61-24-70-8q-28 0-74 7 0 28 2 86t2 86q0 15-0 45t-0 45q0 26 0 39zM0 950l1-53q8-2 48-9t60-15q4-6 7-15t4-19 3-18 1-21 0-19v-37q0-561-12-585-2-4-12-8t-25-6-28-4-27-2-17-1l-2-47q56-1 194-6t213-5q13 0 39 0t38 0q40 0 78 7t73 24 61 40 42 59 16 78q0 29-9 54t-22 41-36 32-41 25-48 22q88 20 146 76t58 141q0 57-20 102t-53 74-78 48-93 27-100 8q-25 0-75-1t-75-1q-60 0-175 6t-132 6z\"\n },\n em: {\n width: 585,\n height: 1024,\n path: \"M0 949l9-48q3-1 46-12t63-21q16-20 23-57 0-4 35-165t65-310 29-169v-14q-13-7-31-10t-39-4-33-3l10-58q18 1 68 3t85 4 68 1q27 0 56-1t69-4 56-3q-2 22-10 50-17 5-58 16t-62 19q-4 10-8 24t-5 22-4 26-3 24q-15 84-50 239t-44 203q-1 5-7 33t-11 51-9 47-3 32l0 10q9 2 105 17-1 25-9 56-6 0-18 0t-18 0q-16 0-49-5t-49-5q-78-1-117-1-29 0-81 5t-69 6z\"\n },\n code: {\n width: 896,\n height: 1024,\n path: \"M608 192l-96 96 224 224-224 224 96 96 288-320-288-320zM288 192l-288 320 288 320 96-96-224-224 224-224-96-96z\"\n },\n link: {\n width: 951,\n height: 1024,\n path: \"M832 694q0-22-16-38l-118-118q-16-16-38-16-24 0-41 18 1 1 10 10t12 12 8 10 7 14 2 15q0 22-16 38t-38 16q-8 0-15-2t-14-7-10-8-12-12-10-10q-18 17-18 41 0 22 16 38l117 118q15 15 38 15 22 0 38-14l84-83q16-16 16-38zM430 292q0-22-16-38l-117-118q-16-16-38-16-22 0-38 15l-84 83q-16 16-16 38 0 22 16 38l118 118q15 15 38 15 24 0 41-17-1-1-10-10t-12-12-8-10-7-14-2-15q0-22 16-38t38-16q8 0 15 2t14 7 10 8 12 12 10 10q18-17 18-41zM941 694q0 68-48 116l-84 83q-47 47-116 47-69 0-116-48l-117-118q-47-47-47-116 0-70 50-119l-50-50q-49 50-118 50-68 0-116-48l-118-118q-48-48-48-116t48-116l84-83q47-47 116-47 69 0 116 48l117 118q47 47 47 116 0 70-50 119l50 50q49-50 118-50 68 0 116 48l118 118q48 48 48 116z\"\n },\n bulletList: {\n width: 768,\n height: 896,\n path: \"M0 512h128v-128h-128v128zM0 256h128v-128h-128v128zM0 768h128v-128h-128v128zM256 512h512v-128h-512v128zM256 256h512v-128h-512v128zM256 768h512v-128h-512v128z\"\n },\n orderedList: {\n width: 768,\n height: 896,\n path: \"M320 512h448v-128h-448v128zM320 768h448v-128h-448v128zM320 128v128h448v-128h-448zM79 384h78v-256h-36l-85 23v50l43-2v185zM189 590c0-36-12-78-96-78-33 0-64 6-83 16l1 66c21-10 42-15 67-15s32 11 32 28c0 26-30 58-110 112v50h192v-67l-91 2c49-30 87-66 87-113l1-1z\"\n },\n blockquote: {\n width: 640,\n height: 896,\n path: \"M0 448v256h256v-256h-128c0 0 0-128 128-128v-128c0 0-256 0-256 256zM640 320v-128c0 0-256 0-256 256v256h256v-256h-128c0 0 0-128 128-128z\"\n }\n}; // :: MenuItem\n// Menu item for the `joinUp` command.\n\nvar joinUpItem = new MenuItem({\n title: \"Join with above block\",\n run: joinUp,\n select: function select(state) {\n return joinUp(state);\n },\n icon: icons.join\n}); // :: MenuItem\n// Menu item for the `lift` command.\n\nvar liftItem = new MenuItem({\n title: \"Lift out of enclosing block\",\n run: lift,\n select: function select(state) {\n return lift(state);\n },\n icon: icons.lift\n}); // :: MenuItem\n// Menu item for the `selectParentNode` command.\n\nvar selectParentNodeItem = new MenuItem({\n title: \"Select parent node\",\n run: selectParentNode,\n select: function select(state) {\n return selectParentNode(state);\n },\n icon: icons.selectParentNode\n}); // :: MenuItem\n// Menu item for the `undo` command.\n\nvar undoItem = new MenuItem({\n title: \"Undo last change\",\n run: undo,\n enable: function enable(state) {\n return undo(state);\n },\n icon: icons.undo\n}); // :: MenuItem\n// Menu item for the `redo` command.\n\nvar redoItem = new MenuItem({\n title: \"Redo last undone change\",\n run: redo,\n enable: function enable(state) {\n return redo(state);\n },\n icon: icons.redo\n}); // :: (NodeType, Object) → MenuItem\n// Build a menu item for wrapping the selection in a given node type.\n// Adds `run` and `select` properties to the ones present in\n// `options`. `options.attrs` may be an object or a function.\n\nfunction wrapItem(nodeType, options) {\n var passedOptions = {\n run: function run(state, dispatch) {\n // FIXME if (options.attrs instanceof Function) options.attrs(state, attrs => wrapIn(nodeType, attrs)(state))\n return wrapIn(nodeType, options.attrs)(state, dispatch);\n },\n select: function select(state) {\n return wrapIn(nodeType, options.attrs instanceof Function ? null : options.attrs)(state);\n }\n };\n\n for (var prop in options) {\n passedOptions[prop] = options[prop];\n }\n\n return new MenuItem(passedOptions);\n} // :: (NodeType, Object) → MenuItem\n// Build a menu item for changing the type of the textblock around the\n// selection to the given type. Provides `run`, `active`, and `select`\n// properties. Others must be given in `options`. `options.attrs` may\n// be an object to provide the attributes for the textblock node.\n\n\nfunction blockTypeItem(nodeType, options) {\n var command = setBlockType(nodeType, options.attrs);\n var passedOptions = {\n run: command,\n enable: function enable(state) {\n return command(state);\n },\n active: function active(state) {\n var ref = state.selection;\n var $from = ref.$from;\n var to = ref.to;\n var node = ref.node;\n\n if (node) {\n return node.hasMarkup(nodeType, options.attrs);\n }\n\n return to <= $from.end() && $from.parent.hasMarkup(nodeType, options.attrs);\n }\n };\n\n for (var prop in options) {\n passedOptions[prop] = options[prop];\n }\n\n return new MenuItem(passedOptions);\n} // Work around classList.toggle being broken in IE11\n\n\nfunction setClass(dom, cls, on) {\n if (on) {\n dom.classList.add(cls);\n } else {\n dom.classList.remove(cls);\n }\n}\n\nvar prefix$2 = \"ProseMirror-menubar\";\n\nfunction isIOS() {\n if (typeof navigator == \"undefined\") {\n return false;\n }\n\n var agent = navigator.userAgent;\n return !/Edge\\/\\d/.test(agent) && /AppleWebKit/.test(agent) && /Mobile\\/\\w+/.test(agent);\n} // :: (Object) → Plugin\n// A plugin that will place a menu bar above the editor. Note that\n// this involves wrapping the editor in an additional `<div>`.\n//\n// options::-\n// Supports the following options:\n//\n// content:: [[MenuElement]]\n// Provides the content of the menu, as a nested array to be\n// passed to `renderGrouped`.\n//\n// floating:: ?bool\n// Determines whether the menu floats, i.e. whether it sticks to\n// the top of the viewport when the editor is partially scrolled\n// out of view.\n\n\nfunction menuBar(options) {\n return new Plugin({\n view: function view(editorView) {\n return new MenuBarView(editorView, options);\n }\n });\n}\n\nvar MenuBarView = function MenuBarView(editorView, options) {\n var this$1 = this;\n this.editorView = editorView;\n this.options = options;\n this.wrapper = crel(\"div\", {\n \"class\": prefix$2 + \"-wrapper\"\n });\n this.menu = this.wrapper.appendChild(crel(\"div\", {\n \"class\": prefix$2\n }));\n this.menu.className = prefix$2;\n this.spacer = null;\n editorView.dom.parentNode.replaceChild(this.wrapper, editorView.dom);\n this.wrapper.appendChild(editorView.dom);\n this.maxHeight = 0;\n this.widthForMaxHeight = 0;\n this.floating = false;\n var ref = renderGrouped(this.editorView, this.options.content);\n var dom = ref.dom;\n var update = ref.update;\n this.contentUpdate = update;\n this.menu.appendChild(dom);\n this.update();\n\n if (options.floating && !isIOS()) {\n this.updateFloat();\n var potentialScrollers = getAllWrapping(this.wrapper);\n\n this.scrollFunc = function (e) {\n var root = this$1.editorView.root;\n\n if (!(root.body || root).contains(this$1.wrapper)) {\n potentialScrollers.forEach(function (el) {\n return el.removeEventListener(\"scroll\", this$1.scrollFunc);\n });\n } else {\n this$1.updateFloat(e.target.getBoundingClientRect && e.target);\n }\n };\n\n potentialScrollers.forEach(function (el) {\n return el.addEventListener('scroll', this$1.scrollFunc);\n });\n }\n};\n\nMenuBarView.prototype.update = function update() {\n this.contentUpdate(this.editorView.state);\n\n if (this.floating) {\n this.updateScrollCursor();\n } else {\n if (this.menu.offsetWidth != this.widthForMaxHeight) {\n this.widthForMaxHeight = this.menu.offsetWidth;\n this.maxHeight = 0;\n }\n\n if (this.menu.offsetHeight > this.maxHeight) {\n this.maxHeight = this.menu.offsetHeight;\n this.menu.style.minHeight = this.maxHeight + \"px\";\n }\n }\n};\n\nMenuBarView.prototype.updateScrollCursor = function updateScrollCursor() {\n var selection = this.editorView.root.getSelection();\n\n if (!selection.focusNode) {\n return;\n }\n\n var rects = selection.getRangeAt(0).getClientRects();\n var selRect = rects[selectionIsInverted(selection) ? 0 : rects.length - 1];\n\n if (!selRect) {\n return;\n }\n\n var menuRect = this.menu.getBoundingClientRect();\n\n if (selRect.top < menuRect.bottom && selRect.bottom > menuRect.top) {\n var scrollable = findWrappingScrollable(this.wrapper);\n\n if (scrollable) {\n scrollable.scrollTop -= menuRect.bottom - selRect.top;\n }\n }\n};\n\nMenuBarView.prototype.updateFloat = function updateFloat(scrollAncestor) {\n var parent = this.wrapper,\n editorRect = parent.getBoundingClientRect(),\n top = scrollAncestor ? Math.max(0, scrollAncestor.getBoundingClientRect().top) : 0;\n\n if (this.floating) {\n if (editorRect.top >= top || editorRect.bottom < this.menu.offsetHeight + 10) {\n this.floating = false;\n this.menu.style.position = this.menu.style.left = this.menu.style.top = this.menu.style.width = \"\";\n this.menu.style.display = \"\";\n this.spacer.parentNode.removeChild(this.spacer);\n this.spacer = null;\n } else {\n var border = (parent.offsetWidth - parent.clientWidth) / 2;\n this.menu.style.left = editorRect.left + border + \"px\";\n this.menu.style.display = editorRect.top > window.innerHeight ? \"none\" : \"\";\n\n if (scrollAncestor) {\n this.menu.style.top = top + \"px\";\n }\n }\n } else {\n if (editorRect.top < top && editorRect.bottom >= this.menu.offsetHeight + 10) {\n this.floating = true;\n var menuRect = this.menu.getBoundingClientRect();\n this.menu.style.left = menuRect.left + \"px\";\n this.menu.style.width = menuRect.width + \"px\";\n\n if (scrollAncestor) {\n this.menu.style.top = top + \"px\";\n }\n\n this.menu.style.position = \"fixed\";\n this.spacer = crel(\"div\", {\n \"class\": prefix$2 + \"-spacer\",\n style: \"height: \" + menuRect.height + \"px\"\n });\n parent.insertBefore(this.spacer, this.menu);\n }\n }\n};\n\nMenuBarView.prototype.destroy = function destroy() {\n if (this.wrapper.parentNode) {\n this.wrapper.parentNode.replaceChild(this.editorView.dom, this.wrapper);\n }\n}; // Not precise, but close enough\n\n\nfunction selectionIsInverted(selection) {\n if (selection.anchorNode == selection.focusNode) {\n return selection.anchorOffset > selection.focusOffset;\n }\n\n return selection.anchorNode.compareDocumentPosition(selection.focusNode) == Node.DOCUMENT_POSITION_FOLLOWING;\n}\n\nfunction findWrappingScrollable(node) {\n for (var cur = node.parentNode; cur; cur = cur.parentNode) {\n if (cur.scrollHeight > cur.clientHeight) {\n return cur;\n }\n }\n}\n\nfunction getAllWrapping(node) {\n var res = [window];\n\n for (var cur = node.parentNode; cur; cur = cur.parentNode) {\n res.push(cur);\n }\n\n return res;\n}\n\nexport { Dropdown, DropdownSubmenu, MenuItem, blockTypeItem, icons, joinUpItem, liftItem, menuBar, redoItem, renderGrouped, selectParentNodeItem, undoItem, wrapItem };","import { findWrapping, ReplaceAroundStep, canSplit, liftTarget } from 'prosemirror-transform';\nimport { NodeRange, Fragment, Slice } from 'prosemirror-model';\nvar olDOM = [\"ol\", 0],\n ulDOM = [\"ul\", 0],\n liDOM = [\"li\", 0]; // :: NodeSpec\n// An ordered list [node spec](#model.NodeSpec). Has a single\n// attribute, `order`, which determines the number at which the list\n// starts counting, and defaults to 1. Represented as an `<ol>`\n// element.\n\nvar orderedList = {\n attrs: {\n order: {\n \"default\": 1\n }\n },\n parseDOM: [{\n tag: \"ol\",\n getAttrs: function getAttrs(dom) {\n return {\n order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1\n };\n }\n }],\n toDOM: function toDOM(node) {\n return node.attrs.order == 1 ? olDOM : [\"ol\", {\n start: node.attrs.order\n }, 0];\n }\n}; // :: NodeSpec\n// A bullet list node spec, represented in the DOM as `<ul>`.\n\nvar bulletList = {\n parseDOM: [{\n tag: \"ul\"\n }],\n toDOM: function toDOM() {\n return ulDOM;\n }\n}; // :: NodeSpec\n// A list item (`<li>`) spec.\n\nvar listItem = {\n parseDOM: [{\n tag: \"li\"\n }],\n toDOM: function toDOM() {\n return liDOM;\n },\n defining: true\n};\n\nfunction add(obj, props) {\n var copy = {};\n\n for (var prop in obj) {\n copy[prop] = obj[prop];\n }\n\n for (var prop$1 in props) {\n copy[prop$1] = props[prop$1];\n }\n\n return copy;\n} // :: (OrderedMap<NodeSpec>, string, ?string) → OrderedMap<NodeSpec>\n// Convenience function for adding list-related node types to a map\n// specifying the nodes for a schema. Adds\n// [`orderedList`](#schema-list.orderedList) as `\"ordered_list\"`,\n// [`bulletList`](#schema-list.bulletList) as `\"bullet_list\"`, and\n// [`listItem`](#schema-list.listItem) as `\"list_item\"`.\n//\n// `itemContent` determines the content expression for the list items.\n// If you want the commands defined in this module to apply to your\n// list structure, it should have a shape like `\"paragraph block*\"` or\n// `\"paragraph (ordered_list | bullet_list)*\"`. `listGroup` can be\n// given to assign a group name to the list node types, for example\n// `\"block\"`.\n\n\nfunction addListNodes(nodes, itemContent, listGroup) {\n return nodes.append({\n ordered_list: add(orderedList, {\n content: \"list_item+\",\n group: listGroup\n }),\n bullet_list: add(bulletList, {\n content: \"list_item+\",\n group: listGroup\n }),\n list_item: add(listItem, {\n content: itemContent\n })\n });\n} // :: (NodeType, ?Object) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Returns a command function that wraps the selection in a list with\n// the given type an attributes. If `dispatch` is null, only return a\n// value to indicate whether this is possible, but don't actually\n// perform the change.\n\n\nfunction wrapInList(listType, attrs) {\n return function (state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var range = $from.blockRange($to),\n doJoin = false,\n outerRange = range;\n\n if (!range) {\n return false;\n } // This is at the top of an existing list item\n\n\n if (range.depth >= 2 && $from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) {\n // Don't do anything if this is the top of the list\n if ($from.index(range.depth - 1) == 0) {\n return false;\n }\n\n var $insert = state.doc.resolve(range.start - 2);\n outerRange = new NodeRange($insert, $insert, range.depth);\n\n if (range.endIndex < range.parent.childCount) {\n range = new NodeRange($from, state.doc.resolve($to.end(range.depth)), range.depth);\n }\n\n doJoin = true;\n }\n\n var wrap = findWrapping(outerRange, listType, attrs, range);\n\n if (!wrap) {\n return false;\n }\n\n if (dispatch) {\n dispatch(doWrapInList(state.tr, range, wrap, doJoin, listType).scrollIntoView());\n }\n\n return true;\n };\n}\n\nfunction doWrapInList(tr, range, wrappers, joinBefore, listType) {\n var content = Fragment.empty;\n\n for (var i = wrappers.length - 1; i >= 0; i--) {\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n }\n\n tr.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end, new Slice(content, 0, 0), wrappers.length, true));\n var found = 0;\n\n for (var i$1 = 0; i$1 < wrappers.length; i$1++) {\n if (wrappers[i$1].type == listType) {\n found = i$1 + 1;\n }\n }\n\n var splitDepth = wrappers.length - found;\n var splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0),\n parent = range.parent;\n\n for (var i$2 = range.startIndex, e = range.endIndex, first = true; i$2 < e; i$2++, first = false) {\n if (!first && canSplit(tr.doc, splitPos, splitDepth)) {\n tr.split(splitPos, splitDepth);\n splitPos += 2 * splitDepth;\n }\n\n splitPos += parent.child(i$2).nodeSize;\n }\n\n return tr;\n} // :: (NodeType) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Build a command that splits a non-empty textblock at the top level\n// of a list item by also splitting that list item.\n\n\nfunction splitListItem(itemType) {\n return function (state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var node = ref.node;\n\n if (node && node.isBlock || $from.depth < 2 || !$from.sameParent($to)) {\n return false;\n }\n\n var grandParent = $from.node(-1);\n\n if (grandParent.type != itemType) {\n return false;\n }\n\n if ($from.parent.content.size == 0 && $from.node(-1).childCount == $from.indexAfter(-1)) {\n // In an empty block. If this is a nested list, the wrapping\n // list item should be split. Otherwise, bail out and let next\n // command handle lifting.\n if ($from.depth == 2 || $from.node(-3).type != itemType || $from.index(-2) != $from.node(-2).childCount - 1) {\n return false;\n }\n\n if (dispatch) {\n var wrap = Fragment.empty,\n keepItem = $from.index(-1) > 0; // Build a fragment containing empty versions of the structure\n // from the outer list item to the parent node of the cursor\n\n for (var d = $from.depth - (keepItem ? 1 : 2); d >= $from.depth - 3; d--) {\n wrap = Fragment.from($from.node(d).copy(wrap));\n } // Add a second list item with an empty default start node\n\n\n wrap = wrap.append(Fragment.from(itemType.createAndFill()));\n var tr$1 = state.tr.replace($from.before(keepItem ? null : -1), $from.after(-3), new Slice(wrap, keepItem ? 3 : 2, 2));\n tr$1.setSelection(state.selection.constructor.near(tr$1.doc.resolve($from.pos + (keepItem ? 3 : 2))));\n dispatch(tr$1.scrollIntoView());\n }\n\n return true;\n }\n\n var nextType = $to.pos == $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n var tr = state.tr[\"delete\"]($from.pos, $to.pos);\n var types = nextType && [null, {\n type: nextType\n }];\n\n if (!canSplit(tr.doc, $from.pos, 2, types)) {\n return false;\n }\n\n if (dispatch) {\n dispatch(tr.split($from.pos, 2, types).scrollIntoView());\n }\n\n return true;\n };\n} // :: (NodeType) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Create a command to lift the list item around the selection up into\n// a wrapping list.\n\n\nfunction liftListItem(itemType) {\n return function (state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var range = $from.blockRange($to, function (node) {\n return node.childCount && node.firstChild.type == itemType;\n });\n\n if (!range) {\n return false;\n }\n\n if (!dispatch) {\n return true;\n }\n\n if ($from.node(range.depth - 1).type == itemType) // Inside a parent list\n {\n return liftToOuterList(state, dispatch, itemType, range);\n } else // Outer list node\n {\n return liftOutOfList(state, dispatch, range);\n }\n };\n}\n\nfunction liftToOuterList(state, dispatch, itemType, range) {\n var tr = state.tr,\n end = range.end,\n endOfList = range.$to.end(range.depth);\n\n if (end < endOfList) {\n // There are siblings after the lifted items, which must become\n // children of the last item\n tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice(Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));\n range = new NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth);\n }\n\n dispatch(tr.lift(range, liftTarget(range)).scrollIntoView());\n return true;\n}\n\nfunction liftOutOfList(state, dispatch, range) {\n var tr = state.tr,\n list = range.parent; // Merge the list items into a single big item\n\n for (var pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {\n pos -= list.child(i).nodeSize;\n tr[\"delete\"](pos - 1, pos + 1);\n }\n\n var $start = tr.doc.resolve(range.start),\n item = $start.nodeAfter;\n var atStart = range.startIndex == 0,\n atEnd = range.endIndex == list.childCount;\n var parent = $start.node(-1),\n indexBefore = $start.index(-1);\n\n if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment.empty : Fragment.from(list)))) {\n return false;\n }\n\n var start = $start.pos,\n end = start + item.nodeSize; // Strip off the surrounding list. At the sides where we're not at\n // the end of the list, the existing list is closed. At sides where\n // this is the end, it is overwritten to its end.\n\n tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))).append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));\n dispatch(tr.scrollIntoView());\n return true;\n} // :: (NodeType) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Create a command to sink the list item around the selection down\n// into an inner list.\n\n\nfunction sinkListItem(itemType) {\n return function (state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var range = $from.blockRange($to, function (node) {\n return node.childCount && node.firstChild.type == itemType;\n });\n\n if (!range) {\n return false;\n }\n\n var startIndex = range.startIndex;\n\n if (startIndex == 0) {\n return false;\n }\n\n var parent = range.parent,\n nodeBefore = parent.child(startIndex - 1);\n\n if (nodeBefore.type != itemType) {\n return false;\n }\n\n if (dispatch) {\n var nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type;\n var inner = Fragment.from(nestedBefore ? itemType.create() : null);\n var slice = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);\n var before = range.start,\n after = range.end;\n dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice, 1, true)).scrollIntoView());\n }\n\n return true;\n };\n}\n\nexport { addListNodes, bulletList, liftListItem, listItem, orderedList, sinkListItem, splitListItem, wrapInList };","import { Plugin } from 'prosemirror-state';\nimport { findWrapping, canJoin } from 'prosemirror-transform'; // ::- Input rules are regular expressions describing a piece of text\n// that, when typed, causes something to happen. This might be\n// changing two dashes into an emdash, wrapping a paragraph starting\n// with `\"> \"` into a blockquote, or something entirely different.\n\nvar InputRule = function InputRule(match, handler) {\n this.match = match;\n this.handler = typeof handler == \"string\" ? stringHandler(handler) : handler;\n};\n\nfunction stringHandler(string) {\n return function (state, match, start, end) {\n var insert = string;\n\n if (match[1]) {\n var offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n var cutOff = start - end;\n\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n\n return state.tr.insertText(insert, start, end);\n };\n}\n\nvar MAX_MATCH = 500; // :: (config: {rules: [InputRule]}) → Plugin\n// Create an input rules plugin. When enabled, it will cause text\n// input that matches any of the given rules to trigger the rule's\n// action.\n\nfunction inputRules(ref) {\n var rules = ref.rules;\n var plugin = new Plugin({\n state: {\n init: function init() {\n return null;\n },\n apply: function apply(tr, prev) {\n var stored = tr.getMeta(this);\n\n if (stored) {\n return stored;\n }\n\n return tr.selectionSet || tr.docChanged ? null : prev;\n }\n },\n props: {\n handleTextInput: function handleTextInput(view, from, to, text) {\n return run(view, from, to, text, rules, plugin);\n },\n handleDOMEvents: {\n compositionend: function compositionend(view) {\n setTimeout(function () {\n var ref = view.state.selection;\n var $cursor = ref.$cursor;\n\n if ($cursor) {\n run(view, $cursor.pos, $cursor.pos, \"\", rules, plugin);\n }\n });\n }\n }\n },\n isInputRules: true\n });\n return plugin;\n}\n\nfunction run(view, from, to, text, rules, plugin) {\n if (view.composing) {\n return false;\n }\n\n var state = view.state,\n $from = state.doc.resolve(from);\n\n if ($from.parent.type.spec.code) {\n return false;\n }\n\n var textBefore = $from.parent.textBetween(Math.max(0, $from.parentOffset - MAX_MATCH), $from.parentOffset, null, \"\\uFFFC\") + text;\n\n for (var i = 0; i < rules.length; i++) {\n var match = rules[i].match.exec(textBefore);\n var tr = match && rules[i].handler(state, match, from - (match[0].length - text.length), to);\n\n if (!tr) {\n continue;\n }\n\n view.dispatch(tr.setMeta(plugin, {\n transform: tr,\n from: from,\n to: to,\n text: text\n }));\n return true;\n }\n\n return false;\n} // :: (EditorState, ?(Transaction)) → bool\n// This is a command that will undo an input rule, if applying such a\n// rule was the last thing that the user did.\n\n\nfunction undoInputRule(state, dispatch) {\n var plugins = state.plugins;\n\n for (var i = 0; i < plugins.length; i++) {\n var plugin = plugins[i],\n undoable = void 0;\n\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n var tr = state.tr,\n toUndo = undoable.transform;\n\n for (var j = toUndo.steps.length - 1; j >= 0; j--) {\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\n }\n\n if (undoable.text) {\n var marks = tr.doc.resolve(undoable.from).marks();\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n } else {\n tr[\"delete\"](undoable.from, undoable.to);\n }\n\n dispatch(tr);\n }\n\n return true;\n }\n }\n\n return false;\n} // :: InputRule Converts double dashes to an emdash.\n\n\nvar emDash = new InputRule(/--$/, \"—\"); // :: InputRule Converts three dots to an ellipsis character.\n\nvar ellipsis = new InputRule(/\\.\\.\\.$/, \"…\"); // :: InputRule “Smart” opening double quotes.\n\nvar openDoubleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(\")$/, \"“\"); // :: InputRule “Smart” closing double quotes.\n\nvar closeDoubleQuote = new InputRule(/\"$/, \"”\"); // :: InputRule “Smart” opening single quotes.\n\nvar openSingleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(')$/, \"\"); // :: InputRule “Smart” closing single quotes.\n\nvar closeSingleQuote = new InputRule(/'$/, \"\"); // :: [InputRule] Smart-quote related input rules.\n\nvar smartQuotes = [openDoubleQuote, closeDoubleQuote, openSingleQuote, closeSingleQuote]; // :: (RegExp, NodeType, ?union<Object, ([string]) → ?Object>, ?([string], Node) → bool) → InputRule\n// Build an input rule for automatically wrapping a textblock when a\n// given string is typed. The `regexp` argument is\n// directly passed through to the `InputRule` constructor. You'll\n// probably want the regexp to start with `^`, so that the pattern can\n// only occur at the start of a textblock.\n//\n// `nodeType` is the type of node to wrap in. If it needs attributes,\n// you can either pass them directly, or pass a function that will\n// compute them from the regular expression match.\n//\n// By default, if there's a node with the same type above the newly\n// wrapped node, the rule will try to [join](#transform.Transform.join) those\n// two nodes. You can pass a join predicate, which takes a regular\n// expression match and the node before the wrapped node, and can\n// return a boolean to indicate whether a join should happen.\n\nfunction wrappingInputRule(regexp, nodeType, getAttrs, joinPredicate) {\n return new InputRule(regexp, function (state, match, start, end) {\n var attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n var tr = state.tr[\"delete\"](start, end);\n var $start = tr.doc.resolve(start),\n range = $start.blockRange(),\n wrapping = range && findWrapping(range, nodeType, attrs);\n\n if (!wrapping) {\n return null;\n }\n\n tr.wrap(range, wrapping);\n var before = tr.doc.resolve(start - 1).nodeBefore;\n\n if (before && before.type == nodeType && canJoin(tr.doc, start - 1) && (!joinPredicate || joinPredicate(match, before))) {\n tr.join(start - 1);\n }\n\n return tr;\n });\n} // :: (RegExp, NodeType, ?union<Object, ([string]) → ?Object>) → InputRule\n// Build an input rule that changes the type of a textblock when the\n// matched text is typed into it. You'll usually want to start your\n// regexp with `^` to that it is only matched at the start of a\n// textblock. The optional `getAttrs` parameter can be used to compute\n// the new node's attributes, and works the same as in the\n// `wrappingInputRule` function.\n\n\nfunction textblockTypeInputRule(regexp, nodeType, getAttrs) {\n return new InputRule(regexp, function (state, match, start, end) {\n var $start = state.doc.resolve(start);\n var attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType)) {\n return null;\n }\n\n return state.tr[\"delete\"](start, end).setBlockType(start, start, nodeType, attrs);\n });\n}\n\nexport { InputRule, closeDoubleQuote, closeSingleQuote, ellipsis, emDash, inputRules, openDoubleQuote, openSingleQuote, smartQuotes, textblockTypeInputRule, undoInputRule, wrappingInputRule };","import { keymap } from 'prosemirror-keymap';\nimport { undo, redo, history } from 'prosemirror-history';\nimport { toggleMark, wrapIn, chainCommands, exitCode, setBlockType, joinUp, joinDown, lift, selectParentNode, baseKeymap } from 'prosemirror-commands';\nimport { NodeSelection, Plugin } from 'prosemirror-state';\nimport { dropCursor } from 'prosemirror-dropcursor';\nimport { gapCursor } from 'prosemirror-gapcursor';\nimport { icons, MenuItem, wrapItem, blockTypeItem, Dropdown, DropdownSubmenu, joinUpItem, liftItem, selectParentNodeItem, undoItem, redoItem, menuBar } from 'prosemirror-menu';\nimport { wrapInList, splitListItem, liftListItem, sinkListItem } from 'prosemirror-schema-list';\nimport { undoInputRule, smartQuotes, ellipsis, emDash, wrappingInputRule, textblockTypeInputRule, inputRules } from 'prosemirror-inputrules';\nvar prefix = \"ProseMirror-prompt\";\n\nfunction openPrompt(options) {\n var wrapper = document.body.appendChild(document.createElement(\"div\"));\n wrapper.className = prefix;\n\n var mouseOutside = function mouseOutside(e) {\n if (!wrapper.contains(e.target)) {\n close();\n }\n };\n\n setTimeout(function () {\n return window.addEventListener(\"mousedown\", mouseOutside);\n }, 50);\n\n var close = function close() {\n window.removeEventListener(\"mousedown\", mouseOutside);\n\n if (wrapper.parentNode) {\n wrapper.parentNode.removeChild(wrapper);\n }\n };\n\n var domFields = [];\n\n for (var name in options.fields) {\n domFields.push(options.fields[name].render());\n }\n\n var submitButton = document.createElement(\"button\");\n submitButton.type = \"submit\";\n submitButton.className = prefix + \"-submit\";\n submitButton.textContent = \"OK\";\n var cancelButton = document.createElement(\"button\");\n cancelButton.type = \"button\";\n cancelButton.className = prefix + \"-cancel\";\n cancelButton.textContent = \"Cancel\";\n cancelButton.addEventListener(\"click\", close);\n var form = wrapper.appendChild(document.createElement(\"form\"));\n\n if (options.title) {\n form.appendChild(document.createElement(\"h5\")).textContent = options.title;\n }\n\n domFields.forEach(function (field) {\n form.appendChild(document.createElement(\"div\")).appendChild(field);\n });\n var buttons = form.appendChild(document.createElement(\"div\"));\n buttons.className = prefix + \"-buttons\";\n buttons.appendChild(submitButton);\n buttons.appendChild(document.createTextNode(\" \"));\n buttons.appendChild(cancelButton);\n var box = wrapper.getBoundingClientRect();\n wrapper.style.top = (window.innerHeight - box.height) / 2 + \"px\";\n wrapper.style.left = (window.innerWidth - box.width) / 2 + \"px\";\n\n var submit = function submit() {\n var params = getValues(options.fields, domFields);\n\n if (params) {\n close();\n options.callback(params);\n }\n };\n\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n submit();\n });\n form.addEventListener(\"keydown\", function (e) {\n if (e.keyCode == 27) {\n e.preventDefault();\n close();\n } else if (e.keyCode == 13 && !(e.ctrlKey || e.metaKey || e.shiftKey)) {\n e.preventDefault();\n submit();\n } else if (e.keyCode == 9) {\n window.setTimeout(function () {\n if (!wrapper.contains(document.activeElement)) {\n close();\n }\n }, 500);\n }\n });\n var input = form.elements[0];\n\n if (input) {\n input.focus();\n }\n}\n\nfunction getValues(fields, domFields) {\n var result = Object.create(null),\n i = 0;\n\n for (var name in fields) {\n var field = fields[name],\n dom = domFields[i++];\n var value = field.read(dom),\n bad = field.validate(value);\n\n if (bad) {\n reportInvalid(dom, bad);\n return null;\n }\n\n result[name] = field.clean(value);\n }\n\n return result;\n}\n\nfunction reportInvalid(dom, message) {\n // FIXME this is awful and needs a lot more work\n var parent = dom.parentNode;\n var msg = parent.appendChild(document.createElement(\"div\"));\n msg.style.left = dom.offsetLeft + dom.offsetWidth + 2 + \"px\";\n msg.style.top = dom.offsetTop - 5 + \"px\";\n msg.className = \"ProseMirror-invalid\";\n msg.textContent = message;\n setTimeout(function () {\n return parent.removeChild(msg);\n }, 1500);\n} // ::- The type of field that `FieldPrompt` expects to be passed to it.\n\n\nvar Field = function Field(options) {\n this.options = options;\n}; // render:: (state: EditorState, props: Object) → dom.Node\n// Render the field to the DOM. Should be implemented by all subclasses.\n// :: (dom.Node) → any\n// Read the field's value from its DOM node.\n\n\nField.prototype.read = function read(dom) {\n return dom.value;\n}; // :: (any) → ?string\n// A field-type-specific validation function.\n\n\nField.prototype.validateType = function validateType(_value) {};\n\nField.prototype.validate = function validate(value) {\n if (!value && this.options.required) {\n return \"Required field\";\n }\n\n return this.validateType(value) || this.options.validate && this.options.validate(value);\n};\n\nField.prototype.clean = function clean(value) {\n return this.options.clean ? this.options.clean(value) : value;\n}; // ::- A field class for single-line text fields.\n\n\nvar TextField = /*@__PURE__*/function (Field) {\n function TextField() {\n Field.apply(this, arguments);\n }\n\n if (Field) TextField.__proto__ = Field;\n TextField.prototype = Object.create(Field && Field.prototype);\n TextField.prototype.constructor = TextField;\n\n TextField.prototype.render = function render() {\n var input = document.createElement(\"input\");\n input.type = \"text\";\n input.placeholder = this.options.label;\n input.value = this.options.value || \"\";\n input.autocomplete = \"off\";\n return input;\n };\n\n return TextField;\n}(Field); // Helpers to create specific types of items\n\n\nfunction canInsert(state, nodeType) {\n var $from = state.selection.$from;\n\n for (var d = $from.depth; d >= 0; d--) {\n var index = $from.index(d);\n\n if ($from.node(d).canReplaceWith(index, index, nodeType)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction insertImageItem(nodeType) {\n return new MenuItem({\n title: \"Insert image\",\n label: \"Image\",\n enable: function enable(state) {\n return canInsert(state, nodeType);\n },\n run: function run(state, _, view) {\n var ref = state.selection;\n var from = ref.from;\n var to = ref.to;\n var attrs = null;\n\n if (state.selection instanceof NodeSelection && state.selection.node.type == nodeType) {\n attrs = state.selection.node.attrs;\n }\n\n openPrompt({\n title: \"Insert image\",\n fields: {\n src: new TextField({\n label: \"Location\",\n required: true,\n value: attrs && attrs.src\n }),\n title: new TextField({\n label: \"Title\",\n value: attrs && attrs.title\n }),\n alt: new TextField({\n label: \"Description\",\n value: attrs ? attrs.alt : state.doc.textBetween(from, to, \" \")\n })\n },\n callback: function callback(attrs) {\n view.dispatch(view.state.tr.replaceSelectionWith(nodeType.createAndFill(attrs)));\n view.focus();\n }\n });\n }\n });\n}\n\nfunction cmdItem(cmd, options) {\n var passedOptions = {\n label: options.title,\n run: cmd\n };\n\n for (var prop in options) {\n passedOptions[prop] = options[prop];\n }\n\n if ((!options.enable || options.enable === true) && !options.select) {\n passedOptions[options.enable ? \"enable\" : \"select\"] = function (state) {\n return cmd(state);\n };\n }\n\n return new MenuItem(passedOptions);\n}\n\nfunction markActive(state, type) {\n var ref = state.selection;\n var from = ref.from;\n var $from = ref.$from;\n var to = ref.to;\n var empty = ref.empty;\n\n if (empty) {\n return type.isInSet(state.storedMarks || $from.marks());\n } else {\n return state.doc.rangeHasMark(from, to, type);\n }\n}\n\nfunction markItem(markType, options) {\n var passedOptions = {\n active: function active(state) {\n return markActive(state, markType);\n },\n enable: true\n };\n\n for (var prop in options) {\n passedOptions[prop] = options[prop];\n }\n\n return cmdItem(toggleMark(markType), passedOptions);\n}\n\nfunction linkItem(markType) {\n return new MenuItem({\n title: \"Add or remove link\",\n icon: icons.link,\n active: function active(state) {\n return markActive(state, markType);\n },\n enable: function enable(state) {\n return !state.selection.empty;\n },\n run: function run(state, dispatch, view) {\n if (markActive(state, markType)) {\n toggleMark(markType)(state, dispatch);\n return true;\n }\n\n openPrompt({\n title: \"Create a link\",\n fields: {\n href: new TextField({\n label: \"Link target\",\n required: true\n }),\n title: new TextField({\n label: \"Title\"\n })\n },\n callback: function callback(attrs) {\n toggleMark(markType, attrs)(view.state, view.dispatch);\n view.focus();\n }\n });\n }\n });\n}\n\nfunction wrapListItem(nodeType, options) {\n return cmdItem(wrapInList(nodeType, options.attrs), options);\n} // :: (Schema) → Object\n// Given a schema, look for default mark and node types in it and\n// return an object with relevant menu items relating to those marks:\n//\n// **`toggleStrong`**`: MenuItem`\n// : A menu item to toggle the [strong mark](#schema-basic.StrongMark).\n//\n// **`toggleEm`**`: MenuItem`\n// : A menu item to toggle the [emphasis mark](#schema-basic.EmMark).\n//\n// **`toggleCode`**`: MenuItem`\n// : A menu item to toggle the [code font mark](#schema-basic.CodeMark).\n//\n// **`toggleLink`**`: MenuItem`\n// : A menu item to toggle the [link mark](#schema-basic.LinkMark).\n//\n// **`insertImage`**`: MenuItem`\n// : A menu item to insert an [image](#schema-basic.Image).\n//\n// **`wrapBulletList`**`: MenuItem`\n// : A menu item to wrap the selection in a [bullet list](#schema-list.BulletList).\n//\n// **`wrapOrderedList`**`: MenuItem`\n// : A menu item to wrap the selection in an [ordered list](#schema-list.OrderedList).\n//\n// **`wrapBlockQuote`**`: MenuItem`\n// : A menu item to wrap the selection in a [block quote](#schema-basic.BlockQuote).\n//\n// **`makeParagraph`**`: MenuItem`\n// : A menu item to set the current textblock to be a normal\n// [paragraph](#schema-basic.Paragraph).\n//\n// **`makeCodeBlock`**`: MenuItem`\n// : A menu item to set the current textblock to be a\n// [code block](#schema-basic.CodeBlock).\n//\n// **`makeHead[N]`**`: MenuItem`\n// : Where _N_ is 1 to 6. Menu items to set the current textblock to\n// be a [heading](#schema-basic.Heading) of level _N_.\n//\n// **`insertHorizontalRule`**`: MenuItem`\n// : A menu item to insert a horizontal rule.\n//\n// The return value also contains some prefabricated menu elements and\n// menus, that you can use instead of composing your own menu from\n// scratch:\n//\n// **`insertMenu`**`: Dropdown`\n// : A dropdown containing the `insertImage` and\n// `insertHorizontalRule` items.\n//\n// **`typeMenu`**`: Dropdown`\n// : A dropdown containing the items for making the current\n// textblock a paragraph, code block, or heading.\n//\n// **`fullMenu`**`: [[MenuElement]]`\n// : An array of arrays of menu elements for use as the full menu\n// for, for example the [menu bar](https://github.com/prosemirror/prosemirror-menu#user-content-menubar).\n\n\nfunction buildMenuItems(schema) {\n var r = {},\n type;\n\n if (type = schema.marks.strong) {\n r.toggleStrong = markItem(type, {\n title: \"Toggle strong style\",\n icon: icons.strong\n });\n }\n\n if (type = schema.marks.em) {\n r.toggleEm = markItem(type, {\n title: \"Toggle emphasis\",\n icon: icons.em\n });\n }\n\n if (type = schema.marks.code) {\n r.toggleCode = markItem(type, {\n title: \"Toggle code font\",\n icon: icons.code\n });\n }\n\n if (type = schema.marks.link) {\n r.toggleLink = linkItem(type);\n }\n\n if (type = schema.nodes.image) {\n r.insertImage = insertImageItem(type);\n }\n\n if (type = schema.nodes.bullet_list) {\n r.wrapBulletList = wrapListItem(type, {\n title: \"Wrap in bullet list\",\n icon: icons.bulletList\n });\n }\n\n if (type = schema.nodes.ordered_list) {\n r.wrapOrderedList = wrapListItem(type, {\n title: \"Wrap in ordered list\",\n icon: icons.orderedList\n });\n }\n\n if (type = schema.nodes.blockquote) {\n r.wrapBlockQuote = wrapItem(type, {\n title: \"Wrap in block quote\",\n icon: icons.blockquote\n });\n }\n\n if (type = schema.nodes.paragraph) {\n r.makeParagraph = blockTypeItem(type, {\n title: \"Change to paragraph\",\n label: \"Plain\"\n });\n }\n\n if (type = schema.nodes.code_block) {\n r.makeCodeBlock = blockTypeItem(type, {\n title: \"Change to code block\",\n label: \"Code\"\n });\n }\n\n if (type = schema.nodes.heading) {\n for (var i = 1; i <= 10; i++) {\n r[\"makeHead\" + i] = blockTypeItem(type, {\n title: \"Change to heading \" + i,\n label: \"Level \" + i,\n attrs: {\n level: i\n }\n });\n }\n }\n\n if (type = schema.nodes.horizontal_rule) {\n var hr = type;\n r.insertHorizontalRule = new MenuItem({\n title: \"Insert horizontal rule\",\n label: \"Horizontal rule\",\n enable: function enable(state) {\n return canInsert(state, hr);\n },\n run: function run(state, dispatch) {\n dispatch(state.tr.replaceSelectionWith(hr.create()));\n }\n });\n }\n\n var cut = function cut(arr) {\n return arr.filter(function (x) {\n return x;\n });\n };\n\n r.insertMenu = new Dropdown(cut([r.insertImage, r.insertHorizontalRule]), {\n label: \"Insert\"\n });\n r.typeMenu = new Dropdown(cut([r.makeParagraph, r.makeCodeBlock, r.makeHead1 && new DropdownSubmenu(cut([r.makeHead1, r.makeHead2, r.makeHead3, r.makeHead4, r.makeHead5, r.makeHead6]), {\n label: \"Heading\"\n })]), {\n label: \"Type...\"\n });\n r.inlineMenu = [cut([r.toggleStrong, r.toggleEm, r.toggleCode, r.toggleLink])];\n r.blockMenu = [cut([r.wrapBulletList, r.wrapOrderedList, r.wrapBlockQuote, joinUpItem, liftItem, selectParentNodeItem])];\n r.fullMenu = r.inlineMenu.concat([[r.insertMenu, r.typeMenu]], [[undoItem, redoItem]], r.blockMenu);\n return r;\n}\n\nvar mac = typeof navigator != \"undefined\" ? /Mac/.test(navigator.platform) : false; // :: (Schema, ?Object) → Object\n// Inspect the given schema looking for marks and nodes from the\n// basic schema, and if found, add key bindings related to them.\n// This will add:\n//\n// * **Mod-b** for toggling [strong](#schema-basic.StrongMark)\n// * **Mod-i** for toggling [emphasis](#schema-basic.EmMark)\n// * **Mod-`** for toggling [code font](#schema-basic.CodeMark)\n// * **Ctrl-Shift-0** for making the current textblock a paragraph\n// * **Ctrl-Shift-1** to **Ctrl-Shift-Digit6** for making the current\n// textblock a heading of the corresponding level\n// * **Ctrl-Shift-Backslash** to make the current textblock a code block\n// * **Ctrl-Shift-8** to wrap the selection in an ordered list\n// * **Ctrl-Shift-9** to wrap the selection in a bullet list\n// * **Ctrl->** to wrap the selection in a block quote\n// * **Enter** to split a non-empty textblock in a list item while at\n// the same time splitting the list item\n// * **Mod-Enter** to insert a hard break\n// * **Mod-_** to insert a horizontal rule\n// * **Backspace** to undo an input rule\n// * **Alt-ArrowUp** to `joinUp`\n// * **Alt-ArrowDown** to `joinDown`\n// * **Mod-BracketLeft** to `lift`\n// * **Escape** to `selectParentNode`\n//\n// You can suppress or map these bindings by passing a `mapKeys`\n// argument, which maps key names (say `\"Mod-B\"` to either `false`, to\n// remove the binding, or a new key name string.\n\nfunction buildKeymap(schema, mapKeys) {\n var keys = {},\n type;\n\n function bind(key, cmd) {\n if (mapKeys) {\n var mapped = mapKeys[key];\n\n if (mapped === false) {\n return;\n }\n\n if (mapped) {\n key = mapped;\n }\n }\n\n keys[key] = cmd;\n }\n\n bind(\"Mod-z\", undo);\n bind(\"Shift-Mod-z\", redo);\n bind(\"Backspace\", undoInputRule);\n\n if (!mac) {\n bind(\"Mod-y\", redo);\n }\n\n bind(\"Alt-ArrowUp\", joinUp);\n bind(\"Alt-ArrowDown\", joinDown);\n bind(\"Mod-BracketLeft\", lift);\n bind(\"Escape\", selectParentNode);\n\n if (type = schema.marks.strong) {\n bind(\"Mod-b\", toggleMark(type));\n bind(\"Mod-B\", toggleMark(type));\n }\n\n if (type = schema.marks.em) {\n bind(\"Mod-i\", toggleMark(type));\n bind(\"Mod-I\", toggleMark(type));\n }\n\n if (type = schema.marks.code) {\n bind(\"Mod-`\", toggleMark(type));\n }\n\n if (type = schema.nodes.bullet_list) {\n bind(\"Shift-Ctrl-8\", wrapInList(type));\n }\n\n if (type = schema.nodes.ordered_list) {\n bind(\"Shift-Ctrl-9\", wrapInList(type));\n }\n\n if (type = schema.nodes.blockquote) {\n bind(\"Ctrl->\", wrapIn(type));\n }\n\n if (type = schema.nodes.hard_break) {\n var br = type,\n cmd = chainCommands(exitCode, function (state, dispatch) {\n dispatch(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\n return true;\n });\n bind(\"Mod-Enter\", cmd);\n bind(\"Shift-Enter\", cmd);\n\n if (mac) {\n bind(\"Ctrl-Enter\", cmd);\n }\n }\n\n if (type = schema.nodes.list_item) {\n bind(\"Enter\", splitListItem(type));\n bind(\"Mod-[\", liftListItem(type));\n bind(\"Mod-]\", sinkListItem(type));\n }\n\n if (type = schema.nodes.paragraph) {\n bind(\"Shift-Ctrl-0\", setBlockType(type));\n }\n\n if (type = schema.nodes.code_block) {\n bind(\"Shift-Ctrl-\\\\\", setBlockType(type));\n }\n\n if (type = schema.nodes.heading) {\n for (var i = 1; i <= 6; i++) {\n bind(\"Shift-Ctrl-\" + i, setBlockType(type, {\n level: i\n }));\n }\n }\n\n if (type = schema.nodes.horizontal_rule) {\n var hr = type;\n bind(\"Mod-_\", function (state, dispatch) {\n dispatch(state.tr.replaceSelectionWith(hr.create()).scrollIntoView());\n return true;\n });\n }\n\n return keys;\n} // : (NodeType) → InputRule\n// Given a blockquote node type, returns an input rule that turns `\"> \"`\n// at the start of a textblock into a blockquote.\n\n\nfunction blockQuoteRule(nodeType) {\n return wrappingInputRule(/^\\s*>\\s$/, nodeType);\n} // : (NodeType) → InputRule\n// Given a list node type, returns an input rule that turns a number\n// followed by a dot at the start of a textblock into an ordered list.\n\n\nfunction orderedListRule(nodeType) {\n return wrappingInputRule(/^(\\d+)\\.\\s$/, nodeType, function (match) {\n return {\n order: +match[1]\n };\n }, function (match, node) {\n return node.childCount + node.attrs.order == +match[1];\n });\n} // : (NodeType) → InputRule\n// Given a list node type, returns an input rule that turns a bullet\n// (dash, plush, or asterisk) at the start of a textblock into a\n// bullet list.\n\n\nfunction bulletListRule(nodeType) {\n return wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType);\n} // : (NodeType) → InputRule\n// Given a code block node type, returns an input rule that turns a\n// textblock starting with three backticks into a code block.\n\n\nfunction codeBlockRule(nodeType) {\n return textblockTypeInputRule(/^```$/, nodeType);\n} // : (NodeType, number) → InputRule\n// Given a node type and a maximum level, creates an input rule that\n// turns up to that number of `#` characters followed by a space at\n// the start of a textblock into a heading whose level corresponds to\n// the number of `#` signs.\n\n\nfunction headingRule(nodeType, maxLevel) {\n return textblockTypeInputRule(new RegExp(\"^(#{1,\" + maxLevel + \"})\\\\s$\"), nodeType, function (match) {\n return {\n level: match[1].length\n };\n });\n} // : (Schema) → Plugin\n// A set of input rules for creating the basic block quotes, lists,\n// code blocks, and heading.\n\n\nfunction buildInputRules(schema) {\n var rules = smartQuotes.concat(ellipsis, emDash),\n type;\n\n if (type = schema.nodes.blockquote) {\n rules.push(blockQuoteRule(type));\n }\n\n if (type = schema.nodes.ordered_list) {\n rules.push(orderedListRule(type));\n }\n\n if (type = schema.nodes.bullet_list) {\n rules.push(bulletListRule(type));\n }\n\n if (type = schema.nodes.code_block) {\n rules.push(codeBlockRule(type));\n }\n\n if (type = schema.nodes.heading) {\n rules.push(headingRule(type, 6));\n }\n\n return inputRules({\n rules: rules\n });\n} // !! This module exports helper functions for deriving a set of basic\n// menu items, input rules, or key bindings from a schema. These\n// values need to know about the schema for two reasons—they need\n// access to specific instances of node and mark types, and they need\n// to know which of the node and mark types that they know about are\n// actually present in the schema.\n//\n// The `exampleSetup` plugin ties these together into a plugin that\n// will automatically enable this basic functionality in an editor.\n// :: (Object) → [Plugin]\n// A convenience plugin that bundles together a simple menu with basic\n// key bindings, input rules, and styling for the example schema.\n// Probably only useful for quickly setting up a passable\n// editor—you'll need more control over your settings in most\n// real-world situations.\n//\n// options::- The following options are recognized:\n//\n// schema:: Schema\n// The schema to generate key bindings and menu items for.\n//\n// mapKeys:: ?Object\n// Can be used to [adjust](#example-setup.buildKeymap) the key bindings created.\n//\n// menuBar:: ?bool\n// Set to false to disable the menu bar.\n//\n// history:: ?bool\n// Set to false to disable the history plugin.\n//\n// floatingMenu:: ?bool\n// Set to false to make the menu bar non-floating.\n//\n// menuContent:: [[MenuItem]]\n// Can be used to override the menu content.\n\n\nfunction exampleSetup(options) {\n var plugins = [buildInputRules(options.schema), keymap(buildKeymap(options.schema, options.mapKeys)), keymap(baseKeymap), dropCursor(), gapCursor()];\n\n if (options.menuBar !== false) {\n plugins.push(menuBar({\n floating: options.floatingMenu !== false,\n content: options.menuContent || buildMenuItems(options.schema).fullMenu\n }));\n }\n\n if (options.history !== false) {\n plugins.push(history());\n }\n\n return plugins.concat(new Plugin({\n props: {\n attributes: {\n \"class\": \"ProseMirror-example-setup-style\"\n }\n }\n }));\n}\n\nexport { buildInputRules, buildKeymap, buildMenuItems, exampleSetup };","import {EditorState} from \"prosemirror-state\"\nimport {EditorView} from \"prosemirror-view\"\nimport {schema, defaultMarkdownParser, defaultMarkdownSerializer} from \"prosemirror-markdown\"\nimport {exampleSetup} from \"prosemirror-example-setup\"\n\nimport \"prosemirror-gapcursor/style/gapcursor.css\"\nimport \"prosemirror-menu/style/menu.css\"\nimport \"prosemirror-view/style/prosemirror.css\"\nimport \"prosemirror-example-setup/style/style.css\"\n\ndocument.addEventListener('turbolinks:load', () => {\n document.querySelectorAll('.markdown-content').forEach(mdc => {\n let textArea = mdc.querySelector(\".content\"),\n editor = mdc.querySelector(\".markdown-editor\");\n\n let view = new EditorView(editor, {\n state: EditorState.create({\n doc: defaultMarkdownParser.parse(textArea.value),\n plugins: exampleSetup({schema})\n })\n })\n\n // Guardar los cambios al enviar el formulario y cada 10 segundos\n textArea.form.addEventListener('submit', e => textArea.value = defaultMarkdownSerializer.serialize(view.state.doc));\n setInterval(() => textArea.value = defaultMarkdownSerializer.serialize(view.state.doc), 10 * 1000);\n // Ocultar el area\n textArea.style.display = 'none'\n })\n})\n","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/*!\n * Chart.js v3.5.1\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\nvar requestAnimFrame = function () {\n if (typeof window === 'undefined') {\n return function (callback) {\n return callback();\n };\n }\n\n return window.requestAnimationFrame;\n}();\n\nfunction throttled(fn, thisArg, updateFn) {\n var updateArgs = updateFn || function (args) {\n return Array.prototype.slice.call(args);\n };\n\n var ticking = false;\n var args = [];\n return function () {\n for (var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {\n rest[_key] = arguments[_key];\n }\n\n args = updateArgs(rest);\n\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, function () {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\n\nfunction debounce(fn, delay) {\n var timeout;\n return function () {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay);\n } else {\n fn();\n }\n\n return delay;\n };\n}\n\nvar _toLeftRightCenter = function _toLeftRightCenter(align) {\n return align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n};\n\nvar _alignStartEnd = function _alignStartEnd(align, start, end) {\n return align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n};\n\nvar _textX = function _textX(align, left, right, rtl) {\n var check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\n\nvar uid = function () {\n var id = 0;\n return function () {\n return id++;\n };\n}();\n\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\n\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n\n var type = Object.prototype.toString.call(value);\n\n if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n return true;\n }\n\n return false;\n}\n\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\nvar isNumberFinite = function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n};\n\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nvar toPercentage = function toPercentage(value, dimension) {\n return typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : value / dimension;\n};\n\nvar toDimension = function toDimension(value, dimension) {\n return typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n};\n\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\n\nfunction each(loopable, fn, thisArg, reverse) {\n var i, len, keys;\n\n if (isArray(loopable)) {\n len = loopable.length;\n\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n\nfunction _elementsEqual(a0, a1) {\n var i, ilen, v0, v1;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n\n if (isObject(source)) {\n var target = Object.create(null);\n var keys = Object.keys(source);\n var klen = keys.length;\n var k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n}\n\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n\n var tval = target[key];\n var sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\n\nfunction merge(target, source, options) {\n var sources = isArray(source) ? source : [source];\n var ilen = sources.length;\n\n if (!isObject(target)) {\n return target;\n }\n\n options = options || {};\n var merger = options.merger || _merger;\n\n for (var i = 0; i < ilen; ++i) {\n source = sources[i];\n\n if (!isObject(source)) {\n continue;\n }\n\n var keys = Object.keys(source);\n\n for (var k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n\n return target;\n}\n\nfunction mergeIf(target, source) {\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n\n var tval = target[key];\n var sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone$1(sval);\n }\n}\n\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n\nvar emptyString = '';\nvar dot = '.';\n\nfunction indexOfDotOrLength(key, start) {\n var idx = key.indexOf(dot, start);\n return idx === -1 ? key.length : idx;\n}\n\nfunction resolveObjectKey(obj, key) {\n if (key === emptyString) {\n return obj;\n }\n\n var pos = 0;\n var idx = indexOfDotOrLength(key, pos);\n\n while (obj && idx > pos) {\n obj = obj[key.substr(pos, idx - pos)];\n pos = idx + 1;\n idx = indexOfDotOrLength(key, pos);\n }\n\n return obj;\n}\n\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nvar defined = function defined(value) {\n return typeof value !== 'undefined';\n};\n\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n\nvar setsEqual = function setsEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n\n var _iterator = _createForOfIteratorHelper(a),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var item = _step.value;\n\n if (!b.has(item)) {\n return false;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return true;\n};\n\nvar PI = Math.PI;\nvar TAU = 2 * PI;\nvar PITAU = TAU + PI;\nvar INFINITY = Number.POSITIVE_INFINITY;\nvar RAD_PER_DEG = PI / 180;\nvar HALF_PI = PI / 2;\nvar QUARTER_PI = PI / 4;\nvar TWO_THIRDS_PI = PI * 2 / 3;\nvar log10 = Math.log10;\nvar sign = Math.sign;\n\nfunction niceNum(range) {\n var roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n var niceRange = Math.pow(10, Math.floor(log10(range)));\n var fraction = range / niceRange;\n var niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n\nfunction _factorize(value) {\n var result = [];\n var sqrt = Math.sqrt(value);\n var i;\n\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n\n result.sort(function (a, b) {\n return a - b;\n }).pop();\n return result;\n}\n\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n\nfunction almostWhole(x, epsilon) {\n var rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n\nfunction _setMinAndMaxByKey(array, target, property) {\n var i, ilen, value;\n\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\n\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\n\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n\n var e = 1;\n var p = 0;\n\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n\n return p;\n}\n\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n var distanceFromXCenter = anglePoint.x - centrePoint.x;\n var distanceFromYCenter = anglePoint.y - centrePoint.y;\n var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n if (angle < -0.5 * PI) {\n angle += TAU;\n }\n\n return {\n angle: angle,\n distance: radialDistanceFromCenter\n };\n}\n\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n var a = _normalizeAngle(angle);\n\n var s = _normalizeAngle(start);\n\n var e = _normalizeAngle(end);\n\n var angleToStart = _normalizeAngle(s - a);\n\n var angleToEnd = _normalizeAngle(e - a);\n\n var startToAngle = _normalizeAngle(a - s);\n\n var endToAngle = _normalizeAngle(a - e);\n\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n\nvar atEdge = function atEdge(t) {\n return t === 0 || t === 1;\n};\n\nvar elasticIn = function elasticIn(t, s, p) {\n return -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\n};\n\nvar elasticOut = function elasticOut(t, s, p) {\n return Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n};\n\nvar effects = {\n linear: function linear(t) {\n return t;\n },\n easeInQuad: function easeInQuad(t) {\n return t * t;\n },\n easeOutQuad: function easeOutQuad(t) {\n return -t * (t - 2);\n },\n easeInOutQuad: function easeInOutQuad(t) {\n return (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1);\n },\n easeInCubic: function easeInCubic(t) {\n return t * t * t;\n },\n easeOutCubic: function easeOutCubic(t) {\n return (t -= 1) * t * t + 1;\n },\n easeInOutCubic: function easeInOutCubic(t) {\n return (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2);\n },\n easeInQuart: function easeInQuart(t) {\n return t * t * t * t;\n },\n easeOutQuart: function easeOutQuart(t) {\n return -((t -= 1) * t * t * t - 1);\n },\n easeInOutQuart: function easeInOutQuart(t) {\n return (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2);\n },\n easeInQuint: function easeInQuint(t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function easeOutQuint(t) {\n return (t -= 1) * t * t * t * t + 1;\n },\n easeInOutQuint: function easeInOutQuint(t) {\n return (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2);\n },\n easeInSine: function easeInSine(t) {\n return -Math.cos(t * HALF_PI) + 1;\n },\n easeOutSine: function easeOutSine(t) {\n return Math.sin(t * HALF_PI);\n },\n easeInOutSine: function easeInOutSine(t) {\n return -0.5 * (Math.cos(PI * t) - 1);\n },\n easeInExpo: function easeInExpo(t) {\n return t === 0 ? 0 : Math.pow(2, 10 * (t - 1));\n },\n easeOutExpo: function easeOutExpo(t) {\n return t === 1 ? 1 : -Math.pow(2, -10 * t) + 1;\n },\n easeInOutExpo: function easeInOutExpo(t) {\n return atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2);\n },\n easeInCirc: function easeInCirc(t) {\n return t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1);\n },\n easeOutCirc: function easeOutCirc(t) {\n return Math.sqrt(1 - (t -= 1) * t);\n },\n easeInOutCirc: function easeInOutCirc(t) {\n return (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n },\n easeInElastic: function easeInElastic(t) {\n return atEdge(t) ? t : elasticIn(t, 0.075, 0.3);\n },\n easeOutElastic: function easeOutElastic(t) {\n return atEdge(t) ? t : elasticOut(t, 0.075, 0.3);\n },\n easeInOutElastic: function easeInOutElastic(t) {\n var s = 0.1125;\n var p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack: function easeInBack(t) {\n var s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack: function easeOutBack(t) {\n var s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack: function easeInOutBack(t) {\n var s = 1.70158;\n\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: function easeInBounce(t) {\n return 1 - effects.easeOutBounce(1 - t);\n },\n easeOutBounce: function easeOutBounce(t) {\n var m = 7.5625;\n var d = 2.75;\n\n if (t < 1 / d) {\n return m * t * t;\n }\n\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: function easeInOutBounce(t) {\n return t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n }\n};\n/*!\n * @kurkle/color v0.1.9\n * https://github.com/kurkle/color#readme\n * (c) 2020 Jukka Kurkela\n * Released under the MIT License\n */\n\nvar map = {\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n A: 10,\n B: 11,\n C: 12,\n D: 13,\n E: 14,\n F: 15,\n a: 10,\n b: 11,\n c: 12,\n d: 13,\n e: 14,\n f: 15\n};\nvar hex = '0123456789ABCDEF';\n\nvar h1 = function h1(b) {\n return hex[b & 0xF];\n};\n\nvar h2 = function h2(b) {\n return hex[(b & 0xF0) >> 4] + hex[b & 0xF];\n};\n\nvar eq = function eq(b) {\n return (b & 0xF0) >> 4 === (b & 0xF);\n};\n\nfunction isShort(v) {\n return eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n}\n\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map[str[1]] * 17,\n g: 255 & map[str[2]] * 17,\n b: 255 & map[str[3]] * 17,\n a: len === 5 ? map[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map[str[1]] << 4 | map[str[2]],\n g: map[str[3]] << 4 | map[str[4]],\n b: map[str[5]] << 4 | map[str[6]],\n a: len === 9 ? map[str[7]] << 4 | map[str[8]] : 255\n };\n }\n }\n\n return ret;\n}\n\nfunction _hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v ? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '') : v;\n}\n\nfunction round(v) {\n return v + 0.5 | 0;\n}\n\nvar lim = function lim(v, l, h) {\n return Math.max(Math.min(v, h), l);\n};\n\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\n\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\n\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\n\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nvar RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\n\nfunction rgbParse(str) {\n var m = RGB_RE.exec(str);\n var a = 255;\n var r, g, b;\n\n if (!m) {\n return;\n }\n\n if (m[7] !== r) {\n var v = +m[7];\n a = 255 & (m[8] ? p2b(v) : v * 255);\n }\n\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : r);\n g = 255 & (m[4] ? p2b(g) : g);\n b = 255 & (m[6] ? p2b(b) : b);\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\n\nfunction _rgbString(v) {\n return v && (v.a < 255 ? \"rgba(\".concat(v.r, \", \").concat(v.g, \", \").concat(v.b, \", \").concat(b2n(v.a), \")\") : \"rgb(\".concat(v.r, \", \").concat(v.g, \", \").concat(v.b, \")\"));\n}\n\nvar HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\n\nfunction hsl2rgbn(h, s, l) {\n var a = s * Math.min(l, 1 - l);\n\n var f = function f(n) {\n var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12;\n return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n };\n\n return [f(0), f(8), f(4)];\n}\n\nfunction hsv2rgbn(h, s, v) {\n var f = function f(n) {\n var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 60) % 6;\n return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n };\n\n return [f(5), f(3), f(1)];\n}\n\nfunction hwb2rgbn(h, w, b) {\n var rgb = hsl2rgbn(h, 1, 0.5);\n var i;\n\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n\n return rgb;\n}\n\nfunction rgb2hsl(v) {\n var range = 255;\n var r = v.r / range;\n var g = v.g / range;\n var b = v.b / range;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var l = (max + min) / 2;\n var h, s, d;\n\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\n h = h * 60 + 0.5;\n }\n\n return [h | 0, s || 0, l];\n}\n\nfunction calln(f, a, b, c) {\n return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);\n}\n\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\n\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\n\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\n\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\n\nfunction hueParse(str) {\n var m = HUE_RE.exec(str);\n var a = 255;\n var v;\n\n if (!m) {\n return;\n }\n\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n\n var h = hue(+m[2]);\n var p1 = +m[3] / 100;\n var p2 = +m[4] / 100;\n\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\n\nfunction _rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\n\nfunction _hslString(v) {\n if (!v) {\n return;\n }\n\n var a = rgb2hsl(v);\n var h = a[0];\n var s = n2p(a[1]);\n var l = n2p(a[2]);\n return v.a < 255 ? \"hsla(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%, \").concat(b2n(v.a), \")\") : \"hsl(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%)\");\n}\n\nvar map$1 = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nvar names = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\n\nfunction unpack() {\n var unpacked = {};\n var keys = Object.keys(names);\n var tkeys = Object.keys(map$1);\n var i, j, k, ok, nk;\n\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map$1[k]);\n }\n\n k = parseInt(names[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n\n return unpacked;\n}\n\nvar names$1;\n\nfunction nameParse(str) {\n if (!names$1) {\n names$1 = unpack();\n names$1.transparent = [0, 0, 0, 0];\n }\n\n var a = names$1[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n var tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\n\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\n\nfunction fromObject(input) {\n var v = {\n r: 0,\n g: 0,\n b: 0,\n a: 255\n };\n\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {\n r: input[0],\n g: input[1],\n b: input[2],\n a: 255\n };\n\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {\n r: 0,\n g: 0,\n b: 0,\n a: 1\n });\n v.a = n2b(v.a);\n }\n\n return v;\n}\n\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n\n return hueParse(str);\n}\n\nvar Color = /*#__PURE__*/function () {\n function Color(input) {\n _classCallCheck(this, Color);\n\n if (input instanceof Color) {\n return input;\n }\n\n var type = _typeof(input);\n\n var v;\n\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n\n this._rgb = v;\n this._valid = !!v;\n }\n\n _createClass(Color, [{\n key: \"valid\",\n get: function get() {\n return this._valid;\n }\n }, {\n key: \"rgb\",\n get: function get() {\n var v = clone(this._rgb);\n\n if (v) {\n v.a = b2n(v.a);\n }\n\n return v;\n },\n set: function set(obj) {\n this._rgb = fromObject(obj);\n }\n }, {\n key: \"rgbString\",\n value: function rgbString() {\n return this._valid ? _rgbString(this._rgb) : this._rgb;\n }\n }, {\n key: \"hexString\",\n value: function hexString() {\n return this._valid ? _hexString(this._rgb) : this._rgb;\n }\n }, {\n key: \"hslString\",\n value: function hslString() {\n return this._valid ? _hslString(this._rgb) : this._rgb;\n }\n }, {\n key: \"mix\",\n value: function mix(color, weight) {\n var me = this;\n\n if (color) {\n var c1 = me.rgb;\n var c2 = color.rgb;\n var w2;\n var p = weight === w2 ? 0.5 : weight;\n var w = 2 * p - 1;\n var a = c1.a - c2.a;\n var w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n me.rgb = c1;\n }\n\n return me;\n }\n }, {\n key: \"clone\",\n value: function clone() {\n return new Color(this.rgb);\n }\n }, {\n key: \"alpha\",\n value: function alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n }, {\n key: \"clearer\",\n value: function clearer(ratio) {\n var rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n }, {\n key: \"greyscale\",\n value: function greyscale() {\n var rgb = this._rgb;\n var val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n }, {\n key: \"opaquer\",\n value: function opaquer(ratio) {\n var rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n }, {\n key: \"negate\",\n value: function negate() {\n var v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n }, {\n key: \"lighten\",\n value: function lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n }, {\n key: \"darken\",\n value: function darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n }, {\n key: \"saturate\",\n value: function saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n }, {\n key: \"desaturate\",\n value: function desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n }, {\n key: \"rotate\",\n value: function rotate(deg) {\n _rotate(this._rgb, deg);\n\n return this;\n }\n }]);\n\n return Color;\n}();\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nvar isPatternOrGradient = function isPatternOrGradient(value) {\n return value instanceof CanvasGradient || value instanceof CanvasPattern;\n};\n\nfunction color(value) {\n return isPatternOrGradient(value) ? value : index_esm(value);\n}\n\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nvar overrides = Object.create(null);\nvar descriptors = Object.create(null);\n\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n\n var keys = key.split('.');\n\n for (var i = 0, n = keys.length; i < n; ++i) {\n var k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n\n return node;\n}\n\nfunction _set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n\n return merge(getScope$1(root, ''), scope);\n}\n\nvar Defaults = /*#__PURE__*/function () {\n function Defaults(_descriptors) {\n _classCallCheck(this, Defaults);\n\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n\n this.devicePixelRatio = function (context) {\n return context.chart.platform.getDevicePixelRatio();\n };\n\n this.elements = {};\n this.events = ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n\n this.hoverBackgroundColor = function (ctx, options) {\n return getHoverColor(options.backgroundColor);\n };\n\n this.hoverBorderColor = function (ctx, options) {\n return getHoverColor(options.borderColor);\n };\n\n this.hoverColor = function (ctx, options) {\n return getHoverColor(options.color);\n };\n\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.describe(_descriptors);\n }\n\n _createClass(Defaults, [{\n key: \"set\",\n value: function set(scope, values) {\n return _set(this, scope, values);\n }\n }, {\n key: \"get\",\n value: function get(scope) {\n return getScope$1(this, scope);\n }\n }, {\n key: \"describe\",\n value: function describe(scope, values) {\n return _set(descriptors, scope, values);\n }\n }, {\n key: \"override\",\n value: function override(scope, values) {\n return _set(overrides, scope, values);\n }\n }, {\n key: \"route\",\n value: function route(scope, name, targetScope, targetName) {\n var _Object$definePropert;\n\n var scopeObject = getScope$1(this, scope);\n var targetScopeObject = getScope$1(this, targetScope);\n var privateName = '_' + name;\n Object.defineProperties(scopeObject, (_Object$definePropert = {}, _defineProperty(_Object$definePropert, privateName, {\n value: scopeObject[name],\n writable: true\n }), _defineProperty(_Object$definePropert, name, {\n enumerable: true,\n get: function get() {\n var local = this[privateName];\n var target = targetScopeObject[targetName];\n\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n\n return valueOrDefault(local, target);\n },\n set: function set(value) {\n this[privateName] = value;\n }\n }), _Object$definePropert));\n }\n }]);\n\n return Defaults;\n}();\n\nvar defaults = new Defaults({\n _scriptable: function _scriptable(name) {\n return !name.startsWith('on');\n },\n _indexable: function _indexable(name) {\n return name !== 'events';\n },\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n});\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n\nfunction _measureText(ctx, data, gc, longest, string) {\n var textWidth = data[string];\n\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n\n if (textWidth > longest) {\n longest = textWidth;\n }\n\n return longest;\n}\n\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n var data = cache.data = cache.data || {};\n var gc = cache.garbageCollect = cache.garbageCollect || [];\n\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n\n ctx.save();\n ctx.font = font;\n var longest = 0;\n var ilen = arrayOfThings.length;\n var i, j, jlen, thing, nestedThing;\n\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n\n ctx.restore();\n var gcLen = gc.length / 2;\n\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n\n gc.splice(0, gcLen);\n }\n\n return longest;\n}\n\nfunction _alignPixel(chart, pixel, width) {\n var devicePixelRatio = chart.currentDevicePixelRatio;\n var halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\nfunction clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\n\nfunction drawPoint(ctx, options, x, y) {\n var type, xOffset, yOffset, size, cornerRadius;\n var style = options.pointStyle;\n var rotation = options.rotation;\n var radius = options.radius;\n var rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && _typeof(style) === 'object') {\n type = style.toString();\n\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\n\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n\n rad += QUARTER_PI;\n\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n\n case 'crossRot':\n rad += QUARTER_PI;\n\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\n\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\n\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n\n if (mode === 'middle') {\n var midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n\n ctx.lineTo(target.x, target.y);\n}\n\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\n\nfunction renderText(ctx, text, x, y, font) {\n var opts = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n var lines = isArray(text) ? text : [text];\n var stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n var i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n\n ctx.restore();\n}\n\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\n\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n var metrics = ctx.measureText(line);\n var left = x - metrics.actualBoundingBoxLeft;\n var right = x + metrics.actualBoundingBoxRight;\n var top = y - metrics.actualBoundingBoxAscent;\n var bottom = y + metrics.actualBoundingBoxDescent;\n var yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\n\nfunction addRoundedRectPath(ctx, rect) {\n var x = rect.x,\n y = rect.y,\n w = rect.w,\n h = rect.h,\n radius = rect.radius;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nvar LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nvar FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\n\nfunction toLineHeight(value, size) {\n var matches = ('' + value).match(LINE_HEIGHT);\n\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n\n case '%':\n value /= 100;\n break;\n }\n\n return size * value;\n}\n\nvar numberOrZero = function numberOrZero(v) {\n return +v || 0;\n};\n\nfunction _readValueToProps(value, props) {\n var ret = {};\n var objProps = isObject(props);\n var keys = objProps ? Object.keys(props) : props;\n var read = isObject(value) ? objProps ? function (prop) {\n return valueOrDefault(value[prop], value[props[prop]]);\n } : function (prop) {\n return value[prop];\n } : function () {\n return value;\n };\n\n var _iterator2 = _createForOfIteratorHelper(keys),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var prop = _step2.value;\n ret[prop] = numberOrZero(read(prop));\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return ret;\n}\n\nfunction toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\nfunction toPadding(value) {\n var obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n var size = valueOrDefault(options.size, fallback.size);\n\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n\n var style = valueOrDefault(options.style, fallback.style);\n\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = '';\n }\n\n var font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size: size,\n style: style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n\nfunction resolve(inputs, context, index, info) {\n var cacheable = true;\n var i, ilen, value;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n\n if (value === undefined) {\n continue;\n }\n\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n\n return value;\n }\n }\n}\n\nfunction _addGrace(minmax, grace) {\n var min = minmax.min,\n max = minmax.max;\n return {\n min: min - Math.abs(toDimension(grace, min)),\n max: max + toDimension(grace, max)\n };\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || function (index) {\n return table[index] < value;\n };\n\n var hi = table.length - 1;\n var lo = 0;\n var mid;\n\n while (hi - lo > 1) {\n mid = lo + hi >> 1;\n\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n\n return {\n lo: lo,\n hi: hi\n };\n}\n\nvar _lookupByKey = function _lookupByKey(table, key, value) {\n return _lookup(table, value, function (index) {\n return table[index][key] < value;\n });\n};\n\nvar _rlookupByKey = function _rlookupByKey(table, key, value) {\n return _lookup(table, value, function (index) {\n return table[index][key] >= value;\n });\n};\n\nfunction _filterBetween(values, min, max) {\n var start = 0;\n var end = values.length;\n\n while (start < end && values[start] < min) {\n start++;\n }\n\n while (end > start && values[end - 1] > max) {\n end--;\n }\n\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\n\nvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach(function (key) {\n var method = '_onData' + _capitalize(key);\n\n var base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value: function value() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var res = base.apply(this, args);\n\n array._chartjs.listeners.forEach(function (object) {\n if (typeof object[method] === 'function') {\n object[method].apply(object, args);\n }\n });\n\n return res;\n }\n });\n });\n}\n\nfunction unlistenArrayEvents(array, listener) {\n var stub = array._chartjs;\n\n if (!stub) {\n return;\n }\n\n var listeners = stub.listeners;\n var index = listeners.indexOf(listener);\n\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach(function (key) {\n delete array[key];\n });\n delete array._chartjs;\n}\n\nfunction _arrayUnique(items) {\n var set = new Set();\n var i, ilen;\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n\n if (set.size === ilen) {\n return items;\n }\n\n return Array.from(set);\n}\n\nfunction _createResolver(scopes) {\n var _cache;\n\n var prefixes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [''];\n var rootScopes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : scopes;\n var fallback = arguments.length > 3 ? arguments[3] : undefined;\n var getTarget = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () {\n return scopes[0];\n };\n\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n\n var cache = (_cache = {}, _defineProperty(_cache, Symbol.toStringTag, 'Object'), _defineProperty(_cache, \"_cacheable\", true), _defineProperty(_cache, \"_scopes\", scopes), _defineProperty(_cache, \"_rootScopes\", rootScopes), _defineProperty(_cache, \"_fallback\", fallback), _defineProperty(_cache, \"_getTarget\", getTarget), _defineProperty(_cache, \"override\", function override(scope) {\n return _createResolver([scope].concat(_toConsumableArray(scopes)), prefixes, rootScopes, fallback);\n }), _cache);\n return new Proxy(cache, {\n deleteProperty: function deleteProperty(target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get: function get(target, prop) {\n return _cached(target, prop, function () {\n return _resolveWithPrefixes(prop, prefixes, scopes, target);\n });\n },\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf: function getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has: function has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys: function ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n set: function set(target, prop, value) {\n var storage = target._storage || (target._storage = getTarget());\n storage[prop] = value;\n delete target[prop];\n delete target._keys;\n return true;\n }\n });\n}\n\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n var cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: function setContext(ctx) {\n return _attachContext(proxy, ctx, subProxy, descriptorDefaults);\n },\n override: function override(scope) {\n return _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults);\n }\n };\n return new Proxy(cache, {\n deleteProperty: function deleteProperty(target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get: function get(target, prop, receiver) {\n return _cached(target, prop, function () {\n return _resolveWithContext(target, prop, receiver);\n });\n },\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf: function getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n has: function has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys: function ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n set: function set(target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\n\nfunction _descriptors(proxy) {\n var defaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n scriptable: true,\n indexable: true\n };\n\n var _proxy$_scriptable = proxy._scriptable,\n _scriptable = _proxy$_scriptable === void 0 ? defaults.scriptable : _proxy$_scriptable,\n _proxy$_indexable = proxy._indexable,\n _indexable = _proxy$_indexable === void 0 ? defaults.indexable : _proxy$_indexable,\n _proxy$_allKeys = proxy._allKeys,\n _allKeys = _proxy$_allKeys === void 0 ? defaults.allKeys : _proxy$_allKeys;\n\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : function () {\n return _scriptable;\n },\n isIndexable: isFunction(_indexable) ? _indexable : function () {\n return _indexable;\n }\n };\n}\n\nvar readKey = function readKey(prefix, name) {\n return prefix ? prefix + _capitalize(name) : name;\n};\n\nvar needsSubResolver = function needsSubResolver(prop, value) {\n return isObject(value) && prop !== 'adapters';\n};\n\nfunction _cached(target, prop, resolve) {\n var value = target[prop];\n\n if (defined(value)) {\n return value;\n }\n\n value = resolve();\n\n if (defined(value)) {\n target[prop] = value;\n }\n\n return value;\n}\n\nfunction _resolveWithContext(target, prop, receiver) {\n var _proxy = target._proxy,\n _context = target._context,\n _subProxy = target._subProxy,\n descriptors = target._descriptors;\n var value = _proxy[prop];\n\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n\n return value;\n}\n\nfunction _resolveScriptable(prop, value, target, receiver) {\n var _proxy = target._proxy,\n _context = target._context,\n _subProxy = target._subProxy,\n _stack = target._stack;\n\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n\n _stack.add(prop);\n\n value = value(_context, _subProxy || receiver);\n\n _stack[\"delete\"](prop);\n\n if (isObject(value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n\n return value;\n}\n\nfunction _resolveArray(prop, value, target, isIndexable) {\n var _proxy = target._proxy,\n _context = target._context,\n _subProxy = target._subProxy,\n descriptors = target._descriptors;\n\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n var arr = value;\n\n var scopes = _proxy._scopes.filter(function (s) {\n return s !== arr;\n });\n\n value = [];\n\n var _iterator3 = _createForOfIteratorHelper(arr),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var item = _step3.value;\n var resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n\n return value;\n}\n\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nvar getScope = function getScope(key, parent) {\n return key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n};\n\nfunction addScopes(set, parentScopes, key, parentFallback) {\n var _iterator4 = _createForOfIteratorHelper(parentScopes),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var parent = _step4.value;\n var scope = getScope(key, parent);\n\n if (scope) {\n set.add(scope);\n var fallback = resolveFallback(scope._fallback, key, scope);\n\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n return false;\n}\n\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n var rootScopes = resolver._rootScopes;\n var fallback = resolveFallback(resolver._fallback, prop, value);\n var allScopes = [].concat(_toConsumableArray(parentScopes), _toConsumableArray(rootScopes));\n var set = new Set();\n set.add(value);\n var key = addScopesFromKey(set, allScopes, prop, fallback || prop);\n\n if (key === null) {\n return false;\n }\n\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key);\n\n if (key === null) {\n return false;\n }\n }\n\n return _createResolver(Array.from(set), [''], rootScopes, fallback, function () {\n return subGetTarget(resolver, prop, value);\n });\n}\n\nfunction addScopesFromKey(set, allScopes, key, fallback) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback);\n }\n\n return key;\n}\n\nfunction subGetTarget(resolver, prop, value) {\n var parent = resolver._getTarget();\n\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n\n var target = parent[prop];\n\n if (isArray(target) && isObject(value)) {\n return value;\n }\n\n return target;\n}\n\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n var value;\n\n var _iterator5 = _createForOfIteratorHelper(prefixes),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var prefix = _step5.value;\n value = _resolve(readKey(prefix, prop), scopes);\n\n if (defined(value)) {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n}\n\nfunction _resolve(key, scopes) {\n var _iterator6 = _createForOfIteratorHelper(scopes),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var scope = _step6.value;\n\n if (!scope) {\n continue;\n }\n\n var value = scope[key];\n\n if (defined(value)) {\n return value;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n}\n\nfunction getKeysFromAllScopes(target) {\n var keys = target._keys;\n\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n\n return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes) {\n var set = new Set();\n\n var _iterator7 = _createForOfIteratorHelper(scopes),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var scope = _step7.value;\n\n var _iterator8 = _createForOfIteratorHelper(Object.keys(scope).filter(function (k) {\n return !k.startsWith('_');\n })),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var key = _step8.value;\n set.add(key);\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n return Array.from(set);\n}\n\nvar EPSILON = Number.EPSILON || 1e-14;\n\nvar getPoint = function getPoint(points, i) {\n return i < points.length && !points[i].skip && points[i];\n};\n\nvar getValueAxis = function getValueAxis(indexAxis) {\n return indexAxis === 'x' ? 'y' : 'x';\n};\n\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n var previous = firstPoint.skip ? middlePoint : firstPoint;\n var current = middlePoint;\n var next = afterPoint.skip ? middlePoint : afterPoint;\n var d01 = distanceBetweenPoints(current, previous);\n var d12 = distanceBetweenPoints(next, current);\n var s01 = d01 / (d01 + d12);\n var s12 = d12 / (d01 + d12);\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n var fa = t * s01;\n var fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n\nfunction monotoneAdjust(points, deltaK, mK) {\n var pointsLen = points.length;\n var alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n var pointAfter = getPoint(points, 0);\n\n for (var i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n\n if (squaredMagnitude <= 9) {\n continue;\n }\n\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\n\nfunction monotoneCompute(points, mK) {\n var indexAxis = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'x';\n var valueAxis = getValueAxis(indexAxis);\n var pointsLen = points.length;\n var delta, pointBefore, pointCurrent;\n var pointAfter = getPoint(points, 0);\n\n for (var i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n\n if (!pointCurrent) {\n continue;\n }\n\n var iPixel = pointCurrent[indexAxis];\n var vPixel = pointCurrent[valueAxis];\n\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[\"cp1\".concat(indexAxis)] = iPixel - delta;\n pointCurrent[\"cp1\".concat(valueAxis)] = vPixel - delta * mK[i];\n }\n\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[\"cp2\".concat(indexAxis)] = iPixel + delta;\n pointCurrent[\"cp2\".concat(valueAxis)] = vPixel + delta * mK[i];\n }\n }\n}\n\nfunction splineCurveMonotone(points) {\n var indexAxis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';\n var valueAxis = getValueAxis(indexAxis);\n var pointsLen = points.length;\n var deltaK = Array(pointsLen).fill(0);\n var mK = Array(pointsLen);\n var i, pointBefore, pointCurrent;\n var pointAfter = getPoint(points, 0);\n\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n\n if (!pointCurrent) {\n continue;\n }\n\n if (pointAfter) {\n var slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points, area) {\n var i, ilen, point, inArea, inAreaPrev;\n\n var inAreaNext = _isPointInArea(points[0], area);\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n\n if (!inArea) {\n continue;\n }\n\n point = points[i];\n\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n var i, ilen, point, controlPoints;\n\n if (options.spanGaps) {\n points = points.filter(function (pt) {\n return !pt.skip;\n });\n }\n\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n var prev = loop ? points[points.length - 1] : points[0];\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nfunction _getParentNode(domNode) {\n var parent = domNode.parentNode;\n\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n\n return parent;\n}\n\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n var valueInPixels;\n\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n\n if (styleValue.indexOf('%') !== -1) {\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n\n return valueInPixels;\n}\n\nvar getComputedStyle = function getComputedStyle(element) {\n return window.getComputedStyle(element, null);\n};\n\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\n\nvar positions = ['top', 'right', 'bottom', 'left'];\n\nfunction getPositionedStyle(styles, style, suffix) {\n var result = {};\n suffix = suffix ? '-' + suffix : '';\n\n for (var i = 0; i < 4; i++) {\n var pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\n\nvar useOffsetPos = function useOffsetPos(x, y, target) {\n return (x > 0 || y > 0) && (!target || !target.shadowRoot);\n};\n\nfunction getCanvasPosition(evt, canvas) {\n var e = evt[\"native\"] || evt;\n var touches = e.touches;\n var source = touches && touches.length ? touches[0] : e;\n var offsetX = source.offsetX,\n offsetY = source.offsetY;\n var box = false;\n var x, y;\n\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n var rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n\n return {\n x: x,\n y: y,\n box: box\n };\n}\n\nfunction getRelativePosition(evt, chart) {\n var canvas = chart.canvas,\n currentDevicePixelRatio = chart.currentDevicePixelRatio;\n var style = getComputedStyle(canvas);\n var borderBox = style.boxSizing === 'border-box';\n var paddings = getPositionedStyle(style, 'padding');\n var borders = getPositionedStyle(style, 'border', 'width');\n\n var _getCanvasPosition = getCanvasPosition(evt, canvas),\n x = _getCanvasPosition.x,\n y = _getCanvasPosition.y,\n box = _getCanvasPosition.box;\n\n var xOffset = paddings.left + (box && borders.left);\n var yOffset = paddings.top + (box && borders.top);\n var width = chart.width,\n height = chart.height;\n\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\n\nfunction getContainerSize(canvas, width, height) {\n var maxWidth, maxHeight;\n\n if (width === undefined || height === undefined) {\n var container = _getParentNode(canvas);\n\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n var rect = container.getBoundingClientRect();\n var containerStyle = getComputedStyle(container);\n var containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n var containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n\n return {\n width: width,\n height: height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\n\nvar round1 = function round1(v) {\n return Math.round(v * 10) / 10;\n};\n\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n var style = getComputedStyle(canvas);\n var margins = getPositionedStyle(style, 'margin');\n var maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n var maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n var containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n var width = containerSize.width,\n height = containerSize.height;\n\n if (style.boxSizing === 'content-box') {\n var borders = getPositionedStyle(style, 'border', 'width');\n var paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n\n if (width && !height) {\n height = round1(width / 2);\n }\n\n return {\n width: width,\n height: height\n };\n}\n\nfunction retinaScale(chart, forceRatio, forceStyle) {\n var pixelRatio = forceRatio || 1;\n var deviceHeight = Math.floor(chart.height * pixelRatio);\n var deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = deviceHeight / pixelRatio;\n chart.width = deviceWidth / pixelRatio;\n var canvas = chart.canvas;\n\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = \"\".concat(chart.height, \"px\");\n canvas.style.width = \"\".concat(chart.width, \"px\");\n }\n\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n\n return false;\n}\n\nvar supportsEventListenerOptions = function () {\n var passiveSupported = false;\n\n try {\n var options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {}\n\n return passiveSupported;\n}();\n\nfunction readUsedSize(element, property) {\n var value = getStyle(element, property);\n var matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n\nfunction _bezierInterpolation(p1, p2, t, mode) {\n var cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n var cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n\n var a = _pointInLine(p1, cp1, t);\n\n var b = _pointInLine(cp1, cp2, t);\n\n var c = _pointInLine(cp2, p2, t);\n\n var d = _pointInLine(a, b, t);\n\n var e = _pointInLine(b, c, t);\n\n return _pointInLine(d, e, t);\n}\n\nvar intlCache = new Map();\n\nfunction getNumberFormat(locale, options) {\n options = options || {};\n var cacheKey = locale + JSON.stringify(options);\n var formatter = intlCache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nvar getRightToLeftAdapter = function getRightToLeftAdapter(rectX, width) {\n return {\n x: function x(_x) {\n return rectX + rectX + width - _x;\n },\n setWidth: function setWidth(w) {\n width = w;\n },\n textAlign: function textAlign(align) {\n if (align === 'center') {\n return align;\n }\n\n return align === 'right' ? 'left' : 'right';\n },\n xPlus: function xPlus(x, value) {\n return x - value;\n },\n leftForLtr: function leftForLtr(x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\n\nvar getLeftToRightAdapter = function getLeftToRightAdapter() {\n return {\n x: function x(_x2) {\n return _x2;\n },\n setWidth: function setWidth(w) {},\n textAlign: function textAlign(align) {\n return align;\n },\n xPlus: function xPlus(x, value) {\n return x + value;\n },\n leftForLtr: function leftForLtr(x, _itemWidth) {\n return x;\n }\n };\n};\n\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nfunction overrideTextDirection(ctx, direction) {\n var style, original;\n\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [style.getPropertyValue('direction'), style.getPropertyPriority('direction')];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\n\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n\n return {\n between: function between(n, s, e) {\n return n >= Math.min(s, e) && n <= Math.max(e, s);\n },\n compare: function compare(a, b) {\n return a - b;\n },\n normalize: function normalize(x) {\n return x;\n }\n };\n}\n\nfunction normalizeSegment(_ref) {\n var start = _ref.start,\n end = _ref.end,\n count = _ref.count,\n loop = _ref.loop,\n style = _ref.style;\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style: style\n };\n}\n\nfunction getSegment(segment, points, bounds) {\n var property = bounds.property,\n startBound = bounds.start,\n endBound = bounds.end;\n\n var _propertyFn = propertyFn(property),\n between = _propertyFn.between,\n normalize = _propertyFn.normalize;\n\n var count = points.length;\n var start = segment.start,\n end = segment.end,\n loop = segment.loop;\n var i, ilen;\n\n if (loop) {\n start += count;\n end += count;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n\n start--;\n end--;\n }\n\n start %= count;\n end %= count;\n }\n\n if (end < start) {\n end += count;\n }\n\n return {\n start: start,\n end: end,\n loop: loop,\n style: segment.style\n };\n}\n\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n\n var property = bounds.property,\n startBound = bounds.start,\n endBound = bounds.end;\n var count = points.length;\n\n var _propertyFn2 = propertyFn(property),\n compare = _propertyFn2.compare,\n between = _propertyFn2.between,\n normalize = _propertyFn2.normalize;\n\n var _getSegment = getSegment(segment, points, bounds),\n start = _getSegment.start,\n end = _getSegment.end,\n loop = _getSegment.loop,\n style = _getSegment.style;\n\n var result = [];\n var inside = false;\n var subStart = null;\n var value, point, prevValue;\n\n var startIsBefore = function startIsBefore() {\n return between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n };\n\n var endIsBefore = function endIsBefore() {\n return compare(endBound, value) === 0 || between(endBound, prevValue, value);\n };\n\n var shouldStart = function shouldStart() {\n return inside || startIsBefore();\n };\n\n var shouldStop = function shouldStop() {\n return !inside || endIsBefore();\n };\n\n for (var i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n\n if (point.skip) {\n continue;\n }\n\n value = normalize(point[property]);\n\n if (value === prevValue) {\n continue;\n }\n\n inside = between(value, startBound, endBound);\n\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop: loop,\n count: count,\n style: style\n }));\n subStart = null;\n }\n\n prev = i;\n prevValue = value;\n }\n\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end: end,\n loop: loop,\n count: count,\n style: style\n }));\n }\n\n return result;\n}\n\nfunction _boundSegments(line, bounds) {\n var result = [];\n var segments = line.segments;\n\n for (var i = 0; i < segments.length; i++) {\n var sub = _boundSegment(segments[i], line.points, bounds);\n\n if (sub.length) {\n result.push.apply(result, _toConsumableArray(sub));\n }\n }\n\n return result;\n}\n\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n var start = 0;\n var end = count - 1;\n\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n\n while (start < count && points[start].skip) {\n start++;\n }\n\n start %= count;\n\n if (loop) {\n end += start;\n }\n\n while (end > start && points[end % count].skip) {\n end--;\n }\n\n end %= count;\n return {\n start: start,\n end: end\n };\n}\n\nfunction solidSegments(points, start, max, loop) {\n var count = points.length;\n var result = [];\n var last = start;\n var prev = points[start];\n var end;\n\n for (end = start + 1; end <= max; ++end) {\n var cur = points[end % count];\n\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop: loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n\n if (prev.skip) {\n start = end;\n }\n }\n\n prev = cur;\n }\n\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop: loop\n });\n }\n\n return result;\n}\n\nfunction _computeSegments(line, segmentOptions) {\n var points = line.points;\n var spanGaps = line.options.spanGaps;\n var count = points.length;\n\n if (!count) {\n return [];\n }\n\n var loop = !!line._loop;\n\n var _findStartAndEnd = findStartAndEnd(points, count, loop, spanGaps),\n start = _findStartAndEnd.start,\n end = _findStartAndEnd.end;\n\n if (spanGaps === true) {\n return splitByStyles(line, [{\n start: start,\n end: end,\n loop: loop\n }], points, segmentOptions);\n }\n\n var max = end < start ? end + count : end;\n var completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n var baseStyle = readStyle(line.options);\n var count = points.length;\n var result = [];\n var start = segments[0].start;\n var i = start;\n\n var _iterator9 = _createForOfIteratorHelper(segments),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var segment = _step9.value;\n var prevStyle = baseStyle;\n var prev = points[start % count];\n var style = void 0;\n\n for (i = start + 1; i <= segment.end; i++) {\n var pt = points[i % count];\n style = readStyle(segmentOptions.setContext({\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex: line._datasetIndex\n }));\n\n if (styleChanged(style, prevStyle)) {\n result.push({\n start: start,\n end: i - 1,\n loop: segment.loop,\n style: prevStyle\n });\n prevStyle = style;\n start = i - 1;\n }\n\n prev = pt;\n prevStyle = style;\n }\n\n if (start < i - 1) {\n result.push({\n start: start,\n end: i - 1,\n loop: segment.loop,\n style: style\n });\n start = i - 1;\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n return result;\n}\n\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\n\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { overrides as $, toPadding as A, each as B, getMaximumSize as C, _getParentNode as D, readUsedSize as E, throttled as F, supportsEventListenerOptions as G, HALF_PI as H, _isDomSupported as I, log10 as J, _factorize as K, finiteOrDefault as L, callback as M, _addGrace as N, toDegrees as O, PI as P, _measureText as Q, _int16Range as R, _alignPixel as S, TAU as T, clipArea as U, renderText as V, unclipArea as W, toFont as X, _toLeftRightCenter as Y, _alignStartEnd as Z, _arrayUnique as _, resolve as a, merge as a0, _capitalize as a1, descriptors as a2, isFunction as a3, _attachContext as a4, _createResolver as a5, _descriptors as a6, mergeIf as a7, uid as a8, debounce as a9, _setMinAndMaxByKey as aA, niceNum as aB, almostWhole as aC, almostEquals as aD, _decimalPlaces as aE, _longestText as aF, _filterBetween as aG, _lookup as aH, getHoverColor as aI, clone$1 as aJ, _merger as aK, _mergerIf as aL, _deprecated as aM, toFontString as aN, splineCurve as aO, splineCurveMonotone as aP, getStyle as aQ, fontString as aR, toLineHeight as aS, PITAU as aT, INFINITY as aU, RAD_PER_DEG as aV, QUARTER_PI as aW, TWO_THIRDS_PI as aX, _angleDiff as aY, retinaScale as aa, clearCanvas as ab, setsEqual as ac, _elementsEqual as ad, getAngleFromPoint as ae, _readValueToProps as af, _updateBezierControlPoints as ag, _computeSegments as ah, _boundSegments as ai, _steppedInterpolation as aj, _bezierInterpolation as ak, _pointInLine as al, _steppedLineTo as am, _bezierCurveTo as an, drawPoint as ao, addRoundedRectPath as ap, toTRBL as aq, toTRBLCorners as ar, _boundSegment as as, _normalizeAngle as at, getRtlAdapter as au, overrideTextDirection as av, _textX as aw, restoreTextDirection as ax, noop as ay, distanceBetweenPoints as az, isArray as b, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, isNullOrUndef as j, toPercentage as k, listenArrayEvents as l, toDimension as m, formatNumber as n, _angleBetween as o, isNumber as p, _limitValue as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _lookupByKey as w, getRelativePosition as x, _isPointInArea as y, _rlookupByKey as z };","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/*!\n * Chart.js v3.5.1\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as _color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as isNullOrUndef, _ as _arrayUnique, t as toRadians, k as toPercentage, m as toDimension, T as TAU, n as formatNumber, o as _angleBetween, H as HALF_PI, P as PI, p as isNumber, q as _limitValue, w as _lookupByKey, x as getRelativePosition$1, y as _isPointInArea, z as _rlookupByKey, A as toPadding, B as each, C as _getMaximumSize, D as _getParentNode, E as readUsedSize, F as throttled, G as supportsEventListenerOptions, I as _isDomSupported, J as log10, K as _factorize, L as finiteOrDefault, M as callback, N as _addGrace, O as toDegrees, Q as _measureText, R as _int16Range, S as _alignPixel, U as clipArea, V as renderText, W as unclipArea, X as toFont, Y as _toLeftRightCenter, Z as _alignStartEnd, $ as overrides, a0 as merge, a1 as _capitalize, a2 as descriptors, a3 as isFunction, a4 as _attachContext, a5 as _createResolver, a6 as _descriptors, a7 as mergeIf, a8 as uid, a9 as debounce, aa as retinaScale, ab as clearCanvas, ac as setsEqual, ad as _elementsEqual, ae as getAngleFromPoint, af as _readValueToProps, ag as _updateBezierControlPoints, ah as _computeSegments, ai as _boundSegments, aj as _steppedInterpolation, ak as _bezierInterpolation, al as _pointInLine, am as _steppedLineTo, an as _bezierCurveTo, ao as drawPoint, ap as addRoundedRectPath, aq as toTRBL, ar as toTRBLCorners, as as _boundSegment, at as _normalizeAngle, au as getRtlAdapter, av as overrideTextDirection, aw as _textX, ax as restoreTextDirection, ay as noop, az as distanceBetweenPoints, aA as _setMinAndMaxByKey, aB as niceNum, aC as almostWhole, aD as almostEquals, aE as _decimalPlaces, aF as _longestText, aG as _filterBetween, aH as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nvar Animator = /*#__PURE__*/function () {\n function Animator() {\n _classCallCheck(this, Animator);\n\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n _createClass(Animator, [{\n key: \"_notify\",\n value: function _notify(chart, anims, date, type) {\n var callbacks = anims.listeners[type];\n var numSteps = anims.duration;\n callbacks.forEach(function (fn) {\n return fn({\n chart: chart,\n initial: anims.initial,\n numSteps: numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n });\n });\n }\n }, {\n key: \"_refresh\",\n value: function _refresh() {\n var me = this;\n\n if (me._request) {\n return;\n }\n\n me._running = true;\n me._request = requestAnimFrame.call(window, function () {\n me._update();\n\n me._request = null;\n\n if (me._running) {\n me._refresh();\n }\n });\n }\n }, {\n key: \"_update\",\n value: function _update() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Date.now();\n var me = this;\n var remaining = 0;\n\n me._charts.forEach(function (anims, chart) {\n if (!anims.running || !anims.items.length) {\n return;\n }\n\n var items = anims.items;\n var i = items.length - 1;\n var draw = false;\n var item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n\n me._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n\n me._notify(chart, anims, date, 'complete');\n\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n me._lastDate = date;\n\n if (remaining === 0) {\n me._running = false;\n }\n }\n }, {\n key: \"_getAnims\",\n value: function _getAnims(chart) {\n var charts = this._charts;\n var anims = charts.get(chart);\n\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n\n return anims;\n }\n }, {\n key: \"listen\",\n value: function listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n }, {\n key: \"add\",\n value: function add(chart, items) {\n var _this$_getAnims$items;\n\n if (!items || !items.length) {\n return;\n }\n\n (_this$_getAnims$items = this._getAnims(chart).items).push.apply(_this$_getAnims$items, _toConsumableArray(items));\n }\n }, {\n key: \"has\",\n value: function has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n }, {\n key: \"start\",\n value: function start(chart) {\n var anims = this._charts.get(chart);\n\n if (!anims) {\n return;\n }\n\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce(function (acc, cur) {\n return Math.max(acc, cur._duration);\n }, 0);\n\n this._refresh();\n }\n }, {\n key: \"running\",\n value: function running(chart) {\n if (!this._running) {\n return false;\n }\n\n var anims = this._charts.get(chart);\n\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n\n return true;\n }\n }, {\n key: \"stop\",\n value: function stop(chart) {\n var anims = this._charts.get(chart);\n\n if (!anims || !anims.items.length) {\n return;\n }\n\n var items = anims.items;\n var i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n\n anims.items = [];\n\n this._notify(chart, anims, Date.now(), 'complete');\n }\n }, {\n key: \"remove\",\n value: function remove(chart) {\n return this._charts[\"delete\"](chart);\n }\n }]);\n\n return Animator;\n}();\n\nvar animator = new Animator();\nvar transparent = 'transparent';\nvar interpolators = {\n \"boolean\": function boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color: function color(from, to, factor) {\n var c0 = _color(from || transparent);\n\n var c1 = c0.valid && _color(to || transparent);\n\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number: function number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nvar Animation = /*#__PURE__*/function () {\n function Animation(cfg, target, prop, to) {\n _classCallCheck(this, Animation);\n\n var currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n var from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || _typeof(from)];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n _createClass(Animation, [{\n key: \"active\",\n value: function active() {\n return this._active;\n }\n }, {\n key: \"update\",\n value: function update(cfg, to, date) {\n var me = this;\n\n if (me._active) {\n me._notify(false);\n\n var currentValue = me._target[me._prop];\n var elapsed = date - me._start;\n var remain = me._duration - elapsed;\n me._start = date;\n me._duration = Math.floor(Math.max(remain, cfg.duration));\n me._total += elapsed;\n me._loop = !!cfg.loop;\n me._to = resolve([cfg.to, to, currentValue, cfg.from]);\n me._from = resolve([cfg.from, currentValue, to]);\n }\n }\n }, {\n key: \"cancel\",\n value: function cancel() {\n var me = this;\n\n if (me._active) {\n me.tick(Date.now());\n me._active = false;\n\n me._notify(false);\n }\n }\n }, {\n key: \"tick\",\n value: function tick(date) {\n var me = this;\n var elapsed = date - me._start;\n var duration = me._duration;\n var prop = me._prop;\n var from = me._from;\n var loop = me._loop;\n var to = me._to;\n var factor;\n me._active = from !== to && (loop || elapsed < duration);\n\n if (!me._active) {\n me._target[prop] = to;\n\n me._notify(true);\n\n return;\n }\n\n if (elapsed < 0) {\n me._target[prop] = from;\n return;\n }\n\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = me._easing(Math.min(1, Math.max(0, factor)));\n me._target[prop] = me._fn(from, to, factor);\n }\n }, {\n key: \"wait\",\n value: function wait() {\n var promises = this._promises || (this._promises = []);\n return new Promise(function (res, rej) {\n promises.push({\n res: res,\n rej: rej\n });\n });\n }\n }, {\n key: \"_notify\",\n value: function _notify(resolved) {\n var method = resolved ? 'res' : 'rej';\n var promises = this._promises || [];\n\n for (var i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n }]);\n\n return Animation;\n}();\n\nvar numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nvar colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n});\nvar animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: function _scriptable(name) {\n return name !== 'onProgress' && name !== 'onComplete' && name !== 'fn';\n }\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n});\ndefaults.describe('animations', {\n _fallback: 'animation'\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: function fn(v) {\n return v | 0;\n }\n }\n }\n }\n});\n\nvar Animations = /*#__PURE__*/function () {\n function Animations(chart, config) {\n _classCallCheck(this, Animations);\n\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n _createClass(Animations, [{\n key: \"configure\",\n value: function configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n var animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(function (key) {\n var cfg = config[key];\n\n if (!isObject(cfg)) {\n return;\n }\n\n var resolved = {};\n\n var _iterator = _createForOfIteratorHelper(animationOptions),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var option = _step.value;\n resolved[option] = cfg[option];\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach(function (prop) {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n }, {\n key: \"_animateOptions\",\n value: function _animateOptions(target, values) {\n var newOptions = values.options;\n var options = resolveTargetOptions(target, newOptions);\n\n if (!options) {\n return [];\n }\n\n var animations = this._createAnimations(options, newOptions);\n\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(function () {\n target.options = newOptions;\n }, function () {});\n }\n\n return animations;\n }\n }, {\n key: \"_createAnimations\",\n value: function _createAnimations(target, values) {\n var animatedProps = this._properties;\n var animations = [];\n var running = target.$animations || (target.$animations = {});\n var props = Object.keys(values);\n var date = Date.now();\n var i;\n\n for (i = props.length - 1; i >= 0; --i) {\n var prop = props[i];\n\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push.apply(animations, _toConsumableArray(this._animateOptions(target, values)));\n continue;\n }\n\n var value = values[prop];\n var animation = running[prop];\n var cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n\n return animations;\n }\n }, {\n key: \"update\",\n value: function update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n\n var animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n }]);\n\n return Animations;\n}();\n\nfunction awaitAll(animations, properties) {\n var running = [];\n var keys = Object.keys(properties);\n\n for (var i = 0; i < keys.length; i++) {\n var anim = animations[keys[i]];\n\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n\n var options = target.options;\n\n if (!options) {\n target.options = newOptions;\n return;\n }\n\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n var opts = scale && scale.options || {};\n var reverse = opts.reverse;\n var min = opts.min === undefined ? allowedOverflow : 0;\n var max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n\n var x = scaleClip(xScale, allowedOverflow);\n var y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n var t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n var keys = [];\n\n var metasets = chart._getSortedDatasetMetas(filterVisible);\n\n var i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n\n return keys;\n}\n\nfunction _applyStack(stack, value, dsIndex, options) {\n var keys = stack.keys;\n var singleMode = options.mode === 'single';\n var i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n\n break;\n }\n\n otherValue = stack.values[datasetIndex];\n\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n\n return value;\n}\n\nfunction convertObjectDataToArray(data) {\n var keys = Object.keys(data);\n var adata = new Array(keys.length);\n var i, ilen, key;\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n var stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return \"\".concat(indexScale.id, \".\").concat(valueScale.id, \".\").concat(meta.stack || meta.type);\n}\n\nfunction getUserBounds(scale) {\n var _scale$getUserBounds = scale.getUserBounds(),\n min = _scale$getUserBounds.min,\n max = _scale$getUserBounds.max,\n minDefined = _scale$getUserBounds.minDefined,\n maxDefined = _scale$getUserBounds.maxDefined;\n\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n var subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive) {\n var _iterator2 = _createForOfIteratorHelper(vScale.getMatchingVisibleMetas('bar').reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var meta = _step2.value;\n var value = stack[meta.index];\n\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n var chart = controller.chart,\n meta = controller._cachedMeta;\n var stacks = chart._stacks || (chart._stacks = {});\n var iScale = meta.iScale,\n vScale = meta.vScale,\n datasetIndex = meta.index;\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var key = getStackKey(iScale, vScale, meta);\n var ilen = parsed.length;\n var stack;\n\n for (var i = 0; i < ilen; ++i) {\n var item = parsed[i];\n var index = item[iAxis],\n value = item[vAxis];\n var itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true);\n stack._bottom = getLastIndexInStack(stack, vScale, false);\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n var scales = chart.scales;\n return Object.keys(scales).filter(function (key) {\n return scales[key].axis === axis;\n }).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return Object.assign(Object.create(parent), {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index: index,\n mode: 'default',\n type: 'dataset'\n });\n}\n\nfunction createDataContext(parent, index, element) {\n return Object.assign(Object.create(parent), {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element: element,\n index: index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n var datasetIndex = meta.controller.index;\n var axis = meta.vScale && meta.vScale.axis;\n\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n\n var _iterator3 = _createForOfIteratorHelper(items),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var parsed = _step3.value;\n var stacks = parsed._stacks;\n\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n\n delete stacks[axis][datasetIndex];\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n}\n\nvar isDirectUpdateMode = function isDirectUpdateMode(mode) {\n return mode === 'reset' || mode === 'none';\n};\n\nvar cloneIfNotShared = function cloneIfNotShared(cached, shared) {\n return shared ? cached : Object.assign({}, cached);\n};\n\nvar DatasetController = /*#__PURE__*/function () {\n function DatasetController(chart, datasetIndex) {\n _classCallCheck(this, DatasetController);\n\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n\n _createClass(DatasetController, [{\n key: \"initialize\",\n value: function initialize() {\n var me = this;\n var meta = me._cachedMeta;\n me.configure();\n me.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n me.addElements();\n }\n }, {\n key: \"updateIndex\",\n value: function updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n\n this.index = datasetIndex;\n }\n }, {\n key: \"linkScales\",\n value: function linkScales() {\n var me = this;\n var chart = me.chart;\n var meta = me._cachedMeta;\n var dataset = me.getDataset();\n\n var chooseId = function chooseId(axis, x, y, r) {\n return axis === 'x' ? x : axis === 'r' ? r : y;\n };\n\n var xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n var yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n var rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n var indexAxis = meta.indexAxis;\n var iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n var vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = me.getScaleForId(xid);\n meta.yScale = me.getScaleForId(yid);\n meta.rScale = me.getScaleForId(rid);\n meta.iScale = me.getScaleForId(iid);\n meta.vScale = me.getScaleForId(vid);\n }\n }, {\n key: \"getDataset\",\n value: function getDataset() {\n return this.chart.data.datasets[this.index];\n }\n }, {\n key: \"getMeta\",\n value: function getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n }, {\n key: \"getScaleForId\",\n value: function getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n }, {\n key: \"_getOtherScale\",\n value: function _getOtherScale(scale) {\n var meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this._update('reset');\n }\n }, {\n key: \"_destroy\",\n value: function _destroy() {\n var meta = this._cachedMeta;\n\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n }, {\n key: \"_dataCheck\",\n value: function _dataCheck() {\n var me = this;\n var dataset = me.getDataset();\n var data = dataset.data || (dataset.data = []);\n var _data = me._data;\n\n if (isObject(data)) {\n me._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, me);\n var meta = me._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, me);\n }\n\n me._syncList = [];\n me._data = data;\n }\n }\n }, {\n key: \"addElements\",\n value: function addElements() {\n var me = this;\n var meta = me._cachedMeta;\n\n me._dataCheck();\n\n if (me.datasetElementType) {\n meta.dataset = new me.datasetElementType();\n }\n }\n }, {\n key: \"buildOrUpdateElements\",\n value: function buildOrUpdateElements(resetNewElements) {\n var me = this;\n var meta = me._cachedMeta;\n var dataset = me.getDataset();\n var stackChanged = false;\n\n me._dataCheck();\n\n var oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n me._resyncElements(resetNewElements);\n\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(me, meta._parsed);\n }\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var me = this;\n var config = me.chart.config;\n var scopeKeys = config.datasetScopeKeys(me._type);\n var scopes = config.getOptionScopes(me.getDataset(), scopeKeys, true);\n me.options = config.createResolver(scopes, me.getContext());\n me._parsing = me.options.parsing;\n }\n }, {\n key: \"parse\",\n value: function parse(start, count) {\n var me = this;\n var meta = me._cachedMeta,\n data = me._data;\n var iScale = meta.iScale,\n _stacked = meta._stacked;\n var iAxis = iScale.axis;\n var sorted = start === 0 && count === data.length ? true : meta._sorted;\n var prev = start > 0 && meta._parsed[start - 1];\n var i, cur, parsed;\n\n if (me._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = me.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = me.parseObjectData(meta, data, start, count);\n } else {\n parsed = me.parsePrimitiveData(meta, data, start, count);\n }\n\n var isNotInOrderComparedToPrev = function isNotInOrderComparedToPrev() {\n return cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n };\n\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n\n prev = cur;\n }\n }\n\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(me, parsed);\n }\n }\n }, {\n key: \"parsePrimitiveData\",\n value: function parsePrimitiveData(meta, data, start, count) {\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var labels = iScale.getLabels();\n var singleScale = iScale === vScale;\n var parsed = new Array(count);\n var i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n var _parsed$i;\n\n index = i + start;\n parsed[i] = (_parsed$i = {}, _defineProperty(_parsed$i, iAxis, singleScale || iScale.parse(labels[index], index)), _defineProperty(_parsed$i, vAxis, vScale.parse(data[index], index)), _parsed$i);\n }\n\n return parsed;\n }\n }, {\n key: \"parseArrayData\",\n value: function parseArrayData(meta, data, start, count) {\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var parsed = new Array(count);\n var i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n\n return parsed;\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var _this$_parsing = this._parsing,\n _this$_parsing$xAxisK = _this$_parsing.xAxisKey,\n xAxisKey = _this$_parsing$xAxisK === void 0 ? 'x' : _this$_parsing$xAxisK,\n _this$_parsing$yAxisK = _this$_parsing.yAxisKey,\n yAxisKey = _this$_parsing$yAxisK === void 0 ? 'y' : _this$_parsing$yAxisK;\n var parsed = new Array(count);\n var i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n\n return parsed;\n }\n }, {\n key: \"getParsed\",\n value: function getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n }, {\n key: \"getDataElement\",\n value: function getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n }, {\n key: \"applyStack\",\n value: function applyStack(scale, parsed, mode) {\n var chart = this.chart;\n var meta = this._cachedMeta;\n var value = parsed[scale.axis];\n var stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return _applyStack(stack, value, meta.index, {\n mode: mode\n });\n }\n }, {\n key: \"updateRangeFromParsed\",\n value: function updateRangeFromParsed(range, scale, parsed, stack) {\n var parsedValue = parsed[scale.axis];\n var value = parsedValue === null ? NaN : parsedValue;\n var values = stack && parsed._stacks[scale.axis];\n\n if (stack && values) {\n stack.values = values;\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n value = _applyStack(stack, parsedValue, this._cachedMeta.index, {\n all: true\n });\n }\n\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n }, {\n key: \"getMinMax\",\n value: function getMinMax(scale, canStack) {\n var me = this;\n var meta = me._cachedMeta;\n var _parsed = meta._parsed;\n var sorted = meta._sorted && scale === meta.iScale;\n var ilen = _parsed.length;\n\n var otherScale = me._getOtherScale(scale);\n\n var stack = canStack && meta._stacked && {\n keys: getSortedDatasetIndices(me.chart, true),\n values: null\n };\n var range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n\n var _getUserBounds = getUserBounds(otherScale),\n otherMin = _getUserBounds.min,\n otherMax = _getUserBounds.max;\n\n var i, value, parsed, otherValue;\n\n function _skip() {\n parsed = _parsed[i];\n value = parsed[scale.axis];\n otherValue = parsed[otherScale.axis];\n return !isNumberFinite(value) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n\n me.updateRangeFromParsed(range, scale, parsed, stack);\n\n if (sorted) {\n break;\n }\n }\n\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n\n me.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n\n return range;\n }\n }, {\n key: \"getAllParsedValues\",\n value: function getAllParsedValues(scale) {\n var parsed = this._cachedMeta._parsed;\n var values = [];\n var i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n\n return values;\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n return false;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var me = this;\n var meta = me._cachedMeta;\n var iScale = meta.iScale;\n var vScale = meta.vScale;\n var parsed = me.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n }, {\n key: \"_update\",\n value: function _update(mode) {\n var me = this;\n var meta = me._cachedMeta;\n me.configure();\n me._cachedDataOpts = {};\n me.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(me.options.clip, defaultClip(meta.xScale, meta.yScale, me.getMaxOverflow())));\n }\n }, {\n key: \"update\",\n value: function update(mode) {}\n }, {\n key: \"draw\",\n value: function draw() {\n var me = this;\n var ctx = me._ctx;\n var chart = me.chart;\n var meta = me._cachedMeta;\n var elements = meta.data || [];\n var area = chart.chartArea;\n var active = [];\n var start = me._drawStart || 0;\n var count = me._drawCount || elements.length - start;\n var i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n var element = elements[i];\n\n if (element.hidden) {\n continue;\n }\n\n if (element.active) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n }, {\n key: \"getStyle\",\n value: function getStyle(index, active) {\n var mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n }, {\n key: \"getContext\",\n value: function getContext(index, active, mode) {\n var me = this;\n var dataset = me.getDataset();\n var context;\n\n if (index >= 0 && index < me._cachedMeta.data.length) {\n var element = me._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(me.getContext(), index, element));\n context.parsed = me.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = me.$context || (me.$context = createDatasetContext(me.chart.getContext(), me.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = me.index;\n }\n\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n }, {\n key: \"resolveDatasetElementOptions\",\n value: function resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n }, {\n key: \"resolveDataElementOptions\",\n value: function resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n }, {\n key: \"_resolveElementOptions\",\n value: function _resolveElementOptions(elementType) {\n var mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var me = this;\n var active = mode === 'active';\n var cache = me._cachedDataOpts;\n var cacheKey = elementType + '-' + mode;\n var cached = cache[cacheKey];\n var sharing = me.enableOptionSharing && defined(index);\n\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n\n var config = me.chart.config;\n var scopeKeys = config.datasetElementScopeKeys(me._type, elementType);\n var prefixes = active ? [\"\".concat(elementType, \"Hover\"), 'hover', elementType, ''] : [elementType, ''];\n var scopes = config.getOptionScopes(me.getDataset(), scopeKeys);\n var names = Object.keys(defaults.elements[elementType]);\n\n var context = function context() {\n return me.getContext(index, active);\n };\n\n var values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n }, {\n key: \"_resolveAnimations\",\n value: function _resolveAnimations(index, transition, active) {\n var me = this;\n var chart = me.chart;\n var cache = me._cachedDataOpts;\n var cacheKey = \"animation-\".concat(transition);\n var cached = cache[cacheKey];\n\n if (cached) {\n return cached;\n }\n\n var options;\n\n if (chart.options.animation !== false) {\n var config = me.chart.config;\n var scopeKeys = config.datasetAnimationScopeKeys(me._type, transition);\n var scopes = config.getOptionScopes(me.getDataset(), scopeKeys);\n options = config.createResolver(scopes, me.getContext(index, active, transition));\n }\n\n var animations = new Animations(chart, options && options.animations);\n\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n\n return animations;\n }\n }, {\n key: \"getSharedOptions\",\n value: function getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n }, {\n key: \"includeOptions\",\n value: function includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n }, {\n key: \"updateElement\",\n value: function updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n }, {\n key: \"updateSharedOptions\",\n value: function updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n }, {\n key: \"_setStyle\",\n value: function _setStyle(element, index, mode, active) {\n element.active = active;\n var options = this.getStyle(index, active);\n\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n }, {\n key: \"removeHoverStyle\",\n value: function removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n }, {\n key: \"setHoverStyle\",\n value: function setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n }, {\n key: \"_removeDatasetHoverStyle\",\n value: function _removeDatasetHoverStyle() {\n var element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n }, {\n key: \"_setDatasetHoverStyle\",\n value: function _setDatasetHoverStyle() {\n var element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n }, {\n key: \"_resyncElements\",\n value: function _resyncElements(resetNewElements) {\n var me = this;\n var data = me._data;\n var elements = me._cachedMeta.data;\n\n var _iterator4 = _createForOfIteratorHelper(me._syncList),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _ref3 = _step4.value;\n\n var _ref2 = _slicedToArray(_ref3, 3);\n\n var method = _ref2[0];\n var arg1 = _ref2[1];\n var arg2 = _ref2[2];\n me[method](arg1, arg2);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n me._syncList = [];\n var numMeta = elements.length;\n var numData = data.length;\n var count = Math.min(numData, numMeta);\n\n if (count) {\n me.parse(0, count);\n }\n\n if (numData > numMeta) {\n me._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n me._removeElements(numData, numMeta - numData);\n }\n }\n }, {\n key: \"_insertElements\",\n value: function _insertElements(start, count) {\n var resetNewElements = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var me = this;\n var meta = me._cachedMeta;\n var data = meta.data;\n var end = start + count;\n var i;\n\n var move = function move(arr) {\n arr.length += count;\n\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new me.dataElementType();\n }\n\n if (me._parsing) {\n move(meta._parsed);\n }\n\n me.parse(start, count);\n\n if (resetNewElements) {\n me.updateElements(data, start, count, 'reset');\n }\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(element, start, count, mode) {}\n }, {\n key: \"_removeElements\",\n value: function _removeElements(start, count) {\n var me = this;\n var meta = me._cachedMeta;\n\n if (me._parsing) {\n var removed = meta._parsed.splice(start, count);\n\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n\n meta.data.splice(start, count);\n }\n }, {\n key: \"_sync\",\n value: function _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n var _args2 = _slicedToArray(args, 3),\n method = _args2[0],\n arg1 = _args2[1],\n arg2 = _args2[2];\n\n this[method](arg1, arg2);\n }\n }\n }, {\n key: \"_onDataPush\",\n value: function _onDataPush() {\n var count = arguments.length;\n\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n }, {\n key: \"_onDataPop\",\n value: function _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n }, {\n key: \"_onDataShift\",\n value: function _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n }, {\n key: \"_onDataSplice\",\n value: function _onDataSplice(start, count) {\n this._sync(['_removeElements', start, count]);\n\n this._sync(['_insertElements', start, arguments.length - 2]);\n }\n }, {\n key: \"_onDataUnshift\",\n value: function _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n }]);\n\n return DatasetController;\n}();\n\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale) {\n if (!scale._cache.$bar) {\n var metas = scale.getMatchingVisibleMetas('bar');\n var values = [];\n\n for (var i = 0, ilen = metas.length; i < ilen; i++) {\n values = values.concat(metas[i].controller.getAllParsedValues(scale));\n }\n\n scale._cache.$bar = _arrayUnique(values.sort(function (a, b) {\n return a - b;\n }));\n }\n\n return scale._cache.$bar;\n}\n\nfunction computeMinSampleSize(scale) {\n var values = getAllScaleValues(scale);\n var min = scale._length;\n var i, ilen, curr, prev;\n\n var updateMinAndPrev = function updateMinAndPrev() {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n var thickness = options.barThickness;\n var size, ratio;\n\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n\n return {\n chunk: size / stackCount,\n ratio: ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n var pixels = ruler.pixels;\n var curr = pixels[index];\n var prev = index > 0 ? pixels[index - 1] : null;\n var next = index < pixels.length - 1 ? pixels[index + 1] : null;\n var percent = options.categoryPercentage;\n\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n next = curr + curr - prev;\n }\n\n var start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n var size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start: start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n var startValue = vScale.parse(entry[0], i);\n var endValue = vScale.parse(entry[1], i);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n var barStart = min;\n var barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart: barStart,\n barEnd: barEnd,\n start: startValue,\n end: endValue,\n min: min,\n max: max\n };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n var iScale = meta.iScale;\n var vScale = meta.vScale;\n var labels = iScale.getLabels();\n var singleScale = iScale === vScale;\n var parsed = [];\n var i, ilen, item, entry;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n var reverse, start, end, top, bottom;\n\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n\n return {\n start: start,\n end: end,\n reverse: reverse,\n top: top,\n bottom: bottom\n };\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n var edge = options.borderSkipped;\n var res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n var _borderProps = borderProps(properties),\n start = _borderProps.start,\n end = _borderProps.end,\n reverse = _borderProps.reverse,\n top = _borderProps.top,\n bottom = _borderProps.bottom;\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nvar BarController = /*#__PURE__*/function (_DatasetController) {\n _inherits(BarController, _DatasetController);\n\n var _super = _createSuper(BarController);\n\n function BarController() {\n _classCallCheck(this, BarController);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(BarController, [{\n key: \"parsePrimitiveData\",\n value: function parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n }, {\n key: \"parseArrayData\",\n value: function parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var _this$_parsing2 = this._parsing,\n _this$_parsing2$xAxis = _this$_parsing2.xAxisKey,\n xAxisKey = _this$_parsing2$xAxis === void 0 ? 'x' : _this$_parsing2$xAxis,\n _this$_parsing2$yAxis = _this$_parsing2.yAxisKey,\n yAxisKey = _this$_parsing2$yAxis === void 0 ? 'y' : _this$_parsing2$yAxis;\n var iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n var vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n var parsed = [];\n var i, ilen, item, obj;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n\n return parsed;\n }\n }, {\n key: \"updateRangeFromParsed\",\n value: function updateRangeFromParsed(range, scale, parsed, stack) {\n _get(_getPrototypeOf(BarController.prototype), \"updateRangeFromParsed\", this).call(this, range, scale, parsed, stack);\n\n var custom = parsed._custom;\n\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n return 0;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var me = this;\n var meta = me._cachedMeta;\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var parsed = me.getParsed(index);\n var custom = parsed._custom;\n var value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value: value\n };\n }\n }, {\n key: \"initialize\",\n value: function initialize() {\n var me = this;\n me.enableOptionSharing = true;\n\n _get(_getPrototypeOf(BarController.prototype), \"initialize\", this).call(this);\n\n var meta = me._cachedMeta;\n meta.stack = me.getDataset().stack;\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var meta = me._cachedMeta;\n me.updateElements(meta.data, 0, meta.data.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(bars, start, count, mode) {\n var me = this;\n var reset = mode === 'reset';\n var index = me.index,\n vScale = me._cachedMeta.vScale;\n var base = vScale.getBasePixel();\n var horizontal = vScale.isHorizontal();\n\n var ruler = me._getRuler();\n\n var firstOpts = me.resolveDataElementOptions(start, mode);\n var sharedOptions = me.getSharedOptions(firstOpts);\n var includeOptions = me.includeOptions(mode, sharedOptions);\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n\n for (var i = start; i < start + count; i++) {\n var parsed = me.getParsed(i);\n var vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base: base,\n head: base\n } : me._calculateBarValuePixels(i);\n\n var ipixels = me._calculateBarIndexPixels(i, ruler);\n\n var stack = (parsed._stacks || {})[vScale.axis];\n var properties = {\n horizontal: horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || me.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n\n setBorderSkipped(properties, properties.options || bars[i].options, stack, index);\n me.updateElement(bars[i], i, properties, mode);\n }\n }\n }, {\n key: \"_getStacks\",\n value: function _getStacks(last, dataIndex) {\n var me = this;\n var meta = me._cachedMeta;\n var iScale = meta.iScale;\n var metasets = iScale.getMatchingVisibleMetas(me._type);\n var stacked = iScale.options.stacked;\n var ilen = metasets.length;\n var stacks = [];\n var i, item;\n\n for (i = 0; i < ilen; ++i) {\n item = metasets[i];\n\n if (!item.controller.options.grouped) {\n continue;\n }\n\n if (typeof dataIndex !== 'undefined') {\n var val = item.controller.getParsed(dataIndex)[item.controller._cachedMeta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n continue;\n }\n }\n\n if (stacked === false || stacks.indexOf(item.stack) === -1 || stacked === undefined && item.stack === undefined) {\n stacks.push(item.stack);\n }\n\n if (item.index === last) {\n break;\n }\n }\n\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n }, {\n key: \"_getStackCount\",\n value: function _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n }, {\n key: \"_getStackIndex\",\n value: function _getStackIndex(datasetIndex, name, dataIndex) {\n var stacks = this._getStacks(datasetIndex, dataIndex);\n\n var index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n }, {\n key: \"_getRuler\",\n value: function _getRuler() {\n var me = this;\n var opts = me.options;\n var meta = me._cachedMeta;\n var iScale = meta.iScale;\n var pixels = [];\n var i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(me.getParsed(i)[iScale.axis], i));\n }\n\n var barThickness = opts.barThickness;\n var min = barThickness || computeMinSampleSize(iScale);\n return {\n min: min,\n pixels: pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: me._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n }, {\n key: \"_calculateBarValuePixels\",\n value: function _calculateBarValuePixels(index) {\n var me = this;\n var _me$_cachedMeta = me._cachedMeta,\n vScale = _me$_cachedMeta.vScale,\n _stacked = _me$_cachedMeta._stacked,\n _me$options = me.options,\n baseValue = _me$options.base,\n minBarLength = _me$options.minBarLength;\n var actualBase = baseValue || 0;\n var parsed = me.getParsed(index);\n var custom = parsed._custom;\n var floating = isFloatBar(custom);\n var value = parsed[vScale.axis];\n var start = 0;\n var length = _stacked ? me.applyStack(vScale, parsed, _stacked) : value;\n var head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n\n start += value;\n }\n\n var startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n var base = vScale.getPixelForValue(startValue);\n\n if (me.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n\n size = head - base;\n\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n\n if (value === actualBase) {\n base -= size / 2;\n }\n\n head = base + size;\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n var halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n\n return {\n size: size,\n base: base,\n head: head,\n center: head + size / 2\n };\n }\n }, {\n key: \"_calculateBarIndexPixels\",\n value: function _calculateBarIndexPixels(index, ruler) {\n var me = this;\n var scale = ruler.scale;\n var options = me.options;\n var skipNull = options.skipNull;\n var maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n var center, size;\n\n if (ruler.grouped) {\n var stackCount = skipNull ? me._getStackCount(index) : ruler.stackCount;\n var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n var stackIndex = me._getStackIndex(me.index, me._cachedMeta.stack, skipNull ? index : undefined);\n\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(me.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n\n return {\n base: center - size / 2,\n head: center + size / 2,\n center: center,\n size: size\n };\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var me = this;\n var meta = me._cachedMeta;\n var vScale = meta.vScale;\n var rects = meta.data;\n var ilen = rects.length;\n var i = 0;\n\n for (; i < ilen; ++i) {\n if (me.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(me._ctx);\n }\n }\n }\n }]);\n\n return BarController;\n}(DatasetController);\n\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n};\n\nvar BubbleController = /*#__PURE__*/function (_DatasetController2) {\n _inherits(BubbleController, _DatasetController2);\n\n var _super2 = _createSuper(BubbleController);\n\n function BubbleController() {\n _classCallCheck(this, BubbleController);\n\n return _super2.apply(this, arguments);\n }\n\n _createClass(BubbleController, [{\n key: \"initialize\",\n value: function initialize() {\n this.enableOptionSharing = true;\n\n _get(_getPrototypeOf(BubbleController.prototype), \"initialize\", this).call(this);\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var _this$_parsing3 = this._parsing,\n _this$_parsing3$xAxis = _this$_parsing3.xAxisKey,\n xAxisKey = _this$_parsing3$xAxis === void 0 ? 'x' : _this$_parsing3$xAxis,\n _this$_parsing3$yAxis = _this$_parsing3.yAxisKey,\n yAxisKey = _this$_parsing3$yAxis === void 0 ? 'y' : _this$_parsing3$yAxis;\n var parsed = [];\n var i, ilen, item;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n item = data[i];\n parsed.push({\n x: xScale.parse(resolveObjectKey(item, xAxisKey), i),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), i),\n _custom: item && item.r && +item.r\n });\n }\n\n return parsed;\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var _this$_cachedMeta = this._cachedMeta,\n data = _this$_cachedMeta.data,\n _parsed = _this$_cachedMeta._parsed;\n var max = 0;\n\n for (var i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size() / 2, _parsed[i]._custom);\n }\n\n return max > 0 && max;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var me = this;\n var meta = me._cachedMeta;\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var parsed = me.getParsed(index);\n var x = xScale.getLabelForValue(parsed.x);\n var y = yScale.getLabelForValue(parsed.y);\n var r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var points = me._cachedMeta.data;\n me.updateElements(points, 0, points.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var me = this;\n var reset = mode === 'reset';\n var _me$_cachedMeta2 = me._cachedMeta,\n iScale = _me$_cachedMeta2.iScale,\n vScale = _me$_cachedMeta2.vScale;\n var firstOpts = me.resolveDataElementOptions(start, mode);\n var sharedOptions = me.getSharedOptions(firstOpts);\n var includeOptions = me.includeOptions(mode, sharedOptions);\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n\n for (var i = start; i < start + count; i++) {\n var point = points[i];\n var parsed = !reset && me.getParsed(i);\n var properties = {};\n var iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n var vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = me.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n me.updateElement(point, i, properties, mode);\n }\n\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n }, {\n key: \"resolveDataElementOptions\",\n value: function resolveDataElementOptions(index, mode) {\n var parsed = this.getParsed(index);\n\n var values = _get(_getPrototypeOf(BubbleController.prototype), \"resolveDataElementOptions\", this).call(this, index, mode);\n\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n\n var radius = values.radius;\n\n if (mode !== 'active') {\n values.radius = 0;\n }\n\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n }]);\n\n return BubbleController;\n}(DatasetController);\n\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n var ratioX = 1;\n var ratioY = 1;\n var offsetX = 0;\n var offsetY = 0;\n\n if (circumference < TAU) {\n var startAngle = rotation;\n var endAngle = startAngle + circumference;\n var startX = Math.cos(startAngle);\n var startY = Math.sin(startAngle);\n var endX = Math.cos(endAngle);\n var endY = Math.sin(endAngle);\n\n var calcMax = function calcMax(angle, a, b) {\n return _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n };\n\n var calcMin = function calcMin(angle, a, b) {\n return _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n };\n\n var maxX = calcMax(0, startX, endX);\n var maxY = calcMax(HALF_PI, startY, endY);\n var minX = calcMin(PI, startX, endX);\n var minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n\n return {\n ratioX: ratioX,\n ratioY: ratioY,\n offsetX: offsetX,\n offsetY: offsetY\n };\n}\n\nvar DoughnutController = /*#__PURE__*/function (_DatasetController3) {\n _inherits(DoughnutController, _DatasetController3);\n\n var _super3 = _createSuper(DoughnutController);\n\n function DoughnutController(chart, datasetIndex) {\n var _this;\n\n _classCallCheck(this, DoughnutController);\n\n _this = _super3.call(this, chart, datasetIndex);\n _this.enableOptionSharing = true;\n _this.innerRadius = undefined;\n _this.outerRadius = undefined;\n _this.offsetX = undefined;\n _this.offsetY = undefined;\n return _this;\n }\n\n _createClass(DoughnutController, [{\n key: \"linkScales\",\n value: function linkScales() {}\n }, {\n key: \"parse\",\n value: function parse(start, count) {\n var data = this.getDataset().data;\n var meta = this._cachedMeta;\n var i, ilen;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = +data[i];\n }\n }\n }, {\n key: \"_getRotation\",\n value: function _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n }, {\n key: \"_getCircumference\",\n value: function _getCircumference() {\n return toRadians(this.options.circumference);\n }\n }, {\n key: \"_getRotationExtents\",\n value: function _getRotationExtents() {\n var min = TAU;\n var max = -TAU;\n var me = this;\n\n for (var i = 0; i < me.chart.data.datasets.length; ++i) {\n if (me.chart.isDatasetVisible(i)) {\n var controller = me.chart.getDatasetMeta(i).controller;\n\n var rotation = controller._getRotation();\n\n var circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var chart = me.chart;\n var chartArea = chart.chartArea;\n var meta = me._cachedMeta;\n var arcs = meta.data;\n var spacing = me.getMaxBorderWidth() + me.getMaxOffset(arcs) + me.options.spacing;\n var maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n var cutout = Math.min(toPercentage(me.options.cutout, maxSize), 1);\n\n var chartWeight = me._getRingWeight(me.index);\n\n var _me$_getRotationExten = me._getRotationExtents(),\n circumference = _me$_getRotationExten.circumference,\n rotation = _me$_getRotationExten.rotation;\n\n var _getRatioAndOffset = getRatioAndOffset(rotation, circumference, cutout),\n ratioX = _getRatioAndOffset.ratioX,\n ratioY = _getRatioAndOffset.ratioY,\n offsetX = _getRatioAndOffset.offsetX,\n offsetY = _getRatioAndOffset.offsetY;\n\n var maxWidth = (chartArea.width - spacing) / ratioX;\n var maxHeight = (chartArea.height - spacing) / ratioY;\n var maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n var outerRadius = toDimension(me.options.radius, maxRadius);\n var innerRadius = Math.max(outerRadius * cutout, 0);\n\n var radiusLength = (outerRadius - innerRadius) / me._getVisibleDatasetWeightTotal();\n\n me.offsetX = offsetX * outerRadius;\n me.offsetY = offsetY * outerRadius;\n meta.total = me.calculateTotal();\n me.outerRadius = outerRadius - radiusLength * me._getRingWeightOffset(me.index);\n me.innerRadius = Math.max(me.outerRadius - radiusLength * chartWeight, 0);\n me.updateElements(arcs, 0, arcs.length, mode);\n }\n }, {\n key: \"_circumference\",\n value: function _circumference(i, reset) {\n var me = this;\n var opts = me.options;\n var meta = me._cachedMeta;\n\n var circumference = me._getCircumference();\n\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n\n return me.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(arcs, start, count, mode) {\n var me = this;\n var reset = mode === 'reset';\n var chart = me.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var animationOpts = opts.animation;\n var centerX = (chartArea.left + chartArea.right) / 2;\n var centerY = (chartArea.top + chartArea.bottom) / 2;\n var animateScale = reset && animationOpts.animateScale;\n var innerRadius = animateScale ? 0 : me.innerRadius;\n var outerRadius = animateScale ? 0 : me.outerRadius;\n var firstOpts = me.resolveDataElementOptions(start, mode);\n var sharedOptions = me.getSharedOptions(firstOpts);\n var includeOptions = me.includeOptions(mode, sharedOptions);\n\n var startAngle = me._getRotation();\n\n var i;\n\n for (i = 0; i < start; ++i) {\n startAngle += me._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n var circumference = me._circumference(i, reset);\n\n var arc = arcs[i];\n var properties = {\n x: centerX + me.offsetX,\n y: centerY + me.offsetY,\n startAngle: startAngle,\n endAngle: startAngle + circumference,\n circumference: circumference,\n outerRadius: outerRadius,\n innerRadius: innerRadius\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || me.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n\n startAngle += circumference;\n me.updateElement(arc, i, properties, mode);\n }\n\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n }, {\n key: \"calculateTotal\",\n value: function calculateTotal() {\n var meta = this._cachedMeta;\n var metaData = meta.data;\n var total = 0;\n var i;\n\n for (i = 0; i < metaData.length; i++) {\n var value = meta._parsed[i];\n\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n }, {\n key: \"calculateCircumference\",\n value: function calculateCircumference(value) {\n var total = this._cachedMeta.total;\n\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n\n return 0;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var me = this;\n var meta = me._cachedMeta;\n var chart = me.chart;\n var labels = chart.data.labels || [];\n var value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value: value\n };\n }\n }, {\n key: \"getMaxBorderWidth\",\n value: function getMaxBorderWidth(arcs) {\n var me = this;\n var max = 0;\n var chart = me.chart;\n var i, ilen, meta, controller, options;\n\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n\n if (controller !== me) {\n controller.configure();\n }\n\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n\n return max;\n }\n }, {\n key: \"getMaxOffset\",\n value: function getMaxOffset(arcs) {\n var max = 0;\n\n for (var i = 0, ilen = arcs.length; i < ilen; ++i) {\n var options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n\n return max;\n }\n }, {\n key: \"_getRingWeightOffset\",\n value: function _getRingWeightOffset(datasetIndex) {\n var ringWeightOffset = 0;\n\n for (var i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n }\n }, {\n key: \"_getRingWeight\",\n value: function _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n }, {\n key: \"_getVisibleDatasetWeightTotal\",\n value: function _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n }]);\n\n return DoughnutController;\n}(DatasetController);\n\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n};\nDoughnutController.descriptors = {\n _scriptable: function _scriptable(name) {\n return name !== 'spacing';\n },\n _indexable: function _indexable(name) {\n return name !== 'spacing';\n }\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels: function generateLabels(chart) {\n var data = chart.data;\n\n if (data.labels.length && data.datasets.length) {\n var pointStyle = chart.legend.options.labels.pointStyle;\n return data.labels.map(function (label, i) {\n var meta = chart.getDatasetMeta(0);\n var style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(tooltipItem) {\n var dataLabel = tooltipItem.label;\n var value = ': ' + tooltipItem.formattedValue;\n\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n\n return dataLabel;\n }\n }\n }\n }\n};\n\nvar LineController = /*#__PURE__*/function (_DatasetController4) {\n _inherits(LineController, _DatasetController4);\n\n var _super4 = _createSuper(LineController);\n\n function LineController() {\n _classCallCheck(this, LineController);\n\n return _super4.apply(this, arguments);\n }\n\n _createClass(LineController, [{\n key: \"initialize\",\n value: function initialize() {\n this.enableOptionSharing = true;\n\n _get(_getPrototypeOf(LineController.prototype), \"initialize\", this).call(this);\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var meta = me._cachedMeta;\n var line = meta.dataset,\n _meta$data = meta.data,\n points = _meta$data === void 0 ? [] : _meta$data,\n _dataset = meta._dataset;\n var animationsDisabled = me.chart._animationsDisabled;\n\n var _getStartAndCountOfVi = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),\n start = _getStartAndCountOfVi.start,\n count = _getStartAndCountOfVi.count;\n\n me._drawStart = start;\n me._drawCount = count;\n\n if (scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n line._datasetIndex = me.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n var options = me.resolveDatasetElementOptions(mode);\n\n if (!me.options.showLine) {\n options.borderWidth = 0;\n }\n\n options.segment = me.options.segment;\n me.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options: options\n }, mode);\n me.updateElements(points, start, count, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var me = this;\n var reset = mode === 'reset';\n var _me$_cachedMeta3 = me._cachedMeta,\n iScale = _me$_cachedMeta3.iScale,\n vScale = _me$_cachedMeta3.vScale,\n _stacked = _me$_cachedMeta3._stacked;\n var firstOpts = me.resolveDataElementOptions(start, mode);\n var sharedOptions = me.getSharedOptions(firstOpts);\n var includeOptions = me.includeOptions(mode, sharedOptions);\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var spanGaps = me.options.spanGaps;\n var maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n var directUpdate = me.chart._animationsDisabled || reset || mode === 'none';\n var prevParsed = start > 0 && me.getParsed(start - 1);\n\n for (var i = start; i < start + count; ++i) {\n var point = points[i];\n var parsed = me.getParsed(i);\n var properties = directUpdate ? point : {};\n var nullData = isNullOrUndef(parsed[vAxis]);\n var iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n var vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? me.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && parsed[iAxis] - prevParsed[iAxis] > maxGapLength;\n properties.parsed = parsed;\n\n if (includeOptions) {\n properties.options = sharedOptions || me.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n me.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var me = this;\n var meta = me._cachedMeta;\n var dataset = meta.dataset;\n var border = dataset.options && dataset.options.borderWidth || 0;\n var data = meta.data || [];\n\n if (!data.length) {\n return border;\n }\n\n var firstPoint = data[0].size(me.resolveDataElementOptions(0));\n var lastPoint = data[data.length - 1].size(me.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n\n _get(_getPrototypeOf(LineController.prototype), \"draw\", this).call(this);\n }\n }]);\n\n return LineController;\n}(DatasetController);\n\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n};\n\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n var pointCount = points.length;\n var start = 0;\n var count = pointCount;\n\n if (meta._sorted) {\n var iScale = meta.iScale,\n _parsed = meta._parsed;\n var axis = iScale.axis;\n\n var _iScale$getUserBounds = iScale.getUserBounds(),\n min = _iScale$getUserBounds.min,\n max = _iScale$getUserBounds.max,\n minDefined = _iScale$getUserBounds.minDefined,\n maxDefined = _iScale$getUserBounds.maxDefined;\n\n if (minDefined) {\n start = _limitValue(Math.min(_lookupByKey(_parsed, iScale.axis, min).lo, animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n\n if (maxDefined) {\n count = _limitValue(Math.max(_lookupByKey(_parsed, iScale.axis, max).hi + 1, animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {\n start: start,\n count: count\n };\n}\n\nfunction scaleRangesChanged(meta) {\n var xScale = meta.xScale,\n yScale = meta.yScale,\n _scaleRanges = meta._scaleRanges;\n var newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n\n var changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nvar PolarAreaController = /*#__PURE__*/function (_DatasetController5) {\n _inherits(PolarAreaController, _DatasetController5);\n\n var _super5 = _createSuper(PolarAreaController);\n\n function PolarAreaController(chart, datasetIndex) {\n var _this2;\n\n _classCallCheck(this, PolarAreaController);\n\n _this2 = _super5.call(this, chart, datasetIndex);\n _this2.innerRadius = undefined;\n _this2.outerRadius = undefined;\n return _this2;\n }\n\n _createClass(PolarAreaController, [{\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var me = this;\n var meta = me._cachedMeta;\n var chart = me.chart;\n var labels = chart.data.labels || [];\n var value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value: value\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var arcs = this._cachedMeta.data;\n\n this._updateRadius();\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n }, {\n key: \"_updateRadius\",\n value: function _updateRadius() {\n var me = this;\n var chart = me.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n var outerRadius = Math.max(minSize / 2, 0);\n var innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n var radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n me.outerRadius = outerRadius - radiusLength * me.index;\n me.innerRadius = me.outerRadius - radiusLength;\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(arcs, start, count, mode) {\n var me = this;\n var reset = mode === 'reset';\n var chart = me.chart;\n var dataset = me.getDataset();\n var opts = chart.options;\n var animationOpts = opts.animation;\n var scale = me._cachedMeta.rScale;\n var centerX = scale.xCenter;\n var centerY = scale.yCenter;\n var datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n var angle = datasetStartAngle;\n var i;\n var defaultAngle = 360 / me.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += me._computeAngle(i, mode, defaultAngle);\n }\n\n for (i = start; i < start + count; i++) {\n var arc = arcs[i];\n var startAngle = angle;\n\n var endAngle = angle + me._computeAngle(i, mode, defaultAngle);\n\n var outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n var properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle,\n options: me.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n me.updateElement(arc, i, properties, mode);\n }\n }\n }, {\n key: \"countVisibleElements\",\n value: function countVisibleElements() {\n var _this3 = this;\n\n var dataset = this.getDataset();\n var meta = this._cachedMeta;\n var count = 0;\n meta.data.forEach(function (element, index) {\n if (!isNaN(dataset.data[index]) && _this3.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n }, {\n key: \"_computeAngle\",\n value: function _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n }]);\n\n return PolarAreaController;\n}(DatasetController);\n\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n }\n },\n indexAxis: 'r',\n startAngle: 0\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels: function generateLabels(chart) {\n var data = chart.data;\n\n if (data.labels.length && data.datasets.length) {\n var pointStyle = chart.legend.options.labels.pointStyle;\n return data.labels.map(function (label, i) {\n var meta = chart.getDatasetMeta(0);\n var style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nvar PieController = /*#__PURE__*/function (_DoughnutController) {\n _inherits(PieController, _DoughnutController);\n\n var _super6 = _createSuper(PieController);\n\n function PieController() {\n _classCallCheck(this, PieController);\n\n return _super6.apply(this, arguments);\n }\n\n return PieController;\n}(DoughnutController);\n\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nvar RadarController = /*#__PURE__*/function (_DatasetController6) {\n _inherits(RadarController, _DatasetController6);\n\n var _super7 = _createSuper(RadarController);\n\n function RadarController() {\n _classCallCheck(this, RadarController);\n\n return _super7.apply(this, arguments);\n }\n\n _createClass(RadarController, [{\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var me = this;\n var vScale = me._cachedMeta.vScale;\n var parsed = me.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var meta = me._cachedMeta;\n var line = meta.dataset;\n var points = meta.data || [];\n var labels = meta.iScale.getLabels();\n line.points = points;\n\n if (mode !== 'resize') {\n var options = me.resolveDatasetElementOptions(mode);\n\n if (!me.options.showLine) {\n options.borderWidth = 0;\n }\n\n var properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options: options\n };\n me.updateElement(line, undefined, properties, mode);\n }\n\n me.updateElements(points, 0, points.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var me = this;\n var dataset = me.getDataset();\n var scale = me._cachedMeta.rScale;\n var reset = mode === 'reset';\n\n for (var i = start; i < start + count; i++) {\n var point = points[i];\n var options = me.resolveDataElementOptions(i, point.active ? 'active' : mode);\n var pointPosition = scale.getPointPositionForValue(i, dataset.data[i]);\n var x = reset ? scale.xCenter : pointPosition.x;\n var y = reset ? scale.yCenter : pointPosition.y;\n var properties = {\n x: x,\n y: y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options: options\n };\n me.updateElement(point, i, properties, mode);\n }\n }\n }]);\n\n return RadarController;\n}(DatasetController);\n\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n};\n\nvar ScatterController = /*#__PURE__*/function (_LineController) {\n _inherits(ScatterController, _LineController);\n\n var _super8 = _createSuper(ScatterController);\n\n function ScatterController() {\n _classCallCheck(this, ScatterController);\n\n return _super8.apply(this, arguments);\n }\n\n return ScatterController;\n}(LineController);\n\nScatterController.id = 'scatter';\nScatterController.defaults = {\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\nvar controllers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n BarController: BarController,\n BubbleController: BubbleController,\n DoughnutController: DoughnutController,\n LineController: LineController,\n PolarAreaController: PolarAreaController,\n PieController: PieController,\n RadarController: RadarController,\n ScatterController: ScatterController\n});\n\nfunction _abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\nvar DateAdapter = /*#__PURE__*/function () {\n function DateAdapter(options) {\n _classCallCheck(this, DateAdapter);\n\n this.options = options || {};\n }\n\n _createClass(DateAdapter, [{\n key: \"formats\",\n value: function formats() {\n return _abstract();\n }\n }, {\n key: \"parse\",\n value: function parse(value, format) {\n return _abstract();\n }\n }, {\n key: \"format\",\n value: function format(timestamp, _format) {\n return _abstract();\n }\n }, {\n key: \"add\",\n value: function add(timestamp, amount, unit) {\n return _abstract();\n }\n }, {\n key: \"diff\",\n value: function diff(a, b, unit) {\n return _abstract();\n }\n }, {\n key: \"startOf\",\n value: function startOf(timestamp, unit, weekday) {\n return _abstract();\n }\n }, {\n key: \"endOf\",\n value: function endOf(timestamp, unit) {\n return _abstract();\n }\n }]);\n\n return DateAdapter;\n}();\n\nDateAdapter.override = function (members) {\n Object.assign(DateAdapter.prototype, members);\n};\n\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction getRelativePosition(e, chart) {\n if ('native' in e) {\n return {\n x: e.x,\n y: e.y\n };\n }\n\n return getRelativePosition$1(e, chart);\n}\n\nfunction evaluateAllVisibleItems(chart, handler) {\n var metasets = chart.getSortedVisibleDatasetMetas();\n var index, data, element;\n\n for (var i = 0, ilen = metasets.length; i < ilen; ++i) {\n var _metasets$i = metasets[i];\n index = _metasets$i.index;\n data = _metasets$i.data;\n\n for (var j = 0, jlen = data.length; j < jlen; ++j) {\n element = data[j];\n\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\nfunction binarySearch(metaset, axis, value, intersect) {\n var controller = metaset.controller,\n data = metaset.data,\n _sorted = metaset._sorted;\n var iScale = controller._cachedMeta.iScale;\n\n if (iScale && axis === iScale.axis && _sorted && data.length) {\n var lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n var el = data[0];\n var range = typeof el.getRange === 'function' && el.getRange(axis);\n\n if (range) {\n var start = lookupMethod(data, axis, value - range);\n var end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n\nfunction optimizedEvaluateItems(chart, axis, position, handler, intersect) {\n var metasets = chart.getSortedVisibleDatasetMetas();\n var value = position[axis];\n\n for (var i = 0, ilen = metasets.length; i < ilen; ++i) {\n var _metasets$i2 = metasets[i],\n index = _metasets$i2.index,\n data = _metasets$i2.data;\n\n var _binarySearch = binarySearch(metasets[i], axis, value, intersect),\n lo = _binarySearch.lo,\n hi = _binarySearch.hi;\n\n for (var j = lo; j <= hi; ++j) {\n var element = data[j];\n\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\nfunction getDistanceMetricForAxis(axis) {\n var useX = axis.indexOf('x') !== -1;\n var useY = axis.indexOf('y') !== -1;\n return function (pt1, pt2) {\n var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n\nfunction getIntersectItems(chart, position, axis, useFinalPosition) {\n var items = [];\n\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n\n var evaluationFunc = function evaluationFunc(element, datasetIndex, index) {\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n };\n\n optimizedEvaluateItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n var distanceMetric = getDistanceMetricForAxis(axis);\n var minDistance = Number.POSITIVE_INFINITY;\n var items = [];\n\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n\n var evaluationFunc = function evaluationFunc(element, datasetIndex, index) {\n if (intersect && !element.inRange(position.x, position.y, useFinalPosition)) {\n return;\n }\n\n var center = element.getCenterPoint(useFinalPosition);\n\n if (!_isPointInArea(center, chart.chartArea, chart._minPadding) && !element.inRange(position.x, position.y, useFinalPosition)) {\n return;\n }\n\n var distance = distanceMetric(position, center);\n\n if (distance < minDistance) {\n items = [{\n element: element,\n datasetIndex: datasetIndex,\n index: index\n }];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n };\n\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\nfunction getAxisItems(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var items = [];\n var axis = options.axis;\n var rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n var intersectsItem = false;\n evaluateAllVisibleItems(chart, function (element, datasetIndex, index) {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n intersectsItem = true;\n }\n });\n\n if (options.intersect && !intersectsItem) {\n return [];\n }\n\n return items;\n}\n\nvar Interaction = {\n modes: {\n index: function index(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'x';\n var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition) : getNearestItems(chart, position, axis, false, useFinalPosition);\n var elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach(function (meta) {\n var index = items[0].index;\n var element = meta.data[index];\n\n if (element && !element.skip) {\n elements.push({\n element: element,\n datasetIndex: meta.index,\n index: index\n });\n }\n });\n return elements;\n },\n dataset: function dataset(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition) : getNearestItems(chart, position, axis, false, useFinalPosition);\n\n if (items.length > 0) {\n var datasetIndex = items[0].datasetIndex;\n var data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n\n for (var i = 0; i < data.length; ++i) {\n items.push({\n element: data[i],\n datasetIndex: datasetIndex,\n index: i\n });\n }\n }\n\n return items;\n },\n point: function point(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n return getIntersectItems(chart, position, axis, useFinalPosition);\n },\n nearest: function nearest(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);\n },\n x: function x(chart, e, options, useFinalPosition) {\n options.axis = 'x';\n return getAxisItems(chart, e, options, useFinalPosition);\n },\n y: function y(chart, e, options, useFinalPosition) {\n options.axis = 'y';\n return getAxisItems(chart, e, options, useFinalPosition);\n }\n }\n};\nvar STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(function (v) {\n return v.pos === position;\n });\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(function (v) {\n return STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis;\n });\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort(function (a, b) {\n var v0 = reverse ? b : a;\n var v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n var layoutBoxes = [];\n var i, ilen, box, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n var _box = box;\n pos = _box.position;\n var _box$options = _box.options;\n stack = _box$options.stack;\n var _box$options$stackWei = _box$options.stackWeight;\n stackWeight = _box$options$stackWei === void 0 ? 1 : _box$options$stackWei;\n layoutBoxes.push({\n index: i,\n box: box,\n pos: pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight: stackWeight\n });\n }\n\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n var stacks = {};\n\n var _iterator5 = _createForOfIteratorHelper(layouts),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var wrap = _step5.value;\n var stack = wrap.stack,\n pos = wrap.pos,\n stackWeight = wrap.stackWeight;\n\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n\n var _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n\n _stack.count++;\n _stack.weight += stackWeight;\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n return stacks;\n}\n\nfunction setLayoutDims(layouts, params) {\n var stacks = buildStacks(layouts);\n var vBoxMaxWidth = params.vBoxMaxWidth,\n hBoxMaxHeight = params.hBoxMaxHeight;\n var i, ilen, layout;\n\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n var fullSize = layout.box.fullSize;\n var stack = stacks[layout.stack];\n var factor = stack && layout.stackWeight / stack.weight;\n\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n\n return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n var layoutBoxes = wrapBoxes(boxes);\n var fullSize = sortByWeight(layoutBoxes.filter(function (wrap) {\n return wrap.box.fullSize;\n }), true);\n var left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n var right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n var top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n var bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n var centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n var centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize: fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n var pos = layout.pos,\n box = layout.box;\n var maxPadding = chartArea.maxPadding;\n\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n\n var stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n var newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n var newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n var widthChanged = newWidth !== chartArea.w;\n var heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\n\nfunction handleMaxPadding(chartArea) {\n var maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n var change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n var maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n var margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach(function (pos) {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal ? marginForPositions(['left', 'right']) : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n var refitBoxes = [];\n var i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n\n var _updateDims = updateDims(chartArea, params, layout, stacks),\n same = _updateDims.same,\n other = _updateDims.other;\n\n refit |= same && refitBoxes.length;\n changed = changed || other;\n\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n var userPadding = params.padding;\n var x = chartArea.x,\n y = chartArea.y;\n\n var _iterator6 = _createForOfIteratorHelper(boxes),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var layout = _step6.value;\n var box = layout.box;\n var stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n var weight = layout.stackWeight / stack.weight || 1;\n\n if (layout.horizontal) {\n var width = chartArea.w * weight;\n var height = stack.size || box.height;\n\n if (defined(stack.start)) {\n y = stack.start;\n }\n\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n var _height = chartArea.h * weight;\n\n var _width = stack.size || box.width;\n\n if (defined(stack.start)) {\n x = stack.start;\n }\n\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, _width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, _width, _height);\n }\n\n stack.start = x;\n stack.placed += _height;\n x = box.right;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\ndefaults.set('layout', {\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox: function addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n\n item._layers = item._layers || function () {\n return [{\n z: 0,\n draw: function draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n removeBox: function removeBox(chart, layoutItem) {\n var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure: function configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update: function update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n var padding = toPadding(chart.options.layout.padding);\n var availableWidth = Math.max(width - padding.width, 0);\n var availableHeight = Math.max(height - padding.height, 0);\n var boxes = buildLayoutBoxes(chart.boxes);\n var verticalBoxes = boxes.vertical;\n var horizontalBoxes = boxes.horizontal;\n each(chart.boxes, function (box) {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n var visibleVerticalBoxCount = verticalBoxes.reduce(function (total, wrap) {\n return wrap.box.options && wrap.box.options.display === false ? total : total + 1;\n }, 0) || 1;\n var params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding: padding,\n availableWidth: availableWidth,\n availableHeight: availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n var maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n var chartArea = Object.assign({\n maxPadding: maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n var stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, function (layout) {\n var box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h);\n });\n }\n};\n\nvar BasePlatform = /*#__PURE__*/function () {\n function BasePlatform() {\n _classCallCheck(this, BasePlatform);\n }\n\n _createClass(BasePlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(canvas, aspectRatio) {}\n }, {\n key: \"releaseContext\",\n value: function releaseContext(context) {\n return false;\n }\n }, {\n key: \"addEventListener\",\n value: function addEventListener(chart, type, listener) {}\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(chart, type, listener) {}\n }, {\n key: \"getDevicePixelRatio\",\n value: function getDevicePixelRatio() {\n return 1;\n }\n }, {\n key: \"getMaximumSize\",\n value: function getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width: width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n }, {\n key: \"isAttached\",\n value: function isAttached(canvas) {\n return true;\n }\n }]);\n\n return BasePlatform;\n}();\n\nvar BasicPlatform = /*#__PURE__*/function (_BasePlatform) {\n _inherits(BasicPlatform, _BasePlatform);\n\n var _super9 = _createSuper(BasicPlatform);\n\n function BasicPlatform() {\n _classCallCheck(this, BasicPlatform);\n\n return _super9.apply(this, arguments);\n }\n\n _createClass(BasicPlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n }]);\n\n return BasicPlatform;\n}(BasePlatform);\n\nvar EXPANDO_KEY = '$chartjs';\nvar EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\n\nvar isNullOrEmpty = function isNullOrEmpty(value) {\n return value === null || value === '';\n};\n\nfunction initCanvas(canvas, aspectRatio) {\n var style = canvas.style;\n var renderHeight = canvas.getAttribute('height');\n var renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n\n if (isNullOrEmpty(renderWidth)) {\n var displayWidth = readUsedSize(canvas, 'width');\n\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n var displayHeight = readUsedSize(canvas, 'height');\n\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\nvar eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\n\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\n\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\n\nfunction fromNativeEvent(event, chart) {\n var type = EVENT_TYPES[event.type] || event.type;\n\n var _getRelativePosition$ = getRelativePosition$1(event, chart),\n x = _getRelativePosition$.x,\n y = _getRelativePosition$.y;\n\n return {\n type: type,\n chart: chart,\n \"native\": event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\n\nfunction createAttachObserver(chart, type, listener) {\n var canvas = chart.canvas;\n\n var container = canvas && _getParentNode(canvas);\n\n var element = container || canvas;\n var observer = new MutationObserver(function (entries) {\n var parent = _getParentNode(element);\n\n entries.forEach(function (entry) {\n for (var i = 0; i < entry.addedNodes.length; i++) {\n var added = entry.addedNodes[i];\n\n if (added === element || added === parent) {\n listener(entry.target);\n }\n }\n });\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n var canvas = chart.canvas;\n\n var container = canvas && _getParentNode(canvas);\n\n if (!container) {\n return;\n }\n\n var observer = new MutationObserver(function (entries) {\n entries.forEach(function (entry) {\n for (var i = 0; i < entry.removedNodes.length; i++) {\n if (entry.removedNodes[i] === canvas) {\n listener();\n break;\n }\n }\n });\n });\n observer.observe(container, {\n childList: true\n });\n return observer;\n}\n\nvar drpListeningCharts = new Map();\nvar oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n var dpr = window.devicePixelRatio;\n\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach(function (resize, chart) {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts[\"delete\"](chart);\n\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n var canvas = chart.canvas;\n\n var container = canvas && _getParentNode(canvas);\n\n if (!container) {\n return;\n }\n\n var resize = throttled(function (width, height) {\n var w = container.clientWidth;\n listener(width, height);\n\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n var observer = new ResizeObserver(function (entries) {\n var entry = entries[0];\n var width = entry.contentRect.width;\n var height = entry.contentRect.height;\n\n if (width === 0 && height === 0) {\n return;\n }\n\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n var canvas = chart.canvas;\n var proxy = throttled(function (event) {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, function (args) {\n var event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\n\nvar DomPlatform = /*#__PURE__*/function (_BasePlatform2) {\n _inherits(DomPlatform, _BasePlatform2);\n\n var _super10 = _createSuper(DomPlatform);\n\n function DomPlatform() {\n _classCallCheck(this, DomPlatform);\n\n return _super10.apply(this, arguments);\n }\n\n _createClass(DomPlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(canvas, aspectRatio) {\n var context = canvas && canvas.getContext && canvas.getContext('2d');\n\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n }, {\n key: \"releaseContext\",\n value: function releaseContext(context) {\n var canvas = context.canvas;\n\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n var initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach(function (prop) {\n var value = initial[prop];\n\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n var style = initial.style || {};\n Object.keys(style).forEach(function (key) {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n }, {\n key: \"addEventListener\",\n value: function addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n var proxies = chart.$proxies || (chart.$proxies = {});\n var handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n var handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(chart, type) {\n var proxies = chart.$proxies || (chart.$proxies = {});\n var proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n var handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n var handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n }, {\n key: \"getDevicePixelRatio\",\n value: function getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n }, {\n key: \"getMaximumSize\",\n value: function getMaximumSize(canvas, width, height, aspectRatio) {\n return _getMaximumSize(canvas, width, height, aspectRatio);\n }\n }, {\n key: \"isAttached\",\n value: function isAttached(canvas) {\n var container = _getParentNode(canvas);\n\n return !!(container && container.isConnected);\n }\n }]);\n\n return DomPlatform;\n}(BasePlatform);\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n\n return DomPlatform;\n}\n\nvar Element = /*#__PURE__*/function () {\n function Element() {\n _classCallCheck(this, Element);\n\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n\n _createClass(Element, [{\n key: \"tooltipPosition\",\n value: function tooltipPosition(useFinalPosition) {\n var _this$getProps = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps.x,\n y = _this$getProps.y;\n\n return {\n x: x,\n y: y\n };\n }\n }, {\n key: \"hasValue\",\n value: function hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n }, {\n key: \"getProps\",\n value: function getProps(props, _final) {\n var me = this;\n var anims = this.$animations;\n\n if (!_final || !anims) {\n return me;\n }\n\n var ret = {};\n props.forEach(function (prop) {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : me[prop];\n });\n return ret;\n }\n }]);\n\n return Element;\n}();\n\nElement.defaults = {};\nElement.defaultRoutes = undefined;\nvar formatters = {\n values: function values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric: function numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n\n var locale = this.chart.options.locale;\n var notation;\n var delta = tickValue;\n\n if (ticks.length > 1) {\n var maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n var logDelta = log10(Math.abs(delta));\n var numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n var options = {\n notation: notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic: function logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n\n var remain = tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n\n return '';\n }\n};\n\nfunction calculateDelta(tickValue, ticks) {\n var delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n\n return delta;\n}\n\nvar Ticks = {\n formatters: formatters\n};\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: function tickWidth(_ctx, options) {\n return options.lineWidth;\n },\n tickColor: function tickColor(_ctx, options) {\n return options.color;\n },\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: function _scriptable(name) {\n return !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser';\n },\n _indexable: function _indexable(name) {\n return name !== 'borderDash' && name !== 'tickBorderDash';\n }\n});\ndefaults.describe('scales', {\n _fallback: 'scale'\n});\ndefaults.describe('scale.ticks', {\n _scriptable: function _scriptable(name) {\n return name !== 'backdropPadding' && name !== 'callback';\n },\n _indexable: function _indexable(name) {\n return name !== 'backdropPadding';\n }\n});\n\nfunction autoSkip(scale, ticks) {\n var tickOpts = scale.options.ticks;\n var ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n var majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n var numMajorIndices = majorIndices.length;\n var first = majorIndices[0];\n var last = majorIndices[numMajorIndices - 1];\n var newTicks = [];\n\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n var spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n var i, ilen;\n var avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n var offset = scale.options.offset;\n\n var tickLength = scale._tickSize();\n\n var maxScale = scale._length / tickLength + (offset ? 0 : 1);\n var maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n var evenMajorSpacing = getEvenSpacing(majorIndices);\n var spacing = ticks.length / ticksLimit;\n\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n var factors = _factorize(evenMajorSpacing);\n\n for (var i = 0, ilen = factors.length - 1; i < ilen; i++) {\n var factor = factors[i];\n\n if (factor > spacing) {\n return factor;\n }\n }\n\n return Math.max(spacing, 1);\n}\n\nfunction getMajorIndices(ticks) {\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n\n return result;\n}\n\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n var count = 0;\n var next = majorIndices[0];\n var i;\n spacing = Math.ceil(spacing);\n\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n var start = valueOrDefault(majorStart, 0);\n var end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n var count = 0;\n var length, i, next;\n spacing = Math.ceil(spacing);\n\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n\nfunction getEvenSpacing(arr) {\n var len = arr.length;\n var i, diff;\n\n if (len < 2) {\n return false;\n }\n\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n\n return diff;\n}\n\nvar reverseAlign = function reverseAlign(align) {\n return align === 'left' ? 'right' : align === 'right' ? 'left' : align;\n};\n\nvar offsetFromEdge = function offsetFromEdge(scale, edge, offset) {\n return edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\n};\n\nfunction sample(arr, numItems) {\n var result = [];\n var increment = arr.length / numItems;\n var len = arr.length;\n var i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n\n return result;\n}\n\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n var length = scale.ticks.length;\n var validIndex = Math.min(index, length - 1);\n var start = scale._startPixel;\n var end = scale._endPixel;\n var epsilon = 1e-6;\n var lineValue = scale.getPixelForTick(validIndex);\n var offset;\n\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n\n lineValue += validIndex < index ? offset : -offset;\n\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n\n return lineValue;\n}\n\nfunction garbageCollect(caches, length) {\n each(caches, function (cache) {\n var gc = cache.gc;\n var gcLen = gc.length / 2;\n var i;\n\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n\n gc.splice(0, gcLen);\n }\n });\n}\n\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n var font = toFont(options.font, fallback);\n var padding = toPadding(options.padding);\n var lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return Object.assign(Object.create(parent), {\n scale: scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return Object.assign(Object.create(parent), {\n tick: tick,\n index: index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n var ret = _toLeftRightCenter(align);\n\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n var top = scale.top,\n left = scale.left,\n bottom = scale.bottom,\n right = scale.right,\n chart = scale.chart;\n var chartArea = chart.chartArea,\n scales = chart.scales;\n var rotation = 0;\n var maxWidth, titleX, titleY;\n var height = bottom - top;\n var width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n var positionAxisID = Object.keys(position)[0];\n var value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n var _positionAxisID = Object.keys(position)[0];\n var _value = position[_positionAxisID];\n titleX = scales[_positionAxisID].getPixelForValue(_value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n\n return {\n titleX: titleX,\n titleY: titleY,\n maxWidth: maxWidth,\n rotation: rotation\n };\n}\n\nvar Scale = /*#__PURE__*/function (_Element) {\n _inherits(Scale, _Element);\n\n var _super11 = _createSuper(Scale);\n\n function Scale(cfg) {\n var _this4;\n\n _classCallCheck(this, Scale);\n\n _this4 = _super11.call(this);\n _this4.id = cfg.id;\n _this4.type = cfg.type;\n _this4.options = undefined;\n _this4.ctx = cfg.ctx;\n _this4.chart = cfg.chart;\n _this4.top = undefined;\n _this4.bottom = undefined;\n _this4.left = undefined;\n _this4.right = undefined;\n _this4.width = undefined;\n _this4.height = undefined;\n _this4._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n _this4.maxWidth = undefined;\n _this4.maxHeight = undefined;\n _this4.paddingTop = undefined;\n _this4.paddingBottom = undefined;\n _this4.paddingLeft = undefined;\n _this4.paddingRight = undefined;\n _this4.axis = undefined;\n _this4.labelRotation = undefined;\n _this4.min = undefined;\n _this4.max = undefined;\n _this4._range = undefined;\n _this4.ticks = [];\n _this4._gridLineItems = null;\n _this4._labelItems = null;\n _this4._labelSizes = null;\n _this4._length = 0;\n _this4._maxLength = 0;\n _this4._longestTextCache = {};\n _this4._startPixel = undefined;\n _this4._endPixel = undefined;\n _this4._reversePixels = false;\n _this4._userMax = undefined;\n _this4._userMin = undefined;\n _this4._suggestedMax = undefined;\n _this4._suggestedMin = undefined;\n _this4._ticksLength = 0;\n _this4._borderValue = 0;\n _this4._cache = {};\n _this4._dataLimitsCached = false;\n _this4.$context = undefined;\n return _this4;\n }\n\n _createClass(Scale, [{\n key: \"init\",\n value: function init(options) {\n var me = this;\n me.options = options.setContext(me.getContext());\n me.axis = options.axis;\n me._userMin = me.parse(options.min);\n me._userMax = me.parse(options.max);\n me._suggestedMin = me.parse(options.suggestedMin);\n me._suggestedMax = me.parse(options.suggestedMax);\n }\n }, {\n key: \"parse\",\n value: function parse(raw, index) {\n return raw;\n }\n }, {\n key: \"getUserBounds\",\n value: function getUserBounds() {\n var _userMin = this._userMin,\n _userMax = this._userMax,\n _suggestedMin = this._suggestedMin,\n _suggestedMax = this._suggestedMax;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n }, {\n key: \"getMinMax\",\n value: function getMinMax(canStack) {\n var me = this;\n\n var _me$getUserBounds = me.getUserBounds(),\n min = _me$getUserBounds.min,\n max = _me$getUserBounds.max,\n minDefined = _me$getUserBounds.minDefined,\n maxDefined = _me$getUserBounds.maxDefined;\n\n var range;\n\n if (minDefined && maxDefined) {\n return {\n min: min,\n max: max\n };\n }\n\n var metas = me.getMatchingVisibleMetas();\n\n for (var i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(me, canStack);\n\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n }, {\n key: \"getPadding\",\n value: function getPadding() {\n var me = this;\n return {\n left: me.paddingLeft || 0,\n top: me.paddingTop || 0,\n right: me.paddingRight || 0,\n bottom: me.paddingBottom || 0\n };\n }\n }, {\n key: \"getTicks\",\n value: function getTicks() {\n return this.ticks;\n }\n }, {\n key: \"getLabels\",\n value: function getLabels() {\n var data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n }, {\n key: \"beforeLayout\",\n value: function beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n }, {\n key: \"beforeUpdate\",\n value: function beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n }, {\n key: \"update\",\n value: function update(maxWidth, maxHeight, margins) {\n var me = this;\n var tickOpts = me.options.ticks;\n var sampleSize = tickOpts.sampleSize;\n me.beforeUpdate();\n me.maxWidth = maxWidth;\n me.maxHeight = maxHeight;\n me._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n me.ticks = null;\n me._labelSizes = null;\n me._gridLineItems = null;\n me._labelItems = null;\n me.beforeSetDimensions();\n me.setDimensions();\n me.afterSetDimensions();\n me._maxLength = me.isHorizontal() ? me.width + margins.left + margins.right : me.height + margins.top + margins.bottom;\n\n if (!me._dataLimitsCached) {\n me.beforeDataLimits();\n me.determineDataLimits();\n me.afterDataLimits();\n me._range = _addGrace(me, me.options.grace);\n me._dataLimitsCached = true;\n }\n\n me.beforeBuildTicks();\n me.ticks = me.buildTicks() || [];\n me.afterBuildTicks();\n var samplingEnabled = sampleSize < me.ticks.length;\n\n me._convertTicksToLabels(samplingEnabled ? sample(me.ticks, sampleSize) : me.ticks);\n\n me.configure();\n me.beforeCalculateLabelRotation();\n me.calculateLabelRotation();\n me.afterCalculateLabelRotation();\n\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n me.ticks = autoSkip(me, me.ticks);\n me._labelSizes = null;\n }\n\n if (samplingEnabled) {\n me._convertTicksToLabels(me.ticks);\n }\n\n me.beforeFit();\n me.fit();\n me.afterFit();\n me.afterUpdate();\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var me = this;\n var reversePixels = me.options.reverse;\n var startPixel, endPixel;\n\n if (me.isHorizontal()) {\n startPixel = me.left;\n endPixel = me.right;\n } else {\n startPixel = me.top;\n endPixel = me.bottom;\n reversePixels = !reversePixels;\n }\n\n me._startPixel = startPixel;\n me._endPixel = endPixel;\n me._reversePixels = reversePixels;\n me._length = endPixel - startPixel;\n me._alignToPixels = me.options.alignToPixels;\n }\n }, {\n key: \"afterUpdate\",\n value: function afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n }, {\n key: \"beforeSetDimensions\",\n value: function beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n }, {\n key: \"setDimensions\",\n value: function setDimensions() {\n var me = this;\n\n if (me.isHorizontal()) {\n me.width = me.maxWidth;\n me.left = 0;\n me.right = me.width;\n } else {\n me.height = me.maxHeight;\n me.top = 0;\n me.bottom = me.height;\n }\n\n me.paddingLeft = 0;\n me.paddingTop = 0;\n me.paddingRight = 0;\n me.paddingBottom = 0;\n }\n }, {\n key: \"afterSetDimensions\",\n value: function afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n }, {\n key: \"_callHooks\",\n value: function _callHooks(name) {\n var me = this;\n me.chart.notifyPlugins(name, me.getContext());\n callback(me.options[name], [me]);\n }\n }, {\n key: \"beforeDataLimits\",\n value: function beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {}\n }, {\n key: \"afterDataLimits\",\n value: function afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n }, {\n key: \"beforeBuildTicks\",\n value: function beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n return [];\n }\n }, {\n key: \"afterBuildTicks\",\n value: function afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n }, {\n key: \"beforeTickToLabelConversion\",\n value: function beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var me = this;\n var tickOpts = me.options.ticks;\n var i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], me);\n }\n }\n }, {\n key: \"afterTickToLabelConversion\",\n value: function afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n }, {\n key: \"beforeCalculateLabelRotation\",\n value: function beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n }, {\n key: \"calculateLabelRotation\",\n value: function calculateLabelRotation() {\n var me = this;\n var options = me.options;\n var tickOpts = options.ticks;\n var numTicks = me.ticks.length;\n var minRotation = tickOpts.minRotation || 0;\n var maxRotation = tickOpts.maxRotation;\n var labelRotation = minRotation;\n var tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!me._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !me.isHorizontal()) {\n me.labelRotation = minRotation;\n return;\n }\n\n var labelSizes = me._getLabelSizes();\n\n var maxLabelWidth = labelSizes.widest.width;\n var maxLabelHeight = labelSizes.highest.height;\n\n var maxWidth = _limitValue(me.chart.width - maxLabelWidth, 0, me.maxWidth);\n\n tickWidth = options.offset ? me.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = me.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, me.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n me.labelRotation = labelRotation;\n }\n }, {\n key: \"afterCalculateLabelRotation\",\n value: function afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n }, {\n key: \"beforeFit\",\n value: function beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var me = this;\n var minSize = {\n width: 0,\n height: 0\n };\n var chart = me.chart,\n _me$options2 = me.options,\n tickOpts = _me$options2.ticks,\n titleOpts = _me$options2.title,\n gridOpts = _me$options2.grid;\n\n var display = me._isVisible();\n\n var isHorizontal = me.isHorizontal();\n\n if (display) {\n var titleHeight = getTitleHeight(titleOpts, chart.options.font);\n\n if (isHorizontal) {\n minSize.width = me.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = me.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n if (tickOpts.display && me.ticks.length) {\n var _me$_getLabelSizes = me._getLabelSizes(),\n first = _me$_getLabelSizes.first,\n last = _me$_getLabelSizes.last,\n widest = _me$_getLabelSizes.widest,\n highest = _me$_getLabelSizes.highest;\n\n var tickPadding = tickOpts.padding * 2;\n var angleRadians = toRadians(me.labelRotation);\n var cos = Math.cos(angleRadians);\n var sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n var labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n var labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(me.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n\n me._calculatePadding(first, last, sin, cos);\n }\n }\n\n me._handleMargins();\n\n if (isHorizontal) {\n me.width = me._length = chart.width - me._margins.left - me._margins.right;\n me.height = minSize.height;\n } else {\n me.width = minSize.width;\n me.height = me._length = chart.height - me._margins.top - me._margins.bottom;\n }\n }\n }, {\n key: \"_calculatePadding\",\n value: function _calculatePadding(first, last, sin, cos) {\n var me = this;\n var _me$options3 = me.options,\n _me$options3$ticks = _me$options3.ticks,\n align = _me$options3$ticks.align,\n padding = _me$options3$ticks.padding,\n position = _me$options3.position;\n var isRotated = me.labelRotation !== 0;\n var labelsBelowTicks = position !== 'top' && me.axis === 'x';\n\n if (me.isHorizontal()) {\n var offsetLeft = me.getPixelForTick(0) - me.left;\n var offsetRight = me.right - me.getPixelForTick(me.ticks.length - 1);\n var paddingLeft = 0;\n var paddingRight = 0;\n\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n me.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * me.width / (me.width - offsetLeft), 0);\n me.paddingRight = Math.max((paddingRight - offsetRight + padding) * me.width / (me.width - offsetRight), 0);\n } else {\n var paddingTop = last.height / 2;\n var paddingBottom = first.height / 2;\n\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n\n me.paddingTop = paddingTop + padding;\n me.paddingBottom = paddingBottom + padding;\n }\n }\n }, {\n key: \"_handleMargins\",\n value: function _handleMargins() {\n var me = this;\n\n if (me._margins) {\n me._margins.left = Math.max(me.paddingLeft, me._margins.left);\n me._margins.top = Math.max(me.paddingTop, me._margins.top);\n me._margins.right = Math.max(me.paddingRight, me._margins.right);\n me._margins.bottom = Math.max(me.paddingBottom, me._margins.bottom);\n }\n }\n }, {\n key: \"afterFit\",\n value: function afterFit() {\n callback(this.options.afterFit, [this]);\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n var _this$options = this.options,\n axis = _this$options.axis,\n position = _this$options.position;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n }, {\n key: \"isFullSize\",\n value: function isFullSize() {\n return this.options.fullSize;\n }\n }, {\n key: \"_convertTicksToLabels\",\n value: function _convertTicksToLabels(ticks) {\n var me = this;\n me.beforeTickToLabelConversion();\n me.generateTickLabels(ticks);\n var i, ilen;\n\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n\n me.afterTickToLabelConversion();\n }\n }, {\n key: \"_getLabelSizes\",\n value: function _getLabelSizes() {\n var me = this;\n var labelSizes = me._labelSizes;\n\n if (!labelSizes) {\n var sampleSize = me.options.ticks.sampleSize;\n var ticks = me.ticks;\n\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n me._labelSizes = labelSizes = me._computeLabelSizes(ticks, ticks.length);\n }\n\n return labelSizes;\n }\n }, {\n key: \"_computeLabelSizes\",\n value: function _computeLabelSizes(ticks, length) {\n var ctx = this.ctx,\n caches = this._longestTextCache;\n var widths = [];\n var heights = [];\n var widestLabelSize = 0;\n var highestLabelSize = 0;\n var i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n\n garbageCollect(caches, length);\n var widest = widths.indexOf(widestLabelSize);\n var highest = heights.indexOf(highestLabelSize);\n\n var valueAt = function valueAt(idx) {\n return {\n width: widths[idx] || 0,\n height: heights[idx] || 0\n };\n };\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths: widths,\n heights: heights\n };\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return value;\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value, index) {\n return NaN;\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {}\n }, {\n key: \"getPixelForTick\",\n value: function getPixelForTick(index) {\n var ticks = this.ticks;\n\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n\n return this.getPixelForValue(ticks[index].value);\n }\n }, {\n key: \"getPixelForDecimal\",\n value: function getPixelForDecimal(decimal) {\n var me = this;\n\n if (me._reversePixels) {\n decimal = 1 - decimal;\n }\n\n var pixel = me._startPixel + decimal * me._length;\n return _int16Range(me._alignToPixels ? _alignPixel(me.chart, pixel, 0) : pixel);\n }\n }, {\n key: \"getDecimalForPixel\",\n value: function getDecimalForPixel(pixel) {\n var decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n }, {\n key: \"getBasePixel\",\n value: function getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n }, {\n key: \"getBaseValue\",\n value: function getBaseValue() {\n var min = this.min,\n max = this.max;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n }, {\n key: \"getContext\",\n value: function getContext(index) {\n var me = this;\n var ticks = me.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n var tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(me.getContext(), index, tick));\n }\n\n return me.$context || (me.$context = createScaleContext(me.chart.getContext(), me));\n }\n }, {\n key: \"_tickSize\",\n value: function _tickSize() {\n var me = this;\n var optionTicks = me.options.ticks;\n var rot = toRadians(me.labelRotation);\n var cos = Math.abs(Math.cos(rot));\n var sin = Math.abs(Math.sin(rot));\n\n var labelSizes = me._getLabelSizes();\n\n var padding = optionTicks.autoSkipPadding || 0;\n var w = labelSizes ? labelSizes.widest.width + padding : 0;\n var h = labelSizes ? labelSizes.highest.height + padding : 0;\n return me.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n }, {\n key: \"_isVisible\",\n value: function _isVisible() {\n var display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n }, {\n key: \"_computeGridLineItems\",\n value: function _computeGridLineItems(chartArea) {\n var me = this;\n var axis = me.axis;\n var chart = me.chart;\n var options = me.options;\n var grid = options.grid,\n position = options.position;\n var offset = grid.offset;\n var isHorizontal = me.isHorizontal();\n var ticks = me.ticks;\n var ticksLength = ticks.length + (offset ? 1 : 0);\n var tl = getTickMarkLength(grid);\n var items = [];\n var borderOpts = grid.setContext(me.getContext());\n var axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n var axisHalfWidth = axisWidth / 2;\n\n var alignBorderValue = function alignBorderValue(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n\n var borderValue, i, lineValue, alignedLineValue;\n var tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n if (position === 'top') {\n borderValue = alignBorderValue(me.bottom);\n ty1 = me.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(me.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = me.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(me.right);\n tx1 = me.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(me.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = me.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n var positionAxisID = Object.keys(position)[0];\n var value = position[positionAxisID];\n borderValue = alignBorderValue(me.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n var _positionAxisID2 = Object.keys(position)[0];\n var _value2 = position[_positionAxisID2];\n borderValue = alignBorderValue(me.chart.scales[_positionAxisID2].getPixelForValue(_value2));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n var limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n var step = Math.max(1, Math.ceil(ticksLength / limit));\n\n for (i = 0; i < ticksLength; i += step) {\n var optsAtIndex = grid.setContext(me.getContext(i));\n var lineWidth = optsAtIndex.lineWidth;\n var lineColor = optsAtIndex.color;\n var borderDash = grid.borderDash || [];\n var borderDashOffset = optsAtIndex.borderDashOffset;\n var tickWidth = optsAtIndex.tickWidth;\n var tickColor = optsAtIndex.tickColor;\n var tickBorderDash = optsAtIndex.tickBorderDash || [];\n var tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(me, i, offset);\n\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.push({\n tx1: tx1,\n ty1: ty1,\n tx2: tx2,\n ty2: ty2,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n width: lineWidth,\n color: lineColor,\n borderDash: borderDash,\n borderDashOffset: borderDashOffset,\n tickWidth: tickWidth,\n tickColor: tickColor,\n tickBorderDash: tickBorderDash,\n tickBorderDashOffset: tickBorderDashOffset\n });\n }\n\n me._ticksLength = ticksLength;\n me._borderValue = borderValue;\n return items;\n }\n }, {\n key: \"_computeLabelItems\",\n value: function _computeLabelItems(chartArea) {\n var me = this;\n var axis = me.axis;\n var options = me.options;\n var position = options.position,\n optionTicks = options.ticks;\n var isHorizontal = me.isHorizontal();\n var ticks = me.ticks;\n var align = optionTicks.align,\n crossAlign = optionTicks.crossAlign,\n padding = optionTicks.padding,\n mirror = optionTicks.mirror;\n var tl = getTickMarkLength(options.grid);\n var tickAndPadding = tl + padding;\n var hTickAndPadding = mirror ? -padding : tickAndPadding;\n var rotation = -toRadians(me.labelRotation);\n var items = [];\n var i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n var textBaseline = 'middle';\n\n if (position === 'top') {\n y = me.bottom - hTickAndPadding;\n textAlign = me._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = me.top + hTickAndPadding;\n textAlign = me._getXAxisLabelAlignment();\n } else if (position === 'left') {\n var ret = me._getYAxisLabelAlignment(tl);\n\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n var _ret = me._getYAxisLabelAlignment(tl);\n\n textAlign = _ret.textAlign;\n x = _ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n var positionAxisID = Object.keys(position)[0];\n var value = position[positionAxisID];\n y = me.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n\n textAlign = me._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n var _positionAxisID3 = Object.keys(position)[0];\n var _value3 = position[_positionAxisID3];\n x = me.chart.scales[_positionAxisID3].getPixelForValue(_value3);\n }\n\n textAlign = me._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n var labelSizes = me._getLabelSizes();\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n var optsAtIndex = optionTicks.setContext(me.getContext(i));\n pixel = me.getPixelForTick(i) + optionTicks.labelOffset;\n font = me._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n var halfCount = lineCount / 2;\n var color = optsAtIndex.color;\n var strokeColor = optsAtIndex.textStrokeColor;\n var strokeWidth = optsAtIndex.textStrokeWidth;\n\n if (isHorizontal) {\n x = pixel;\n\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n var backdrop = void 0;\n\n if (optsAtIndex.showLabelBackdrop) {\n var labelPadding = toPadding(optsAtIndex.backdropPadding);\n var height = labelSizes.heights[i];\n var width = labelSizes.widths[i];\n var top = y + textOffset - labelPadding.top;\n var left = x - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n\n case 'bottom':\n top -= height;\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n\n case 'right':\n left -= width;\n break;\n }\n\n backdrop = {\n left: left,\n top: top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n\n items.push({\n rotation: rotation,\n label: label,\n font: font,\n color: color,\n strokeColor: strokeColor,\n strokeWidth: strokeWidth,\n textOffset: textOffset,\n textAlign: textAlign,\n textBaseline: textBaseline,\n translation: [x, y],\n backdrop: backdrop\n });\n }\n\n return items;\n }\n }, {\n key: \"_getXAxisLabelAlignment\",\n value: function _getXAxisLabelAlignment() {\n var me = this;\n var _me$options4 = me.options,\n position = _me$options4.position,\n ticks = _me$options4.ticks;\n var rotation = -toRadians(me.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n var align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n }\n\n return align;\n }\n }, {\n key: \"_getYAxisLabelAlignment\",\n value: function _getYAxisLabelAlignment(tl) {\n var me = this;\n var _me$options5 = me.options,\n position = _me$options5.position,\n _me$options5$ticks = _me$options5.ticks,\n crossAlign = _me$options5$ticks.crossAlign,\n mirror = _me$options5$ticks.mirror,\n padding = _me$options5$ticks.padding;\n\n var labelSizes = me._getLabelSizes();\n\n var tickAndPadding = tl + padding;\n var widest = labelSizes.widest.width;\n var textAlign;\n var x;\n\n if (position === 'left') {\n if (mirror) {\n x = me.right + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = me.right - tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = me.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = me.left + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = me.left + tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = me.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n\n return {\n textAlign: textAlign,\n x: x\n };\n }\n }, {\n key: \"_computeLabelArea\",\n value: function _computeLabelArea() {\n var me = this;\n\n if (me.options.ticks.mirror) {\n return;\n }\n\n var chart = me.chart;\n var position = me.options.position;\n\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: me.left,\n bottom: chart.height,\n right: me.right\n };\n }\n\n if (position === 'top' || position === 'bottom') {\n return {\n top: me.top,\n left: 0,\n bottom: me.bottom,\n right: chart.width\n };\n }\n }\n }, {\n key: \"drawBackground\",\n value: function drawBackground() {\n var ctx = this.ctx,\n backgroundColor = this.options.backgroundColor,\n left = this.left,\n top = this.top,\n width = this.width,\n height = this.height;\n\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n }, {\n key: \"getLineWidthForValue\",\n value: function getLineWidthForValue(value) {\n var me = this;\n var grid = me.options.grid;\n\n if (!me._isVisible() || !grid.display) {\n return 0;\n }\n\n var ticks = me.ticks;\n var index = ticks.findIndex(function (t) {\n return t.value === value;\n });\n\n if (index >= 0) {\n var opts = grid.setContext(me.getContext(index));\n return opts.lineWidth;\n }\n\n return 0;\n }\n }, {\n key: \"drawGrid\",\n value: function drawGrid(chartArea) {\n var me = this;\n var grid = me.options.grid;\n var ctx = me.ctx;\n\n var items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));\n\n var i, ilen;\n\n var drawLine = function drawLine(p1, p2, style) {\n if (!style.width || !style.color) {\n return;\n }\n\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n var item = items[i];\n\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n }, {\n key: \"drawBorder\",\n value: function drawBorder() {\n var me = this;\n var chart = me.chart,\n ctx = me.ctx,\n grid = me.options.grid;\n var borderOpts = grid.setContext(me.getContext());\n var axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n\n if (!axisWidth) {\n return;\n }\n\n var lastLineWidth = grid.setContext(me.getContext(0)).lineWidth;\n var borderValue = me._borderValue;\n var x1, x2, y1, y2;\n\n if (me.isHorizontal()) {\n x1 = _alignPixel(chart, me.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, me.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n }, {\n key: \"drawLabels\",\n value: function drawLabels(chartArea) {\n var me = this;\n var optionTicks = me.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n var ctx = me.ctx;\n\n var area = me._computeLabelArea();\n\n if (area) {\n clipArea(ctx, area);\n }\n\n var items = me._labelItems || (me._labelItems = me._computeLabelItems(chartArea));\n\n var i, ilen;\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n var item = items[i];\n var tickFont = item.font;\n var label = item.label;\n\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n\n var y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {\n var ctx = this.ctx,\n _this$options2 = this.options,\n position = _this$options2.position,\n title = _this$options2.title,\n reverse = _this$options2.reverse;\n\n if (!title.display) {\n return;\n }\n\n var font = toFont(title.font);\n var padding = toPadding(title.padding);\n var align = title.align;\n var offset = font.lineHeight / 2;\n\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n var _titleArgs = titleArgs(this, offset, position, align),\n titleX = _titleArgs.titleX,\n titleY = _titleArgs.titleY,\n maxWidth = _titleArgs.maxWidth,\n rotation = _titleArgs.rotation;\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth: maxWidth,\n rotation: rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n }, {\n key: \"draw\",\n value: function draw(chartArea) {\n var me = this;\n\n if (!me._isVisible()) {\n return;\n }\n\n me.drawBackground();\n me.drawGrid(chartArea);\n me.drawBorder();\n me.drawTitle();\n me.drawLabels(chartArea);\n }\n }, {\n key: \"_layers\",\n value: function _layers() {\n var me = this;\n var opts = me.options;\n var tz = opts.ticks && opts.ticks.z || 0;\n var gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n\n if (!me._isVisible() || me.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: function draw(chartArea) {\n me.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: function draw(chartArea) {\n me.drawBackground();\n me.drawGrid(chartArea);\n me.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: function draw() {\n me.drawBorder();\n }\n }, {\n z: tz,\n draw: function draw(chartArea) {\n me.drawLabels(chartArea);\n }\n }];\n }\n }, {\n key: \"getMatchingVisibleMetas\",\n value: function getMatchingVisibleMetas(type) {\n var me = this;\n var metas = me.chart.getSortedVisibleDatasetMetas();\n var axisID = me.axis + 'AxisID';\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n var meta = metas[i];\n\n if (meta[axisID] === me.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n\n return result;\n }\n }, {\n key: \"_resolveTickFontOptions\",\n value: function _resolveTickFontOptions(index) {\n var opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n }, {\n key: \"_maxDigits\",\n value: function _maxDigits() {\n var me = this;\n\n var fontSize = me._resolveTickFontOptions(0).lineHeight;\n\n return (me.isHorizontal() ? me.width : me.height) / fontSize;\n }\n }]);\n\n return Scale;\n}(Element);\n\nvar TypedRegistry = /*#__PURE__*/function () {\n function TypedRegistry(type, scope, override) {\n _classCallCheck(this, TypedRegistry);\n\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n _createClass(TypedRegistry, [{\n key: \"isForType\",\n value: function isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n }, {\n key: \"register\",\n value: function register(item) {\n var me = this;\n var proto = Object.getPrototypeOf(item);\n var parentScope;\n\n if (isIChartComponent(proto)) {\n parentScope = me.register(proto);\n }\n\n var items = me.items;\n var id = item.id;\n var scope = me.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n\n if (me.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n }, {\n key: \"get\",\n value: function get(id) {\n return this.items[id];\n }\n }, {\n key: \"unregister\",\n value: function unregister(item) {\n var items = this.items;\n var id = item.id;\n var scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n }]);\n\n return TypedRegistry;\n}();\n\nfunction registerDefaults(item, scope, parentScope) {\n var itemDefaults = merge(Object.create(null), [parentScope ? defaults.get(parentScope) : {}, defaults.get(scope), item.defaults]);\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(function (property) {\n var propertyParts = property.split('.');\n var sourceName = propertyParts.pop();\n var sourceScope = [scope].concat(propertyParts).join('.');\n var parts = routes[property].split('.');\n var targetName = parts.pop();\n var targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nvar Registry = /*#__PURE__*/function () {\n function Registry() {\n _classCallCheck(this, Registry);\n\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n _createClass(Registry, [{\n key: \"add\",\n value: function add() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._each('register', args);\n }\n }, {\n key: \"remove\",\n value: function remove() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this._each('unregister', args);\n }\n }, {\n key: \"addControllers\",\n value: function addControllers() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this._each('register', args, this.controllers);\n }\n }, {\n key: \"addElements\",\n value: function addElements() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n this._each('register', args, this.elements);\n }\n }, {\n key: \"addPlugins\",\n value: function addPlugins() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n this._each('register', args, this.plugins);\n }\n }, {\n key: \"addScales\",\n value: function addScales() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n this._each('register', args, this.scales);\n }\n }, {\n key: \"getController\",\n value: function getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n }, {\n key: \"getElement\",\n value: function getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n }, {\n key: \"getPlugin\",\n value: function getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n }, {\n key: \"getScale\",\n value: function getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n }, {\n key: \"removeControllers\",\n value: function removeControllers() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n this._each('unregister', args, this.controllers);\n }\n }, {\n key: \"removeElements\",\n value: function removeElements() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n this._each('unregister', args, this.elements);\n }\n }, {\n key: \"removePlugins\",\n value: function removePlugins() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n this._each('unregister', args, this.plugins);\n }\n }, {\n key: \"removeScales\",\n value: function removeScales() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n\n this._each('unregister', args, this.scales);\n }\n }, {\n key: \"_each\",\n value: function _each(method, args, typedRegistry) {\n var me = this;\n\n _toConsumableArray(args).forEach(function (arg) {\n var reg = typedRegistry || me._getRegistryForType(arg);\n\n if (typedRegistry || reg.isForType(arg) || reg === me.plugins && arg.id) {\n me._exec(method, reg, arg);\n } else {\n each(arg, function (item) {\n var itemReg = typedRegistry || me._getRegistryForType(item);\n\n me._exec(method, itemReg, item);\n });\n }\n });\n }\n }, {\n key: \"_exec\",\n value: function _exec(method, registry, component) {\n var camelMethod = _capitalize(method);\n\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n }, {\n key: \"_getRegistryForType\",\n value: function _getRegistryForType(type) {\n for (var i = 0; i < this._typedRegistries.length; i++) {\n var reg = this._typedRegistries[i];\n\n if (reg.isForType(type)) {\n return reg;\n }\n }\n\n return this.plugins;\n }\n }, {\n key: \"_get\",\n value: function _get(id, typedRegistry, type) {\n var item = typedRegistry.get(id);\n\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n\n return item;\n }\n }]);\n\n return Registry;\n}();\n\nvar registry = new Registry();\n\nvar PluginService = /*#__PURE__*/function () {\n function PluginService() {\n _classCallCheck(this, PluginService);\n\n this._init = [];\n }\n\n _createClass(PluginService, [{\n key: \"notify\",\n value: function notify(chart, hook, args, filter) {\n var me = this;\n\n if (hook === 'beforeInit') {\n me._init = me._createDescriptors(chart, true);\n\n me._notify(me._init, chart, 'install');\n }\n\n var descriptors = filter ? me._descriptors(chart).filter(filter) : me._descriptors(chart);\n\n var result = me._notify(descriptors, chart, hook, args);\n\n if (hook === 'destroy') {\n me._notify(descriptors, chart, 'stop');\n\n me._notify(me._init, chart, 'uninstall');\n }\n\n return result;\n }\n }, {\n key: \"_notify\",\n value: function _notify(descriptors, chart, hook, args) {\n args = args || {};\n\n var _iterator7 = _createForOfIteratorHelper(descriptors),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var descriptor = _step7.value;\n var plugin = descriptor.plugin;\n var method = plugin[hook];\n var params = [chart, args, descriptor.options];\n\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n return true;\n }\n }, {\n key: \"invalidate\",\n value: function invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n }, {\n key: \"_descriptors\",\n value: function _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n var descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n }, {\n key: \"_createDescriptors\",\n value: function _createDescriptors(chart, all) {\n var config = chart && chart.config;\n var options = valueOrDefault(config.options && config.options.plugins, {});\n var plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n }, {\n key: \"_notifyStateChanges\",\n value: function _notifyStateChanges(chart) {\n var previousDescriptors = this._oldCache || [];\n var descriptors = this._cache;\n\n var diff = function diff(a, b) {\n return a.filter(function (x) {\n return !b.some(function (y) {\n return x.plugin.id === y.plugin.id;\n });\n });\n };\n\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n }]);\n\n return PluginService;\n}();\n\nfunction allPlugins(config) {\n var plugins = [];\n var keys = Object.keys(registry.plugins.items);\n\n for (var i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n var local = config.plugins || [];\n\n for (var _i2 = 0; _i2 < local.length; _i2++) {\n var plugin = local[_i2];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n }\n }\n\n return plugins;\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n\n if (options === true) {\n return {};\n }\n\n return options;\n}\n\nfunction createDescriptors(chart, plugins, options, all) {\n var result = [];\n var context = chart.getContext();\n\n for (var i = 0; i < plugins.length; i++) {\n var plugin = plugins[i];\n var id = plugin.id;\n var opts = getOpts(options[id], all);\n\n if (opts === null) {\n continue;\n }\n\n result.push({\n plugin: plugin,\n options: pluginOpts(chart.config, plugin, opts, context)\n });\n }\n\n return result;\n}\n\nfunction pluginOpts(config, plugin, opts, context) {\n var keys = config.pluginScopeKeys(plugin);\n var scopes = config.getOptionScopes(opts, keys);\n return config.createResolver(scopes, context, [''], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n var datasetDefaults = defaults.datasets[type] || {};\n var datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n var axis = id;\n\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\n\nfunction mergeScaleConfig(config, options) {\n var chartDefaults = overrides[config.type] || {\n scales: {}\n };\n var configScales = options.scales || {};\n var chartIndexAxis = getIndexAxis(config.type, options);\n var firstIDs = Object.create(null);\n var scales = Object.create(null);\n Object.keys(configScales).forEach(function (id) {\n var scaleConf = configScales[id];\n var axis = determineAxis(id, scaleConf);\n var defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n var defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{\n axis: axis\n }, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(function (dataset) {\n var type = dataset.type || config.type;\n var indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n var datasetDefaults = overrides[type] || {};\n var defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(function (defaultID) {\n var axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n var id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{\n axis: axis\n }, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(function (key) {\n var scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\n\nfunction initOptions(config) {\n var options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\n\nvar keyCache = new Map();\nvar keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n var keys = keyCache.get(cacheKey);\n\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n\n return keys;\n}\n\nvar addIfFound = function addIfFound(set, obj, key) {\n var opts = resolveObjectKey(obj, key);\n\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nvar Config = /*#__PURE__*/function () {\n function Config(config) {\n _classCallCheck(this, Config);\n\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n _createClass(Config, [{\n key: \"platform\",\n get: function get() {\n return this._config.platform;\n }\n }, {\n key: \"type\",\n get: function get() {\n return this._config.type;\n },\n set: function set(type) {\n this._config.type = type;\n }\n }, {\n key: \"data\",\n get: function get() {\n return this._config.data;\n },\n set: function set(data) {\n this._config.data = initData(data);\n }\n }, {\n key: \"options\",\n get: function get() {\n return this._config.options;\n },\n set: function set(options) {\n this._config.options = options;\n }\n }, {\n key: \"plugins\",\n get: function get() {\n return this._config.plugins;\n }\n }, {\n key: \"update\",\n value: function update() {\n var config = this._config;\n this.clearCache();\n initOptions(config);\n }\n }, {\n key: \"clearCache\",\n value: function clearCache() {\n this._scopeCache.clear();\n\n this._resolverCache.clear();\n }\n }, {\n key: \"datasetScopeKeys\",\n value: function datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, function () {\n return [[\"datasets.\".concat(datasetType), '']];\n });\n }\n }, {\n key: \"datasetAnimationScopeKeys\",\n value: function datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(\"\".concat(datasetType, \".transition.\").concat(transition), function () {\n return [[\"datasets.\".concat(datasetType, \".transitions.\").concat(transition), \"transitions.\".concat(transition)], [\"datasets.\".concat(datasetType), '']];\n });\n }\n }, {\n key: \"datasetElementScopeKeys\",\n value: function datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(\"\".concat(datasetType, \"-\").concat(elementType), function () {\n return [[\"datasets.\".concat(datasetType, \".elements.\").concat(elementType), \"datasets.\".concat(datasetType), \"elements.\".concat(elementType), '']];\n });\n }\n }, {\n key: \"pluginScopeKeys\",\n value: function pluginScopeKeys(plugin) {\n var id = plugin.id;\n var type = this.type;\n return cachedKeys(\"\".concat(type, \"-plugin-\").concat(id), function () {\n return [[\"plugins.\".concat(id)].concat(_toConsumableArray(plugin.additionalOptionScopes || []))];\n });\n }\n }, {\n key: \"_cachedScopes\",\n value: function _cachedScopes(mainScope, resetCache) {\n var _scopeCache = this._scopeCache;\n\n var cache = _scopeCache.get(mainScope);\n\n if (!cache || resetCache) {\n cache = new Map();\n\n _scopeCache.set(mainScope, cache);\n }\n\n return cache;\n }\n }, {\n key: \"getOptionScopes\",\n value: function getOptionScopes(mainScope, keyLists, resetCache) {\n var options = this.options,\n type = this.type;\n\n var cache = this._cachedScopes(mainScope, resetCache);\n\n var cached = cache.get(keyLists);\n\n if (cached) {\n return cached;\n }\n\n var scopes = new Set();\n keyLists.forEach(function (keys) {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(function (key) {\n return addIfFound(scopes, mainScope, key);\n });\n }\n\n keys.forEach(function (key) {\n return addIfFound(scopes, options, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, overrides[type] || {}, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, defaults, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, descriptors, key);\n });\n });\n var array = Array.from(scopes);\n\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n\n return array;\n }\n }, {\n key: \"chartOptionScopes\",\n value: function chartOptionScopes() {\n var options = this.options,\n type = this.type;\n return [options, overrides[type] || {}, defaults.datasets[type] || {}, {\n type: type\n }, defaults, descriptors];\n }\n }, {\n key: \"resolveNamedOptions\",\n value: function resolveNamedOptions(scopes, names, context) {\n var prefixes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [''];\n var result = {\n $shared: true\n };\n\n var _getResolver = getResolver(this._resolverCache, scopes, prefixes),\n resolver = _getResolver.resolver,\n subPrefixes = _getResolver.subPrefixes;\n\n var options = resolver;\n\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n var subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n var _iterator8 = _createForOfIteratorHelper(names),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var prop = _step8.value;\n result[prop] = options[prop];\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n return result;\n }\n }, {\n key: \"createResolver\",\n value: function createResolver(scopes, context) {\n var prefixes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [''];\n var descriptorDefaults = arguments.length > 3 ? arguments[3] : undefined;\n\n var _getResolver2 = getResolver(this._resolverCache, scopes, prefixes),\n resolver = _getResolver2.resolver;\n\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n }]);\n\n return Config;\n}();\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n var cache = resolverCache.get(scopes);\n\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n\n var cacheKey = prefixes.join();\n var cached = cache.get(cacheKey);\n\n if (!cached) {\n var resolver = _createResolver(scopes, prefixes);\n\n cached = {\n resolver: resolver,\n subPrefixes: prefixes.filter(function (p) {\n return !p.toLowerCase().includes('hover');\n })\n };\n cache.set(cacheKey, cached);\n }\n\n return cached;\n}\n\nfunction needContext(proxy, names) {\n var _descriptors2 = _descriptors(proxy),\n isScriptable = _descriptors2.isScriptable,\n isIndexable = _descriptors2.isIndexable;\n\n var _iterator9 = _createForOfIteratorHelper(names),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var prop = _step9.value;\n\n if (isScriptable(prop) && isFunction(proxy[prop]) || isIndexable(prop) && isArray(proxy[prop])) {\n return true;\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n return false;\n}\n\nvar version = \"3.5.1\";\nvar KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\n\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\n\nfunction compare2Level(l1, l2) {\n return function (a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\n\nfunction onAnimationsComplete(context) {\n var chart = context.chart;\n var animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n var chart = context.chart;\n var animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n\n if (item && item.canvas) {\n item = item.canvas;\n }\n\n return item;\n}\n\nvar instances = {};\n\nvar getChart = function getChart(key) {\n var canvas = getCanvas(key);\n return Object.values(instances).filter(function (c) {\n return c.canvas === canvas;\n }).pop();\n};\n\nvar Chart = /*#__PURE__*/function () {\n function Chart(item, userConfig) {\n var _this5 = this;\n\n _classCallCheck(this, Chart);\n\n var me = this;\n var config = this.config = new Config(userConfig);\n var initialCanvas = getCanvas(item);\n var existingChart = getChart(initialCanvas);\n\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas can be reused.');\n }\n\n var options = config.createResolver(config.chartOptionScopes(), me.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n var context = me.platform.acquireContext(initialCanvas, options.aspectRatio);\n var canvas = context && context.canvas;\n var height = canvas && canvas.height;\n var width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(function () {\n return _this5.update('resize');\n }, options.resizeDelay || 0);\n instances[me.id] = me;\n\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(me, 'complete', onAnimationsComplete);\n animator.listen(me, 'progress', onAnimationProgress);\n\n me._initialize();\n\n if (me.attached) {\n me.update();\n }\n }\n\n _createClass(Chart, [{\n key: \"aspectRatio\",\n get: function get() {\n var _this$options3 = this.options,\n aspectRatio = _this$options3.aspectRatio,\n maintainAspectRatio = _this$options3.maintainAspectRatio,\n width = this.width,\n height = this.height,\n _aspectRatio = this._aspectRatio;\n\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n\n return height ? width / height : null;\n }\n }, {\n key: \"data\",\n get: function get() {\n return this.config.data;\n },\n set: function set(data) {\n this.config.data = data;\n }\n }, {\n key: \"options\",\n get: function get() {\n return this._options;\n },\n set: function set(options) {\n this.config.options = options;\n }\n }, {\n key: \"_initialize\",\n value: function _initialize() {\n var me = this;\n me.notifyPlugins('beforeInit');\n\n if (me.options.responsive) {\n me.resize();\n } else {\n retinaScale(me, me.options.devicePixelRatio);\n }\n\n me.bindEvents();\n me.notifyPlugins('afterInit');\n return me;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n }, {\n key: \"stop\",\n value: function stop() {\n animator.stop(this);\n return this;\n }\n }, {\n key: \"resize\",\n value: function resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width: width,\n height: height\n };\n }\n }\n }, {\n key: \"_resize\",\n value: function _resize(width, height) {\n var me = this;\n var options = me.options;\n var canvas = me.canvas;\n var aspectRatio = options.maintainAspectRatio && me.aspectRatio;\n var newSize = me.platform.getMaximumSize(canvas, width, height, aspectRatio);\n var newRatio = options.devicePixelRatio || me.platform.getDevicePixelRatio();\n me.width = newSize.width;\n me.height = newSize.height;\n me._aspectRatio = me.aspectRatio;\n\n if (!retinaScale(me, newRatio, true)) {\n return;\n }\n\n me.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [me, newSize], me);\n\n if (me.attached) {\n if (me._doResize()) {\n me.render();\n }\n }\n }\n }, {\n key: \"ensureScalesHaveIDs\",\n value: function ensureScalesHaveIDs() {\n var options = this.options;\n var scalesOptions = options.scales || {};\n each(scalesOptions, function (axisOptions, axisID) {\n axisOptions.id = axisID;\n });\n }\n }, {\n key: \"buildOrUpdateScales\",\n value: function buildOrUpdateScales() {\n var me = this;\n var options = me.options;\n var scaleOpts = options.scales;\n var scales = me.scales;\n var updated = Object.keys(scales).reduce(function (obj, id) {\n obj[id] = false;\n return obj;\n }, {});\n var items = [];\n\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map(function (id) {\n var scaleOptions = scaleOpts[id];\n var axis = determineAxis(id, scaleOptions);\n var isRadial = axis === 'r';\n var isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n\n each(items, function (item) {\n var scaleOptions = item.options;\n var id = scaleOptions.id;\n var axis = determineAxis(id, scaleOptions);\n var scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n var scale = null;\n\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n var scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id: id,\n type: scaleType,\n ctx: me.ctx,\n chart: me\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n each(updated, function (hasUpdated, id) {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, function (scale) {\n layouts.configure(me, scale, scale.options);\n layouts.addBox(me, scale);\n });\n }\n }, {\n key: \"_updateMetasets\",\n value: function _updateMetasets() {\n var me = this;\n var metasets = me._metasets;\n var numData = me.data.datasets.length;\n var numMeta = metasets.length;\n metasets.sort(function (a, b) {\n return a.index - b.index;\n });\n\n if (numMeta > numData) {\n for (var i = numData; i < numMeta; ++i) {\n me._destroyDatasetMeta(i);\n }\n\n metasets.splice(numData, numMeta - numData);\n }\n\n me._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n }, {\n key: \"_removeUnreferencedMetasets\",\n value: function _removeUnreferencedMetasets() {\n var me = this;\n var metasets = me._metasets,\n datasets = me.data.datasets;\n\n if (metasets.length > datasets.length) {\n delete me._stacks;\n }\n\n metasets.forEach(function (meta, index) {\n if (datasets.filter(function (x) {\n return x === meta._dataset;\n }).length === 0) {\n me._destroyDatasetMeta(index);\n }\n });\n }\n }, {\n key: \"buildOrUpdateControllers\",\n value: function buildOrUpdateControllers() {\n var me = this;\n var newControllers = [];\n var datasets = me.data.datasets;\n var i, ilen;\n\n me._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n var dataset = datasets[i];\n var meta = me.getDatasetMeta(i);\n var type = dataset.type || me.config.type;\n\n if (meta.type && meta.type !== type) {\n me._destroyDatasetMeta(i);\n\n meta = me.getDatasetMeta(i);\n }\n\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, me.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = me.isDatasetVisible(i);\n\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n var ControllerClass = registry.getController(type);\n var _defaults$datasets$ty = defaults.datasets[type],\n datasetElementType = _defaults$datasets$ty.datasetElementType,\n dataElementType = _defaults$datasets$ty.dataElementType;\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(me, i);\n newControllers.push(meta.controller);\n }\n }\n\n me._updateMetasets();\n\n return newControllers;\n }\n }, {\n key: \"_resetElements\",\n value: function _resetElements() {\n var me = this;\n each(me.data.datasets, function (dataset, datasetIndex) {\n me.getDatasetMeta(datasetIndex).controller.reset();\n }, me);\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this._resetElements();\n\n this.notifyPlugins('reset');\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var config = me.config;\n config.update();\n me._options = config.createResolver(config.chartOptionScopes(), me.getContext());\n each(me.scales, function (scale) {\n layouts.removeBox(me, scale);\n });\n var animsDisabled = me._animationsDisabled = !me.options.animation;\n me.ensureScalesHaveIDs();\n me.buildOrUpdateScales();\n var existingEvents = new Set(Object.keys(me._listeners));\n var newEvents = new Set(me.options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== me.options.responsive) {\n me.unbindEvents();\n me.bindEvents();\n }\n\n me._plugins.invalidate();\n\n if (me.notifyPlugins('beforeUpdate', {\n mode: mode,\n cancelable: true\n }) === false) {\n return;\n }\n\n var newControllers = me.buildOrUpdateControllers();\n me.notifyPlugins('beforeElementsUpdate');\n var minPadding = 0;\n\n for (var i = 0, ilen = me.data.datasets.length; i < ilen; i++) {\n var _me$getDatasetMeta = me.getDatasetMeta(i),\n controller = _me$getDatasetMeta.controller;\n\n var reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n\n me._minPadding = minPadding;\n\n me._updateLayout(minPadding);\n\n if (!animsDisabled) {\n each(newControllers, function (controller) {\n controller.reset();\n });\n }\n\n me._updateDatasets(mode);\n\n me.notifyPlugins('afterUpdate', {\n mode: mode\n });\n\n me._layers.sort(compare2Level('z', '_idx'));\n\n if (me._lastEvent) {\n me._eventHandler(me._lastEvent, true);\n }\n\n me.render();\n }\n }, {\n key: \"_updateLayout\",\n value: function _updateLayout(minPadding) {\n var me = this;\n\n if (me.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n\n layouts.update(me, me.width, me.height, minPadding);\n var area = me.chartArea;\n var noArea = area.width <= 0 || area.height <= 0;\n me._layers = [];\n each(me.boxes, function (box) {\n var _me$_layers;\n\n if (noArea && box.position === 'chartArea') {\n return;\n }\n\n if (box.configure) {\n box.configure();\n }\n\n (_me$_layers = me._layers).push.apply(_me$_layers, _toConsumableArray(box._layers()));\n }, me);\n\n me._layers.forEach(function (item, index) {\n item._idx = index;\n });\n\n me.notifyPlugins('afterLayout');\n }\n }, {\n key: \"_updateDatasets\",\n value: function _updateDatasets(mode) {\n var me = this;\n var isFunction = typeof mode === 'function';\n\n if (me.notifyPlugins('beforeDatasetsUpdate', {\n mode: mode,\n cancelable: true\n }) === false) {\n return;\n }\n\n for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n me._updateDataset(i, isFunction ? mode({\n datasetIndex: i\n }) : mode);\n }\n\n me.notifyPlugins('afterDatasetsUpdate', {\n mode: mode\n });\n }\n }, {\n key: \"_updateDataset\",\n value: function _updateDataset(index, mode) {\n var me = this;\n var meta = me.getDatasetMeta(index);\n var args = {\n meta: meta,\n index: index,\n mode: mode,\n cancelable: true\n };\n\n if (me.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n me.notifyPlugins('afterDatasetUpdate', args);\n }\n }, {\n key: \"render\",\n value: function render() {\n var me = this;\n\n if (me.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n\n if (animator.has(me)) {\n if (me.attached && !animator.running(me)) {\n animator.start(me);\n }\n } else {\n me.draw();\n onAnimationsComplete({\n chart: me\n });\n }\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var me = this;\n var i;\n\n if (me._resizeBeforeDraw) {\n var _me$_resizeBeforeDraw = me._resizeBeforeDraw,\n width = _me$_resizeBeforeDraw.width,\n height = _me$_resizeBeforeDraw.height;\n\n me._resize(width, height);\n\n me._resizeBeforeDraw = null;\n }\n\n me.clear();\n\n if (me.width <= 0 || me.height <= 0) {\n return;\n }\n\n if (me.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n\n var layers = me._layers;\n\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(me.chartArea);\n }\n\n me._drawDatasets();\n\n for (; i < layers.length; ++i) {\n layers[i].draw(me.chartArea);\n }\n\n me.notifyPlugins('afterDraw');\n }\n }, {\n key: \"_getSortedDatasetMetas\",\n value: function _getSortedDatasetMetas(filterVisible) {\n var me = this;\n var metasets = me._sortedMetasets;\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n var meta = metasets[i];\n\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n }, {\n key: \"getSortedVisibleDatasetMetas\",\n value: function getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n }, {\n key: \"_drawDatasets\",\n value: function _drawDatasets() {\n var me = this;\n\n if (me.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n\n var metasets = me.getSortedVisibleDatasetMetas();\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n me._drawDataset(metasets[i]);\n }\n\n me.notifyPlugins('afterDatasetsDraw');\n }\n }, {\n key: \"_drawDataset\",\n value: function _drawDataset(meta) {\n var me = this;\n var ctx = me.ctx;\n var clip = meta._clip;\n var useClip = !clip.disabled;\n var area = me.chartArea;\n var args = {\n meta: meta,\n index: meta.index,\n cancelable: true\n };\n\n if (me.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? me.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? me.height : area.bottom + clip.bottom\n });\n }\n\n meta.controller.draw();\n\n if (useClip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n me.notifyPlugins('afterDatasetDraw', args);\n }\n }, {\n key: \"getElementsAtEventForMode\",\n value: function getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n var method = Interaction.modes[mode];\n\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n }, {\n key: \"getDatasetMeta\",\n value: function getDatasetMeta(datasetIndex) {\n var me = this;\n var dataset = me.data.datasets[datasetIndex];\n var metasets = me._metasets;\n var meta = metasets.filter(function (x) {\n return x && x._dataset === dataset;\n }).pop();\n\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n\n return meta;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.$context || (this.$context = {\n chart: this,\n type: 'chart'\n });\n }\n }, {\n key: \"getVisibleDatasetCount\",\n value: function getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n }, {\n key: \"isDatasetVisible\",\n value: function isDatasetVisible(datasetIndex) {\n var dataset = this.data.datasets[datasetIndex];\n\n if (!dataset) {\n return false;\n }\n\n var meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n }, {\n key: \"setDatasetVisibility\",\n value: function setDatasetVisibility(datasetIndex, visible) {\n var meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n }, {\n key: \"toggleDataVisibility\",\n value: function toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n }, {\n key: \"getDataVisibility\",\n value: function getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n }, {\n key: \"_updateVisibility\",\n value: function _updateVisibility(datasetIndex, dataIndex, visible) {\n var me = this;\n var mode = visible ? 'show' : 'hide';\n var meta = me.getDatasetMeta(datasetIndex);\n\n var anims = meta.controller._resolveAnimations(undefined, mode);\n\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n me.update();\n } else {\n me.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible: visible\n });\n me.update(function (ctx) {\n return ctx.datasetIndex === datasetIndex ? mode : undefined;\n });\n }\n }\n }, {\n key: \"hide\",\n value: function hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n }, {\n key: \"show\",\n value: function show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n }, {\n key: \"_destroyDatasetMeta\",\n value: function _destroyDatasetMeta(datasetIndex) {\n var me = this;\n var meta = me._metasets && me._metasets[datasetIndex];\n\n if (meta && meta.controller) {\n meta.controller._destroy();\n\n delete me._metasets[datasetIndex];\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var me = this;\n var canvas = me.canvas,\n ctx = me.ctx;\n var i, ilen;\n me.stop();\n animator.remove(me);\n\n for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n me._destroyDatasetMeta(i);\n }\n\n me.config.clearCache();\n\n if (canvas) {\n me.unbindEvents();\n clearCanvas(canvas, ctx);\n me.platform.releaseContext(ctx);\n me.canvas = null;\n me.ctx = null;\n }\n\n me.notifyPlugins('destroy');\n delete instances[me.id];\n }\n }, {\n key: \"toBase64Image\",\n value: function toBase64Image() {\n var _this$canvas;\n\n return (_this$canvas = this.canvas).toDataURL.apply(_this$canvas, arguments);\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.bindUserEvents();\n\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n }, {\n key: \"bindUserEvents\",\n value: function bindUserEvents() {\n var me = this;\n var listeners = me._listeners;\n var platform = me.platform;\n\n var _add = function _add(type, listener) {\n platform.addEventListener(me, type, listener);\n listeners[type] = listener;\n };\n\n var listener = function listener(e, x, y) {\n e.offsetX = x;\n e.offsetY = y;\n\n me._eventHandler(e);\n };\n\n each(me.options.events, function (type) {\n return _add(type, listener);\n });\n }\n }, {\n key: \"bindResponsiveEvents\",\n value: function bindResponsiveEvents() {\n var me = this;\n\n if (!me._responsiveListeners) {\n me._responsiveListeners = {};\n }\n\n var listeners = me._responsiveListeners;\n var platform = me.platform;\n\n var _add = function _add(type, listener) {\n platform.addEventListener(me, type, listener);\n listeners[type] = listener;\n };\n\n var _remove = function _remove(type, listener) {\n if (listeners[type]) {\n platform.removeEventListener(me, type, listener);\n delete listeners[type];\n }\n };\n\n var listener = function listener(width, height) {\n if (me.canvas) {\n me.resize(width, height);\n }\n };\n\n var detached;\n\n var attached = function attached() {\n _remove('attach', attached);\n\n me.attached = true;\n me.resize();\n\n _add('resize', listener);\n\n _add('detach', detached);\n };\n\n detached = function detached() {\n me.attached = false;\n\n _remove('resize', listener);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(me.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {\n var me = this;\n each(me._listeners, function (listener, type) {\n me.platform.removeEventListener(me, type, listener);\n });\n me._listeners = {};\n each(me._responsiveListeners, function (listener, type) {\n me.platform.removeEventListener(me, type, listener);\n });\n me._responsiveListeners = undefined;\n }\n }, {\n key: \"updateHoverStyle\",\n value: function updateHoverStyle(items, mode, enabled) {\n var prefix = enabled ? 'set' : 'remove';\n var meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n var controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n }, {\n key: \"getActiveElements\",\n value: function getActiveElements() {\n return this._active || [];\n }\n }, {\n key: \"setActiveElements\",\n value: function setActiveElements(activeElements) {\n var me = this;\n var lastActive = me._active || [];\n var active = activeElements.map(function (_ref4) {\n var datasetIndex = _ref4.datasetIndex,\n index = _ref4.index;\n var meta = me.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex: datasetIndex,\n element: meta.data[index],\n index: index\n };\n });\n var changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n me._active = active;\n\n me._updateHoverStyles(active, lastActive);\n }\n }\n }, {\n key: \"notifyPlugins\",\n value: function notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n }, {\n key: \"_updateHoverStyles\",\n value: function _updateHoverStyles(active, lastActive, replay) {\n var me = this;\n var hoverOptions = me.options.hover;\n\n var diff = function diff(a, b) {\n return a.filter(function (x) {\n return !b.some(function (y) {\n return x.datasetIndex === y.datasetIndex && x.index === y.index;\n });\n });\n };\n\n var deactivated = diff(lastActive, active);\n var activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n me.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n me.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n }, {\n key: \"_eventHandler\",\n value: function _eventHandler(e, replay) {\n var _this6 = this;\n\n var me = this;\n var args = {\n event: e,\n replay: replay,\n cancelable: true\n };\n\n var eventFilter = function eventFilter(plugin) {\n return (plugin.options.events || _this6.options.events).includes(e.type);\n };\n\n if (me.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n var changed = me._handleEvent(e, replay);\n\n args.cancelable = false;\n me.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n me.render();\n }\n\n return me;\n }\n }, {\n key: \"_handleEvent\",\n value: function _handleEvent(e, replay) {\n var me = this;\n var _me$_active = me._active,\n lastActive = _me$_active === void 0 ? [] : _me$_active,\n options = me.options;\n var hoverOptions = options.hover;\n var useFinalPosition = replay;\n var active = [];\n var changed = false;\n var lastEvent = null;\n\n if (e.type !== 'mouseout') {\n active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n lastEvent = e.type === 'click' ? me._lastEvent : e;\n }\n\n me._lastEvent = null;\n\n if (_isPointInArea(e, me.chartArea, me._minPadding)) {\n callback(options.onHover, [e, active, me], me);\n\n if (e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu') {\n callback(options.onClick, [e, active, me], me);\n }\n }\n\n changed = !_elementsEqual(active, lastActive);\n\n if (changed || replay) {\n me._active = active;\n\n me._updateHoverStyles(active, lastActive, replay);\n }\n\n me._lastEvent = lastEvent;\n return changed;\n }\n }]);\n\n return Chart;\n}();\n\nvar invalidatePlugins = function invalidatePlugins() {\n return each(Chart.instances, function (chart) {\n return chart._plugins.invalidate();\n });\n};\n\nvar enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable: enumerable,\n value: defaults\n },\n instances: {\n enumerable: enumerable,\n value: instances\n },\n overrides: {\n enumerable: enumerable,\n value: overrides\n },\n registry: {\n enumerable: enumerable,\n value: registry\n },\n version: {\n enumerable: enumerable,\n value: version\n },\n getChart: {\n enumerable: enumerable,\n value: getChart\n },\n register: {\n enumerable: enumerable,\n value: function value() {\n registry.add.apply(registry, arguments);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable: enumerable,\n value: function value() {\n registry.remove.apply(registry, arguments);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n var startAngle = element.startAngle,\n pixelMargin = element.pixelMargin,\n x = element.x,\n y = element.y,\n outerRadius = element.outerRadius,\n innerRadius = element.innerRadius;\n var angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n var o = toRadiusCorners(arc.options.borderRadius);\n var halfThickness = (outerRadius - innerRadius) / 2;\n var innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n var computeOuterLimit = function computeOuterLimit(val) {\n var outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n\nfunction pathArc(ctx, element, offset, spacing, end) {\n var x = element.x,\n y = element.y,\n start = element.startAngle,\n pixelMargin = element.pixelMargin,\n innerR = element.innerRadius;\n var outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n var innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n var spacingOffset = 0;\n var alpha = end - start;\n\n if (spacing) {\n var noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n var noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n var avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n var adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n var beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n var angleOffset = (alpha - beta) / 2;\n var startAngle = start + angleOffset + spacingOffset;\n var endAngle = end - angleOffset - spacingOffset;\n\n var _parseBorderRadius$ = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle),\n outerStart = _parseBorderRadius$.outerStart,\n outerEnd = _parseBorderRadius$.outerEnd,\n innerStart = _parseBorderRadius$.innerStart,\n innerEnd = _parseBorderRadius$.innerEnd;\n\n var outerStartAdjustedRadius = outerRadius - outerStart;\n var outerEndAdjustedRadius = outerRadius - outerEnd;\n var outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n var outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n var innerStartAdjustedRadius = innerRadius + innerStart;\n var innerEndAdjustedRadius = innerRadius + innerEnd;\n var innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n var innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n\n if (outerEnd > 0) {\n var pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n var p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n if (innerEnd > 0) {\n var _pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n\n ctx.arc(_pCenter.x, _pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, startAngle + innerStart / innerRadius, true);\n\n if (innerStart > 0) {\n var _pCenter2 = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n\n ctx.arc(_pCenter2.x, _pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n var p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n if (outerStart > 0) {\n var _pCenter3 = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n\n ctx.arc(_pCenter3.x, _pCenter3.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(ctx, element, offset, spacing) {\n var fullCircles = element.fullCircles,\n startAngle = element.startAngle,\n circumference = element.circumference;\n var endAngle = element.endAngle;\n\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU);\n\n for (var i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawFullCircleBorders(ctx, element, inner) {\n var x = element.x,\n y = element.y,\n startAngle = element.startAngle,\n pixelMargin = element.pixelMargin,\n fullCircles = element.fullCircles;\n var outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n var innerRadius = element.innerRadius + pixelMargin;\n var i;\n\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\n\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n var options = element.options;\n var inner = options.borderAlign === 'inner';\n\n if (!options.borderWidth) {\n return;\n }\n\n if (inner) {\n ctx.lineWidth = options.borderWidth * 2;\n ctx.lineJoin = 'round';\n } else {\n ctx.lineWidth = options.borderWidth;\n ctx.lineJoin = 'bevel';\n }\n\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.stroke();\n}\n\nvar ArcElement = /*#__PURE__*/function (_Element2) {\n _inherits(ArcElement, _Element2);\n\n var _super12 = _createSuper(ArcElement);\n\n function ArcElement(cfg) {\n var _this7;\n\n _classCallCheck(this, ArcElement);\n\n _this7 = _super12.call(this);\n _this7.options = undefined;\n _this7.circumference = undefined;\n _this7.startAngle = undefined;\n _this7.endAngle = undefined;\n _this7.innerRadius = undefined;\n _this7.outerRadius = undefined;\n _this7.pixelMargin = 0;\n _this7.fullCircles = 0;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this7), cfg);\n }\n\n return _this7;\n }\n\n _createClass(ArcElement, [{\n key: \"inRange\",\n value: function inRange(chartX, chartY, useFinalPosition) {\n var point = this.getProps(['x', 'y'], useFinalPosition);\n\n var _getAngleFromPoint = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n }),\n angle = _getAngleFromPoint.angle,\n distance = _getAngleFromPoint.distance;\n\n var _this$getProps2 = this.getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),\n startAngle = _this$getProps2.startAngle,\n endAngle = _this$getProps2.endAngle,\n innerRadius = _this$getProps2.innerRadius,\n outerRadius = _this$getProps2.outerRadius,\n circumference = _this$getProps2.circumference;\n\n var rAdjust = this.options.spacing / 2;\n\n var betweenAngles = circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n\n var withinRadius = distance >= innerRadius + rAdjust && distance <= outerRadius + rAdjust;\n return betweenAngles && withinRadius;\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps3 = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),\n x = _this$getProps3.x,\n y = _this$getProps3.y,\n startAngle = _this$getProps3.startAngle,\n endAngle = _this$getProps3.endAngle,\n innerRadius = _this$getProps3.innerRadius,\n outerRadius = _this$getProps3.outerRadius;\n\n var _this$options4 = this.options,\n offset = _this$options4.offset,\n spacing = _this$options4.spacing;\n var halfAngle = (startAngle + endAngle) / 2;\n var halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n }, {\n key: \"tooltipPosition\",\n value: function tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n }, {\n key: \"draw\",\n value: function draw(ctx) {\n var me = this;\n var options = me.options,\n circumference = me.circumference;\n var offset = (options.offset || 0) / 2;\n var spacing = (options.spacing || 0) / 2;\n me.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n me.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || me.innerRadius < 0 || me.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n var radiusOffset = 0;\n\n if (offset) {\n radiusOffset = offset / 2;\n var halfAngle = (me.startAngle + me.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n\n if (me.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n var endAngle = drawArc(ctx, me, radiusOffset, spacing);\n drawBorder(ctx, me, radiusOffset, spacing, endAngle);\n ctx.restore();\n }\n }]);\n\n return ArcElement;\n}(Element);\n\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options) {\n var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : options;\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var count = points.length;\n var _params$start = params.start,\n paramsStart = _params$start === void 0 ? 0 : _params$start,\n _params$end = params.end,\n paramsEnd = _params$end === void 0 ? count - 1 : _params$end;\n var segmentStart = segment.start,\n segmentEnd = segment.end;\n var start = Math.max(paramsStart, segmentStart);\n var end = Math.min(paramsEnd, segmentEnd);\n var outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count: count,\n start: start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\nfunction pathSegment(ctx, line, segment, params) {\n var points = line.points,\n options = line.options;\n\n var _pathVars = pathVars(points, segment, params),\n count = _pathVars.count,\n start = _pathVars.start,\n loop = _pathVars.loop,\n ilen = _pathVars.ilen;\n\n var lineMethod = getLineMethod(options);\n\n var _ref5 = params || {},\n _ref5$move = _ref5.move,\n move = _ref5$move === void 0 ? true : _ref5$move,\n reverse = _ref5.reverse;\n\n var i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\nfunction fastPathSegment(ctx, line, segment, params) {\n var points = line.points;\n\n var _pathVars2 = pathVars(points, segment, params),\n count = _pathVars2.count,\n start = _pathVars2.start,\n ilen = _pathVars2.ilen;\n\n var _ref6 = params || {},\n _ref6$move = _ref6.move,\n move = _ref6$move === void 0 ? true : _ref6$move,\n reverse = _ref6.reverse;\n\n var avgX = 0;\n var countX = 0;\n var i, point, prevX, minY, maxY, lastY;\n\n var pointIndex = function pointIndex(index) {\n return (start + (reverse ? ilen - index : index)) % count;\n };\n\n var drawX = function drawX() {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n continue;\n }\n\n var x = point.x;\n var y = point.y;\n var truncX = x | 0;\n\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n\n lastY = y;\n }\n\n drawX();\n}\n\nfunction _getSegmentMethod(line) {\n var opts = line.options;\n var borderDash = opts.borderDash && opts.borderDash.length;\n var useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n var path = line._path;\n\n if (!path) {\n path = line._path = new Path2D();\n\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n var segments = line.segments,\n options = line.options;\n\n var segmentMethod = _getSegmentMethod(line);\n\n var _iterator10 = _createForOfIteratorHelper(segments),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var segment = _step10.value;\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n\n if (segmentMethod(ctx, line, segment, {\n start: start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n\n ctx.stroke();\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n}\n\nvar usePath2D = typeof Path2D === 'function';\n\nfunction _draw(ctx, line, start, count) {\n if (usePath2D && line.segments.length === 1) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\n\nvar LineElement = /*#__PURE__*/function (_Element3) {\n _inherits(LineElement, _Element3);\n\n var _super13 = _createSuper(LineElement);\n\n function LineElement(cfg) {\n var _this8;\n\n _classCallCheck(this, LineElement);\n\n _this8 = _super13.call(this);\n _this8.animated = true;\n _this8.options = undefined;\n _this8._loop = undefined;\n _this8._fullLoop = undefined;\n _this8._path = undefined;\n _this8._points = undefined;\n _this8._segments = undefined;\n _this8._decimated = false;\n _this8._pointsUpdated = false;\n _this8._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this8), cfg);\n }\n\n return _this8;\n }\n\n _createClass(LineElement, [{\n key: \"updateControlPoints\",\n value: function updateControlPoints(chartArea, indexAxis) {\n var me = this;\n var options = me.options;\n\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !me._pointsUpdated) {\n var loop = options.spanGaps ? me._loop : me._fullLoop;\n\n _updateBezierControlPoints(me._points, options, chartArea, loop, indexAxis);\n\n me._pointsUpdated = true;\n }\n }\n }, {\n key: \"points\",\n get: function get() {\n return this._points;\n },\n set: function set(points) {\n var me = this;\n me._points = points;\n delete me._segments;\n delete me._path;\n me._pointsUpdated = false;\n }\n }, {\n key: \"segments\",\n get: function get() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n }, {\n key: \"first\",\n value: function first() {\n var segments = this.segments;\n var points = this.points;\n return segments.length && points[segments[0].start];\n }\n }, {\n key: \"last\",\n value: function last() {\n var segments = this.segments;\n var points = this.points;\n var count = segments.length;\n return count && points[segments[count - 1].end];\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(point, property) {\n var me = this;\n var options = me.options;\n var value = point[property];\n var points = me.points;\n\n var segments = _boundSegments(me, {\n property: property,\n start: value,\n end: value\n });\n\n if (!segments.length) {\n return;\n }\n\n var result = [];\n\n var _interpolate = _getInterpolationMethod(options);\n\n var i, ilen;\n\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n var _segments$i = segments[i],\n start = _segments$i.start,\n end = _segments$i.end;\n var p1 = points[start];\n var p2 = points[end];\n\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n\n var t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n\n var interpolated = _interpolate(p1, p2, t, options.stepped);\n\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n\n return result.length === 1 ? result[0] : result;\n }\n }, {\n key: \"pathSegment\",\n value: function pathSegment(ctx, segment, params) {\n var segmentMethod = _getSegmentMethod(this);\n\n return segmentMethod(ctx, this, segment, params);\n }\n }, {\n key: \"path\",\n value: function path(ctx, start, count) {\n var me = this;\n var segments = me.segments;\n\n var segmentMethod = _getSegmentMethod(me);\n\n var loop = me._loop;\n start = start || 0;\n count = count || me.points.length - start;\n\n var _iterator11 = _createForOfIteratorHelper(segments),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var segment = _step11.value;\n loop &= segmentMethod(ctx, me, segment, {\n start: start,\n end: start + count - 1\n });\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n\n return !!loop;\n }\n }, {\n key: \"draw\",\n value: function draw(ctx, chartArea, start, count) {\n var me = this;\n var options = me.options || {};\n var points = me.points || [];\n\n if (!points.length || !options.borderWidth) {\n return;\n }\n\n ctx.save();\n\n _draw(ctx, me, start, count);\n\n ctx.restore();\n\n if (me.animated) {\n me._pointsUpdated = false;\n me._path = undefined;\n }\n }\n }]);\n\n return LineElement;\n}(Element);\n\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: function _indexable(name) {\n return name !== 'borderDash' && name !== 'fill';\n }\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n var options = el.options;\n\n var _el$getProps = el.getProps([axis], useFinalPosition),\n value = _el$getProps[axis];\n\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\n\nvar PointElement = /*#__PURE__*/function (_Element4) {\n _inherits(PointElement, _Element4);\n\n var _super14 = _createSuper(PointElement);\n\n function PointElement(cfg) {\n var _this9;\n\n _classCallCheck(this, PointElement);\n\n _this9 = _super14.call(this);\n _this9.options = undefined;\n _this9.parsed = undefined;\n _this9.skip = undefined;\n _this9.stop = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this9), cfg);\n }\n\n return _this9;\n }\n\n _createClass(PointElement, [{\n key: \"inRange\",\n value: function inRange(mouseX, mouseY, useFinalPosition) {\n var options = this.options;\n\n var _this$getProps4 = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps4.x,\n y = _this$getProps4.y;\n\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n }, {\n key: \"inXRange\",\n value: function inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n }, {\n key: \"inYRange\",\n value: function inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps5 = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps5.x,\n y = _this$getProps5.y;\n\n return {\n x: x,\n y: y\n };\n }\n }, {\n key: \"size\",\n value: function size(options) {\n options = options || this.options || {};\n var radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n var borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n }, {\n key: \"draw\",\n value: function draw(ctx, area) {\n var me = this;\n var options = me.options;\n\n if (me.skip || options.radius < 0.1 || !_isPointInArea(me, area, me.size(options) / 2)) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, me.x, me.y);\n }\n }, {\n key: \"getRange\",\n value: function getRange() {\n var options = this.options || {};\n return options.radius + options.hitRadius;\n }\n }]);\n\n return PointElement;\n}(Element);\n\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n var _bar$getProps = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition),\n x = _bar$getProps.x,\n y = _bar$getProps.y,\n base = _bar$getProps.base,\n width = _bar$getProps.width,\n height = _bar$getProps.height;\n\n var left, right, top, bottom, half;\n\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n\n return {\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n var value = bar.options.borderWidth;\n var skip = bar.borderSkipped;\n var o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n var _bar$getProps2 = bar.getProps(['enableBorderRadius']),\n enableBorderRadius = _bar$getProps2.enableBorderRadius;\n\n var value = bar.options.borderRadius;\n var o = toTRBLCorners(value);\n var maxR = Math.min(maxW, maxH);\n var skip = bar.borderSkipped;\n var enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\n\nfunction boundingRects(bar) {\n var bounds = getBarBounds(bar);\n var width = bounds.right - bounds.left;\n var height = bounds.bottom - bounds.top;\n var border = parseBorderWidth(bar, width / 2, height / 2);\n var radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius: radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\n\nfunction _inRange(bar, x, y, useFinalPosition) {\n var skipX = x === null;\n var skipY = y === null;\n var skipBoth = skipX && skipY;\n var bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || x >= bounds.left && x <= bounds.right) && (skipY || y >= bounds.top && y <= bounds.bottom);\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount) {\n var refRect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var x = rect.x !== refRect.x ? -amount : 0;\n var y = rect.y !== refRect.y ? -amount : 0;\n var w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n var h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\n\nvar BarElement = /*#__PURE__*/function (_Element5) {\n _inherits(BarElement, _Element5);\n\n var _super15 = _createSuper(BarElement);\n\n function BarElement(cfg) {\n var _this10;\n\n _classCallCheck(this, BarElement);\n\n _this10 = _super15.call(this);\n _this10.options = undefined;\n _this10.horizontal = undefined;\n _this10.base = undefined;\n _this10.width = undefined;\n _this10.height = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this10), cfg);\n }\n\n return _this10;\n }\n\n _createClass(BarElement, [{\n key: \"draw\",\n value: function draw(ctx) {\n var options = this.options;\n\n var _boundingRects = boundingRects(this),\n inner = _boundingRects.inner,\n outer = _boundingRects.outer;\n\n var addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n var inflateAmount = 0.33;\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = options.borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount, outer));\n ctx.fillStyle = options.backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }, {\n key: \"inRange\",\n value: function inRange(mouseX, mouseY, useFinalPosition) {\n return _inRange(this, mouseX, mouseY, useFinalPosition);\n }\n }, {\n key: \"inXRange\",\n value: function inXRange(mouseX, useFinalPosition) {\n return _inRange(this, mouseX, null, useFinalPosition);\n }\n }, {\n key: \"inYRange\",\n value: function inYRange(mouseY, useFinalPosition) {\n return _inRange(this, null, mouseY, useFinalPosition);\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps6 = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition),\n x = _this$getProps6.x,\n y = _this$getProps6.y,\n base = _this$getProps6.base,\n horizontal = _this$getProps6.horizontal;\n\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n }, {\n key: \"getRange\",\n value: function getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n }]);\n\n return BarElement;\n}(Element);\n\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n enableBorderRadius: true,\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nvar elements = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ArcElement: ArcElement,\n LineElement: LineElement,\n PointElement: PointElement,\n BarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n var samples = options.samples || availableWidth;\n\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n\n var decimated = [];\n var bucketWidth = (count - 2) / (samples - 2);\n var sampledIndex = 0;\n var endIndex = start + count - 1;\n var a = start;\n var i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n\n for (i = 0; i < samples - 2; i++) {\n var avgX = 0;\n var avgY = 0;\n var j = void 0;\n var avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n var avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n var avgRangeLength = avgRangeEnd - avgRangeStart;\n\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n var rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n var rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n var _data$a = data[a],\n pointAx = _data$a.x,\n pointAy = _data$a.y;\n maxArea = area = -1;\n\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n var avgX = 0;\n var countX = 0;\n var i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n var decimated = [];\n var endIndex = start + count - 1;\n var xMin = data[start].x;\n var xMax = data[endIndex].x;\n var dx = xMax - xMin;\n\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n var truncX = x | 0;\n\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n var lastIndex = i - 1;\n\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n var intermediateIndex1 = Math.min(minIndex, maxIndex);\n var intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex1]), {}, {\n x: avgX\n }));\n }\n\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex2]), {}, {\n x: avgX\n }));\n }\n }\n\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n\n return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n var data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n value: data\n });\n }\n}\n\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach(function (dataset) {\n cleanDecimatedDataset(dataset);\n });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n var pointCount = points.length;\n var start = 0;\n var count;\n var iScale = meta.iScale;\n\n var _iScale$getUserBounds2 = iScale.getUserBounds(),\n min = _iScale$getUserBounds2.min,\n max = _iScale$getUserBounds2.max,\n minDefined = _iScale$getUserBounds2.minDefined,\n maxDefined = _iScale$getUserBounds2.maxDefined;\n\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n\n return {\n start: start,\n count: count\n };\n}\n\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: function beforeElementsUpdate(chart, args, options) {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n\n var availableWidth = chart.width;\n chart.data.datasets.forEach(function (dataset, datasetIndex) {\n var _data = dataset._data,\n indexAxis = dataset.indexAxis;\n var meta = chart.getDatasetMeta(datasetIndex);\n var data = _data || dataset.data;\n\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n\n if (meta.type !== 'line') {\n return;\n }\n\n var xAxis = chart.scales[meta.xAxisID];\n\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n\n if (chart.options.parsing) {\n return;\n }\n\n var _getStartAndCountOfVi2 = getStartAndCountOfVisiblePointsSimplified(meta, data),\n start = _getStartAndCountOfVi2.start,\n count = _getStartAndCountOfVi2.count;\n\n var threshold = options.threshold || 4 * availableWidth;\n\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function get() {\n return this._decimated;\n },\n set: function set(d) {\n this._data = d;\n }\n });\n }\n\n var decimated;\n\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n\n default:\n throw new Error(\"Unsupported decimation algorithm '\".concat(options.algorithm, \"'\"));\n }\n\n dataset._decimated = decimated;\n });\n },\n destroy: function destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction getLineByIndex(chart, index) {\n var meta = chart.getDatasetMeta(index);\n var visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\n\nfunction parseFillOption(line) {\n var options = line.options;\n var fillOption = options.fill;\n var fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n\n return fill;\n}\n\nfunction decodeFill(line, index, count) {\n var fill = parseFillOption(line);\n\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n\n var target = parseFloat(fill);\n\n if (isNumberFinite(target) && Math.floor(target) === target) {\n if (fill[0] === '-' || fill[0] === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n }\n\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction computeLinearBoundary(source) {\n var _source$scale = source.scale,\n scale = _source$scale === void 0 ? {} : _source$scale,\n fill = source.fill;\n var target = null;\n var horizontal;\n\n if (fill === 'start') {\n target = scale.bottom;\n } else if (fill === 'end') {\n target = scale.top;\n } else if (isObject(fill)) {\n target = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n target = scale.getBasePixel();\n }\n\n if (isNumberFinite(target)) {\n horizontal = scale.isHorizontal();\n return {\n x: horizontal ? target : null,\n y: horizontal ? null : target\n };\n }\n\n return null;\n}\n\nvar simpleArc = /*#__PURE__*/function () {\n function simpleArc(opts) {\n _classCallCheck(this, simpleArc);\n\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n\n _createClass(simpleArc, [{\n key: \"pathSegment\",\n value: function pathSegment(ctx, bounds, opts) {\n var x = this.x,\n y = this.y,\n radius = this.radius;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(point) {\n var x = this.x,\n y = this.y,\n radius = this.radius;\n var angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle: angle\n };\n }\n }]);\n\n return simpleArc;\n}();\n\nfunction computeCircularBoundary(source) {\n var scale = source.scale,\n fill = source.fill;\n var options = scale.options;\n var length = scale.getLabels().length;\n var target = [];\n var start = options.reverse ? scale.max : scale.min;\n var end = options.reverse ? scale.min : scale.max;\n var i, center, value;\n\n if (fill === 'start') {\n value = start;\n } else if (fill === 'end') {\n value = end;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n\n if (options.grid.circular) {\n center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n\n for (i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n\n return target;\n}\n\nfunction computeBoundary(source) {\n var scale = source.scale || {};\n\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n\n return computeLinearBoundary(source);\n}\n\nfunction findSegmentEnd(start, end, points) {\n for (; end > start; end--) {\n var point = points[end];\n\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n\n return end;\n}\n\nfunction pointsFromSegments(boundary, line) {\n var _ref7 = boundary || {},\n _ref7$x = _ref7.x,\n x = _ref7$x === void 0 ? null : _ref7$x,\n _ref7$y = _ref7.y,\n y = _ref7$y === void 0 ? null : _ref7$y;\n\n var linePoints = line.points;\n var points = [];\n line.segments.forEach(function (_ref8) {\n var start = _ref8.start,\n end = _ref8.end;\n end = findSegmentEnd(start, end, linePoints);\n var first = linePoints[start];\n var last = linePoints[end];\n\n if (y !== null) {\n points.push({\n x: first.x,\n y: y\n });\n points.push({\n x: last.x,\n y: y\n });\n } else if (x !== null) {\n points.push({\n x: x,\n y: first.y\n });\n points.push({\n x: x,\n y: last.y\n });\n }\n });\n return points;\n}\n\nfunction buildStackLine(source) {\n var chart = source.chart,\n scale = source.scale,\n index = source.index,\n line = source.line;\n var points = [];\n var segments = line.segments;\n var sourcePoints = line.points;\n var linesBelow = getLinesBelow(chart, index);\n linesBelow.push(createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n\n for (var j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n\n return new LineElement({\n points: points,\n options: {}\n });\n}\n\nvar isLineAndNotInHideAnimation = function isLineAndNotInHideAnimation(meta) {\n return meta.type === 'line' && !meta.hidden;\n};\n\nfunction getLinesBelow(chart, index) {\n var below = [];\n var metas = chart.getSortedVisibleDatasetMetas();\n\n for (var i = 0; i < metas.length; i++) {\n var meta = metas[i];\n\n if (meta.index === index) {\n break;\n }\n\n if (isLineAndNotInHideAnimation(meta)) {\n below.unshift(meta.dataset);\n }\n }\n\n return below;\n}\n\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n var postponed = [];\n\n for (var j = 0; j < linesBelow.length; j++) {\n var line = linesBelow[j];\n\n var _findPoint = findPoint(line, sourcePoint, 'x'),\n first = _findPoint.first,\n last = _findPoint.last,\n point = _findPoint.point;\n\n if (!point || first && last) {\n continue;\n }\n\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n\n if (!last) {\n break;\n }\n }\n }\n\n points.push.apply(points, postponed);\n}\n\nfunction findPoint(line, sourcePoint, property) {\n var point = line.interpolate(sourcePoint, property);\n\n if (!point) {\n return {};\n }\n\n var pointValue = point[property];\n var segments = line.segments;\n var linePoints = line.points;\n var first = false;\n var last = false;\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var firstValue = linePoints[segment.start][property];\n var lastValue = linePoints[segment.end][property];\n\n if (pointValue >= firstValue && pointValue <= lastValue) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n\n return {\n first: first,\n last: last,\n point: point\n };\n}\n\nfunction getTarget(source) {\n var chart = source.chart,\n fill = source.fill,\n line = source.line;\n\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n\n if (fill === 'stack') {\n return buildStackLine(source);\n }\n\n if (fill === 'shape') {\n return true;\n }\n\n var boundary = computeBoundary(source);\n\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n\n return createBoundaryLine(boundary, line);\n}\n\nfunction createBoundaryLine(boundary, line) {\n var points = [];\n var _loop = false;\n\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = pointsFromSegments(boundary, line);\n }\n\n return points.length ? new LineElement({\n points: points,\n options: {\n tension: 0\n },\n _loop: _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nfunction resolveTarget(sources, index, propagate) {\n var source = sources[index];\n var fill = source.fill;\n var visited = [index];\n var target;\n\n if (!propagate) {\n return fill;\n }\n\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n\n target = sources[fill];\n\n if (!target) {\n return false;\n }\n\n if (target.visible) {\n return fill;\n }\n\n visited.push(fill);\n fill = target.fill;\n }\n\n return false;\n}\n\nfunction _clip(ctx, target, clipY) {\n ctx.beginPath();\n target.path(ctx);\n ctx.lineTo(target.last().x, clipY);\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n\n var start = first[property];\n var end = last[property];\n\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n\n return {\n property: property,\n start: start,\n end: end\n };\n}\n\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _segments(line, target, property) {\n var segments = line.segments;\n var points = line.points;\n var tpoints = target.points;\n var parts = [];\n\n var _iterator12 = _createForOfIteratorHelper(segments),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var segment = _step12.value;\n var start = segment.start,\n end = segment.end;\n end = findSegmentEnd(start, end, points);\n var bounds = getBounds(property, points[start], points[end], segment.loop);\n\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n\n var targetSegments = _boundSegments(target, bounds);\n\n var _iterator13 = _createForOfIteratorHelper(targetSegments),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var tgt = _step13.value;\n var subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n\n var fillSources = _boundSegment(segment, points, subBounds);\n\n var _iterator14 = _createForOfIteratorHelper(fillSources),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var fillSource = _step14.value;\n parts.push({\n source: fillSource,\n target: tgt,\n start: _defineProperty({}, property, _getEdge(bounds, subBounds, 'start', Math.max)),\n end: _defineProperty({}, property, _getEdge(bounds, subBounds, 'end', Math.min))\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return parts;\n}\n\nfunction clipBounds(ctx, scale, bounds) {\n var _scale$chart$chartAre = scale.chart.chartArea,\n top = _scale$chart$chartAre.top,\n bottom = _scale$chart$chartAre.bottom;\n\n var _ref9 = bounds || {},\n property = _ref9.property,\n start = _ref9.start,\n end = _ref9.end;\n\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n var interpolatedPoint = target.interpolate(point, property);\n\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nfunction _fill(ctx, cfg) {\n var line = cfg.line,\n target = cfg.target,\n property = cfg.property,\n color = cfg.color,\n scale = cfg.scale;\n\n var segments = _segments(line, target, property);\n\n var _iterator15 = _createForOfIteratorHelper(segments),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var _ref11 = _step15.value;\n var src = _ref11.source;\n var tgt = _ref11.target;\n var start = _ref11.start;\n var end = _ref11.end;\n var _src$style = src.style;\n _src$style = _src$style === void 0 ? {} : _src$style;\n var _src$style$background = _src$style.backgroundColor,\n backgroundColor = _src$style$background === void 0 ? color : _src$style$background;\n var notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && getBounds(property, start, end));\n ctx.beginPath();\n var lineLoop = !!line.pathSegment(ctx, src);\n var loop = void 0;\n\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n\n var targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n}\n\nfunction doFill(ctx, cfg) {\n var line = cfg.line,\n target = cfg.target,\n above = cfg.above,\n below = cfg.below,\n area = cfg.area,\n scale = cfg.scale;\n var property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n\n if (property === 'x' && below !== above) {\n _clip(ctx, target, area.top);\n\n _fill(ctx, {\n line: line,\n target: target,\n color: above,\n scale: scale,\n property: property\n });\n\n ctx.restore();\n ctx.save();\n\n _clip(ctx, target, area.bottom);\n }\n\n _fill(ctx, {\n line: line,\n target: target,\n color: below,\n scale: scale,\n property: property\n });\n\n ctx.restore();\n}\n\nfunction drawfill(ctx, source, area) {\n var target = getTarget(source);\n var line = source.line,\n scale = source.scale,\n axis = source.axis;\n var lineOpts = line.options;\n var fillOption = lineOpts.fill;\n var color = lineOpts.backgroundColor;\n\n var _ref12 = fillOption || {},\n _ref12$above = _ref12.above,\n above = _ref12$above === void 0 ? color : _ref12$above,\n _ref12$below = _ref12.below,\n below = _ref12$below === void 0 ? color : _ref12$below;\n\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line: line,\n target: target,\n above: above,\n below: below,\n area: area,\n scale: scale,\n axis: axis\n });\n unclipArea(ctx);\n }\n}\n\nvar plugin_filler = {\n id: 'filler',\n afterDatasetsUpdate: function afterDatasetsUpdate(chart, _args, options) {\n var count = (chart.data.datasets || []).length;\n var sources = [];\n var meta, i, line, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: decodeFill(line, i, count),\n chart: chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line: line\n };\n }\n\n meta.$filler = source;\n sources.push(source);\n }\n\n for (i = 0; i < count; ++i) {\n source = sources[i];\n\n if (!source || source.fill === false) {\n continue;\n }\n\n source.fill = resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw: function beforeDraw(chart, _args, options) {\n var draw = options.drawTime === 'beforeDraw';\n var metasets = chart.getSortedVisibleDatasetMetas();\n var area = chart.chartArea;\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n var source = metasets[i].$filler;\n\n if (!source) {\n continue;\n }\n\n source.line.updateControlPoints(area, source.axis);\n\n if (draw) {\n drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw: function beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n\n var metasets = chart.getSortedVisibleDatasetMetas();\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n var source = metasets[i].$filler;\n\n if (source) {\n drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw: function beforeDatasetDraw(chart, args, options) {\n var source = args.meta.$filler;\n\n if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n\n drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nvar getBoxSize = function getBoxSize(labelOpts, fontSize) {\n var _labelOpts$boxHeight = labelOpts.boxHeight,\n boxHeight = _labelOpts$boxHeight === void 0 ? fontSize : _labelOpts$boxHeight,\n _labelOpts$boxWidth = labelOpts.boxWidth,\n boxWidth = _labelOpts$boxWidth === void 0 ? fontSize : _labelOpts$boxWidth;\n\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = Math.min(boxWidth, fontSize);\n }\n\n return {\n boxWidth: boxWidth,\n boxHeight: boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\n\nvar itemsEqual = function itemsEqual(a, b) {\n return a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n};\n\nvar Legend = /*#__PURE__*/function (_Element6) {\n _inherits(Legend, _Element6);\n\n var _super16 = _createSuper(Legend);\n\n function Legend(config) {\n var _this11;\n\n _classCallCheck(this, Legend);\n\n _this11 = _super16.call(this);\n _this11._added = false;\n _this11.legendHitBoxes = [];\n _this11._hoveredItem = null;\n _this11.doughnutMode = false;\n _this11.chart = config.chart;\n _this11.options = config.options;\n _this11.ctx = config.ctx;\n _this11.legendItems = undefined;\n _this11.columnSizes = undefined;\n _this11.lineWidths = undefined;\n _this11.maxHeight = undefined;\n _this11.maxWidth = undefined;\n _this11.top = undefined;\n _this11.bottom = undefined;\n _this11.left = undefined;\n _this11.right = undefined;\n _this11.height = undefined;\n _this11.width = undefined;\n _this11._margins = undefined;\n _this11.position = undefined;\n _this11.weight = undefined;\n _this11.fullSize = undefined;\n return _this11;\n }\n\n _createClass(Legend, [{\n key: \"update\",\n value: function update(maxWidth, maxHeight, margins) {\n var me = this;\n me.maxWidth = maxWidth;\n me.maxHeight = maxHeight;\n me._margins = margins;\n me.setDimensions();\n me.buildLabels();\n me.fit();\n }\n }, {\n key: \"setDimensions\",\n value: function setDimensions() {\n var me = this;\n\n if (me.isHorizontal()) {\n me.width = me.maxWidth;\n me.left = me._margins.left;\n me.right = me.width;\n } else {\n me.height = me.maxHeight;\n me.top = me._margins.top;\n me.bottom = me.height;\n }\n }\n }, {\n key: \"buildLabels\",\n value: function buildLabels() {\n var me = this;\n var labelOpts = me.options.labels || {};\n var legendItems = callback(labelOpts.generateLabels, [me.chart], me) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter(function (item) {\n return labelOpts.filter(item, me.chart.data);\n });\n }\n\n if (labelOpts.sort) {\n legendItems = legendItems.sort(function (a, b) {\n return labelOpts.sort(a, b, me.chart.data);\n });\n }\n\n if (me.options.reverse) {\n legendItems.reverse();\n }\n\n me.legendItems = legendItems;\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var me = this;\n var options = me.options,\n ctx = me.ctx;\n\n if (!options.display) {\n me.width = me.height = 0;\n return;\n }\n\n var labelOpts = options.labels;\n var labelFont = toFont(labelOpts.font);\n var fontSize = labelFont.size;\n\n var titleHeight = me._computeTitleHeight();\n\n var _getBoxSize = getBoxSize(labelOpts, fontSize),\n boxWidth = _getBoxSize.boxWidth,\n itemHeight = _getBoxSize.itemHeight;\n\n var width, height;\n ctx.font = labelFont.string;\n\n if (me.isHorizontal()) {\n width = me.maxWidth;\n height = me._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = me.maxHeight;\n width = me._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n\n me.width = Math.min(width, options.maxWidth || me.maxWidth);\n me.height = Math.min(height, options.maxHeight || me.maxHeight);\n }\n }, {\n key: \"_fitRows\",\n value: function _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n var me = this;\n var ctx = me.ctx,\n maxWidth = me.maxWidth,\n padding = me.options.labels.padding;\n var hitboxes = me.legendHitBoxes = [];\n var lineWidths = me.lineWidths = [0];\n var lineHeight = itemHeight + padding;\n var totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n var row = -1;\n var top = -lineHeight;\n me.legendItems.forEach(function (legendItem, i) {\n var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n\n hitboxes[i] = {\n left: 0,\n top: top,\n row: row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n }, {\n key: \"_fitCols\",\n value: function _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n var me = this;\n var ctx = me.ctx,\n maxHeight = me.maxHeight,\n padding = me.options.labels.padding;\n var hitboxes = me.legendHitBoxes = [];\n var columnSizes = me.columnSizes = [];\n var heightLimit = maxHeight - titleHeight;\n var totalWidth = padding;\n var currentColWidth = 0;\n var currentColHeight = 0;\n var left = 0;\n var col = 0;\n me.legendItems.forEach(function (legendItem, i) {\n var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n\n hitboxes[i] = {\n left: left,\n top: currentColHeight,\n col: col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n }, {\n key: \"adjustHitBoxes\",\n value: function adjustHitBoxes() {\n var me = this;\n\n if (!me.options.display) {\n return;\n }\n\n var titleHeight = me._computeTitleHeight();\n\n var hitboxes = me.legendHitBoxes,\n _me$options6 = me.options,\n align = _me$options6.align,\n padding = _me$options6.labels.padding,\n rtl = _me$options6.rtl;\n var rtlHelper = getRtlAdapter(rtl, me.left, me.width);\n\n if (this.isHorizontal()) {\n var row = 0;\n\n var left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);\n\n var _iterator16 = _createForOfIteratorHelper(hitboxes),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var hitbox = _step16.value;\n\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);\n }\n\n hitbox.top += me.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n } else {\n var col = 0;\n\n var top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);\n\n var _iterator17 = _createForOfIteratorHelper(hitboxes),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var _hitbox = _step17.value;\n\n if (_hitbox.col !== col) {\n col = _hitbox.col;\n top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);\n }\n\n _hitbox.top = top;\n _hitbox.left += me.left + padding;\n _hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(_hitbox.left), _hitbox.width);\n top += _hitbox.height + padding;\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n }\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var me = this;\n\n if (me.options.display) {\n var ctx = me.ctx;\n clipArea(ctx, me);\n\n me._draw();\n\n unclipArea(ctx);\n }\n }\n }, {\n key: \"_draw\",\n value: function _draw() {\n var me = this;\n var opts = me.options,\n columnSizes = me.columnSizes,\n lineWidths = me.lineWidths,\n ctx = me.ctx;\n var align = opts.align,\n labelOpts = opts.labels;\n var defaultColor = defaults.color;\n var rtlHelper = getRtlAdapter(opts.rtl, me.left, me.width);\n var labelFont = toFont(labelOpts.font);\n var fontColor = labelOpts.color,\n padding = labelOpts.padding;\n var fontSize = labelFont.size;\n var halfFontSize = fontSize / 2;\n var cursor;\n me.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n\n var _getBoxSize2 = getBoxSize(labelOpts, fontSize),\n boxWidth = _getBoxSize2.boxWidth,\n boxHeight = _getBoxSize2.boxHeight,\n itemHeight = _getBoxSize2.itemHeight;\n\n var drawLegendBox = function drawLegendBox(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n\n ctx.save();\n var lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n if (labelOpts.usePointStyle) {\n var drawOptions = {\n radius: boxWidth * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n var centerX = rtlHelper.xPlus(x, boxWidth / 2);\n var centerY = y + halfFontSize;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n var yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n var xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n var borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n\n if (Object.values(borderRadius).some(function (v) {\n return v !== 0;\n })) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n\n ctx.fill();\n\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n\n ctx.restore();\n };\n\n var fillText = function fillText(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n\n var isHorizontal = me.isHorizontal();\n\n var titleHeight = this._computeTitleHeight();\n\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, me.left + padding, me.right - lineWidths[0]),\n y: me.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: me.left + padding,\n y: _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - columnSizes[0].height),\n line: 0\n };\n }\n\n overrideTextDirection(me.ctx, opts.textDirection);\n var lineHeight = itemHeight + padding;\n me.legendItems.forEach(function (legendItem, i) {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n var textWidth = ctx.measureText(legendItem.text).width;\n var textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n var width = boxWidth + halfFontSize + textWidth;\n var x = cursor.x;\n var y = cursor.y;\n rtlHelper.setWidth(me.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > me.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, me.left + padding, me.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > me.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - columnSizes[cursor.line].height);\n }\n\n var realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : me.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(me.ctx, opts.textDirection);\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {\n var me = this;\n var opts = me.options;\n var titleOpts = opts.title;\n var titleFont = toFont(titleOpts.font);\n var titlePadding = toPadding(titleOpts.padding);\n\n if (!titleOpts.display) {\n return;\n }\n\n var rtlHelper = getRtlAdapter(opts.rtl, me.left, me.width);\n var ctx = me.ctx;\n var position = titleOpts.position;\n var halfFontSize = titleFont.size / 2;\n var topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n var y;\n var left = me.left;\n var maxWidth = me.width;\n\n if (this.isHorizontal()) {\n maxWidth = Math.max.apply(Math, _toConsumableArray(me.lineWidths));\n y = me.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, me.right - maxWidth);\n } else {\n var maxHeight = me.columnSizes.reduce(function (acc, size) {\n return Math.max(acc, size.height);\n }, 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, me.top, me.bottom - maxHeight - opts.labels.padding - me._computeTitleHeight());\n }\n\n var x = _alignStartEnd(position, left, left + maxWidth);\n\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n }, {\n key: \"_computeTitleHeight\",\n value: function _computeTitleHeight() {\n var titleOpts = this.options.title;\n var titleFont = toFont(titleOpts.font);\n var titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n }, {\n key: \"_getLegendItemAt\",\n value: function _getLegendItemAt(x, y) {\n var me = this;\n var i, hitBox, lh;\n\n if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n lh = me.legendHitBoxes;\n\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\n if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n return me.legendItems[i];\n }\n }\n }\n\n return null;\n }\n }, {\n key: \"handleEvent\",\n value: function handleEvent(e) {\n var me = this;\n var opts = me.options;\n\n if (!isListened(e.type, opts)) {\n return;\n }\n\n var hoveredItem = me._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove') {\n var previous = me._hoveredItem;\n var sameItem = itemsEqual(previous, hoveredItem);\n\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, me], me);\n }\n\n me._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, me], me);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, me], me);\n }\n }\n }]);\n\n return Legend;\n}(Element);\n\nfunction isListened(type, opts) {\n if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {\n return true;\n }\n\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n\n return false;\n}\n\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start: function start(chart, _args, options) {\n var legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options: options,\n chart: chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop: function stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate: function afterUpdate(chart) {\n var legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent: function afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick: function onClick(e, legendItem, legend) {\n var index = legendItem.datasetIndex;\n var ci = legend.chart;\n\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: function color(ctx) {\n return ctx.chart.options.color;\n },\n boxWidth: 40,\n padding: 10,\n generateLabels: function generateLabels(chart) {\n var datasets = chart.data.datasets;\n var _chart$legend$options = chart.legend.options.labels,\n usePointStyle = _chart$legend$options.usePointStyle,\n pointStyle = _chart$legend$options.pointStyle,\n textAlign = _chart$legend$options.textAlign,\n color = _chart$legend$options.color;\n return chart._getSortedDatasetMetas().map(function (meta) {\n var style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n var borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: function color(ctx) {\n return ctx.chart.options.color;\n },\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: function _scriptable(name) {\n return !name.startsWith('on');\n },\n labels: {\n _scriptable: function _scriptable(name) {\n return !['generateLabels', 'filter', 'sort'].includes(name);\n }\n }\n }\n};\n\nvar Title = /*#__PURE__*/function (_Element7) {\n _inherits(Title, _Element7);\n\n var _super17 = _createSuper(Title);\n\n function Title(config) {\n var _this12;\n\n _classCallCheck(this, Title);\n\n _this12 = _super17.call(this);\n _this12.chart = config.chart;\n _this12.options = config.options;\n _this12.ctx = config.ctx;\n _this12._padding = undefined;\n _this12.top = undefined;\n _this12.bottom = undefined;\n _this12.left = undefined;\n _this12.right = undefined;\n _this12.width = undefined;\n _this12.height = undefined;\n _this12.position = undefined;\n _this12.weight = undefined;\n _this12.fullSize = undefined;\n return _this12;\n }\n\n _createClass(Title, [{\n key: \"update\",\n value: function update(maxWidth, maxHeight) {\n var me = this;\n var opts = me.options;\n me.left = 0;\n me.top = 0;\n\n if (!opts.display) {\n me.width = me.height = me.right = me.bottom = 0;\n return;\n }\n\n me.width = me.right = maxWidth;\n me.height = me.bottom = maxHeight;\n var lineCount = isArray(opts.text) ? opts.text.length : 1;\n me._padding = toPadding(opts.padding);\n\n var textSize = lineCount * toFont(opts.font).lineHeight + me._padding.height;\n\n if (me.isHorizontal()) {\n me.height = textSize;\n } else {\n me.width = textSize;\n }\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n var pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n }, {\n key: \"_drawArgs\",\n value: function _drawArgs(offset) {\n var top = this.top,\n left = this.left,\n bottom = this.bottom,\n right = this.right,\n options = this.options;\n var align = options.align;\n var rotation = 0;\n var maxWidth, titleX, titleY;\n\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n\n maxWidth = bottom - top;\n }\n\n return {\n titleX: titleX,\n titleY: titleY,\n maxWidth: maxWidth,\n rotation: rotation\n };\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var me = this;\n var ctx = me.ctx;\n var opts = me.options;\n\n if (!opts.display) {\n return;\n }\n\n var fontOpts = toFont(opts.font);\n var lineHeight = fontOpts.lineHeight;\n var offset = lineHeight / 2 + me._padding.top;\n\n var _me$_drawArgs = me._drawArgs(offset),\n titleX = _me$_drawArgs.titleX,\n titleY = _me$_drawArgs.titleY,\n maxWidth = _me$_drawArgs.maxWidth,\n rotation = _me$_drawArgs.rotation;\n\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth: maxWidth,\n rotation: rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n }]);\n\n return Title;\n}(Element);\n\nfunction createTitle(chart, titleOpts) {\n var title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart: chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\n\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start: function start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop: function stop(chart) {\n var titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\nvar map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start: function start(chart, _args, options) {\n var title = new Title({\n ctx: chart.ctx,\n options: options,\n chart: chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop: function stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map[\"delete\"](chart);\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\nvar positioners = {\n average: function average(items) {\n if (!items.length) {\n return false;\n }\n\n var i, len;\n var x = 0;\n var y = 0;\n var count = 0;\n\n for (i = 0, len = items.length; i < len; ++i) {\n var el = items[i].element;\n\n if (el && el.hasValue()) {\n var pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest: function nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\n var x = eventPosition.x;\n var y = eventPosition.y;\n var minDistance = Number.POSITIVE_INFINITY;\n var i, len, nearestElement;\n\n for (i = 0, len = items.length; i < len; ++i) {\n var el = items[i].element;\n\n if (el && el.hasValue()) {\n var center = el.getCenterPoint();\n var d = distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n var tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x: x,\n y: y\n };\n }\n};\n\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n}\n\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n\n return str;\n}\n\nfunction createTooltipItem(chart, item) {\n var element = item.element,\n datasetIndex = item.datasetIndex,\n index = item.index;\n var controller = chart.getDatasetMeta(datasetIndex).controller;\n\n var _controller$getLabelA = controller.getLabelAndValue(index),\n label = _controller$getLabelA.label,\n value = _controller$getLabelA.value;\n\n return {\n chart: chart,\n label: label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex: datasetIndex,\n element: element\n };\n}\n\nfunction getTooltipSize(tooltip, options) {\n var ctx = tooltip._chart.ctx;\n var body = tooltip.body,\n footer = tooltip.footer,\n title = tooltip.title;\n var boxWidth = options.boxWidth,\n boxHeight = options.boxHeight;\n var bodyFont = toFont(options.bodyFont);\n var titleFont = toFont(options.titleFont);\n var footerFont = toFont(options.footerFont);\n var titleLineCount = title.length;\n var footerLineCount = footer.length;\n var bodyLineItemCount = body.length;\n var padding = toPadding(options.padding);\n var height = padding.height;\n var width = 0;\n var combinedBodyLength = body.reduce(function (count, bodyItem) {\n return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n }, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n\n if (combinedBodyLength) {\n var bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n\n var widthPadding = 0;\n\n var maxLineWidth = function maxLineWidth(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 : 0;\n each(body, function (bodyItem) {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width: width,\n height: height\n };\n}\n\nfunction determineYAlign(chart, size) {\n var y = size.y,\n height = size.height;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n var x = size.x,\n width = size.width;\n var caret = options.caretSize + options.caretPadding;\n\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n var x = size.x,\n width = size.width;\n var chartWidth = chart.width,\n _chart$chartArea = chart.chartArea,\n left = _chart$chartArea.left,\n right = _chart$chartArea.right;\n var xAlign = 'center';\n\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\nfunction determineAlignment(chart, options, size) {\n var yAlign = options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign: yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n var x = size.x,\n width = size.width;\n\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n var y = size.y,\n height = size.height;\n\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n\n return y;\n}\n\nfunction getBackgroundPoint(options, size, alignment, chart) {\n var caretSize = options.caretSize,\n caretPadding = options.caretPadding,\n cornerRadius = options.cornerRadius;\n var xAlign = alignment.xAlign,\n yAlign = alignment.yAlign;\n var paddingAndSize = caretSize + caretPadding;\n var radiusAndPadding = cornerRadius + caretPadding;\n var x = alignX(size, xAlign);\n var y = alignY(size, yAlign, paddingAndSize);\n\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= radiusAndPadding;\n } else if (xAlign === 'right') {\n x += radiusAndPadding;\n }\n\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n var padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return Object.assign(Object.create(parent), {\n tooltip: tooltip,\n tooltipItems: tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n var override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nvar Tooltip = /*#__PURE__*/function (_Element8) {\n _inherits(Tooltip, _Element8);\n\n var _super18 = _createSuper(Tooltip);\n\n function Tooltip(config) {\n var _this13;\n\n _classCallCheck(this, Tooltip);\n\n _this13 = _super18.call(this);\n _this13.opacity = 0;\n _this13._active = [];\n _this13._chart = config._chart;\n _this13._eventPosition = undefined;\n _this13._size = undefined;\n _this13._cachedAnimations = undefined;\n _this13._tooltipItems = [];\n _this13.$animations = undefined;\n _this13.$context = undefined;\n _this13.options = config.options;\n _this13.dataPoints = undefined;\n _this13.title = undefined;\n _this13.beforeBody = undefined;\n _this13.body = undefined;\n _this13.afterBody = undefined;\n _this13.footer = undefined;\n _this13.xAlign = undefined;\n _this13.yAlign = undefined;\n _this13.x = undefined;\n _this13.y = undefined;\n _this13.height = undefined;\n _this13.width = undefined;\n _this13.caretX = undefined;\n _this13.caretY = undefined;\n _this13.labelColors = undefined;\n _this13.labelPointStyles = undefined;\n _this13.labelTextColors = undefined;\n return _this13;\n }\n\n _createClass(Tooltip, [{\n key: \"initialize\",\n value: function initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n }, {\n key: \"_resolveAnimations\",\n value: function _resolveAnimations() {\n var me = this;\n var cached = me._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n var chart = me._chart;\n var options = me.options.setContext(me.getContext());\n var opts = options.enabled && chart.options.animation && options.animations;\n var animations = new Animations(me._chart, opts);\n\n if (opts._cacheable) {\n me._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n var me = this;\n return me.$context || (me.$context = createTooltipContext(me._chart.getContext(), me, me._tooltipItems));\n }\n }, {\n key: \"getTitle\",\n value: function getTitle(context, options) {\n var me = this;\n var callbacks = options.callbacks;\n var beforeTitle = callbacks.beforeTitle.apply(me, [context]);\n var title = callbacks.title.apply(me, [context]);\n var afterTitle = callbacks.afterTitle.apply(me, [context]);\n var lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n }, {\n key: \"getBeforeBody\",\n value: function getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n }, {\n key: \"getBody\",\n value: function getBody(tooltipItems, options) {\n var me = this;\n var callbacks = options.callbacks;\n var bodyItems = [];\n each(tooltipItems, function (context) {\n var bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n var scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(me, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(me, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(me, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n }, {\n key: \"getAfterBody\",\n value: function getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n }, {\n key: \"getFooter\",\n value: function getFooter(tooltipItems, options) {\n var me = this;\n var callbacks = options.callbacks;\n var beforeFooter = callbacks.beforeFooter.apply(me, [tooltipItems]);\n var footer = callbacks.footer.apply(me, [tooltipItems]);\n var afterFooter = callbacks.afterFooter.apply(me, [tooltipItems]);\n var lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n }, {\n key: \"_createItems\",\n value: function _createItems(options) {\n var me = this;\n var active = me._active;\n var data = me._chart.data;\n var labelColors = [];\n var labelPointStyles = [];\n var labelTextColors = [];\n var tooltipItems = [];\n var i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(me._chart, active[i]));\n }\n\n if (options.filter) {\n tooltipItems = tooltipItems.filter(function (element, index, array) {\n return options.filter(element, index, array, data);\n });\n }\n\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort(function (a, b) {\n return options.itemSort(a, b, data);\n });\n }\n\n each(tooltipItems, function (context) {\n var scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(me, context));\n labelPointStyles.push(scoped.labelPointStyle.call(me, context));\n labelTextColors.push(scoped.labelTextColor.call(me, context));\n });\n me.labelColors = labelColors;\n me.labelPointStyles = labelPointStyles;\n me.labelTextColors = labelTextColors;\n me.dataPoints = tooltipItems;\n return tooltipItems;\n }\n }, {\n key: \"update\",\n value: function update(changed, replay) {\n var me = this;\n var options = me.options.setContext(me.getContext());\n var active = me._active;\n var properties;\n var tooltipItems = [];\n\n if (!active.length) {\n if (me.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n var position = positioners[options.position].call(me, active, me._eventPosition);\n tooltipItems = me._createItems(options);\n me.title = me.getTitle(tooltipItems, options);\n me.beforeBody = me.getBeforeBody(tooltipItems, options);\n me.body = me.getBody(tooltipItems, options);\n me.afterBody = me.getAfterBody(tooltipItems, options);\n me.footer = me.getFooter(tooltipItems, options);\n var size = me._size = getTooltipSize(me, options);\n var positionAndSize = Object.assign({}, position, size);\n var alignment = determineAlignment(me._chart, options, positionAndSize);\n var backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, me._chart);\n me.xAlign = alignment.xAlign;\n me.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n\n me._tooltipItems = tooltipItems;\n me.$context = undefined;\n\n if (properties) {\n me._resolveAnimations().update(me, properties);\n }\n\n if (changed && options.external) {\n options.external.call(me, {\n chart: me._chart,\n tooltip: me,\n replay: replay\n });\n }\n }\n }, {\n key: \"drawCaret\",\n value: function drawCaret(tooltipPoint, ctx, size, options) {\n var caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n }, {\n key: \"getCaretPosition\",\n value: function getCaretPosition(tooltipPoint, size, options) {\n var xAlign = this.xAlign,\n yAlign = this.yAlign;\n var cornerRadius = options.cornerRadius,\n caretSize = options.caretSize;\n var ptX = tooltipPoint.x,\n ptY = tooltipPoint.y;\n var width = size.width,\n height = size.height;\n var x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + cornerRadius + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - cornerRadius - caretSize;\n } else {\n x2 = this.caretX;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n\n y3 = y1;\n }\n\n return {\n x1: x1,\n x2: x2,\n x3: x3,\n y1: y1,\n y2: y2,\n y3: y3\n };\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle(pt, ctx, options) {\n var me = this;\n var title = me.title;\n var length = title.length;\n var titleFont, titleSpacing, i;\n\n if (length) {\n var rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n pt.x = getAlignedX(me, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n }, {\n key: \"_drawColorBox\",\n value: function _drawColorBox(ctx, pt, i, rtlHelper, options) {\n var me = this;\n var labelColors = me.labelColors[i];\n var labelPointStyle = me.labelPointStyles[i];\n var boxHeight = options.boxHeight,\n boxWidth = options.boxWidth;\n var bodyFont = toFont(options.bodyFont);\n var colorX = getAlignedX(me, 'left', options);\n var rtlColorX = rtlHelper.x(colorX);\n var yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n var colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n var drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n var centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n var centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n var outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n var innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n var borderRadius = toTRBLCorners(labelColors.borderRadius);\n\n if (Object.values(borderRadius).some(function (v) {\n return v !== 0;\n })) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n ctx.fillStyle = me.labelTextColors[i];\n }\n }, {\n key: \"drawBody\",\n value: function drawBody(pt, ctx, options) {\n var me = this;\n var body = me.body;\n var bodySpacing = options.bodySpacing,\n bodyAlign = options.bodyAlign,\n displayColors = options.displayColors,\n boxHeight = options.boxHeight,\n boxWidth = options.boxWidth;\n var bodyFont = toFont(options.bodyFont);\n var bodyLineHeight = bodyFont.lineHeight;\n var xLinePadding = 0;\n var rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n\n var fillLineOfText = function fillLineOfText(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n var bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n var bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(me, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(me.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + 1 : boxWidth + 2 : 0;\n\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = me.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n\n if (displayColors && lines.length) {\n me._drawColorBox(ctx, pt, i, rtlHelper, options);\n\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(me.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n }, {\n key: \"drawFooter\",\n value: function drawFooter(pt, ctx, options) {\n var me = this;\n var footer = me.footer;\n var length = footer.length;\n var footerFont, i;\n\n if (length) {\n var rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n pt.x = getAlignedX(me, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n }, {\n key: \"drawBackground\",\n value: function drawBackground(pt, ctx, tooltipSize, options) {\n var xAlign = this.xAlign,\n yAlign = this.yAlign;\n var x = pt.x,\n y = pt.y;\n var width = tooltipSize.width,\n height = tooltipSize.height;\n var radius = options.cornerRadius;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + width - radius, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + width, y + height - radius);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + radius, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x, y + radius);\n ctx.quadraticCurveTo(x, y, x + radius, y);\n ctx.closePath();\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n }, {\n key: \"_updateAnimationTarget\",\n value: function _updateAnimationTarget(options) {\n var me = this;\n var chart = me._chart;\n var anims = me.$animations;\n var animX = anims && anims.x;\n var animY = anims && anims.y;\n\n if (animX || animY) {\n var position = positioners[options.position].call(me, me._active, me._eventPosition);\n\n if (!position) {\n return;\n }\n\n var size = me._size = getTooltipSize(me, options);\n var positionAndSize = Object.assign({}, position, me._size);\n var alignment = determineAlignment(chart, options, positionAndSize);\n var point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n\n if (animX._to !== point.x || animY._to !== point.y) {\n me.xAlign = alignment.xAlign;\n me.yAlign = alignment.yAlign;\n me.width = size.width;\n me.height = size.height;\n me.caretX = position.x;\n me.caretY = position.y;\n\n me._resolveAnimations().update(me, point);\n }\n }\n }\n }, {\n key: \"draw\",\n value: function draw(ctx) {\n var me = this;\n var options = me.options.setContext(me.getContext());\n var opacity = me.opacity;\n\n if (!opacity) {\n return;\n }\n\n me._updateAnimationTarget(options);\n\n var tooltipSize = {\n width: me.width,\n height: me.height\n };\n var pt = {\n x: me.x,\n y: me.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n var padding = toPadding(options.padding);\n var hasTooltipContent = me.title.length || me.beforeBody.length || me.body.length || me.afterBody.length || me.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n me.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n me.drawTitle(pt, ctx, options);\n me.drawBody(pt, ctx, options);\n me.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n }, {\n key: \"getActiveElements\",\n value: function getActiveElements() {\n return this._active || [];\n }\n }, {\n key: \"setActiveElements\",\n value: function setActiveElements(activeElements, eventPosition) {\n var me = this;\n var lastActive = me._active;\n var active = activeElements.map(function (_ref13) {\n var datasetIndex = _ref13.datasetIndex,\n index = _ref13.index;\n\n var meta = me._chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex: datasetIndex,\n element: meta.data[index],\n index: index\n };\n });\n var changed = !_elementsEqual(lastActive, active);\n\n var positionChanged = me._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n me._active = active;\n me._eventPosition = eventPosition;\n me.update(true);\n }\n }\n }, {\n key: \"handleEvent\",\n value: function handleEvent(e, replay) {\n var me = this;\n var options = me.options;\n var lastActive = me._active || [];\n var changed = false;\n var active = [];\n\n if (e.type !== 'mouseout') {\n active = me._chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n }\n\n var positionChanged = me._positionChanged(active, e);\n\n changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n if (changed) {\n me._active = active;\n\n if (options.enabled || options.external) {\n me._eventPosition = {\n x: e.x,\n y: e.y\n };\n me.update(true, replay);\n }\n }\n\n return changed;\n }\n }, {\n key: \"_positionChanged\",\n value: function _positionChanged(active, e) {\n var caretX = this.caretX,\n caretY = this.caretY,\n options = this.options;\n var position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n }]);\n\n return Tooltip;\n}(Element);\n\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners: positioners,\n afterInit: function afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n _chart: chart,\n options: options\n });\n }\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset: function reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw: function afterDraw(chart) {\n var tooltip = chart.tooltip;\n var args = {\n tooltip: tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n\n if (tooltip) {\n tooltip.draw(chart.ctx);\n }\n\n chart.notifyPlugins('afterTooltipDraw', args);\n },\n afterEvent: function afterEvent(chart, args) {\n if (chart.tooltip) {\n var useFinalPosition = args.replay;\n\n if (chart.tooltip.handleEvent(args.event, useFinalPosition)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: function boxHeight(ctx, opts) {\n return opts.bodyFont.size;\n },\n boxWidth: function boxWidth(ctx, opts) {\n return opts.bodyFont.size;\n },\n multiKeyBackground: '#fff',\n displayColors: true,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY']\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title: function title(tooltipItems) {\n if (tooltipItems.length > 0) {\n var item = tooltipItems[0];\n var labels = item.chart.data.labels;\n var labelCount = labels ? labels.length : 0;\n\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label: function label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n var label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n\n var value = tooltipItem.formattedValue;\n\n if (!isNullOrUndef(value)) {\n label += value;\n }\n\n return label;\n },\n labelColor: function labelColor(tooltipItem) {\n var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n var options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor: function labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle: function labelPointStyle(tooltipItem) {\n var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n var options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: function _scriptable(name) {\n return name !== 'filter' && name !== 'itemSort' && name !== 'external';\n },\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\nvar plugins = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Decimation: plugin_decimation,\n Filler: plugin_filler,\n Legend: plugin_legend,\n SubTitle: plugin_subtitle,\n Title: plugin_title,\n Tooltip: plugin_tooltip\n});\n\nvar addIfString = function addIfString(labels, raw, index) {\n return typeof raw === 'string' ? labels.push(raw) - 1 : isNaN(raw) ? null : index;\n};\n\nfunction findOrAddLabel(labels, raw, index) {\n var first = labels.indexOf(raw);\n\n if (first === -1) {\n return addIfString(labels, raw, index);\n }\n\n var last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nvar validIndex = function validIndex(index, max) {\n return index === null ? null : _limitValue(Math.round(index), 0, max);\n};\n\nvar CategoryScale = /*#__PURE__*/function (_Scale) {\n _inherits(CategoryScale, _Scale);\n\n var _super19 = _createSuper(CategoryScale);\n\n function CategoryScale(cfg) {\n var _this14;\n\n _classCallCheck(this, CategoryScale);\n\n _this14 = _super19.call(this, cfg);\n _this14._startValue = undefined;\n _this14._valueRange = 0;\n return _this14;\n }\n\n _createClass(CategoryScale, [{\n key: \"parse\",\n value: function parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n\n var labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw));\n return validIndex(index, labels.length - 1);\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var me = this;\n\n var _me$getUserBounds2 = me.getUserBounds(),\n minDefined = _me$getUserBounds2.minDefined,\n maxDefined = _me$getUserBounds2.maxDefined;\n\n var _me$getMinMax = me.getMinMax(true),\n min = _me$getMinMax.min,\n max = _me$getMinMax.max;\n\n if (me.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n\n if (!maxDefined) {\n max = me.getLabels().length - 1;\n }\n }\n\n me.min = min;\n me.max = max;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var me = this;\n var min = me.min;\n var max = me.max;\n var offset = me.options.offset;\n var ticks = [];\n var labels = me.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n me._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n me._startValue = me.min - (offset ? 0.5 : 0);\n\n for (var value = min; value <= max; value++) {\n ticks.push({\n value: value\n });\n }\n\n return ticks;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n var me = this;\n var labels = me.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n\n return value;\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var me = this;\n\n _get(_getPrototypeOf(CategoryScale.prototype), \"configure\", this).call(this);\n\n if (!me.isHorizontal()) {\n me._reversePixels = !me._reversePixels;\n }\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n var me = this;\n\n if (typeof value !== 'number') {\n value = me.parse(value);\n }\n\n return value === null ? NaN : me.getPixelForDecimal((value - me._startValue) / me._valueRange);\n }\n }, {\n key: \"getPixelForTick\",\n value: function getPixelForTick(index) {\n var me = this;\n var ticks = me.ticks;\n\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n\n return me.getPixelForValue(ticks[index].value);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var me = this;\n return Math.round(me._startValue + me.getDecimalForPixel(pixel) * me._valueRange);\n }\n }, {\n key: \"getBasePixel\",\n value: function getBasePixel() {\n return this.bottom;\n }\n }]);\n\n return CategoryScale;\n}(Scale);\n\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n var ticks = [];\n var MIN_SPACING = 1e-14;\n var bounds = generationOptions.bounds,\n step = generationOptions.step,\n min = generationOptions.min,\n max = generationOptions.max,\n precision = generationOptions.precision,\n count = generationOptions.count,\n maxTicks = generationOptions.maxTicks,\n maxDigits = generationOptions.maxDigits,\n includeBounds = generationOptions.includeBounds;\n var unit = step || 1;\n var maxSpaces = maxTicks - 1;\n var rmin = dataRange.min,\n rmax = dataRange.max;\n var minDefined = !isNullOrUndef(min);\n var maxDefined = !isNullOrUndef(max);\n var countDefined = !isNullOrUndef(count);\n var minSpacing = (rmax - rmin) / (maxDigits + 1);\n var spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n var factor, niceMin, niceMax, numSpaces;\n\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{\n value: rmin\n }, {\n value: rmax\n }];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n var decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n var j = 0;\n\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n\n if (niceMin < min) {\n j++;\n }\n\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n\n for (; j < numSpaces; ++j) {\n ticks.push({\n value: Math.round((niceMin + j * spacing) * factor) / factor\n });\n }\n\n if (maxDefined && includeBounds && niceMax !== max) {\n if (almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, _ref14) {\n var horizontal = _ref14.horizontal,\n minRotation = _ref14.minRotation;\n var rad = toRadians(minRotation);\n var ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n var length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nvar LinearScaleBase = /*#__PURE__*/function (_Scale2) {\n _inherits(LinearScaleBase, _Scale2);\n\n var _super20 = _createSuper(LinearScaleBase);\n\n function LinearScaleBase(cfg) {\n var _this15;\n\n _classCallCheck(this, LinearScaleBase);\n\n _this15 = _super20.call(this, cfg);\n _this15.start = undefined;\n _this15.end = undefined;\n _this15._startValue = undefined;\n _this15._endValue = undefined;\n _this15._valueRange = 0;\n return _this15;\n }\n\n _createClass(LinearScaleBase, [{\n key: \"parse\",\n value: function parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n }, {\n key: \"handleTickRangeOptions\",\n value: function handleTickRangeOptions() {\n var me = this;\n var beginAtZero = me.options.beginAtZero;\n\n var _me$getUserBounds3 = me.getUserBounds(),\n minDefined = _me$getUserBounds3.minDefined,\n maxDefined = _me$getUserBounds3.maxDefined;\n\n var min = me.min,\n max = me.max;\n\n var setMin = function setMin(v) {\n return min = minDefined ? min : v;\n };\n\n var setMax = function setMax(v) {\n return max = maxDefined ? max : v;\n };\n\n if (beginAtZero) {\n var minSign = sign(min);\n var maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n var offset = 1;\n\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n\n me.min = min;\n me.max = max;\n }\n }, {\n key: \"getTickLimit\",\n value: function getTickLimit() {\n var me = this;\n var tickOpts = me.options.ticks;\n var maxTicksLimit = tickOpts.maxTicksLimit,\n stepSize = tickOpts.stepSize;\n var maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\n } else {\n maxTicks = me.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var me = this;\n var opts = me.options;\n var tickOpts = opts.ticks;\n var maxTicks = me.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n var numericGeneratorOptions = {\n maxTicks: maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: me._maxDigits(),\n horizontal: me.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n var dataRange = me._range || me;\n var ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, me, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n me.start = me.max;\n me.end = me.min;\n } else {\n me.start = me.min;\n me.end = me.max;\n }\n\n return ticks;\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var me = this;\n var ticks = me.ticks;\n var start = me.min;\n var end = me.max;\n\n _get(_getPrototypeOf(LinearScaleBase.prototype), \"configure\", this).call(this);\n\n if (me.options.offset && ticks.length) {\n var offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n\n me._startValue = start;\n me._endValue = end;\n me._valueRange = end - start;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale);\n }\n }]);\n\n return LinearScaleBase;\n}(Scale);\n\nvar LinearScale = /*#__PURE__*/function (_LinearScaleBase) {\n _inherits(LinearScale, _LinearScaleBase);\n\n var _super21 = _createSuper(LinearScale);\n\n function LinearScale() {\n _classCallCheck(this, LinearScale);\n\n return _super21.apply(this, arguments);\n }\n\n _createClass(LinearScale, [{\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var me = this;\n\n var _me$getMinMax2 = me.getMinMax(true),\n min = _me$getMinMax2.min,\n max = _me$getMinMax2.max;\n\n me.min = isNumberFinite(min) ? min : 0;\n me.max = isNumberFinite(max) ? max : 1;\n me.handleTickRangeOptions();\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n var me = this;\n var horizontal = me.isHorizontal();\n var length = horizontal ? me.width : me.height;\n var minRotation = toRadians(me.options.ticks.minRotation);\n var ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n\n var tickFont = me._resolveTickFontOptions(0);\n\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n }]);\n\n return LinearScale;\n}(LinearScaleBase);\n\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n var remain = tickVal / Math.pow(10, Math.floor(log10(tickVal)));\n return remain === 1;\n}\n\nfunction generateTicks(generationOptions, dataRange) {\n var endExp = Math.floor(log10(dataRange.max));\n var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n var ticks = [];\n var tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n var exp = Math.floor(log10(tickVal));\n var significand = Math.floor(tickVal / Math.pow(10, exp));\n var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n\n do {\n ticks.push({\n value: tickVal,\n major: isMajor(tickVal)\n });\n ++significand;\n\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || exp === endExp && significand < endSignificand);\n\n var lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({\n value: lastTick,\n major: isMajor(tickVal)\n });\n return ticks;\n}\n\nvar LogarithmicScale = /*#__PURE__*/function (_Scale3) {\n _inherits(LogarithmicScale, _Scale3);\n\n var _super22 = _createSuper(LogarithmicScale);\n\n function LogarithmicScale(cfg) {\n var _this16;\n\n _classCallCheck(this, LogarithmicScale);\n\n _this16 = _super22.call(this, cfg);\n _this16.start = undefined;\n _this16.end = undefined;\n _this16._startValue = undefined;\n _this16._valueRange = 0;\n return _this16;\n }\n\n _createClass(LogarithmicScale, [{\n key: \"parse\",\n value: function parse(raw, index) {\n var value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var me = this;\n\n var _me$getMinMax3 = me.getMinMax(true),\n min = _me$getMinMax3.min,\n max = _me$getMinMax3.max;\n\n me.min = isNumberFinite(min) ? Math.max(0, min) : null;\n me.max = isNumberFinite(max) ? Math.max(0, max) : null;\n\n if (me.options.beginAtZero) {\n me._zero = true;\n }\n\n me.handleTickRangeOptions();\n }\n }, {\n key: \"handleTickRangeOptions\",\n value: function handleTickRangeOptions() {\n var me = this;\n\n var _me$getUserBounds4 = me.getUserBounds(),\n minDefined = _me$getUserBounds4.minDefined,\n maxDefined = _me$getUserBounds4.maxDefined;\n\n var min = me.min;\n var max = me.max;\n\n var setMin = function setMin(v) {\n return min = minDefined ? min : v;\n };\n\n var setMax = function setMax(v) {\n return max = maxDefined ? max : v;\n };\n\n var exp = function exp(v, m) {\n return Math.pow(10, Math.floor(log10(v)) + m);\n };\n\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n\n if (me._zero && me.min !== me._suggestedMin && min === exp(me.min, 0)) {\n setMin(exp(min, -1));\n }\n\n me.min = min;\n me.max = max;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var me = this;\n var opts = me.options;\n var generationOptions = {\n min: me._userMin,\n max: me._userMax\n };\n var ticks = generateTicks(generationOptions, me);\n\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, me, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n me.start = me.max;\n me.end = me.min;\n } else {\n me.start = me.min;\n me.end = me.max;\n }\n\n return ticks;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale);\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var me = this;\n var start = me.min;\n\n _get(_getPrototypeOf(LogarithmicScale.prototype), \"configure\", this).call(this);\n\n me._startValue = log10(start);\n me._valueRange = log10(me.max) - log10(start);\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n var me = this;\n\n if (value === undefined || value === 0) {\n value = me.min;\n }\n\n if (value === null || isNaN(value)) {\n return NaN;\n }\n\n return me.getPixelForDecimal(value === me.min ? 0 : (log10(value) - me._startValue) / me._valueRange);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var me = this;\n var decimal = me.getDecimalForPixel(pixel);\n return Math.pow(10, me._startValue + decimal * me._valueRange);\n }\n }]);\n\n return LogarithmicScale;\n}(Scale);\n\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n var tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n var padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n\n return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n\n return {\n start: pos,\n end: pos + size\n };\n}\n\nfunction fitWithPointLabels(scale) {\n var furthestLimits = {\n l: 0,\n r: scale.width,\n t: 0,\n b: scale.height - scale.paddingTop\n };\n var furthestAngles = {};\n var labelSizes = [];\n var padding = [];\n var valueCount = scale.getLabels().length;\n\n for (var i = 0; i < valueCount; i++) {\n var opts = scale.options.pointLabels.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n var pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i]);\n var plFont = toFont(opts.font);\n var textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n var angleRadians = scale.getIndexAngle(i);\n var angle = toDegrees(angleRadians);\n var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n\n if (hLimits.start < furthestLimits.l) {\n furthestLimits.l = hLimits.start;\n furthestAngles.l = angleRadians;\n }\n\n if (hLimits.end > furthestLimits.r) {\n furthestLimits.r = hLimits.end;\n furthestAngles.r = angleRadians;\n }\n\n if (vLimits.start < furthestLimits.t) {\n furthestLimits.t = vLimits.start;\n furthestAngles.t = angleRadians;\n }\n\n if (vLimits.end > furthestLimits.b) {\n furthestLimits.b = vLimits.end;\n furthestAngles.b = angleRadians;\n }\n }\n\n scale._setReductions(scale.drawingArea, furthestLimits, furthestAngles);\n\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n var items = [];\n var valueCount = scale.getLabels().length;\n var opts = scale.options;\n var tickBackdropHeight = getTickBackdropHeight(opts);\n var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n\n for (var i = 0; i < valueCount; i++) {\n var extra = i === 0 ? tickBackdropHeight / 2 : 0;\n var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i]);\n var angle = toDegrees(scale.getIndexAngle(i));\n var size = labelSizes[i];\n var y = yForAngle(pointLabelPosition.y, size.h, angle);\n var textAlign = getTextAlignForAngle(angle);\n var left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y: y,\n textAlign: textAlign,\n left: left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n\n return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n\n return x;\n}\n\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n\n return y;\n}\n\nfunction drawPointLabels(scale, labelCount) {\n var ctx = scale.ctx,\n pointLabels = scale.options.pointLabels;\n\n for (var i = labelCount - 1; i >= 0; i--) {\n var optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n var plFont = toFont(optsAtIndex.font);\n var _scale$_pointLabelIte = scale._pointLabelItems[i],\n x = _scale$_pointLabelIte.x,\n y = _scale$_pointLabelIte.y,\n textAlign = _scale$_pointLabelIte.textAlign,\n left = _scale$_pointLabelIte.left,\n top = _scale$_pointLabelIte.top,\n right = _scale$_pointLabelIte.right,\n bottom = _scale$_pointLabelIte.bottom;\n var backdropColor = optsAtIndex.backdropColor;\n\n if (!isNullOrUndef(backdropColor)) {\n var padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);\n }\n\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n var ctx = scale.ctx;\n\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n var pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (var i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n var ctx = scale.ctx;\n var circular = gridLineOpts.circular;\n var color = gridLineOpts.color,\n lineWidth = gridLineOpts.lineWidth;\n\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction numberOrZero(param) {\n return isNumber(param) ? param : 0;\n}\n\nfunction createPointLabelContext(parent, index, label) {\n return Object.assign(Object.create(parent), {\n label: label,\n index: index,\n type: 'pointLabel'\n });\n}\n\nvar RadialLinearScale = /*#__PURE__*/function (_LinearScaleBase2) {\n _inherits(RadialLinearScale, _LinearScaleBase2);\n\n var _super23 = _createSuper(RadialLinearScale);\n\n function RadialLinearScale(cfg) {\n var _this17;\n\n _classCallCheck(this, RadialLinearScale);\n\n _this17 = _super23.call(this, cfg);\n _this17.xCenter = undefined;\n _this17.yCenter = undefined;\n _this17.drawingArea = undefined;\n _this17._pointLabels = [];\n _this17._pointLabelItems = [];\n return _this17;\n }\n\n _createClass(RadialLinearScale, [{\n key: \"setDimensions\",\n value: function setDimensions() {\n var me = this;\n me.width = me.maxWidth;\n me.height = me.maxHeight;\n me.paddingTop = getTickBackdropHeight(me.options) / 2;\n me.xCenter = Math.floor(me.width / 2);\n me.yCenter = Math.floor((me.height - me.paddingTop) / 2);\n me.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var me = this;\n\n var _me$getMinMax4 = me.getMinMax(false),\n min = _me$getMinMax4.min,\n max = _me$getMinMax4.max;\n\n me.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n me.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n me.handleTickRangeOptions();\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var me = this;\n LinearScaleBase.prototype.generateTickLabels.call(me, ticks);\n me._pointLabels = me.getLabels().map(function (value, index) {\n var label = callback(me.options.pointLabels.callback, [value, index], me);\n return label || label === 0 ? label : '';\n });\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var me = this;\n var opts = me.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(me);\n } else {\n me.setCenterPoint(0, 0, 0, 0);\n }\n }\n }, {\n key: \"_setReductions\",\n value: function _setReductions(largestPossibleRadius, furthestLimits, furthestAngles) {\n var me = this;\n var radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n var radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n var radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n var radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\n radiusReductionLeft = numberOrZero(radiusReductionLeft);\n radiusReductionRight = numberOrZero(radiusReductionRight);\n radiusReductionTop = numberOrZero(radiusReductionTop);\n radiusReductionBottom = numberOrZero(radiusReductionBottom);\n me.drawingArea = Math.max(largestPossibleRadius / 2, Math.min(Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2), Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2)));\n me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n }\n }, {\n key: \"setCenterPoint\",\n value: function setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n var me = this;\n var maxRight = me.width - rightMovement - me.drawingArea;\n var maxLeft = leftMovement + me.drawingArea;\n var maxTop = topMovement + me.drawingArea;\n var maxBottom = me.height - me.paddingTop - bottomMovement - me.drawingArea;\n me.xCenter = Math.floor((maxLeft + maxRight) / 2 + me.left);\n me.yCenter = Math.floor((maxTop + maxBottom) / 2 + me.top + me.paddingTop);\n }\n }, {\n key: \"getIndexAngle\",\n value: function getIndexAngle(index) {\n var angleMultiplier = TAU / this.getLabels().length;\n var startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n }, {\n key: \"getDistanceFromCenterForValue\",\n value: function getDistanceFromCenterForValue(value) {\n var me = this;\n\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n var scalingFactor = me.drawingArea / (me.max - me.min);\n\n if (me.options.reverse) {\n return (me.max - value) * scalingFactor;\n }\n\n return (value - me.min) * scalingFactor;\n }\n }, {\n key: \"getValueForDistanceFromCenter\",\n value: function getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n var me = this;\n var scaledDistance = distance / (me.drawingArea / (me.max - me.min));\n return me.options.reverse ? me.max - scaledDistance : me.min + scaledDistance;\n }\n }, {\n key: \"getPointLabelContext\",\n value: function getPointLabelContext(index) {\n var me = this;\n var pointLabels = me._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n var pointLabel = pointLabels[index];\n return createPointLabelContext(me.getContext(), index, pointLabel);\n }\n }\n }, {\n key: \"getPointPosition\",\n value: function getPointPosition(index, distanceFromCenter) {\n var me = this;\n var angle = me.getIndexAngle(index) - HALF_PI;\n return {\n x: Math.cos(angle) * distanceFromCenter + me.xCenter,\n y: Math.sin(angle) * distanceFromCenter + me.yCenter,\n angle: angle\n };\n }\n }, {\n key: \"getPointPositionForValue\",\n value: function getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n }, {\n key: \"getBasePosition\",\n value: function getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n }, {\n key: \"getPointLabelPosition\",\n value: function getPointLabelPosition(index) {\n var _this$_pointLabelItem = this._pointLabelItems[index],\n left = _this$_pointLabelItem.left,\n top = _this$_pointLabelItem.top,\n right = _this$_pointLabelItem.right,\n bottom = _this$_pointLabelItem.bottom;\n return {\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n }\n }, {\n key: \"drawBackground\",\n value: function drawBackground() {\n var me = this;\n var _me$options7 = me.options,\n backgroundColor = _me$options7.backgroundColor,\n circular = _me$options7.grid.circular;\n\n if (backgroundColor) {\n var ctx = me.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(me, me.getDistanceFromCenterForValue(me._endValue), circular, me.getLabels().length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n }, {\n key: \"drawGrid\",\n value: function drawGrid() {\n var me = this;\n var ctx = me.ctx;\n var opts = me.options;\n var angleLines = opts.angleLines,\n grid = opts.grid;\n var labelCount = me.getLabels().length;\n var i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(me, labelCount);\n }\n\n if (grid.display) {\n me.ticks.forEach(function (tick, index) {\n if (index !== 0) {\n offset = me.getDistanceFromCenterForValue(tick.value);\n var optsAtIndex = grid.setContext(me.getContext(index - 1));\n drawRadiusLine(me, optsAtIndex, offset, labelCount);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = me.getLabels().length - 1; i >= 0; i--) {\n var optsAtIndex = angleLines.setContext(me.getPointLabelContext(i));\n var color = optsAtIndex.color,\n lineWidth = optsAtIndex.lineWidth;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max);\n position = me.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(me.xCenter, me.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n }, {\n key: \"drawBorder\",\n value: function drawBorder() {}\n }, {\n key: \"drawLabels\",\n value: function drawLabels() {\n var me = this;\n var ctx = me.ctx;\n var opts = me.options;\n var tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n var startAngle = me.getIndexAngle(0);\n var offset, width;\n ctx.save();\n ctx.translate(me.xCenter, me.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n me.ticks.forEach(function (tick, index) {\n if (index === 0 && !opts.reverse) {\n return;\n }\n\n var optsAtIndex = tickOpts.setContext(me.getContext(index));\n var tickFont = toFont(optsAtIndex.font);\n offset = me.getDistanceFromCenterForValue(me.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n var padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color\n });\n });\n ctx.restore();\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {}\n }]);\n\n return RadialLinearScale;\n}(LinearScaleBase);\n\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback: function callback(label) {\n return label;\n },\n padding: 5\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\nvar INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\nvar UNITS = Object.keys(INTERVALS);\n\nfunction sorter(a, b) {\n return a - b;\n}\n\nfunction _parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n var adapter = scale._adapter;\n var _scale$_parseOpts = scale._parseOpts,\n parser = _scale$_parseOpts.parser,\n round = _scale$_parseOpts.round,\n isoWeekday = _scale$_parseOpts.isoWeekday;\n var value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n var ilen = UNITS.length;\n\n for (var i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n var interval = INTERVALS[UNITS[i]];\n var factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n}\n\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (var i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n var unit = UNITS[i];\n\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\nfunction determineMajorUnit(unit) {\n for (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n var _lookup2 = _lookup(timestamps, time),\n lo = _lookup2.lo,\n hi = _lookup2.hi;\n\n var timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n var adapter = scale._adapter;\n var first = +adapter.startOf(ticks[0].value, majorUnit);\n var last = ticks[ticks.length - 1].value;\n var major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n\n return ticks;\n}\n\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n var ticks = [];\n var map = {};\n var ilen = values.length;\n var i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value: value,\n major: false\n });\n }\n\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nvar TimeScale = /*#__PURE__*/function (_Scale4) {\n _inherits(TimeScale, _Scale4);\n\n var _super24 = _createSuper(TimeScale);\n\n function TimeScale(props) {\n var _this18;\n\n _classCallCheck(this, TimeScale);\n\n _this18 = _super24.call(this, props);\n _this18._cache = {\n data: [],\n labels: [],\n all: []\n };\n _this18._unit = 'day';\n _this18._majorUnit = undefined;\n _this18._offsets = {};\n _this18._normalized = false;\n _this18._parseOpts = undefined;\n return _this18;\n }\n\n _createClass(TimeScale, [{\n key: \"init\",\n value: function init(scaleOpts, opts) {\n var time = scaleOpts.time || (scaleOpts.time = {});\n var adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n _get(_getPrototypeOf(TimeScale.prototype), \"init\", this).call(this, scaleOpts);\n\n this._normalized = opts.normalized;\n }\n }, {\n key: \"parse\",\n value: function parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n\n return _parse(this, raw);\n }\n }, {\n key: \"beforeLayout\",\n value: function beforeLayout() {\n _get(_getPrototypeOf(TimeScale.prototype), \"beforeLayout\", this).call(this);\n\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var me = this;\n var options = me.options;\n var adapter = me._adapter;\n var unit = options.time.unit || 'day';\n\n var _me$getUserBounds5 = me.getUserBounds(),\n min = _me$getUserBounds5.min,\n max = _me$getUserBounds5.max,\n minDefined = _me$getUserBounds5.minDefined,\n maxDefined = _me$getUserBounds5.maxDefined;\n\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n if (!minDefined || !maxDefined) {\n _applyBounds(me._getLabelBounds());\n\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(me.getMinMax(false));\n }\n }\n\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n me.min = Math.min(min, max - 1);\n me.max = Math.max(min + 1, max);\n }\n }, {\n key: \"_getLabelBounds\",\n value: function _getLabelBounds() {\n var arr = this.getLabelTimestamps();\n var min = Number.POSITIVE_INFINITY;\n var max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n\n return {\n min: min,\n max: max\n };\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var me = this;\n var options = me.options;\n var timeOpts = options.time;\n var tickOpts = options.ticks;\n var timestamps = tickOpts.source === 'labels' ? me.getLabelTimestamps() : me._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n me.min = me._userMin || timestamps[0];\n me.max = me._userMax || timestamps[timestamps.length - 1];\n }\n\n var min = me.min;\n var max = me.max;\n\n var ticks = _filterBetween(timestamps, min, max);\n\n me._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, me.min, me.max, me._getLabelCapacity(min)) : determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max));\n me._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined : determineMajorUnit(me._unit);\n me.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(me, ticks, me._majorUnit);\n }\n }, {\n key: \"initOffsets\",\n value: function initOffsets(timestamps) {\n var me = this;\n var start = 0;\n var end = 0;\n var first, last;\n\n if (me.options.offset && timestamps.length) {\n first = me.getDecimalForValue(timestamps[0]);\n\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (me.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n\n last = me.getDecimalForValue(timestamps[timestamps.length - 1]);\n\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - me.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n\n var limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n me._offsets = {\n start: start,\n end: end,\n factor: 1 / (start + 1 + end)\n };\n }\n }, {\n key: \"_generate\",\n value: function _generate() {\n var me = this;\n var adapter = me._adapter;\n var min = me.min;\n var max = me.max;\n var options = me.options;\n var timeOpts = options.time;\n var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, me._getLabelCapacity(min));\n var stepSize = valueOrDefault(timeOpts.stepSize, 1);\n var weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n var hasWeekday = isNumber(weekday) || weekday === true;\n var ticks = {};\n var first = min;\n var time, count;\n\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n\n var timestamps = options.ticks.source === 'data' && me.getDataTimestamps();\n\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n return Object.keys(ticks).sort(function (a, b) {\n return a - b;\n }).map(function (x) {\n return +x;\n });\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n var me = this;\n var adapter = me._adapter;\n var timeOpts = me.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n }, {\n key: \"_tickFormatFunction\",\n value: function _tickFormatFunction(time, index, ticks, format) {\n var me = this;\n var options = me.options;\n var formats = options.time.displayFormats;\n var unit = me._unit;\n var majorUnit = me._majorUnit;\n var minorFormat = unit && formats[unit];\n var majorFormat = majorUnit && formats[majorUnit];\n var tick = ticks[index];\n var major = majorUnit && majorFormat && tick && tick.major;\n\n var label = me._adapter.format(time, format || (major ? majorFormat : minorFormat));\n\n var formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], me) : label;\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n }, {\n key: \"getDecimalForValue\",\n value: function getDecimalForValue(value) {\n var me = this;\n return value === null ? NaN : (value - me.min) / (me.max - me.min);\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n var me = this;\n var offsets = me._offsets;\n var pos = me.getDecimalForValue(value);\n return me.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var me = this;\n var offsets = me._offsets;\n var pos = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return me.min + pos * (me.max - me.min);\n }\n }, {\n key: \"_getLabelSize\",\n value: function _getLabelSize(label) {\n var me = this;\n var ticksOpts = me.options.ticks;\n var tickLabelWidth = me.ctx.measureText(label).width;\n var angle = toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n var cosRotation = Math.cos(angle);\n var sinRotation = Math.sin(angle);\n\n var tickFontSize = me._resolveTickFontOptions(0).size;\n\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n }, {\n key: \"_getLabelCapacity\",\n value: function _getLabelCapacity(exampleTime) {\n var me = this;\n var timeOpts = me.options.time;\n var displayFormats = timeOpts.displayFormats;\n var format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n\n var exampleLabel = me._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);\n\n var size = me._getLabelSize(exampleLabel);\n\n var capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n }, {\n key: \"getDataTimestamps\",\n value: function getDataTimestamps() {\n var me = this;\n var timestamps = me._cache.data || [];\n var i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var metas = me.getMatchingVisibleMetas();\n\n if (me._normalized && metas.length) {\n return me._cache.data = metas[0].controller.getAllParsedValues(me);\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(me));\n }\n\n return me._cache.data = me.normalize(timestamps);\n }\n }, {\n key: \"getLabelTimestamps\",\n value: function getLabelTimestamps() {\n var me = this;\n var timestamps = me._cache.labels || [];\n var i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var labels = me.getLabels();\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(_parse(me, labels[i]));\n }\n\n return me._cache.labels = me._normalized ? timestamps : me.normalize(timestamps);\n }\n }, {\n key: \"normalize\",\n value: function normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n }]);\n\n return TimeScale;\n}(Scale);\n\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n var lo = 0;\n var hi = table.length - 1;\n var prevSource, nextSource, prevTarget, nextTarget;\n\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n var _lookupByKey2 = _lookupByKey(table, 'pos', val);\n\n lo = _lookupByKey2.lo;\n hi = _lookupByKey2.hi;\n }\n\n var _table$lo = table[lo];\n prevSource = _table$lo.pos;\n prevTarget = _table$lo.time;\n var _table$hi = table[hi];\n nextSource = _table$hi.pos;\n nextTarget = _table$hi.time;\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n var _lookupByKey3 = _lookupByKey(table, 'time', val);\n\n lo = _lookupByKey3.lo;\n hi = _lookupByKey3.hi;\n }\n\n var _table$lo2 = table[lo];\n prevSource = _table$lo2.time;\n prevTarget = _table$lo2.pos;\n var _table$hi2 = table[hi];\n nextSource = _table$hi2.time;\n nextTarget = _table$hi2.pos;\n }\n\n var span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nvar TimeSeriesScale = /*#__PURE__*/function (_TimeScale) {\n _inherits(TimeSeriesScale, _TimeScale);\n\n var _super25 = _createSuper(TimeSeriesScale);\n\n function TimeSeriesScale(props) {\n var _this19;\n\n _classCallCheck(this, TimeSeriesScale);\n\n _this19 = _super25.call(this, props);\n _this19._table = [];\n _this19._minPos = undefined;\n _this19._tableRange = undefined;\n return _this19;\n }\n\n _createClass(TimeSeriesScale, [{\n key: \"initOffsets\",\n value: function initOffsets() {\n var me = this;\n\n var timestamps = me._getTimestampsForTable();\n\n var table = me._table = me.buildLookupTable(timestamps);\n me._minPos = interpolate(table, me.min);\n me._tableRange = interpolate(table, me.max) - me._minPos;\n\n _get(_getPrototypeOf(TimeSeriesScale.prototype), \"initOffsets\", this).call(this, timestamps);\n }\n }, {\n key: \"buildLookupTable\",\n value: function buildLookupTable(timestamps) {\n var min = this.min,\n max = this.max;\n var items = [];\n var table = [];\n var i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n return [{\n time: min,\n pos: 0\n }, {\n time: max,\n pos: 1\n }];\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n\n return table;\n }\n }, {\n key: \"_getTimestampsForTable\",\n value: function _getTimestampsForTable() {\n var me = this;\n var timestamps = me._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var data = me.getDataTimestamps();\n var label = me.getLabelTimestamps();\n\n if (data.length && label.length) {\n timestamps = me.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n\n timestamps = me._cache.all = timestamps;\n return timestamps;\n }\n }, {\n key: \"getDecimalForValue\",\n value: function getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var me = this;\n var offsets = me._offsets;\n var decimal = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(me._table, decimal * me._tableRange + me._minPos, true);\n }\n }]);\n\n return TimeSeriesScale;\n}(TimeScale);\n\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\nvar scales = /*#__PURE__*/Object.freeze({\n __proto__: null,\n CategoryScale: CategoryScale,\n LinearScale: LinearScale,\n LogarithmicScale: LogarithmicScale,\n RadialLinearScale: RadialLinearScale,\n TimeScale: TimeScale,\n TimeSeriesScale: TimeSeriesScale\n});\nvar registerables = [controllers, elements, plugins, scales];\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { Chart, registerables } from '../dist/chart.esm';\nChart.register.apply(Chart, _toConsumableArray(registerables));\nexport default Chart;","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\n\nvar formatDistance = function formatDistance(token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n\n return result;\n};\n\nexport default formatDistance;","export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; // TODO: Remove String()\n\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n \"long\": 'MMMM do, y',\n medium: 'MMM d, y',\n \"short\": 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n \"long\": 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n \"short\": 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n \"long\": \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n \"short\": '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\n\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;","export default function buildLocalizeFn(args) {\n return function (dirtyIndex, dirtyOptions) {\n var options = dirtyOptions || {};\n var context = options.context ? String(options.context) : 'standalone';\n var valuesArray;\n\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n\n var _width = options.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challange you to try to remove it!\n\n return valuesArray[index];\n };\n}","export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n\n return undefined;\n}","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n \"short\": /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function valueCallback(value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function valueCallback(index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\n\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0\n /* Sunday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n \"short\": ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\n\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n\n case 2:\n return number + 'nd';\n\n case 3:\n return number + 'rd';\n }\n }\n\n return number + 'th';\n};\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function argumentCallback(quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\n\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, -amount);\n}","export default function assign(target, dirtyObject) {\n if (target == null) {\n throw new TypeError('assign requires that input parameter not be null or undefined');\n }\n\n dirtyObject = dirtyObject || {};\n\n for (var property in dirtyObject) {\n if (Object.prototype.hasOwnProperty.call(dirtyObject, property)) {\n target[property] = dirtyObject[property];\n }\n }\n\n return target;\n}","function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/);\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n}\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n }\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate, dirtyOptions);\n var year = date.getUTCFullYear();\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) {\n requiredArgs(2, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = toInteger(dirtyDay);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var year = getUTCISOWeekYear(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCISOWeek(fourthOfJanuary);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import toInteger from \"../toInteger/index.js\";\nimport getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate);\n var year = getUTCWeekYear(dirtyDate, dirtyOptions);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, dirtyOptions);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\nvar MILLISECONDS_IN_MINUTE = 60000;\nvar MILLISECONDS_IN_SECOND = 1000;\nvar numericPatterns = {\n month: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/,\n // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/,\n // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/,\n // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/,\n // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/,\n // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/,\n // 0 to 12\n minute: /^[0-5]?\\d/,\n // 0 to 59\n second: /^[0-5]?\\d/,\n // 0 to 59\n singleDigit: /^\\d/,\n // 0 to 9\n twoDigits: /^\\d{1,2}/,\n // 0 to 99\n threeDigits: /^\\d{1,3}/,\n // 0 to 999\n fourDigits: /^\\d{1,4}/,\n // 0 to 9999\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/,\n // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/,\n // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/,\n // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nvar timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n};\n\nfunction parseNumericPattern(pattern, string, valueCallback) {\n var matchResult = string.match(pattern);\n\n if (!matchResult) {\n return null;\n }\n\n var value = parseInt(matchResult[0], 10);\n return {\n value: valueCallback ? valueCallback(value) : value,\n rest: string.slice(matchResult[0].length)\n };\n}\n\nfunction parseTimezonePattern(pattern, string) {\n var matchResult = string.match(pattern);\n\n if (!matchResult) {\n return null;\n } // Input is 'Z'\n\n\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: string.slice(1)\n };\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1;\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n return {\n value: sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * MILLISECONDS_IN_SECOND),\n rest: string.slice(matchResult[0].length)\n };\n}\n\nfunction parseAnyDigitsSigned(string, valueCallback) {\n return parseNumericPattern(numericPatterns.anyDigitsSigned, string, valueCallback);\n}\n\nfunction parseNDigits(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigit, string, valueCallback);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigits, string, valueCallback);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigits, string, valueCallback);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigits, string, valueCallback);\n\n default:\n return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), string, valueCallback);\n }\n}\n\nfunction parseNDigitsSigned(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(numericPatterns.singleDigitSigned, string, valueCallback);\n\n case 2:\n return parseNumericPattern(numericPatterns.twoDigitsSigned, string, valueCallback);\n\n case 3:\n return parseNumericPattern(numericPatterns.threeDigitsSigned, string, valueCallback);\n\n case 4:\n return parseNumericPattern(numericPatterns.fourDigitsSigned, string, valueCallback);\n\n default:\n return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), string, valueCallback);\n }\n}\n\nfunction dayPeriodEnumToHours(enumValue) {\n switch (enumValue) {\n case 'morning':\n return 4;\n\n case 'evening':\n return 17;\n\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12;\n\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0;\n }\n}\n\nfunction normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0; // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n var result;\n\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100;\n } else {\n var rangeEnd = absCurrentYear + 50;\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n }\n\n return isCommonEra ? result : 1 - result;\n}\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // User for validation\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\n\n\nvar parsers = {\n // Era\n G: {\n priority: 140,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return match.era(string, {\n width: 'abbreviated'\n }) || match.era(string, {\n width: 'narrow'\n });\n // A, B\n\n case 'GGGGG':\n return match.era(string, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return match.era(string, {\n width: 'wide'\n }) || match.era(string, {\n width: 'abbreviated'\n }) || match.era(string, {\n width: 'narrow'\n });\n }\n },\n set: function set(date, flags, value, _options) {\n flags.era = value;\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['R', 'u', 't', 'T']\n },\n // Year\n y: {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n priority: 130,\n parse: function parse(string, token, match, _options) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n };\n };\n\n switch (token) {\n case 'y':\n return parseNDigits(4, string, valueCallback);\n\n case 'yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n });\n\n default:\n return parseNDigits(token.length, string, valueCallback);\n }\n },\n validate: function validate(_date, value, _options) {\n return value.isTwoDigitYear || value.year > 0;\n },\n set: function set(date, flags, value, _options) {\n var currentYear = date.getUTCFullYear();\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']\n },\n // Local week-numbering year\n Y: {\n priority: 130,\n parse: function parse(string, token, match, _options) {\n var valueCallback = function valueCallback(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n };\n };\n\n switch (token) {\n case 'Y':\n return parseNDigits(4, string, valueCallback);\n\n case 'Yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n });\n\n default:\n return parseNDigits(token.length, string, valueCallback);\n }\n },\n validate: function validate(_date, value, _options) {\n return value.isTwoDigitYear || value.year > 0;\n },\n set: function set(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options);\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n }\n\n var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n date.setUTCHours(0, 0, 0, 0);\n return startOfUTCWeek(date, options);\n },\n incompatibleTokens: ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']\n },\n // ISO week-numbering year\n R: {\n priority: 130,\n parse: function parse(string, token, _match, _options) {\n if (token === 'R') {\n return parseNDigitsSigned(4, string);\n }\n\n return parseNDigitsSigned(token.length, string);\n },\n set: function set(_date, _flags, value, _options) {\n var firstWeekOfYear = new Date(0);\n firstWeekOfYear.setUTCFullYear(value, 0, 4);\n firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n return startOfUTCISOWeek(firstWeekOfYear);\n },\n incompatibleTokens: ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']\n },\n // Extended year\n u: {\n priority: 130,\n parse: function parse(string, token, _match, _options) {\n if (token === 'u') {\n return parseNDigitsSigned(4, string);\n }\n\n return parseNDigitsSigned(token.length, string);\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCFullYear(value, 0, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']\n },\n // Quarter\n Q: {\n priority: 120,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ':\n // 01, 02, 03, 04\n return parseNDigits(token.length, string);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return match.ordinalNumber(string, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return match.quarter(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 1 && value <= 4;\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Stand-alone quarter\n q: {\n priority: 120,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq':\n // 01, 02, 03, 04\n return parseNDigits(token.length, string);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return match.ordinalNumber(string, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return match.quarter(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 1 && value <= 4;\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCMonth((value - 1) * 3, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Month\n M: {\n priority: 110,\n parse: function parse(string, token, match, _options) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return parseNumericPattern(numericPatterns.month, string, valueCallback);\n // 01, 02, ..., 12\n\n case 'MM':\n return parseNDigits(2, string, valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return match.month(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.month(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Stand-alone month\n L: {\n priority: 110,\n parse: function parse(string, token, match, _options) {\n var valueCallback = function valueCallback(value) {\n return value - 1;\n };\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return parseNumericPattern(numericPatterns.month, string, valueCallback);\n // 01, 02, ..., 12\n\n case 'LL':\n return parseNDigits(2, string, valueCallback);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return match.month(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.month(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCMonth(value, 1);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Local week of year\n w: {\n priority: 100,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, string);\n\n case 'wo':\n return match.ordinalNumber(string, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 1 && value <= 53;\n },\n set: function set(date, _flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options);\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']\n },\n // ISO week of year\n I: {\n priority: 100,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, string);\n\n case 'Io':\n return match.ordinalNumber(string, {\n unit: 'week'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 1 && value <= 53;\n },\n set: function set(date, _flags, value, options) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options);\n },\n incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']\n },\n // Day of the month\n d: {\n priority: 90,\n subPriority: 1,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, string);\n\n case 'do':\n return match.ordinalNumber(string, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function validate(date, value, _options) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n var month = date.getUTCMonth();\n\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month];\n }\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCDate(value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n },\n // Day of year\n D: {\n priority: 90,\n subPriority: 1,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, string);\n\n case 'Do':\n return match.ordinalNumber(string, {\n unit: 'date'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function validate(date, value, _options) {\n var year = date.getUTCFullYear();\n var isLeapYear = isLeapYearIndex(year);\n\n if (isLeapYear) {\n return value >= 1 && value <= 366;\n } else {\n return value >= 1 && value <= 365;\n }\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCMonth(0, value);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']\n },\n // Day of week\n E: {\n priority: 90,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['D', 'i', 'e', 'c', 't', 'T']\n },\n // Local day of week\n e: {\n priority: 90,\n parse: function parse(string, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'e':\n case 'ee':\n // 03\n return parseNDigits(token.length, string, valueCallback);\n // 3rd\n\n case 'eo':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n });\n // Tue\n\n case 'eee':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.day(string, {\n width: 'short',\n context: 'formatting'\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']\n },\n // Stand-alone local day of week\n c: {\n priority: 90,\n parse: function parse(string, token, match, options) {\n var valueCallback = function valueCallback(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;\n };\n\n switch (token) {\n // 3\n case 'c':\n case 'cc':\n // 03\n return parseNDigits(token.length, string, valueCallback);\n // 3rd\n\n case 'co':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n });\n // Tue\n\n case 'ccc':\n return match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'standalone'\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) || match.day(string, {\n width: 'short',\n context: 'standalone'\n }) || match.day(string, {\n width: 'narrow',\n context: 'standalone'\n });\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 0 && value <= 6;\n },\n set: function set(date, _flags, value, options) {\n date = setUTCDay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']\n },\n // ISO day of week\n i: {\n priority: 90,\n parse: function parse(string, token, match, _options) {\n var valueCallback = function valueCallback(value) {\n if (value === 0) {\n return 7;\n }\n\n return value;\n };\n\n switch (token) {\n // 2\n case 'i':\n case 'ii':\n // 02\n return parseNDigits(token.length, string);\n // 2nd\n\n case 'io':\n return match.ordinalNumber(string, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // T\n\n case 'iiiii':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // Tu\n\n case 'iiiiii':\n return match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n // Tuesday\n\n case 'iiii':\n default:\n return match.day(string, {\n width: 'wide',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) || match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n });\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 1 && value <= 7;\n },\n set: function set(date, _flags, value, options) {\n date = setUTCISODay(date, value, options);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']\n },\n // AM or PM\n a: {\n priority: 80,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaaa':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['b', 'B', 'H', 'K', 'k', 't', 'T']\n },\n // AM, PM, midnight\n b: {\n priority: 80,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbbb':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'B', 'H', 'K', 'k', 't', 'T']\n },\n // in the morning, in the afternoon, in the evening, at night\n B: {\n priority: 80,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return match.dayPeriod(string, {\n width: 'wide',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) || match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n });\n }\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 't', 'T']\n },\n // Hour [1-12]\n h: {\n priority: 70,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, string);\n\n case 'ho':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 1 && value <= 12;\n },\n set: function set(date, _flags, value, _options) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n },\n incompatibleTokens: ['H', 'K', 'k', 't', 'T']\n },\n // Hour [0-23]\n H: {\n priority: 70,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, string);\n\n case 'Ho':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 0 && value <= 23;\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCHours(value, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 'h', 'K', 'k', 't', 'T']\n },\n // Hour [0-11]\n K: {\n priority: 70,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, string);\n\n case 'Ko':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 0 && value <= 11;\n },\n set: function set(date, _flags, value, _options) {\n var isPM = date.getUTCHours() >= 12;\n\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0);\n } else {\n date.setUTCHours(value, 0, 0, 0);\n }\n\n return date;\n },\n incompatibleTokens: ['a', 'b', 'h', 'H', 'k', 't', 'T']\n },\n // Hour [1-24]\n k: {\n priority: 70,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, string);\n\n case 'ko':\n return match.ordinalNumber(string, {\n unit: 'hour'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 1 && value <= 24;\n },\n set: function set(date, _flags, value, _options) {\n var hours = value <= 24 ? value % 24 : value;\n date.setUTCHours(hours, 0, 0, 0);\n return date;\n },\n incompatibleTokens: ['a', 'b', 'h', 'H', 'K', 't', 'T']\n },\n // Minute\n m: {\n priority: 60,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, string);\n\n case 'mo':\n return match.ordinalNumber(string, {\n unit: 'minute'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 0 && value <= 59;\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCMinutes(value, 0, 0);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Second\n s: {\n priority: 50,\n parse: function parse(string, token, match, _options) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, string);\n\n case 'so':\n return match.ordinalNumber(string, {\n unit: 'second'\n });\n\n default:\n return parseNDigits(token.length, string);\n }\n },\n validate: function validate(_date, value, _options) {\n return value >= 0 && value <= 59;\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCSeconds(value, 0);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Fraction of second\n S: {\n priority: 30,\n parse: function parse(string, token, _match, _options) {\n var valueCallback = function valueCallback(value) {\n return Math.floor(value * Math.pow(10, -token.length + 3));\n };\n\n return parseNDigits(token.length, string, valueCallback);\n },\n set: function set(date, _flags, value, _options) {\n date.setUTCMilliseconds(value);\n return date;\n },\n incompatibleTokens: ['t', 'T']\n },\n // Timezone (ISO-8601. +00:00 is `'Z'`)\n X: {\n priority: 10,\n parse: function parse(string, token, _match, _options) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);\n\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, string);\n\n case 'XXXX':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);\n\n case 'XXXXX':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);\n\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string);\n }\n },\n set: function set(date, flags, value, _options) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n },\n incompatibleTokens: ['t', 'T', 'x']\n },\n // Timezone (ISO-8601)\n x: {\n priority: 10,\n parse: function parse(string, token, _match, _options) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);\n\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, string);\n\n case 'xxxx':\n return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);\n\n case 'xxxxx':\n return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);\n\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string);\n }\n },\n set: function set(date, flags, value, _options) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n return new Date(date.getTime() - value);\n },\n incompatibleTokens: ['t', 'T', 'X']\n },\n // Seconds timestamp\n t: {\n priority: 40,\n parse: function parse(string, _token, _match, _options) {\n return parseAnyDigitsSigned(string);\n },\n set: function set(_date, _flags, value, _options) {\n return [new Date(value * 1000), {\n timestampIsSet: true\n }];\n },\n incompatibleTokens: '*'\n },\n // Milliseconds timestamp\n T: {\n priority: 20,\n parse: function parse(string, _token, _match, _options) {\n return parseAnyDigitsSigned(string);\n },\n set: function set(_date, _flags, value, _options) {\n return [new Date(value), {\n timestampIsSet: true\n }];\n },\n incompatibleTokens: '*'\n }\n};\nexport default parsers;","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var week = toInteger(dirtyWeek);\n var diff = getUTCWeek(date, options) - week;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var isoWeek = toInteger(dirtyISOWeek);\n var diff = getUTCISOWeek(date) - isoWeek;\n date.setUTCDate(date.getUTCDate() - diff * 7);\n return date;\n}","import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n requiredArgs(2, arguments);\n var day = toInteger(dirtyDay);\n\n if (day % 7 === 0) {\n day = day - 7;\n }\n\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var currentDay = date.getUTCDay();\n var remainder = day % 7;\n var dayIndex = (remainder + 7) % 7;\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}","import defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport parsers from \"./_lib/parsers/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar TIMEZONE_UNIT_PRIORITY = 10; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 7 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 7 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Sun | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 0001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Long localized date | NA | P | 05/29/1453 | 5,8 |\n * | | | PP | May 29, 1453 | |\n * | | | PPP | May 29th, 1453 | |\n * | | | PPPP | Sunday, May 29th, 1453 | 2,5,8 |\n * | Long localized time | NA | p | 12:00 AM | 5,8 |\n * | | | pp | 12:00:00 AM | |\n * | Combination of date and time | NA | Pp | 05/29/1453, 12:00 AM | |\n * | | | PPpp | May 29, 1453, 12:00:00 AM | |\n * | | | PPPpp | May 29th, 1453 at ... | |\n * | | | PPPPpp | Sunday, May 29th, 1453 at ... | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n * on the given locale.\n *\n * using `en-US` locale: `P` => `MM/dd/yyyy`\n * using `en-US` locale: `p` => `hh:mm a`\n * using `pt-BR` locale: `P` => `dd/MM/yyyy`\n * using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Old `parse` was renamed to `toDate`.\n * Now `parse` is a new function which parses a string using a provided format.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward (toDate no longer accepts a string)\n * toDate(1392098430000) // Unix to timestamp\n * toDate(new Date(2014, 1, 11, 11, 30, 30)) // Cloning the date\n * parse('2016-01-01', 'yyyy-MM-dd', new Date())\n * ```\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, dirtyOptions) {\n requiredArgs(3, arguments);\n var dateString = String(dirtyDateString);\n var formatString = String(dirtyFormatString);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n\n if (!locale.match) {\n throw new RangeError('locale must contain match property');\n }\n\n var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyReferenceDate);\n } else {\n return new Date(NaN);\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }; // If timezone isn't specified, it will be set to the system timezone\n\n var setters = [{\n priority: TIMEZONE_UNIT_PRIORITY,\n subPriority: -1,\n set: dateToSystemTimezone,\n index: 0\n }];\n var i;\n var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong, subFnOptions);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp);\n var usedTokens = [];\n\n for (i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) {\n throwProtectedError(token, formatString, dirtyDateString);\n }\n\n var firstCharacter = token[0];\n var parser = parsers[firstCharacter];\n\n if (parser) {\n var incompatibleTokens = parser.incompatibleTokens;\n\n if (Array.isArray(incompatibleTokens)) {\n var incompatibleToken = void 0;\n\n for (var _i = 0; _i < usedTokens.length; _i++) {\n var usedToken = usedTokens[_i].token;\n\n if (incompatibleTokens.indexOf(usedToken) !== -1 || usedToken === firstCharacter) {\n incompatibleToken = usedTokens[_i];\n break;\n }\n }\n\n if (incompatibleToken) {\n throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n }\n } else if (parser.incompatibleTokens === '*' && usedTokens.length) {\n throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n }\n\n usedTokens.push({\n token: firstCharacter,\n fullToken: token\n });\n var parseResult = parser.parse(dateString, token, locale.match, subFnOptions);\n\n if (!parseResult) {\n return new Date(NaN);\n }\n\n setters.push({\n priority: parser.priority,\n subPriority: parser.subPriority || 0,\n set: parser.set,\n validate: parser.validate,\n value: parseResult.value,\n index: setters.length\n });\n dateString = parseResult.rest;\n } else {\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n } // Replace two single quote characters with one single quote character\n\n\n if (token === \"''\") {\n token = \"'\";\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token);\n } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length);\n } else {\n return new Date(NaN);\n }\n }\n } // Check if the remaining input contains something other than whitespace\n\n\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN);\n }\n\n var uniquePrioritySetters = setters.map(function (setter) {\n return setter.priority;\n }).sort(function (a, b) {\n return b - a;\n }).filter(function (priority, index, array) {\n return array.indexOf(priority) === index;\n }).map(function (priority) {\n return setters.filter(function (setter) {\n return setter.priority === priority;\n }).sort(function (a, b) {\n return b.subPriority - a.subPriority;\n });\n }).map(function (setterArray) {\n return setterArray[0];\n });\n var date = toDate(dirtyReferenceDate);\n\n if (isNaN(date)) {\n return new Date(NaN);\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37\n\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n var flags = {};\n\n for (i = 0; i < uniquePrioritySetters.length; i++) {\n var setter = uniquePrioritySetters[i];\n\n if (setter.validate && !setter.validate(utcDate, setter.value, subFnOptions)) {\n return new Date(NaN);\n }\n\n var result = setter.set(utcDate, flags, setter.value, subFnOptions); // Result is tuple (date, flags)\n\n if (result[0]) {\n utcDate = result[0];\n assign(flags, result[1]); // Result is date\n } else {\n utcDate = result;\n }\n }\n\n return utcDate;\n}\n\nfunction dateToSystemTimezone(date, flags) {\n if (flags.timestampIsSet) {\n return date;\n }\n\n var convertedDate = new Date(0);\n convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n return convertedDate;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\nvar MILLISECONDS_IN_MINUTE = 60000;\nvar DEFAULT_ADDITIONAL_DIGITS = 2;\nvar patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The previous `parse` implementation was renamed to `parseISO`.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward\n * parseISO('2016-01-01')\n * ```\n *\n * - `parseISO` now validates separate date and time values in ISO-8601 strings\n * and returns `Invalid Date` if the date is invalid.\n *\n * ```javascript\n * parseISO('2018-13-32')\n * //=> Invalid Date\n * ```\n *\n * - `parseISO` now doesn't fall back to `new Date` constructor\n * if it fails to parse a string argument. Instead, it returns `Invalid Date`.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\n\nexport default function parseISO(argument, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var additionalDigits = options.additionalDigits == null ? DEFAULT_ADDITIONAL_DIGITS : toInteger(options.additionalDigits);\n\n if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n throw new RangeError('additionalDigits must be 0, 1 or 2');\n }\n\n if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n return new Date(NaN);\n }\n\n var dateStrings = splitDateString(argument);\n var date;\n\n if (dateStrings.date) {\n var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n\n if (isNaN(date) || !date) {\n return new Date(NaN);\n }\n\n var timestamp = date.getTime();\n var time = 0;\n var offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n\n if (isNaN(time) || time === null) {\n return new Date(NaN);\n }\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n var dirtyDate = new Date(timestamp + time); // js parsed string assuming it's in UTC timezone\n // but we need it to be parsed in our timezone\n // so we use utc values to build date in our timezone.\n // Year values from 0 to 99 map to the years 1900 to 1999\n // so set year explicitly with setFullYear.\n\n var result = new Date(0);\n result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n return result;\n }\n\n return new Date(timestamp + time + offset);\n}\n\nfunction splitDateString(dateString) {\n var dateStrings = {};\n var array = dateString.split(patterns.dateTimeDelimiter);\n var timeString; // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n\n if (array.length > 2) {\n return dateStrings;\n }\n\n if (/:/.test(array[0])) {\n dateStrings.date = null;\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(dateStrings.date.length, dateString.length);\n }\n }\n\n if (timeString) {\n var token = patterns.timezone.exec(timeString);\n\n if (token) {\n dateStrings.time = timeString.replace(token[1], '');\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n var captures = dateString.match(regex); // Invalid ISO-formatted year\n\n if (!captures) return {\n year: null\n };\n var year = captures[1] && parseInt(captures[1]);\n var century = captures[2] && parseInt(captures[2]);\n return {\n year: century == null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length)\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return null;\n var captures = dateString.match(dateRegex); // Invalid ISO-formatted string\n\n if (!captures) return null;\n var isWeekDate = !!captures[4];\n var dayOfYear = parseDateUnit(captures[1]);\n var month = parseDateUnit(captures[2]) - 1;\n var day = parseDateUnit(captures[3]);\n var week = parseDateUnit(captures[4]);\n var dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n var date = new Date(0);\n\n if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n return new Date(NaN);\n }\n\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n var captures = timeString.match(timeRegex);\n if (!captures) return null; // Invalid ISO-formatted time\n\n var hours = parseTimeUnit(captures[1]);\n var minutes = parseTimeUnit(captures[2]);\n var seconds = parseTimeUnit(captures[3]);\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000;\n}\n\nfunction parseTimeUnit(value) {\n return value && parseFloat(value.replace(',', '.')) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === 'Z') return 0;\n var captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n var sign = captures[1] === '+' ? -1 : 1;\n var hours = parseInt(captures[2]);\n var minutes = captures[3] && parseInt(captures[3]) || 0;\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n return sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n var date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n var fourthOfJanuaryDay = date.getUTCDay() || 7;\n var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n} // Validation functions\n// February is null to handle the leap year (using ||)\n\n\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100;\n}\n\nfunction validateDate(year, month, date) {\n return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n\n return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\n\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\n\nexport default function isDate(value) {\n requiredArgs(1, arguments);\n return value instanceof Date || _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}","import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n * if the first argument is not an instance of Date.\n * Instead, argument is converted beforehand using `toDate`.\n *\n * Examples:\n *\n * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |\n * |---------------------------|---------------|---------------|\n * | `new Date()` | `true` | `true` |\n * | `new Date('2016-01-01')` | `true` | `true` |\n * | `new Date('')` | `false` | `false` |\n * | `new Date(1488370835081)` | `true` | `true` |\n * | `new Date(NaN)` | `false` | `false` |\n * | `'2016-01-01'` | `TypeError` | `false` |\n * | `''` | `TypeError` | `false` |\n * | `1488370835081` | `TypeError` | `true` |\n * | `NaN` | `TypeError` | `false` |\n *\n * We introduce this change to make *date-fns* consistent with ECMAScript behavior\n * that try to coerce arguments to the expected type\n * (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\n\nexport default function isValid(dirtyDate) {\n requiredArgs(1, arguments);\n\n if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n return false;\n }\n\n var date = toDate(dirtyDate);\n return !isNaN(Number(date));\n}","export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nvar formatters = {\n // Year\n y: function y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function M(date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n // Day of the month\n d: function d(date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function a(date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n\n case 'aaa':\n return dayPeriodEnumValue;\n\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function h(date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function H(date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function m(date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function s(date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function S(date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return addLeadingZeros(fractionalSeconds, token.length);\n }\n};\nexport default formatters;","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCDayOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","import lightFormatters from \"../lightFormatters/index.js\";\nimport getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Era\n G: function G(date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function y(date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n\n return lightFormatters.y(date, token);\n },\n // Local week-numbering year\n Y: function Y(date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n } // Ordinal number\n\n\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n } // Padding\n\n\n return addLeadingZeros(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function R(date, token) {\n var isoWeekYear = getUTCISOWeekYear(date); // Padding\n\n return addLeadingZeros(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function u(date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function Q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'QQ':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function q(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'qq':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function M(date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function L(date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n\n case 'LL':\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function w(date, token, localize, options) {\n var week = getUTCWeek(date, options);\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(week, token.length);\n },\n // ISO week of year\n I: function I(date, token, localize) {\n var isoWeek = getUTCISOWeek(date);\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n // Day of the month\n d: function d(date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n\n return lightFormatters.d(date, token);\n },\n // Day of year\n D: function D(date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date);\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n // Day of week\n E: function E(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function e(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function c(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function i(date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function a(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function b(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function B(date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function h(date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return lightFormatters.h(date, token);\n },\n // Hour [0-23]\n H: function H(date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n\n return lightFormatters.H(date, token);\n },\n // Hour [0-11]\n K: function K(date, token, localize) {\n var hours = date.getUTCHours() % 12;\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Hour [1-24]\n k: function k(date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Minute\n m: function m(date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n\n return lightFormatters.m(date, token);\n },\n // Second\n s: function s(date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n\n return lightFormatters.s(date, token);\n },\n // Fraction of second\n S: function S(date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function X(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function x(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function O(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function z(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function t(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function T(date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return addLeadingZeros(timestamp, token.length);\n }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n\nexport default formatters;","import isValid from \"../isValid/index.js\";\nimport defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 9. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n requiredArgs(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n\n var originalDate = toDate(dirtyDate);\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value');\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n var utcDate = subMilliseconds(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong, formatterOptions);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n\n var firstCharacter = substring[0];\n\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n\n var formatter = formatters[firstCharacter];\n\n if (formatter) {\n if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n return substring;\n }).join('');\n return result;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\n\nexport default function addHours(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\n\nexport default function addDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 days, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n date.setDate(date.getDate() + amount);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\n\nexport default function addMonths(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var amount = toInteger(dirtyAmount);\n\n if (isNaN(amount)) {\n return new Date(NaN);\n }\n\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return date;\n }\n\n var dayOfMonth = date.getDate(); // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n\n var endOfDesiredMonth = new Date(date.getTime());\n endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n var daysInMonth = endOfDesiredMonth.getDate();\n\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n date.setFullYear(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n return date;\n }\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\n\nexport default function differenceInMilliseconds(dateLeft, dateRight) {\n requiredArgs(2, arguments);\n return toDate(dateLeft).getTime() - toDate(dateRight).getTime();\n}","var roundingMap = {\n ceil: Math.ceil,\n round: Math.round,\n floor: Math.floor,\n trunc: function trunc(value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n } // Math.trunc is not supported by IE\n\n};\nvar defaultRoundingMethod = 'trunc';\nexport function getRoundingMethod(method) {\n return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];\n}","/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInMinute = 60000;\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInHour = 3600000;\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInSecond = 1000;\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minTime = -maxTime;\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minutesInHour = 60;\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInQuarter = 3;\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInYear = 12;\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var quartersInYear = 4;\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInHour = 3600;\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInMinute = 60;","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\n\nexport default function startOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\n\nexport default function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var startOfDayLeft = startOfDay(dirtyDateLeft);\n var startOfDayRight = startOfDay(dirtyDateRight);\n var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight); // Round the number of days to the nearest integer\n // because the number of milliseconds in a day is not constant\n // (e.g. it's different in the day of the daylight saving time clock shift)\n\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY);\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\n\nfunction compareLocalAsc(dateLeft, dateRight) {\n var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days according to the local timezone\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n * new Date(2020, 5, 1),\n * new Date(2020, 2, 1)\n * )\n//=> 92\n */\n\n\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareLocalAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));\n dateLeft.setDate(dateLeft.getDate() - sign * difference); // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);\n var result = sign * (difference - isLastDayNotFull); // Prevent negative zero\n\n return result === 0 ? 0 : result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\n\nexport default function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n var monthDiff = dateLeft.getMonth() - dateRight.getMonth();\n return yearDiff * 12 + monthDiff;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\n\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var diff = dateLeft.getTime() - dateRight.getTime();\n\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\n\nexport default function endOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\n\nexport default function endOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n date.setFullYear(date.getFullYear(), month + 1, 0);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport endOfDay from \"../endOfDay/index.js\";\nimport endOfMonth from \"../endOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * var result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\n\nexport default function isLastDayOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n return endOfDay(date).getTime() === endOfMonth(date).getTime();\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarMonths from \"../differenceInCalendarMonths/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isLastDayOfMonth from \"../isLastDayOfMonth/index.js\";\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates using trunc as a default rounding method.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\n\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight));\n var result; // Check for the difference of less than month\n\n if (difference < 1) {\n result = 0;\n } else {\n if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {\n // This will check if the date is end of Feb and assign a higher end of month date\n // to compare it with Jan\n dateLeft.setDate(30);\n }\n\n dateLeft.setMonth(dateLeft.getMonth() - sign * difference); // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign; // Check for cases of one full calendar month\n\n if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) {\n isLastMonthNotFull = false;\n }\n\n result = sign * (difference - Number(isLastMonthNotFull));\n } // Prevent negative zero\n\n\n return result === 0 ? 0 : result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n * new Date(2015, 1, 11),\n * new Date(2013, 11, 31)\n * )\n * //=> 2\n */\n\nexport default function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() - dateRight.getFullYear();\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * chartjs-adapter-date-fns v2.0.0\n * https://www.chartjs.org\n * (c) 2021 chartjs-adapter-date-fns Contributors\n * Released under the MIT license\n */\nimport { _adapters } from 'chart.js';\nimport { toDate, parse as _parse, parseISO, isValid, format as _format, addYears, addQuarters, addMonths, addWeeks, addDays, addHours, addMinutes, addSeconds, addMilliseconds, differenceInYears, differenceInQuarters, differenceInMonths, differenceInWeeks, differenceInDays, differenceInHours, differenceInMinutes, differenceInSeconds, differenceInMilliseconds, startOfYear, startOfQuarter, startOfMonth, startOfWeek, startOfDay, startOfHour, startOfMinute, startOfSecond, endOfYear, endOfQuarter, endOfMonth, endOfWeek, endOfDay, endOfHour, endOfMinute, endOfSecond } from 'date-fns';\nvar FORMATS = {\n datetime: 'MMM d, yyyy, h:mm:ss aaaa',\n millisecond: 'h:mm:ss.SSS aaaa',\n second: 'h:mm:ss aaaa',\n minute: 'h:mm aaaa',\n hour: 'ha',\n day: 'MMM d',\n week: 'PP',\n month: 'MMM yyyy',\n quarter: 'qqq - yyyy',\n year: 'yyyy'\n};\n\n_adapters._date.override({\n _id: 'date-fns',\n // DEBUG\n formats: function formats() {\n return FORMATS;\n },\n parse: function parse(value, fmt) {\n if (value === null || typeof value === 'undefined') {\n return null;\n }\n\n var type = _typeof(value);\n\n if (type === 'number' || value instanceof Date) {\n value = toDate(value);\n } else if (type === 'string') {\n if (typeof fmt === 'string') {\n value = _parse(value, fmt, new Date(), this.options);\n } else {\n value = parseISO(value, this.options);\n }\n }\n\n return isValid(value) ? value.getTime() : null;\n },\n format: function format(time, fmt) {\n return _format(time, fmt, this.options);\n },\n add: function add(time, amount, unit) {\n switch (unit) {\n case 'millisecond':\n return addMilliseconds(time, amount);\n\n case 'second':\n return addSeconds(time, amount);\n\n case 'minute':\n return addMinutes(time, amount);\n\n case 'hour':\n return addHours(time, amount);\n\n case 'day':\n return addDays(time, amount);\n\n case 'week':\n return addWeeks(time, amount);\n\n case 'month':\n return addMonths(time, amount);\n\n case 'quarter':\n return addQuarters(time, amount);\n\n case 'year':\n return addYears(time, amount);\n\n default:\n return time;\n }\n },\n diff: function diff(max, min, unit) {\n switch (unit) {\n case 'millisecond':\n return differenceInMilliseconds(max, min);\n\n case 'second':\n return differenceInSeconds(max, min);\n\n case 'minute':\n return differenceInMinutes(max, min);\n\n case 'hour':\n return differenceInHours(max, min);\n\n case 'day':\n return differenceInDays(max, min);\n\n case 'week':\n return differenceInWeeks(max, min);\n\n case 'month':\n return differenceInMonths(max, min);\n\n case 'quarter':\n return differenceInQuarters(max, min);\n\n case 'year':\n return differenceInYears(max, min);\n\n default:\n return 0;\n }\n },\n startOf: function startOf(time, unit, weekday) {\n switch (unit) {\n case 'second':\n return startOfSecond(time);\n\n case 'minute':\n return startOfMinute(time);\n\n case 'hour':\n return startOfHour(time);\n\n case 'day':\n return startOfDay(time);\n\n case 'week':\n return startOfWeek(time);\n\n case 'isoWeek':\n return startOfWeek(time, {\n weekStartsOn: +weekday\n });\n\n case 'month':\n return startOfMonth(time);\n\n case 'quarter':\n return startOfQuarter(time);\n\n case 'year':\n return startOfYear(time);\n\n default:\n return time;\n }\n },\n endOf: function endOf(time, unit) {\n switch (unit) {\n case 'second':\n return endOfSecond(time);\n\n case 'minute':\n return endOfMinute(time);\n\n case 'hour':\n return endOfHour(time);\n\n case 'day':\n return endOfDay(time);\n\n case 'week':\n return endOfWeek(time);\n\n case 'month':\n return endOfMonth(time);\n\n case 'quarter':\n return endOfQuarter(time);\n\n case 'year':\n return endOfYear(time);\n\n default:\n return time;\n }\n }\n});","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\n\nexport default function addSeconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, amount * 1000);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_MINUTE = 60000;\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the minutes added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\n\nexport default function addMinutes(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of week to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the weeks added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\n\nexport default function addWeeks(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n var days = amount * 7;\n return addDays(dirtyDate, days);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the quarters added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * const result = addQuarters(new Date(2014, 8, 1), 1)\n * //=> Mon Dec 01 2014 00:00:00\n */\n\nexport default function addQuarters(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n var months = amount * 3;\n return addMonths(dirtyDate, months);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\n\nexport default function addYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, amount * 12);\n}","import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\n\nexport default function differenceInSeconds(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / 1000;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import { millisecondsInMinute } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * const result = differenceInMinutes(\n * new Date(2014, 6, 2, 12, 20, 0),\n * new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are between 10:01:59 and 10:00:00\n * const result = differenceInMinutes(\n * new Date(2000, 0, 1, 10, 0, 0),\n * new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\n\nexport default function differenceInMinutes(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import { millisecondsInHour } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n * new Date(2014, 6, 2, 19, 0),\n * new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\n\nexport default function differenceInHours(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInHour;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import differenceInDays from \"../differenceInDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInWeeks\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between two dates. Fractional weeks are\n * truncated towards zero by default.\n *\n * One \"full week\" is the distance between a local time in one day to the same\n * local time 7 days earlier or later. A full week can sometimes be less than\n * or more than 7*24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 7*24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/(7*24))|0`.\n *\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of full weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))\n * //=> 2\n *\n * // How many full weeks are between\n * // 1 March 2020 0:00 and 6 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 8 weeks (54 days),\n * // even if DST starts and the period has\n * // only 54*24-1 hours.\n * const result = differenceInWeeks(\n * new Date(2020, 5, 1),\n * new Date(2020, 2, 6)\n * )\n * //=> 8\n */\n\nexport default function differenceInWeeks(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInDays(dateLeft, dateRight) / 7;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import differenceInMonths from \"../differenceInMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInQuarters\n * @category Quarter Helpers\n * @summary Get the number of quarters between the given dates.\n *\n * @description\n * Get the number of quarters between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of full quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))\n * //=> 2\n */\n\nexport default function differenceInQuarters(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMonths(dateLeft, dateRight) / 3;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarYears from \"../differenceInCalendarYears/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\n\nexport default function differenceInYears(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight)); // Set both dates to a valid leap year for accurate comparison when dealing\n // with leap days\n\n dateLeft.setFullYear(1584);\n dateRight.setFullYear(1584); // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n // If so, result must be decreased by 1 in absolute value\n\n var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign;\n var result = sign * (difference - Number(isLastYearNotFull)); // Prevent negative zero\n\n return result === 0 ? 0 : result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\n\nexport default function startOfSecond(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setMilliseconds(0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMinute\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\n\nexport default function startOfMinute(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setSeconds(0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * const result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\n\nexport default function startOfHour(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setMinutes(0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\n\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\n\nexport default function startOfQuarter(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var currentMonth = date.getMonth();\n var month = currentMonth - currentMonth % 3;\n date.setMonth(month, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\n\nexport default function startOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var cleanDate = toDate(dirtyDate);\n var date = new Date(0);\n date.setFullYear(cleanDate.getFullYear(), 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfSecond\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * const result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\n\nexport default function endOfSecond(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setMilliseconds(999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMinute\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * const result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\n\nexport default function endOfMinute(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setSeconds(59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfHour\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * const result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\n\nexport default function endOfHour(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setMinutes(59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\n\nexport default function endOfWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getDay();\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n date.setDate(date.getDate() + diff);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * const result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\n\nexport default function endOfQuarter(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var currentMonth = date.getMonth();\n var month = currentMonth - currentMonth % 3 + 3;\n date.setMonth(month, 0);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * var result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\n\nexport default function endOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getFullYear();\n date.setFullYear(year + 1, 0, 0);\n date.setHours(23, 59, 59, 999);\n return date;\n}","import Chartkick from \"chartkick\";\nimport Chart from \"chart.js/auto\";\nimport \"chartjs-adapter-date-fns\";\nChartkick.use(Chart);","/* eslint no-console:0 */\n\nimport { Notifier } from '@airbrake/browser'\n\ntry {\n window.airbrake = new Notifier({\n projectId: window.env.AIRBRAKE_PROJECT_ID,\n projectKey: window.env.AIRBRAKE_PROJECT_KEY,\n host: window.env.PANEL_URL\n });\n\n console.originalError = console.error;\n console.error = (...e) => {\n window.airbrake.notify(e.join(\" \"));\n return console.originalError(...e);\n };\n} catch(e) {\n console.error(e);\n}\n\nimport 'core-js/stable'\nimport 'regenerator-runtime/runtime'\nimport 'controllers'\nimport 'editor/editor'\nimport 'fork-awesome/scss/fork-awesome.scss'\nimport 'etc'\n\nimport Rails from '@rails/ujs'\nimport Turbolinks from 'turbolinks'\nimport * as ActiveStorage from '@rails/activestorage'\nimport 'chartkick/chart.js'\n\nRails.start()\nTurbolinks.start()\nActiveStorage.start()\n"],"sourceRoot":""}